[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 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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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]
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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):
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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')
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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'}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue