From 70f0bf67fcd2a59b32100d5f2f5420118317ff9f Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Tue, 19 Nov 2019 11:06:51 +0100 Subject: [PATCH 2/8] family: fix naive datetime warning (#37760) --- .../apps/family/loaders/concerto_orleans.py | 8 ++--- passerelle/apps/family/models.py | 36 ++++++++++++------- 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/passerelle/apps/family/loaders/concerto_orleans.py b/passerelle/apps/family/loaders/concerto_orleans.py index b889080b..094e458f 100644 --- a/passerelle/apps/family/loaders/concerto_orleans.py +++ b/passerelle/apps/family/loaders/concerto_orleans.py @@ -25,7 +25,7 @@ from django.utils.translation import ugettext_lazy as _ from django.core.files.storage import DefaultStorage from ..models import Family, Adult, Child, Invoice -from ..models import dict_cherry_pick, get_datetime +from ..models import dict_cherry_pick, get_datetime, get_date def normalize_adult(adult): @@ -73,7 +73,7 @@ def normalize_child(child): 'first_name': child['lib_prenom_per'], 'last_name': child['lib_nom_per'], 'sex': sex, - 'birthdate': get_datetime(child['dat_naissance']) + 'birthdate': get_date(child['dat_naissance']) } def normalize_invoice(i): @@ -82,11 +82,11 @@ def normalize_invoice(i): 'total_amount': Decimal(i['mnt_facture_fac']), 'amount': Decimal(i['mnt_solde_fac']), 'issue_date': i['dat_generation_fac'], - 'pay_limit_date': get_datetime(i['dat_limitepaie_fac']), + 'pay_limit_date': get_date(i['dat_limitepaie_fac']), 'autobilling': i['on_prelevauto_ins'] == 'O', 'online_payment': True, 'payment_date': get_datetime(i['dat_reglement']), - 'litigation_date': get_datetime(i['dat_perception_fac']), + 'litigation_date': get_date(i['dat_perception_fac']), 'paid': Decimal(i['mnt_solde_fac']) == 0 } return invoice diff --git a/passerelle/apps/family/models.py b/passerelle/apps/family/models.py index b39100da..ddc30c10 100644 --- a/passerelle/apps/family/models.py +++ b/passerelle/apps/family/models.py @@ -16,6 +16,7 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . +from datetime import date, time import json import os import shutil @@ -29,7 +30,7 @@ from django.core.files.storage import default_storage from django.utils.translation import ugettext_lazy as _ from django.http import Http404, HttpResponse from django.db import models, transaction -from django.utils.timezone import make_aware, datetime, get_current_timezone, now +from django.utils.timezone import make_aware, datetime, get_current_timezone, now, is_naive from passerelle.base.models import BaseResource from passerelle.utils.api import endpoint @@ -42,19 +43,27 @@ SEXES = ( DATE_FORMAT = '%Y-%m-%d' DATETIME_FORMAT = DATE_FORMAT + 'T%H:%M:%S' + +def get_date(dt): + if isinstance(dt, date): + return dt + if not dt: + return None + return datetime.strptime(dt, DATE_FORMAT).date() + + def get_datetime(date): if not date: return None - try: - return make_aware(datetime.strptime(date,DATETIME_FORMAT), - get_current_timezone()) - except ValueError: - pass - try: - return datetime.strptime(date, DATE_FORMAT).date() - except ValueError: - pass - return None + if not isinstance(date, datetime): + try: + date = datetime.strptime(date, DATETIME_FORMAT) + except ValueError: + date = datetime.strptime(date, DATE_FORMAT) + if is_naive(date): + date = make_aware(date) + return date + def format_address(data): address = '%(street_number)s, %(street_name)s' % data @@ -232,7 +241,10 @@ class GenericFamily(BaseResource): for date_attribute in data.keys(): if not date_attribute.endswith('_date'): continue - data[date_attribute] = get_datetime(data[date_attribute]) + if date_attribute == 'payment_date': + data[date_attribute] = get_datetime(data[date_attribute]) + else: + data[date_attribute] = get_date(data[date_attribute]) data['paid'] = bool(data.get('payment_date')) Invoice.objects.update_or_create(resource=self, family=family, external_id=invoice['id'], defaults=data) -- 2.23.0