X-Git-Url: http://mmka.chem.univ.gda.pl/gitweb/?a=blobdiff_plain;f=qcg%2Futils.py;h=24a5a24395877c077796fbe87026c65435a0fd42;hb=e294545933a8f51a6c2a7f2246c010c78d92af03;hp=76dc318538fd2336547bf56d9957e0d912567c3f;hpb=be46fb1b43775f35da8b49ad28110d16c8692777;p=qcg-portal.git diff --git a/qcg/utils.py b/qcg/utils.py index 76dc318..24a5a24 100644 --- a/qcg/utils.py +++ b/qcg/utils.py @@ -1,8 +1,6 @@ from django.core.paginator import Paginator -from django.db import transaction -from django.utils.timezone import now -from pyqcg.service import Registry -from pyqcg.utils import Credential, TimePeriod +from django.utils.formats import date_format +from django.utils.timezone import localtime from qcg import constants @@ -17,51 +15,6 @@ def username_from_dn(dn): return username -@transaction.atomic -def update_user_data(user, proxy): - from qcg.models import User, Job, Task, Allocation, NodeInfo - - credential = Credential(proxy) - registry = Registry(credential) - - # put lock on user record (hopefully..?) - user = User.objects.select_for_update().get(pk=user.pk) - - changed_filter = {'changed': TimePeriod(after=user.last_update)} - - ################################### - # Jobs - ################################### - for qcg_job in registry.jobs(**changed_filter): - params = Job.qcg_map(qcg_job, user) - job_id = params.pop('job_id') - - Job.objects.update_or_create(job_id=job_id, defaults=params) - - ################################### - # Tasks - ################################### - jobs_cache = {j.job_id: j for j in Job.objects.filter(owner=user)} - for qcg_task in registry.tasks(**changed_filter): - params = Task.qcg_map(qcg_task, jobs_cache) - task_id = params.pop('task_id') - - task, created = Task.objects.update_or_create(job__job_id=qcg_task.job_id, task_id=task_id, defaults=params) - - if not created: - task.allocations.all().delete() - - for qcg_alloc in qcg_task.allocations: - alloc = task.allocations.create(**Allocation.qcg_map(qcg_alloc)) - - for qcg_node in qcg_alloc.nodes: - alloc.nodes.create(**NodeInfo.qcg_map(qcg_node)) - - # release user lock - user.last_update = now() - user.save() - - def try_parse_int(s, default=None, base=10): try: return int(s, base) @@ -80,3 +33,7 @@ def paginator_context(request, objects, per_page=constants.PER_PAGE): min(max(page_num + 2, 5), paginator.num_pages) + 1) return {'page': paginator.page(page_num), 'num_pages': paginator.num_pages, 'pages_range': pages_range} + + +def localtime_str(datetime): + return date_format(localtime(datetime), 'DATETIME_FORMAT')