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']