DateField/TimeField/Delta are not really a base object
This commit is contained in:
parent
e12485dc84
commit
537b49e6bd
22 changed files with 102 additions and 66 deletions
|
|
@ -24,7 +24,8 @@ import re
|
|||
|
||||
from weboob.tools.compat import basestring, long
|
||||
|
||||
from .base import BaseObject, Field, StringField, DateField, DecimalField, IntField, UserError, Currency
|
||||
from .base import BaseObject, Field, StringField, DecimalField, IntField, UserError, Currency
|
||||
from .date import DateField
|
||||
from .collection import CapCollection
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -19,21 +19,19 @@
|
|||
|
||||
|
||||
import warnings
|
||||
import datetime
|
||||
import re
|
||||
from decimal import Decimal
|
||||
from copy import deepcopy, copy
|
||||
|
||||
from weboob.tools.compat import unicode, long
|
||||
from weboob.tools.misc import to_unicode
|
||||
from weboob.tools.date import new_date, new_datetime
|
||||
from weboob.tools.ordereddict import OrderedDict
|
||||
|
||||
|
||||
__all__ = ['UserError', 'FieldNotFound', 'NotAvailable',
|
||||
'NotLoaded', 'IBaseCap', 'Field', 'IntField', 'DecimalField',
|
||||
'FloatField', 'StringField', 'BytesField', 'DateField',
|
||||
'DeltaField', 'empty', 'BaseObject']
|
||||
'FloatField', 'StringField', 'BytesField',
|
||||
'empty', 'BaseObject']
|
||||
|
||||
|
||||
def empty(value):
|
||||
|
|
@ -250,40 +248,6 @@ class BytesField(Field):
|
|||
return str(value)
|
||||
|
||||
|
||||
class DateField(Field):
|
||||
"""
|
||||
A field which accepts only :class:`datetime.date` and :class:`datetime.datetime` types.
|
||||
"""
|
||||
def __init__(self, doc, **kwargs):
|
||||
Field.__init__(self, doc, datetime.date, datetime.datetime, **kwargs)
|
||||
|
||||
def __setattr__(self, name, value):
|
||||
if name == 'value':
|
||||
# Force use of our date and datetime types, to fix bugs in python2
|
||||
# with strftime on year<1900.
|
||||
if type(value) is datetime.datetime:
|
||||
value = new_datetime(value)
|
||||
if type(value) is datetime.date:
|
||||
value = new_date(value)
|
||||
return object.__setattr__(self, name, value)
|
||||
|
||||
|
||||
class TimeField(Field):
|
||||
"""
|
||||
A field which accepts only :class:`datetime.time` and :class:`datetime.time` types.
|
||||
"""
|
||||
def __init__(self, doc, **kwargs):
|
||||
Field.__init__(self, doc, datetime.time, datetime.datetime, **kwargs)
|
||||
|
||||
|
||||
class DeltaField(Field):
|
||||
"""
|
||||
A field which accepts only :class:`datetime.timedelta` type.
|
||||
"""
|
||||
def __init__(self, doc, **kwargs):
|
||||
Field.__init__(self, doc, datetime.timedelta, **kwargs)
|
||||
|
||||
|
||||
class _BaseObjectMeta(type):
|
||||
def __new__(cls, name, bases, attrs):
|
||||
fields = [(field_name, attrs.pop(field_name)) for field_name, obj in attrs.items() if isinstance(obj, Field)]
|
||||
|
|
|
|||
|
|
@ -18,7 +18,8 @@
|
|||
# along with weboob. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
from .base import BaseObject, StringField, DateField, DecimalField, UserError
|
||||
from .base import BaseObject, StringField, DecimalField, UserError
|
||||
from .date import DateField
|
||||
from .collection import CapCollection
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -18,8 +18,9 @@
|
|||
# along with weboob. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
from .base import IBaseCap, BaseObject, Field, StringField, DateField, \
|
||||
IntField, DeltaField, UserError
|
||||
from .base import IBaseCap, BaseObject, Field, StringField,\
|
||||
IntField, UserError
|
||||
from .date import DateField, DeltaField
|
||||
|
||||
|
||||
__all__ = ['IssueError', 'Project', 'User', 'Version', 'Status', 'Attachment',
|
||||
|
|
|
|||
|
|
@ -17,8 +17,9 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with weboob. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from .base import BaseObject, StringField, DateField, IntField, FloatField, Field
|
||||
from .base import BaseObject, StringField, IntField, FloatField, Field
|
||||
from .collection import CapCollection, CollectionNotFound, Collection
|
||||
from .date import DateField
|
||||
|
||||
from datetime import time, datetime
|
||||
from weboob.tools.date import parse_date
|
||||
|
|
|
|||
|
|
@ -20,7 +20,8 @@
|
|||
|
||||
import datetime
|
||||
|
||||
from .base import IBaseCap, BaseObject, StringField, DateField, UserError
|
||||
from .base import IBaseCap, BaseObject, StringField, UserError
|
||||
from .date import DateField
|
||||
|
||||
|
||||
__all__ = ['ChatException', 'ChatMessage', 'CapChat']
|
||||
|
|
|
|||
|
|
@ -18,7 +18,8 @@
|
|||
# along with weboob. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
from .base import IBaseCap, BaseObject, DateField, StringField, IntField, Field
|
||||
from .base import IBaseCap, BaseObject, StringField, IntField, Field
|
||||
from .date import DateField
|
||||
|
||||
|
||||
__all__ = ['Movie', 'Person', 'CapCinema']
|
||||
|
|
|
|||
|
|
@ -18,7 +18,8 @@
|
|||
# along with weboob. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
from .base import IBaseCap, BaseObject, StringField, DateField, Field
|
||||
from .base import IBaseCap, BaseObject, StringField, Field
|
||||
from .date import DateField
|
||||
|
||||
|
||||
__all__ = ['Content', 'Revision', 'CapContent']
|
||||
|
|
|
|||
58
weboob/capabilities/date.py
Normal file
58
weboob/capabilities/date.py
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Copyright(C) 2010-2013 Christophe Benz, Romain Bignon, Julien Hebert
|
||||
#
|
||||
# This file is part of weboob.
|
||||
#
|
||||
# weboob is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# weboob is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with weboob. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import datetime
|
||||
from weboob.tools.date import new_date, new_datetime
|
||||
from weboob.capabilities.base import Field
|
||||
|
||||
|
||||
__all__ = ['DateField', 'TimeField', 'DeltaField']
|
||||
|
||||
class DateField(Field):
|
||||
"""
|
||||
A field which accepts only :class:`datetime.date` and :class:`datetime.datetime` types.
|
||||
"""
|
||||
def __init__(self, doc, **kwargs):
|
||||
Field.__init__(self, doc, datetime.date, datetime.datetime, **kwargs)
|
||||
|
||||
def __setattr__(self, name, value):
|
||||
if name == 'value':
|
||||
# Force use of our date and datetime types, to fix bugs in python2
|
||||
# with strftime on year<1900.
|
||||
if type(value) is datetime.datetime:
|
||||
value = new_datetime(value)
|
||||
if type(value) is datetime.date:
|
||||
value = new_date(value)
|
||||
return object.__setattr__(self, name, value)
|
||||
|
||||
|
||||
class TimeField(Field):
|
||||
"""
|
||||
A field which accepts only :class:`datetime.time` and :class:`datetime.time` types.
|
||||
"""
|
||||
def __init__(self, doc, **kwargs):
|
||||
Field.__init__(self, doc, datetime.time, datetime.datetime, **kwargs)
|
||||
|
||||
|
||||
class DeltaField(Field):
|
||||
"""
|
||||
A field which accepts only :class:`datetime.timedelta` type.
|
||||
"""
|
||||
def __init__(self, doc, **kwargs):
|
||||
Field.__init__(self, doc, datetime.timedelta, **kwargs)
|
||||
|
|
@ -18,7 +18,8 @@
|
|||
# along with weboob. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
from .base import IBaseCap, BaseObject, Field, StringField, DateField, UserError
|
||||
from .base import IBaseCap, BaseObject, Field, StringField, UserError
|
||||
from .date import DateField
|
||||
from .contact import Contact
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -18,7 +18,8 @@
|
|||
# along with weboob. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
from .base import IBaseCap, BaseObject, NotAvailable, Field, StringField, DateField
|
||||
from .base import IBaseCap, BaseObject, NotAvailable, Field, StringField
|
||||
from .date import DateField
|
||||
|
||||
|
||||
__all__ = ['BaseFile', 'CapFile']
|
||||
|
|
|
|||
|
|
@ -20,7 +20,9 @@
|
|||
|
||||
from weboob.tools.capabilities.thumbnail import Thumbnail
|
||||
from .base import IBaseCap, BaseObject, NotLoaded, Field, StringField, \
|
||||
BytesField, IntField, FloatField, DateField
|
||||
BytesField, IntField, FloatField
|
||||
from .date import DateField
|
||||
|
||||
|
||||
__all__ = ['BaseGallery', 'BaseImage', 'CapGallery']
|
||||
|
||||
|
|
|
|||
|
|
@ -18,7 +18,8 @@
|
|||
# along with weboob. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
from .base import IBaseCap, BaseObject, StringField, FloatField, DateField, Field, UserError, empty
|
||||
from .base import IBaseCap, BaseObject, StringField, FloatField, Field, UserError, empty
|
||||
from .date import DateField
|
||||
|
||||
__all__ = ['Gauge', 'GaugeSensor', 'GaugeMeasure', 'CapGauge', 'SensorNotFound']
|
||||
|
||||
|
|
|
|||
|
|
@ -19,8 +19,8 @@
|
|||
|
||||
|
||||
from .base import IBaseCap, BaseObject, Field, IntField, DecimalField, \
|
||||
StringField, BytesField, DateField
|
||||
|
||||
StringField, BytesField
|
||||
from .date import DateField
|
||||
|
||||
__all__ = ['HousingPhoto', 'Housing', 'Query', 'City', 'CapHousing']
|
||||
|
||||
|
|
|
|||
|
|
@ -17,7 +17,8 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with weboob. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from .base import BaseObject, IBaseCap, StringField, DateField
|
||||
from .base import BaseObject, IBaseCap, StringField
|
||||
from .date import DateField
|
||||
|
||||
__all__ = ['BaseJobAdvert', 'CapJob']
|
||||
|
||||
|
|
|
|||
|
|
@ -18,7 +18,8 @@
|
|||
# along with weboob. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from .collection import CapCollection
|
||||
from .base import BaseObject, Field, StringField, DateField
|
||||
from .base import BaseObject, Field, StringField
|
||||
from .date import DateField
|
||||
|
||||
|
||||
__all__ = ['Book', 'Renew', 'CapBook']
|
||||
|
|
|
|||
|
|
@ -22,8 +22,8 @@ import datetime
|
|||
import time
|
||||
|
||||
from .base import IBaseCap, BaseObject, NotLoaded, Field, StringField, \
|
||||
DateField, IntField, UserError
|
||||
|
||||
IntField, UserError
|
||||
from .date import DateField
|
||||
|
||||
__all__ = ['Thread', 'Message', 'CapMessages', 'CantSendMessage', 'CapMessagesPost']
|
||||
|
||||
|
|
|
|||
|
|
@ -18,7 +18,8 @@
|
|||
# along with weboob. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
from .base import IBaseCap, BaseObject, Field, StringField, DateField
|
||||
from .base import IBaseCap, BaseObject, Field, StringField
|
||||
from .date import DateField
|
||||
|
||||
|
||||
class Event(BaseObject):
|
||||
|
|
|
|||
|
|
@ -19,8 +19,8 @@
|
|||
|
||||
|
||||
from .base import IBaseCap, BaseObject, Field, DecimalField, \
|
||||
StringField, DateField
|
||||
|
||||
StringField
|
||||
from .date import DateField
|
||||
|
||||
__all__ = ['Shop', 'Price', 'Product', 'CapPriceComparison']
|
||||
|
||||
|
|
|
|||
|
|
@ -19,8 +19,8 @@
|
|||
|
||||
|
||||
from .base import IBaseCap, BaseObject, Field, StringField, FloatField, \
|
||||
DateField, IntField, UserError
|
||||
|
||||
IntField, UserError
|
||||
from .date import DateField
|
||||
|
||||
__all__ = ['MagnetOnly', 'Torrent', 'CapTorrent']
|
||||
|
||||
|
|
|
|||
|
|
@ -20,9 +20,8 @@
|
|||
|
||||
import datetime
|
||||
|
||||
from .base import IBaseCap, BaseObject, StringField, TimeField, DeltaField, \
|
||||
DateField, DecimalField, UserError
|
||||
|
||||
from .base import IBaseCap, BaseObject, StringField, DecimalField, UserError
|
||||
from .date import TimeField, DeltaField, DateField
|
||||
|
||||
__all__ = ['Station', 'Departure', 'RoadStep', 'RoadmapError', 'RoadmapFilters', 'CapTravel']
|
||||
|
||||
|
|
|
|||
|
|
@ -20,9 +20,9 @@
|
|||
|
||||
from datetime import datetime, date
|
||||
|
||||
from .base import IBaseCap, BaseObject, Field, DateField, FloatField, \
|
||||
from .base import IBaseCap, BaseObject, Field, FloatField, \
|
||||
StringField, UserError
|
||||
|
||||
from .date import DateField
|
||||
|
||||
__all__ = ['Forecast', 'Current', 'City', 'CityNotFound', 'Temperature', 'CapWeather']
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue