[Element] create new element : DictElement

use new DictElement in modules
This commit is contained in:
Bezleputh 2015-03-04 14:21:04 +01:00
commit a39dff77a5
10 changed files with 38 additions and 91 deletions

View file

@ -21,7 +21,7 @@ import re
from decimal import Decimal
from datetime import datetime
from weboob.browser.filters.json import Dict
from weboob.browser.elements import ItemElement, ListElement, method
from weboob.browser.elements import ItemElement, ListElement, DictElement, method
from weboob.browser.pages import JsonPage, HTMLPage, pagination
from weboob.browser.filters.standard import CleanText, CleanDecimal, Regexp, Env, BrowserURL, Filter, Format
from weboob.browser.filters.html import CleanHTML, XPath
@ -29,16 +29,10 @@ from weboob.capabilities.base import NotAvailable, NotLoaded
from weboob.capabilities.housing import Housing, HousingPhoto, City
class DictElement(ListElement):
def find_elements(self):
for el in self.el[0].get(self.item_xpath):
yield el
class CitiesPage(JsonPage):
@method
class get_cities(DictElement):
item_xpath = 'locations'
item_xpath = '0/locations'
class item(ItemElement):
klass = City

View file

@ -22,21 +22,12 @@ from datetime import datetime
from weboob.capabilities.messages import Message
from weboob.capabilities.collection import Collection
from weboob.browser.pages import JsonPage
from weboob.browser.elements import ListElement, ItemElement, method
from weboob.browser.elements import ItemElement, DictElement, method
from weboob.browser.filters.standard import CleanText, Format
from weboob.browser.filters.json import Dict
from weboob.browser.filters.html import CleanHTML
class DictElement(ListElement):
def find_elements(self):
if self.item_xpath is not None:
for el in self.el.get(self.item_xpath):
yield el
else:
yield self.el
class ContentsPage(JsonPage):
@method

View file

@ -23,21 +23,12 @@ from weboob.capabilities.base import BaseObject
from datetime import timedelta
from weboob.browser.pages import HTMLPage, JsonPage
from weboob.browser.elements import ItemElement, ListElement, method
from weboob.browser.elements import ItemElement, ListElement, DictElement, method
from weboob.browser.filters.standard import Filter, CleanText, Regexp, Format, DateTime, Env, Duration
from weboob.browser.filters.html import Link, Attr
from weboob.browser.filters.json import Dict
class DictElement(ListElement):
def find_elements(self):
if self.item_xpath is not None:
for el in self.el.get('reponse').get(self.item_xpath):
yield el
else:
yield self.el
class DurationPluzz(Filter):
def filter(self, el):
duration = Regexp(CleanText('.'), r'.+\|(.+)')(el[0])
@ -135,7 +126,7 @@ class VideoPage(JsonPage):
class Programs(JsonPage):
@method
class iter_programs(DictElement):
item_xpath = 'programme'
item_xpath = 'reponse/programme'
class item(ItemElement):
klass = BaseObject
@ -147,7 +138,7 @@ class Programs(JsonPage):
class LatestPage(JsonPage):
@method
class iter_videos(DictElement):
item_xpath = 'emissions'
item_xpath = 'reponse/emissions'
class Item(ItemElement):
klass = BaseVideo

View file

@ -21,21 +21,12 @@ from datetime import date
from itertools import imap, ifilter
from weboob.browser.pages import JsonPage, HTMLPage
from weboob.browser.elements import ItemElement, ListElement, method
from weboob.browser.elements import ItemElement, ListElement, DictElement, method
from weboob.capabilities.weather import Forecast, Current, City, Temperature
from weboob.browser.filters.json import Dict
from weboob.browser.filters.standard import Filter, CleanText, CleanDecimal, Regexp, Format, Date
class DictElement(ListElement):
def find_elements(self):
if self.item_xpath is not None:
for el in self.el:
yield el
else:
yield self.el
class Id(Filter):
def filter(self, txt):
return txt.split(", ")[0]

View file

@ -20,7 +20,7 @@
from decimal import Decimal
from weboob.browser.pages import HTMLPage, JsonPage
from weboob.browser.elements import ItemElement, ListElement, method
from weboob.browser.elements import ItemElement, ListElement, DictElement, method
from weboob.browser.filters.json import Dict
from weboob.browser.filters.standard import Format, CleanText, Regexp, CleanDecimal, Date, Env, BrowserURL
from weboob.browser.filters.html import XPath
@ -28,17 +28,9 @@ from weboob.capabilities.housing import Housing, HousingPhoto, City
from weboob.capabilities.base import NotAvailable
class DictElement(ListElement):
def find_elements(self):
for el in self.el:
yield el
class CitiesPage(JsonPage):
@method
class get_cities(DictElement):
item_xpath = ''
class item(ItemElement):
klass = City

View file

@ -21,26 +21,16 @@
from datetime import date
from weboob.browser.pages import JsonPage, HTMLPage
from weboob.browser.elements import ItemElement, ListElement, method
from weboob.browser.elements import ItemElement, ListElement, DictElement, method
from weboob.capabilities.weather import Forecast, Current, City, Temperature
from weboob.browser.filters.json import Dict
from weboob.browser.filters.html import CleanHTML
from weboob.browser.filters.standard import CleanText, CleanDecimal, Regexp, Format
class DictElement(ListElement):
def find_elements(self):
if self.item_xpath is not None:
for el in self.el:
yield el
else:
yield self.el
class SearchCitiesPage(JsonPage):
@method
class iter_cities(DictElement):
item_xpath = '.'
ignore_duplicate = True
class item(ItemElement):

View file

@ -22,7 +22,7 @@ from decimal import Decimal
from weboob.tools.date import parse_french_date
from weboob.browser.pages import HTMLPage, JsonPage, pagination
from weboob.browser.elements import ItemElement, ListElement, method
from weboob.browser.elements import ItemElement, ListElement, DictElement, method
from weboob.browser.filters.standard import CleanText, CleanDecimal, Regexp, Env, BrowserURL, Format
from weboob.browser.filters.html import Link, XPath, CleanHTML
from weboob.browser.filters.json import Dict
@ -30,19 +30,9 @@ from weboob.capabilities.base import NotAvailable
from weboob.capabilities.housing import Housing, City, HousingPhoto
class DictElement(ListElement):
def find_elements(self):
if self.item_xpath is not None:
for el in self.el:
yield el
else:
yield self.el
class CitiesPage(JsonPage):
@method
class iter_cities(DictElement):
item_xpath = '.'
class item(ItemElement):
klass = City

View file

@ -19,7 +19,7 @@
from weboob.browser.pages import XMLPage, JsonPage, pagination
from weboob.browser.elements import ItemElement, ListElement, method
from weboob.browser.elements import ItemElement, ListElement, DictElement, method
from weboob.browser.filters.json import Dict
from weboob.browser.filters.html import XPath
from weboob.browser.filters.standard import CleanText, CleanDecimal, DateTime
@ -27,21 +27,17 @@ from weboob.capabilities.base import NotAvailable
from weboob.capabilities.housing import Housing, HousingPhoto, City
class DictElement(ListElement):
def find_elements(self):
for el in self.el:
if el.get('label') == 'Villes':
for item in el.get('values'):
if 'value' in item:
yield item
class CitiesPage(JsonPage):
@method
class iter_cities(DictElement):
item_xpath = '2/values'
class item(ItemElement):
klass = City
def condition(self):
return Dict('value', default=None)(self)
obj_id = Dict('value')
obj_name = Dict('label')

View file

@ -21,7 +21,7 @@
import re
from weboob.browser.pages import JsonPage, HTMLPage
from weboob.browser.elements import TableElement, ItemElement, ListElement, method
from weboob.browser.elements import TableElement, ItemElement, DictElement, method
from weboob.capabilities.travel import Station, Departure, RoadStep
from weboob.capabilities import NotAvailable
from weboob.browser.filters.standard import CleanText, TableCell, Filter, DateTime, Env, Regexp, Duration
@ -30,15 +30,6 @@ from weboob.browser.filters.html import Link
from weboob.tools.date import LinearDateGuesser
class DictElement(ListElement):
def find_elements(self):
if self.item_xpath is not None:
for el in self.el.get(self.item_xpath):
yield el
else:
yield self.el
class RoadMapDuration(Duration):
_regexp = re.compile(r'(?P<mn>\d?)')
kwargs = {'minutes': 'mn'}

View file

@ -307,3 +307,24 @@ class TableElement(ListElement):
def get_colnum(self, name):
return self._cols.get(name, None)
class DictElement(ListElement):
def find_elements(self):
if self.item_xpath is None:
selector = []
elif isinstance(self.item_xpath, basestring):
selector = self.item_xpath.split('/')
else:
selector = self.item_xpath
for el in selector:
if isinstance(self.el, list):
el = int(el)
self.el = self.el[el]
for el in self.el:
yield el