Updated Caper to version 0.2.2
This commit is contained in:
@@ -19,7 +19,7 @@ from caper.parsers.anime import AnimeParser
|
||||
from caper.parsers.scene import SceneParser
|
||||
|
||||
|
||||
__version_info__ = ('0', '2', '0')
|
||||
__version_info__ = ('0', '2', '2')
|
||||
__version_branch__ = 'master'
|
||||
|
||||
__version__ = "%s%s" % (
|
||||
|
||||
+1
-60
@@ -12,10 +12,9 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
import pprint
|
||||
import re
|
||||
from logr import Logr
|
||||
from caper.helpers import is_list_type, clean_dict
|
||||
from caper.helpers import is_list_type
|
||||
|
||||
|
||||
class FragmentMatcher(object):
|
||||
@@ -57,8 +56,6 @@ class FragmentMatcher(object):
|
||||
|
||||
self.regex[group_name].append((weight, weight_patterns))
|
||||
|
||||
pprint.pprint(self.regex)
|
||||
|
||||
def find_group(self, name):
|
||||
for group_name, weight_groups in self.regex.items():
|
||||
if group_name and group_name == name:
|
||||
@@ -66,62 +63,6 @@ class FragmentMatcher(object):
|
||||
|
||||
return None
|
||||
|
||||
def parser_match(self, parser, group_name, single=True):
|
||||
"""
|
||||
|
||||
:type parser: caper.parsers.base.Parser
|
||||
"""
|
||||
result = None
|
||||
|
||||
for group, weight_groups in self.regex.items():
|
||||
if group_name and group != group_name:
|
||||
continue
|
||||
|
||||
# TODO handle multiple weights
|
||||
weight, patterns = weight_groups[0]
|
||||
|
||||
for pattern in patterns:
|
||||
fragments = []
|
||||
pattern_matched = True
|
||||
pattern_result = {}
|
||||
|
||||
for fragment_pattern in pattern:
|
||||
if not parser.fragment_available():
|
||||
pattern_matched = False
|
||||
break
|
||||
|
||||
fragment = parser.next_fragment()
|
||||
fragments.append(fragment)
|
||||
|
||||
Logr.debug('[r"%s"].match("%s")', fragment_pattern.pattern, fragment.value)
|
||||
match = fragment_pattern.match(fragment.value)
|
||||
if match:
|
||||
Logr.debug('Pattern "%s" matched', fragment_pattern.pattern)
|
||||
else:
|
||||
pattern_matched = False
|
||||
break
|
||||
|
||||
pattern_result.update(clean_dict(match.groupdict()))
|
||||
|
||||
if pattern_matched:
|
||||
if result is None:
|
||||
result = {}
|
||||
|
||||
if group not in result:
|
||||
result[group] = {}
|
||||
|
||||
Logr.debug('Matched on <%s>', ' '.join([f.value for f in fragments]))
|
||||
|
||||
result[group].update(pattern_result)
|
||||
parser.commit()
|
||||
|
||||
if single:
|
||||
return result
|
||||
else:
|
||||
parser.rewind()
|
||||
|
||||
return result
|
||||
|
||||
def value_match(self, value, group_name=None, single=True):
|
||||
result = None
|
||||
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from logr import Logr
|
||||
from caper import FragmentMatcher
|
||||
from caper.group import CaptureGroup
|
||||
from caper.result import CaperResult, CaperClosureNode
|
||||
@@ -59,62 +58,6 @@ class Parser(object):
|
||||
|
||||
raise NotImplementedError()
|
||||
|
||||
#
|
||||
# Closure Methods
|
||||
#
|
||||
|
||||
def next_closure(self):
|
||||
self._closure_pos += 1
|
||||
closure = self.closures[self._closure_pos]
|
||||
|
||||
self._history.append(('fragment', -1 - self._fragment_pos))
|
||||
self._fragment_pos = -1
|
||||
|
||||
if self._closure_pos != 0:
|
||||
self._history.append(('closure', 1))
|
||||
|
||||
Logr.debug('(next_closure) closure.value: "%s"', closure.value)
|
||||
return closure
|
||||
|
||||
def closure_available(self):
|
||||
return self._closure_pos + 1 < len(self.closures)
|
||||
|
||||
#
|
||||
# Fragment Methods
|
||||
#
|
||||
|
||||
def next_fragment(self):
|
||||
closure = self.closures[self._closure_pos]
|
||||
|
||||
self._fragment_pos += 1
|
||||
fragment = closure.fragments[self._fragment_pos]
|
||||
|
||||
self._history.append(('fragment', 1))
|
||||
|
||||
Logr.debug('(next_fragment) closure.value "%s" - fragment.value: "%s"', closure.value, fragment.value)
|
||||
return fragment
|
||||
|
||||
def fragment_available(self):
|
||||
if not self.closure_available():
|
||||
return False
|
||||
return self._fragment_pos + 1 < len(self.closures[self._closure_pos].fragments)
|
||||
|
||||
def rewind(self):
|
||||
for source, delta in reversed(self._history):
|
||||
Logr.debug('(rewind) Rewinding step: %s', (source, delta))
|
||||
if source == 'fragment':
|
||||
self._fragment_pos -= delta
|
||||
elif source == 'closure':
|
||||
self._closure_pos -= delta
|
||||
else:
|
||||
raise NotImplementedError()
|
||||
|
||||
self.commit()
|
||||
|
||||
def commit(self):
|
||||
Logr.debug('(commit)')
|
||||
self._history = []
|
||||
|
||||
#
|
||||
# Capture Methods
|
||||
#
|
||||
|
||||
@@ -33,18 +33,6 @@ class CaptureStep(object):
|
||||
#: @type: bool
|
||||
self.single = single
|
||||
|
||||
def _get_next_subject(self, parser):
|
||||
if self.source == 'fragment':
|
||||
if not parser.fragment_available():
|
||||
return None
|
||||
return parser.next_fragment()
|
||||
elif self.source == 'closure':
|
||||
if not parser.closure_available():
|
||||
return None
|
||||
return parser.next_closure()
|
||||
|
||||
raise NotImplementedError()
|
||||
|
||||
def execute(self, fragment):
|
||||
if self.regex:
|
||||
weight, match, num_fragments = self.capture_group.parser.matcher.fragment_match(fragment, self.regex)
|
||||
|
||||
Reference in New Issue
Block a user