[Element] create new element : DictElement
use new DictElement in modules
This commit is contained in:
parent
be122f0fa6
commit
a39dff77a5
10 changed files with 38 additions and 91 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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')
|
||||
|
||||
|
|
|
|||
|
|
@ -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'}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue