From 537b49e6bd2dbba9760d68ba7d1e1d8922a074e1 Mon Sep 17 00:00:00 2001 From: Florent Date: Wed, 9 Jul 2014 11:46:46 +0200 Subject: [PATCH] DateField/TimeField/Delta are not really a base object --- weboob/capabilities/bank.py | 3 +- weboob/capabilities/base.py | 40 +----------------- weboob/capabilities/bill.py | 3 +- weboob/capabilities/bugtracker.py | 5 ++- weboob/capabilities/calendar.py | 3 +- weboob/capabilities/chat.py | 3 +- weboob/capabilities/cinema.py | 3 +- weboob/capabilities/content.py | 3 +- weboob/capabilities/date.py | 58 ++++++++++++++++++++++++++ weboob/capabilities/dating.py | 3 +- weboob/capabilities/file.py | 3 +- weboob/capabilities/gallery.py | 4 +- weboob/capabilities/gauge.py | 3 +- weboob/capabilities/housing.py | 4 +- weboob/capabilities/job.py | 3 +- weboob/capabilities/library.py | 3 +- weboob/capabilities/messages.py | 4 +- weboob/capabilities/parcel.py | 3 +- weboob/capabilities/pricecomparison.py | 4 +- weboob/capabilities/torrent.py | 4 +- weboob/capabilities/travel.py | 5 +-- weboob/capabilities/weather.py | 4 +- 22 files changed, 102 insertions(+), 66 deletions(-) create mode 100644 weboob/capabilities/date.py diff --git a/weboob/capabilities/bank.py b/weboob/capabilities/bank.py index d0c98402..b4968616 100644 --- a/weboob/capabilities/bank.py +++ b/weboob/capabilities/bank.py @@ -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 diff --git a/weboob/capabilities/base.py b/weboob/capabilities/base.py index 8e0922cc..5ffc4b04 100644 --- a/weboob/capabilities/base.py +++ b/weboob/capabilities/base.py @@ -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)] diff --git a/weboob/capabilities/bill.py b/weboob/capabilities/bill.py index b26584b1..d7ac24fc 100644 --- a/weboob/capabilities/bill.py +++ b/weboob/capabilities/bill.py @@ -18,7 +18,8 @@ # along with weboob. If not, see . -from .base import BaseObject, StringField, DateField, DecimalField, UserError +from .base import BaseObject, StringField, DecimalField, UserError +from .date import DateField from .collection import CapCollection diff --git a/weboob/capabilities/bugtracker.py b/weboob/capabilities/bugtracker.py index 13541ce4..f668a0aa 100644 --- a/weboob/capabilities/bugtracker.py +++ b/weboob/capabilities/bugtracker.py @@ -18,8 +18,9 @@ # along with weboob. If not, see . -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', diff --git a/weboob/capabilities/calendar.py b/weboob/capabilities/calendar.py index 00ef783f..60ca30b0 100644 --- a/weboob/capabilities/calendar.py +++ b/weboob/capabilities/calendar.py @@ -17,8 +17,9 @@ # You should have received a copy of the GNU Affero General Public License # along with weboob. If not, see . -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 diff --git a/weboob/capabilities/chat.py b/weboob/capabilities/chat.py index 9d9f4b85..affd82ce 100644 --- a/weboob/capabilities/chat.py +++ b/weboob/capabilities/chat.py @@ -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'] diff --git a/weboob/capabilities/cinema.py b/weboob/capabilities/cinema.py index 3e53d734..8e166cdf 100644 --- a/weboob/capabilities/cinema.py +++ b/weboob/capabilities/cinema.py @@ -18,7 +18,8 @@ # along with weboob. If not, see . -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'] diff --git a/weboob/capabilities/content.py b/weboob/capabilities/content.py index 1ee08353..8eddcbd7 100644 --- a/weboob/capabilities/content.py +++ b/weboob/capabilities/content.py @@ -18,7 +18,8 @@ # along with weboob. If not, see . -from .base import IBaseCap, BaseObject, StringField, DateField, Field +from .base import IBaseCap, BaseObject, StringField, Field +from .date import DateField __all__ = ['Content', 'Revision', 'CapContent'] diff --git a/weboob/capabilities/date.py b/weboob/capabilities/date.py new file mode 100644 index 00000000..ff7a745b --- /dev/null +++ b/weboob/capabilities/date.py @@ -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 . + +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) diff --git a/weboob/capabilities/dating.py b/weboob/capabilities/dating.py index 9baa3ba6..0be1c9dd 100644 --- a/weboob/capabilities/dating.py +++ b/weboob/capabilities/dating.py @@ -18,7 +18,8 @@ # along with weboob. If not, see . -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 diff --git a/weboob/capabilities/file.py b/weboob/capabilities/file.py index b6f29d46..0e0e7980 100644 --- a/weboob/capabilities/file.py +++ b/weboob/capabilities/file.py @@ -18,7 +18,8 @@ # along with weboob. If not, see . -from .base import IBaseCap, BaseObject, NotAvailable, Field, StringField, DateField +from .base import IBaseCap, BaseObject, NotAvailable, Field, StringField +from .date import DateField __all__ = ['BaseFile', 'CapFile'] diff --git a/weboob/capabilities/gallery.py b/weboob/capabilities/gallery.py index 898075c2..bab5377f 100644 --- a/weboob/capabilities/gallery.py +++ b/weboob/capabilities/gallery.py @@ -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'] diff --git a/weboob/capabilities/gauge.py b/weboob/capabilities/gauge.py index 06478386..f73fb03b 100644 --- a/weboob/capabilities/gauge.py +++ b/weboob/capabilities/gauge.py @@ -18,7 +18,8 @@ # along with weboob. If not, see . -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'] diff --git a/weboob/capabilities/housing.py b/weboob/capabilities/housing.py index 1224fe23..842b2573 100644 --- a/weboob/capabilities/housing.py +++ b/weboob/capabilities/housing.py @@ -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'] diff --git a/weboob/capabilities/job.py b/weboob/capabilities/job.py index d6d370ca..8efe085e 100644 --- a/weboob/capabilities/job.py +++ b/weboob/capabilities/job.py @@ -17,7 +17,8 @@ # You should have received a copy of the GNU Affero General Public License # along with weboob. If not, see . -from .base import BaseObject, IBaseCap, StringField, DateField +from .base import BaseObject, IBaseCap, StringField +from .date import DateField __all__ = ['BaseJobAdvert', 'CapJob'] diff --git a/weboob/capabilities/library.py b/weboob/capabilities/library.py index 428e5dc5..8741a197 100644 --- a/weboob/capabilities/library.py +++ b/weboob/capabilities/library.py @@ -18,7 +18,8 @@ # along with weboob. If not, see . 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'] diff --git a/weboob/capabilities/messages.py b/weboob/capabilities/messages.py index bec6b9cb..0b16fe68 100644 --- a/weboob/capabilities/messages.py +++ b/weboob/capabilities/messages.py @@ -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'] diff --git a/weboob/capabilities/parcel.py b/weboob/capabilities/parcel.py index eb53db09..291be29a 100644 --- a/weboob/capabilities/parcel.py +++ b/weboob/capabilities/parcel.py @@ -18,7 +18,8 @@ # along with weboob. If not, see . -from .base import IBaseCap, BaseObject, Field, StringField, DateField +from .base import IBaseCap, BaseObject, Field, StringField +from .date import DateField class Event(BaseObject): diff --git a/weboob/capabilities/pricecomparison.py b/weboob/capabilities/pricecomparison.py index 84e25363..4785f942 100644 --- a/weboob/capabilities/pricecomparison.py +++ b/weboob/capabilities/pricecomparison.py @@ -19,8 +19,8 @@ from .base import IBaseCap, BaseObject, Field, DecimalField, \ - StringField, DateField - + StringField +from .date import DateField __all__ = ['Shop', 'Price', 'Product', 'CapPriceComparison'] diff --git a/weboob/capabilities/torrent.py b/weboob/capabilities/torrent.py index 056a9b05..25b322e2 100644 --- a/weboob/capabilities/torrent.py +++ b/weboob/capabilities/torrent.py @@ -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'] diff --git a/weboob/capabilities/travel.py b/weboob/capabilities/travel.py index 9a6258f2..9e756e67 100644 --- a/weboob/capabilities/travel.py +++ b/weboob/capabilities/travel.py @@ -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'] diff --git a/weboob/capabilities/weather.py b/weboob/capabilities/weather.py index c19cd74d..37f0bc8e 100644 --- a/weboob/capabilities/weather.py +++ b/weboob/capabilities/weather.py @@ -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']