Updated Caper to version 0.2.2

This commit is contained in:
Dean Gardiner
2013-10-16 14:58:47 +13:00
parent 6259684487
commit 07abf7c83d
4 changed files with 2 additions and 130 deletions
+1 -1
View File
@@ -19,7 +19,7 @@ from caper.parsers.anime import AnimeParser
from caper.parsers.scene import SceneParser from caper.parsers.scene import SceneParser
__version_info__ = ('0', '2', '0') __version_info__ = ('0', '2', '2')
__version_branch__ = 'master' __version_branch__ = 'master'
__version__ = "%s%s" % ( __version__ = "%s%s" % (
+1 -60
View File
@@ -12,10 +12,9 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
import pprint
import re import re
from logr import Logr from logr import Logr
from caper.helpers import is_list_type, clean_dict from caper.helpers import is_list_type
class FragmentMatcher(object): class FragmentMatcher(object):
@@ -57,8 +56,6 @@ class FragmentMatcher(object):
self.regex[group_name].append((weight, weight_patterns)) self.regex[group_name].append((weight, weight_patterns))
pprint.pprint(self.regex)
def find_group(self, name): def find_group(self, name):
for group_name, weight_groups in self.regex.items(): for group_name, weight_groups in self.regex.items():
if group_name and group_name == name: if group_name and group_name == name:
@@ -66,62 +63,6 @@ class FragmentMatcher(object):
return None 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): def value_match(self, value, group_name=None, single=True):
result = None result = None
-57
View File
@@ -12,7 +12,6 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
from logr import Logr
from caper import FragmentMatcher from caper import FragmentMatcher
from caper.group import CaptureGroup from caper.group import CaptureGroup
from caper.result import CaperResult, CaperClosureNode from caper.result import CaperResult, CaperClosureNode
@@ -59,62 +58,6 @@ class Parser(object):
raise NotImplementedError() 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 # Capture Methods
# #
-12
View File
@@ -33,18 +33,6 @@ class CaptureStep(object):
#: @type: bool #: @type: bool
self.single = single 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): def execute(self, fragment):
if self.regex: if self.regex:
weight, match, num_fragments = self.capture_group.parser.matcher.fragment_match(fragment, self.regex) weight, match, num_fragments = self.capture_group.parser.matcher.fragment_match(fragment, self.regex)