[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 decimal import Decimal
from datetime import datetime from datetime import datetime
from weboob.browser.filters.json import Dict 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.pages import JsonPage, HTMLPage, pagination
from weboob.browser.filters.standard import CleanText, CleanDecimal, Regexp, Env, BrowserURL, Filter, Format from weboob.browser.filters.standard import CleanText, CleanDecimal, Regexp, Env, BrowserURL, Filter, Format
from weboob.browser.filters.html import CleanHTML, XPath 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 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): class CitiesPage(JsonPage):
@method @method
class get_cities(DictElement): class get_cities(DictElement):
item_xpath = 'locations' item_xpath = '0/locations'
class item(ItemElement): class item(ItemElement):
klass = City klass = City

View file

@ -22,21 +22,12 @@ from datetime import datetime
from weboob.capabilities.messages import Message from weboob.capabilities.messages import Message
from weboob.capabilities.collection import Collection from weboob.capabilities.collection import Collection
from weboob.browser.pages import JsonPage 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.standard import CleanText, Format
from weboob.browser.filters.json import Dict from weboob.browser.filters.json import Dict
from weboob.browser.filters.html import CleanHTML 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): class ContentsPage(JsonPage):
@method @method

View file

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

View file

@ -21,21 +21,12 @@ from datetime import date
from itertools import imap, ifilter from itertools import imap, ifilter
from weboob.browser.pages import JsonPage, HTMLPage 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.capabilities.weather import Forecast, Current, City, Temperature
from weboob.browser.filters.json import Dict from weboob.browser.filters.json import Dict
from weboob.browser.filters.standard import Filter, CleanText, CleanDecimal, Regexp, Format, Date 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): class Id(Filter):
def filter(self, txt): def filter(self, txt):
return txt.split(", ")[0] return txt.split(", ")[0]

View file

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

View file

@ -21,26 +21,16 @@
from datetime import date from datetime import date
from weboob.browser.pages import JsonPage, HTMLPage 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.capabilities.weather import Forecast, Current, City, Temperature
from weboob.browser.filters.json import Dict from weboob.browser.filters.json import Dict
from weboob.browser.filters.html import CleanHTML from weboob.browser.filters.html import CleanHTML
from weboob.browser.filters.standard import CleanText, CleanDecimal, Regexp, Format 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): class SearchCitiesPage(JsonPage):
@method @method
class iter_cities(DictElement): class iter_cities(DictElement):
item_xpath = '.'
ignore_duplicate = True ignore_duplicate = True
class item(ItemElement): class item(ItemElement):

View file

@ -22,7 +22,7 @@ from decimal import Decimal
from weboob.tools.date import parse_french_date from weboob.tools.date import parse_french_date
from weboob.browser.pages import HTMLPage, JsonPage, pagination 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.standard import CleanText, CleanDecimal, Regexp, Env, BrowserURL, Format
from weboob.browser.filters.html import Link, XPath, CleanHTML from weboob.browser.filters.html import Link, XPath, CleanHTML
from weboob.browser.filters.json import Dict 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 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): class CitiesPage(JsonPage):
@method @method
class iter_cities(DictElement): class iter_cities(DictElement):
item_xpath = '.'
class item(ItemElement): class item(ItemElement):
klass = City klass = City

View file

@ -19,7 +19,7 @@
from weboob.browser.pages import XMLPage, JsonPage, pagination 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.json import Dict
from weboob.browser.filters.html import XPath from weboob.browser.filters.html import XPath
from weboob.browser.filters.standard import CleanText, CleanDecimal, DateTime 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 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): class CitiesPage(JsonPage):
@method @method
class iter_cities(DictElement): class iter_cities(DictElement):
item_xpath = '2/values'
class item(ItemElement): class item(ItemElement):
klass = City klass = City
def condition(self):
return Dict('value', default=None)(self)
obj_id = Dict('value') obj_id = Dict('value')
obj_name = Dict('label') obj_name = Dict('label')

View file

@ -21,7 +21,7 @@
import re import re
from weboob.browser.pages import JsonPage, HTMLPage 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.travel import Station, Departure, RoadStep
from weboob.capabilities import NotAvailable from weboob.capabilities import NotAvailable
from weboob.browser.filters.standard import CleanText, TableCell, Filter, DateTime, Env, Regexp, Duration 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 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): class RoadMapDuration(Duration):
_regexp = re.compile(r'(?P<mn>\d?)') _regexp = re.compile(r'(?P<mn>\d?)')
kwargs = {'minutes': 'mn'} kwargs = {'minutes': 'mn'}

View file

@ -307,3 +307,24 @@ class TableElement(ListElement):
def get_colnum(self, name): def get_colnum(self, name):
return self._cols.get(name, None) 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