move handle_loaders into AbstractElement
This commit is contained in:
parent
61aa684c7d
commit
dbd87d22ab
1 changed files with 13 additions and 12 deletions
|
|
@ -54,6 +54,8 @@ class AbstractElement(object):
|
||||||
else:
|
else:
|
||||||
self.env = deepcopy(page.params)
|
self.env = deepcopy(page.params)
|
||||||
|
|
||||||
|
self.loaders = {}
|
||||||
|
|
||||||
def use_selector(self, func):
|
def use_selector(self, func):
|
||||||
if isinstance(func, _Filter):
|
if isinstance(func, _Filter):
|
||||||
value = func(self)
|
value = func(self)
|
||||||
|
|
@ -73,6 +75,17 @@ class AbstractElement(object):
|
||||||
def xpath(self, *args, **kwargs):
|
def xpath(self, *args, **kwargs):
|
||||||
return self.el.xpath(*args, **kwargs)
|
return self.el.xpath(*args, **kwargs)
|
||||||
|
|
||||||
|
def handle_loaders(self):
|
||||||
|
for attrname in dir(self):
|
||||||
|
m = re.match('load_(.*)', attrname)
|
||||||
|
if not m:
|
||||||
|
continue
|
||||||
|
name = m.group(1)
|
||||||
|
if name in self.loaders:
|
||||||
|
continue
|
||||||
|
loader = getattr(self, attrname)
|
||||||
|
self.loaders[name] = self.use_selector(loader)
|
||||||
|
|
||||||
|
|
||||||
class ListElement(AbstractElement):
|
class ListElement(AbstractElement):
|
||||||
item_xpath = None
|
item_xpath = None
|
||||||
|
|
@ -199,7 +212,6 @@ class ItemElement(AbstractElement):
|
||||||
super(ItemElement, self).__init__(*args, **kwargs)
|
super(ItemElement, self).__init__(*args, **kwargs)
|
||||||
self.logger = getLogger(self.__class__.__name__.lower())
|
self.logger = getLogger(self.__class__.__name__.lower())
|
||||||
self.obj = None
|
self.obj = None
|
||||||
self.loaders = {}
|
|
||||||
|
|
||||||
def build_object(self):
|
def build_object(self):
|
||||||
if self.klass is None:
|
if self.klass is None:
|
||||||
|
|
@ -232,17 +244,6 @@ class ItemElement(AbstractElement):
|
||||||
|
|
||||||
yield self.obj
|
yield self.obj
|
||||||
|
|
||||||
def handle_loaders(self):
|
|
||||||
for attrname in dir(self):
|
|
||||||
m = re.match('load_(.*)', attrname)
|
|
||||||
if not m:
|
|
||||||
continue
|
|
||||||
name = m.group(1)
|
|
||||||
if name in self.loaders:
|
|
||||||
continue
|
|
||||||
loader = getattr(self, attrname)
|
|
||||||
self.loaders[name] = self.use_selector(loader)
|
|
||||||
|
|
||||||
def handle_attr(self, key, func):
|
def handle_attr(self, key, func):
|
||||||
try:
|
try:
|
||||||
value = self.use_selector(func)
|
value = self.use_selector(func)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue