Skip to content

Commit 1652c05

Browse files
committed
[ADD] Support DateTime support
1 parent ea9ac2f commit 1652c05

File tree

5 files changed

+38
-5
lines changed

5 files changed

+38
-5
lines changed

PyFePA/fepa.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -377,10 +377,10 @@ class DatiTrasporto(GenFePA):
377377
PesoLordo = FieldDecimal(minlen=4, maxlen=7, code=7)
378378
PesoNetto = FieldDecimal(minlen=4, maxlen=7, code=8)
379379
DataOraRitiro = FieldDate(code=9)
380-
DataInizioTrasporto = FieldDate(code=10)
380+
DataInizioTrasporto = FieldDateTime(code=10)
381381
TipoResa = FieldString(minlen=3, maxlen=3, code=11)
382382
IndirizzoResa = FieldObject(object_class='IndirizzoResa', code=12)
383-
DataOraConsegna = FieldDate(code=13)
383+
DataOraConsegna = FieldDateTime(code=13)
384384

385385

386386
class DatiAnagraficiVettore(GenFePA):

PyFePA/fields.py

+18
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import datetime
1919
import importlib
20+
import dateutil.parser
2021

2122

2223
class FieldType(object):
@@ -175,6 +176,23 @@ def validate(self, value):
175176
def tostring(cls,value):
176177
return str(value)
177178

179+
class FieldDateTime(FieldType):
180+
181+
type = 'S'
182+
183+
def validate(self, value):
184+
try:
185+
if isinstance(value, datetime.datetime):
186+
return value
187+
elif dateutil.parser.parse(value):
188+
return dateutil.parser.parse(value)
189+
except Exception:
190+
return super(FieldDateTime,self).validate(value)
191+
192+
@classmethod
193+
def tostring(cls,value):
194+
return value.isoformat()
195+
178196

179197
class FieldObject(FieldType):
180198

PyFePA/test/IT01234567890_11001.xml

+2-1
Original file line numberDiff line numberDiff line change
@@ -92,14 +92,15 @@
9292
<Denominazione>Trasporto spa</Denominazione>
9393
</Anagrafica>
9494
</DatiAnagraficiVettore>
95+
<DataOraConsegna>2012-10-22T16:46:12.000+02:00</DataOraConsegna>
9596
</DatiTrasporto>
9697
</DatiGenerali>
9798
<DatiBeniServizi>
9899
<DettaglioLinee>
99100
<NumeroLinea>1</NumeroLinea>
100101
<Descrizione>LA DESCRIZIONE DELLA FORNITURA èàè àù PUO' SUPERARE I CENTO CARATTERI CHE RAPPRESENTAVANO IL PRECEDENTE LIMITE DIMENSIONALE. TALE LIMITE NELLA NUOVA VERSIONE E' STATO PORTATO A MILLE CARATTERI</Descrizione>
101102
<Quantita>5.00</Quantita>
102-
<UnitaMisura>Unità</UnitaMisura>
103+
<UnitaMisura>Unita</UnitaMisura>
103104
<PrezzoUnitario>1.00</PrezzoUnitario>
104105
<PrezzoTotale>5.00</PrezzoTotale>
105106
<AliquotaIVA>22.00</AliquotaIVA>

PyFePA/test/test_fields.py

+14
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
from PyFePA import fepa
2222
import unittest
2323
import datetime
24+
import dateutil.parser
2425

2526
tdatetime = datetime.datetime.today()
2627
tdate = datetime.date.today()
@@ -58,6 +59,19 @@ def testFieldDate(self):
5859
self.assertEqual(datetime.date(2015,1,1),sf.validate('2015-01-01'))
5960
self.assertEqual(False,sf.validate('2015-13-01'))
6061

62+
def testFieldDateTime(self):
63+
sf = fields.FieldDateTime(required=True, minlen=1, maxlen=6)
64+
self.assertEqual(False, sf.validate(tstr))
65+
self.assertEqual(False, sf.validate(tdate))
66+
self.assertEqual(tdatetime, sf.validate(tdatetime))
67+
self.assertEqual(False, sf.validate(tint))
68+
self.assertEqual(False, sf.validate(tdec))
69+
self.assertEqual(False, sf.validate(tobj))
70+
self.assertEqual(False, sf.validate(tconst))
71+
self.assertEqual(dateutil.parser.parse('2012-10-22T16:46:12.000+02:00'),
72+
sf.validate('2012-10-22T16:46:12.000+02:00'))
73+
self.assertEqual(False,sf.validate('2015-13-01'))
74+
6175
def testFieldInteger(self):
6276
sf = fields.FieldInteger(required=True, minlen=1, maxlen=6)
6377
self.assertEqual(False, sf.validate(tstr))

runit.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -36,5 +36,5 @@
3636
fe = serializer.deserialize(element=tree)
3737
print serializer.serializer(fe,'xml')
3838

39-
testdata.pop('nr_rg')
40-
print siamm.serialize(testdata)
39+
testdata_list = [testdata,testdata,testdata]
40+
print siamm.serialize(testdata_list)

0 commit comments

Comments
 (0)