Skip to content

Commit

Permalink
Add default parameters option for all patterns types
Browse files Browse the repository at this point in the history
  • Loading branch information
Toilal committed Oct 6, 2015
1 parent a0d3d73 commit cbe9678
Show file tree
Hide file tree
Showing 3 changed files with 110 additions and 2 deletions.
17 changes: 17 additions & 0 deletions rebulk/loose.py
Original file line number Diff line number Diff line change
Expand Up @@ -149,3 +149,20 @@ def filter_index(collection, predicate=None, index=None):
except IndexError:
collection = None
return collection


def set_defaults(defaults, kwargs):
"""
Set defaults from defaults dict to kwargs dict
:param defaults:
:type defaults:
:param kwargs:
:type kwargs:
:return:
:rtype:
"""
for key, value in defaults.items():
if key not in kwargs:
kwargs[key] = value
elif isinstance(value, list) and isinstance(kwargs[key], list):
kwargs[key] = list(value) + kwargs[key]
56 changes: 55 additions & 1 deletion rebulk/rebulk.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from .pattern import RePattern, StringPattern, FunctionalPattern

from .processors import conflict_prefer_longer, remove_private
from .loose import call
from .loose import call, set_defaults
from .utils import extend_safe
from .rules import Rules

Expand Down Expand Up @@ -48,6 +48,10 @@ def __init__(self, default=True):
self.processor(*DEFAULT_PROCESSORS)
self.post_processor(*DEFAULT_POST_PROCESSORS)
self._rules = Rules()
self._defaults = {}
self._regex_defaults = {}
self._string_defaults = {}
self._functional_defaults = {}

def pattern(self, *pattern):
"""
Expand All @@ -61,6 +65,28 @@ def pattern(self, *pattern):
self._patterns.extend(pattern)
return self

def defaults(self, **kwargs):
"""
Define default keyword arguments for all patterns
:param kwargs:
:type kwargs:
:return:
:rtype:
"""
self._defaults = kwargs
return self

def regex_defaults(self, **kwargs):
"""
Define default keyword arguments for functional patterns.
:param kwargs:
:type kwargs:
:return:
:rtype:
"""
self._regex_defaults = kwargs
return self

def regex(self, *pattern, **kwargs):
"""
Add re pattern
Expand All @@ -70,9 +96,22 @@ def regex(self, *pattern, **kwargs):
:return: self
:rtype: Rebulk
"""
set_defaults(self._regex_defaults, kwargs)
set_defaults(self._defaults, kwargs)
self.pattern(RePattern(*pattern, **kwargs))
return self

def string_defaults(self, **kwargs):
"""
Define default keyword arguments for string patterns.
:param kwargs:
:type kwargs:
:return:
:rtype:
"""
self._string_defaults = kwargs
return self

def string(self, *pattern, **kwargs):
"""
Add string pattern
Expand All @@ -82,9 +121,22 @@ def string(self, *pattern, **kwargs):
:return: self
:rtype: Rebulk
"""
set_defaults(self._string_defaults, kwargs)
set_defaults(self._defaults, kwargs)
self.pattern(StringPattern(*pattern, **kwargs))
return self

def functional_defaults(self, **kwargs):
"""
Define default keyword arguments for functional patterns.
:param kwargs:
:type kwargs:
:return:
:rtype:
"""
self._functional_defaults = kwargs
return self

def functional(self, *pattern, **kwargs):
"""
Add functional pattern
Expand All @@ -94,6 +146,8 @@ def functional(self, *pattern, **kwargs):
:return: self
:rtype: Rebulk
"""
set_defaults(self._functional_defaults, kwargs)
set_defaults(self._defaults, kwargs)
self.pattern(FunctionalPattern(*pattern, **kwargs))
return self

Expand Down
39 changes: 38 additions & 1 deletion rebulk/test/test_rebulk.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ def func(input_string):
assert matches[2].value == "over"


def test_rebulk_defaults():
def test_rebulk_prefer_longer():
input_string = "The quick brown fox jumps over the lazy dog"

matches = Rebulk().string("quick").string("own").regex("br.{2}n").matches(input_string)
Expand All @@ -40,6 +40,43 @@ def test_rebulk_defaults():
assert matches[1].value == "brown"


def test_rebulk_defaults():
input_string = "The quick brown fox jumps over the lazy dog"

def func(input_string):
i = input_string.find("fox")
if i > -1:
return i, i + len("fox")

matches = Rebulk()\
.string_defaults(name="string", tags=["a", "b"])\
.regex_defaults(name="regex") \
.functional_defaults(name="functional") \
.string("quick", tags=["c"])\
.functional(func)\
.regex("br.{2}n") \
.matches(input_string)
assert matches[0].name == "string"
assert matches[0].tags == ["a", "b", "c"]
assert matches[1].name == "functional"
assert matches[2].name == "regex"

matches = Rebulk() \
.defaults(name="default", tags=["0"])\
.string_defaults(name="string", tags=["a", "b"]) \
.functional_defaults(name="functional", tags=["1"]) \
.string("quick", tags=["c"]) \
.functional(func) \
.regex("br.{2}n") \
.matches(input_string)
assert matches[0].name == "string"
assert matches[0].tags == ["0", "a", "b", "c"]
assert matches[1].name == "functional"
assert matches[1].tags == ["0", "1"]
assert matches[2].name == "default"
assert matches[2].tags == ["0"]


def test_rebulk_rebulk():
input_string = "The quick brown fox jumps over the lazy dog"

Expand Down

0 comments on commit cbe9678

Please sign in to comment.