diff --git a/scrapy/contrib/ibl/descriptor.py b/scrapy/contrib/ibl/descriptor.py index 9780ee0cf..5b4ae99ce 100644 --- a/scrapy/contrib/ibl/descriptor.py +++ b/scrapy/contrib/ibl/descriptor.py @@ -17,6 +17,12 @@ class FieldDescriptor(object): self.required = required self.allow_markup = allow_markup + @classmethod + def from_field(cls, name, field): + return cls(name, field.get('description'), \ + field.get('ibl_extractor', text), field.get('required', False), \ + field.get('allow_markup', False)) + def __str__(self): return "FieldDescriptor(%s)" % self.name @@ -33,6 +39,11 @@ class ItemDescriptor(object): self._required_attributes = [d.name for d in attribute_descriptors \ if d.required] + @classmethod + def from_item(cls, name, description, item): + a = [FieldDescriptor.from_field(n, f) for n, f in item.fields.items()] + return cls(name, description, a) + def validated(self, data): """Only return the items in the data that are valid""" return [d for d in data if self._item_validates(d)]