diff --git a/app/eve_api/models/alliance.py b/app/eve_api/models/alliance.py index de0a8ce..6890fde 100644 --- a/app/eve_api/models/alliance.py +++ b/app/eve_api/models/alliance.py @@ -1,7 +1,9 @@ from django.db import models from django.contrib.auth.models import Group + from eve_api.models import EVEAPIModel + class EVEPlayerAlliance(EVEAPIModel): """ Represents a player-controlled alliance. Updated from the alliance diff --git a/app/eve_api/models/character.py b/app/eve_api/models/character.py index f4df5cf..114ad90 100644 --- a/app/eve_api/models/character.py +++ b/app/eve_api/models/character.py @@ -1,5 +1,6 @@ from django.db import models from django.core.exceptions import ObjectDoesNotExist + from eve_api.app_defines import * from eve_api.models import EVEAPIModel diff --git a/app/eve_api/models/corporation.py b/app/eve_api/models/corporation.py index 871e801..2db246f 100644 --- a/app/eve_api/models/corporation.py +++ b/app/eve_api/models/corporation.py @@ -1,9 +1,12 @@ from django.db import models from django.contrib.auth.models import Group + from gargoyle import gargoyle + from eve_api.models import EVEAPIModel from eve_api.app_defines import * + class EVEPlayerCorporation(EVEAPIModel): """ Represents a player-controlled corporation. Updated from a mixture of diff --git a/app/eve_api/tasks/account.py b/app/eve_api/tasks/account.py index 473c840..d7746f8 100644 --- a/app/eve_api/tasks/account.py +++ b/app/eve_api/tasks/account.py @@ -22,6 +22,7 @@ from eve_api.tasks.corporation import import_corp_members, import_corp_details from sso.tasks import update_user_access from django.contrib.auth.models import User +from django.utils.timezone import now, utc @task(ignore_result=True, expires=120) def queue_apikey_updates(update_delay=86400, batch_size=50): @@ -40,9 +41,9 @@ def queue_apikey_updates(update_delay=86400, batch_size=50): log.info("Updating APIs older than %s" % (datetime.now() - delta)) if gargoyle.is_active('eve-cak'): - accounts = EVEAccount.objects.filter(api_last_updated__lt=(datetime.now() - delta)).exclude(api_status__in=[API_STATUS_ACC_EXPIRED, API_STATUS_KEY_EXPIRED, API_STATUS_AUTH_ERROR]).order_by('api_last_updated')[:batch_size] + accounts = EVEAccount.objects.filter(api_last_updated__lt=(now() - delta)).exclude(api_status__in=[API_STATUS_ACC_EXPIRED, API_STATUS_KEY_EXPIRED, API_STATUS_AUTH_ERROR]).order_by('api_last_updated')[:batch_size] else: - accounts = EVEAccount.objects.filter(api_last_updated__lt=(datetime.now() - delta)).exclude(api_status__in=[API_STATUS_ACC_EXPIRED, API_STATUS_KEY_EXPIRED, API_STATUS_AUTH_ERROR]).exclude(api_keytype__gt=2).order_by('api_last_updated')[:batch_size] + accounts = EVEAccount.objects.filter(api_last_updated__lt=(now() - delta)).exclude(api_status__in=[API_STATUS_ACC_EXPIRED, API_STATUS_KEY_EXPIRED, API_STATUS_AUTH_ERROR]).exclude(api_keytype__gt=2).order_by('api_last_updated')[:batch_size] log.info("%s account(s) to update" % accounts.count()) for acc in accounts: log.debug("Queueing UserID %s for update" % acc.pk) @@ -115,7 +116,7 @@ def import_apikey_func(api_userid, api_key, user=None, force_cache=False, log=lo account.api_keytype = API_KEYTYPE_ACCOUNT account.api_accessmask = int(keydoc['accessMask']) if not keydoc['expires'] == '': - account.api_expiry = datetime.strptime(keydoc['expires'], '%Y-%m-%d %H:%M:%S') + account.api_expiry = datetime.strptime(keydoc['expires'], '%Y-%m-%d %H:%M:%S').replace(tzinfo=utc) # Checks account status to see if the account is still active if not account.api_keytype == API_KEYTYPE_CORPORATION: @@ -124,8 +125,8 @@ def import_apikey_func(api_userid, api_key, user=None, force_cache=False, log=lo status = CachedDocument.objects.api_query('/account/AccountStatus.xml.aspx', params=auth_params, no_cache=True) status = basic_xml_parse_doc(status)['eveapi'] if not status.get('error', None): - paiddate = datetime.strptime(status['result']['paidUntil'], '%Y-%m-%d %H:%M:%S') - if paiddate <= datetime.utcnow(): + paiddate = datetime.strptime(status['result']['paidUntil'], '%Y-%m-%d %H:%M:%S').replace(tzinfo=utc) + if paiddate <= now(): account.api_status = API_STATUS_ACC_EXPIRED else: account.api_status = API_STATUS_OK @@ -236,7 +237,7 @@ def import_apikey_func(api_userid, api_key, user=None, force_cache=False, log=lo if account.user: update_user_access.delay(account.user.id) - account.api_last_updated = datetime.utcnow() + account.api_last_updated = now() account.save() return account diff --git a/app/eve_api/tasks/alliance.py b/app/eve_api/tasks/alliance.py index f1dfc85..ce3c30e 100644 --- a/app/eve_api/tasks/alliance.py +++ b/app/eve_api/tasks/alliance.py @@ -11,6 +11,7 @@ from eve_api.utils import basic_xml_parse_doc from eve_api.tasks.corporation import import_corp_details, import_corp_details_result from django.core.exceptions import ValidationError +from django.utils.timezone import now, utc @task(ignore_result=True, default_retry_delay=10 * 60) def import_alliance_details(): @@ -32,10 +33,10 @@ def import_alliance_details(): allobj, created = EVEPlayerAlliance.objects.get_or_create(pk=alliance['allianceID']) allobj.name = alliance['name'] allobj.ticker = alliance['shortName'] - allobj.date_founded = datetime.strptime(alliance['startDate'], "%Y-%m-%d %H:%M:%S") + allobj.date_founded = datetime.strptime(alliance['startDate'], "%Y-%m-%d %H:%M:%S").replace(tzinfo=utc) allobj.executor, created = EVEPlayerCorporation.objects.get_or_create(id=alliance['executorCorpID']) allobj.member_count = alliance['memberCount'] - allobj.api_last_updated = datetime.utcnow() + allobj.api_last_updated = now() allobj.save() members = [int(corp['corporationID']) for corp in alliance['memberCorporations']] diff --git a/app/eve_api/tasks/character.py b/app/eve_api/tasks/character.py index 1117146..363f1f2 100644 --- a/app/eve_api/tasks/character.py +++ b/app/eve_api/tasks/character.py @@ -2,6 +2,8 @@ from datetime import datetime, timedelta from xml.dom import minidom import logging +from django.utils.timezone import now, utc + from celery.task import task from celery.task.sets import subtask from gargoyle import gargoyle @@ -85,11 +87,11 @@ def import_eve_character_func(character_id, key_id=None, logger=logging.getLogge # Set corporation and join date corp, created = EVEPlayerCorporation.objects.get_or_create(pk=values['corporationID']) from eve_api.tasks.corporation import import_corp_details - if created or not corp.name or corp.api_last_updated < (datetime.utcnow() - timedelta(hours=12)): + if created or not corp.name or corp.api_last_updated < (now() - timedelta(hours=12)): import_corp_details.delay(values['corporationID']) pchar.corporation = corp - pchar.corporation_date = values['corporationDate'] + pchar.corporation_date = datetime.strptime(values['corporationDate'], "%Y-%m-%d %H:%M:%S").replace(tzinfo=utc) # Derrive Race value from the choices for v in API_RACES_CHOICES: @@ -106,7 +108,8 @@ def import_eve_character_func(character_id, key_id=None, logger=logging.getLogge corp, created = EVEPlayerCorporation.objects.get_or_create(pk=emp['corporationID']) if created: import_corp_details.delay(emp['corporationID']) - eobj, created = EVEPlayerCharacterEmploymentHistory.objects.get_or_create(pk=emp['recordID'], corporation=corp, character=pchar, start_date=emp['startDate']) + startdate = datetime.strptime(emp['startDate'], "%Y-%m-%d %H:%M:%S").replace(tzinfo=utc) + eobj, created = EVEPlayerCharacterEmploymentHistory.objects.get_or_create(pk=emp['recordID'], corporation=corp, character=pchar, start_date=startdate) # We've been passed a Key ID, try and work with it if key_id: @@ -183,7 +186,7 @@ def import_eve_character_func(character_id, key_id=None, logger=logging.getLogge else: pchar.gender = API_GENDER_FEMALE - pchar.api_last_updated = datetime.utcnow() + pchar.api_last_updated = now() pchar.save() if acc: diff --git a/app/eve_api/tasks/corporation.py b/app/eve_api/tasks/corporation.py index e6bc045..61296b0 100644 --- a/app/eve_api/tasks/corporation.py +++ b/app/eve_api/tasks/corporation.py @@ -55,7 +55,7 @@ def import_corp_details_result(corp_id, callback=None): def import_corp_details_func(corp_id, log=logging.getLogger(__name__)): corpobj, created = EVEPlayerCorporation.objects.get_or_create(id=corp_id) - if created or not corpobj.api_last_updated or corpobj.api_last_updated < (datetime.utcnow() - timedelta(hours=12)): + if created or not corpobj.api_last_updated or corpobj.api_last_updated < (now() - timedelta(hours=12)): try: doc = CachedDocument.objects.api_query('/corp/CorporationSheet.xml.aspx', {'corporationID': corp_id}) @@ -98,7 +98,7 @@ def import_corp_details_func(corp_id, log=logging.getLogger(__name__)): if int(d['allianceID']): corpobj.alliance, created = EVEPlayerAlliance.objects.get_or_create(id=d['allianceID']) - corpobj.api_last_updated = datetime.utcnow() + corpobj.api_last_updated = now() corpobj.save() # Skip looking up the CEOs for NPC corps and ones with no CEO defined (dead corps) @@ -159,10 +159,10 @@ def import_corp_members(key_id, character_id): if created: charobj.name = character['name'] charobj.corporation = corp - charobj.corporation_date = character['startDateTime'] + charobj.corporation_date = datetime.strptime(character['startDateTime'], "%Y-%m-%d %H:%M:%S").replace(tzinfo=utc) if 'logonDateTime' in character: - charobj.last_login = character['logonDateTime'] - charobj.last_logoff = character['logoffDateTime'] + charobj.last_login = datetime.strptime(character['logonDateTime'], "%Y-%m-%d %H:%M:%S").replace(tzinfo=utc) + charobj.last_logoff = datetime.strptime(character['logoffDateTime'], "%Y-%m-%d %H:%M:%S").replace(tzinfo=utc) charobj.current_location_id = int(character['locationID']) else: charobj.last_login = None diff --git a/app/eve_api/utils.py b/app/eve_api/utils.py index 840bcb5..2cbed6e 100644 --- a/app/eve_api/utils.py +++ b/app/eve_api/utils.py @@ -1,4 +1,8 @@ +from datetime import datetime from xml.dom import minidom + +from django.utils.timezone import utc + from eve_proxy.models import CachedDocument def basic_xml_parse(nodes): @@ -51,3 +55,7 @@ def basic_xml_parse_doc(doc): return basic_xml_parse(dom.childNodes) return {} + + +def parse_eveapi_date(datestring): + return datetime.strptime(datestring, "%Y-%m-%d %H:%M:%S").replace(tzinfo=utc) \ No newline at end of file diff --git a/app/eve_api/views/base.py b/app/eve_api/views/base.py index d8f6d7a..1293953 100644 --- a/app/eve_api/views/base.py +++ b/app/eve_api/views/base.py @@ -6,7 +6,6 @@ from django.http import HttpResponse, Http404 from django.shortcuts import render_to_response, get_object_or_404, redirect from django.template import RequestContext from django.views.generic import DetailView, ListView - from django.contrib import messages from django.contrib.auth.decorators import login_required @@ -22,6 +21,7 @@ from eve_api.tasks import import_apikey_result from eve_api.utils import basic_xml_parse_doc from eve_api.views.mixins import DetailPaginationMixin + @login_required def eveapi_add(request, post_save_redirect='/', template='eve_api/add.html'): """ Add a EVE API key to a user's account """