fix tz mismatch issues with various queries

This commit is contained in:
Mike McLean 2024-06-12 17:45:45 -04:00
parent f70ba74d43
commit 69d162ddff
2 changed files with 16 additions and 11 deletions

View file

@ -23,6 +23,7 @@
from __future__ import absolute_import from __future__ import absolute_import
import datetime
import logging import logging
import koji import koji
import os import os
@ -299,6 +300,11 @@ def _singleRow(query, values, fields, strict=False):
return None return None
def convert_timestamp(ts):
"""Convert a numeric timestamp to a string suitable for a datetimetz field"""
return datetime.datetime.fromtimestamp(ts, datetime.timezone.utc).isoformat(' ')
def get_event(): def get_event():
"""Get an event id for this transaction """Get an event id for this transaction

View file

@ -96,6 +96,7 @@ from .db import ( # noqa: F401
get_event, get_event,
nextval, nextval,
currval, currval,
convert_timestamp,
) )
@ -7085,10 +7086,8 @@ class CG_Importer(object):
buildinfo['build_id'] = metadata['build']['build_id'] buildinfo['build_id'] = metadata['build']['build_id']
# epoch is not in the metadata spec, but we allow it to be specified # epoch is not in the metadata spec, but we allow it to be specified
buildinfo['epoch'] = metadata['build'].get('epoch', None) buildinfo['epoch'] = metadata['build'].get('epoch', None)
buildinfo['start_time'] = \ buildinfo['start_time'] = convert_timestamp(float(metadata['build']['start_time']))
datetime.datetime.fromtimestamp(float(metadata['build']['start_time'])).isoformat(' ') buildinfo['completion_time'] = convert_timestamp(float(metadata['build']['end_time']))
buildinfo['completion_time'] = \
datetime.datetime.fromtimestamp(float(metadata['build']['end_time'])).isoformat(' ')
owner = metadata['build'].get('owner', None) owner = metadata['build'].get('owner', None)
# get task id from OSBS or from standard place # get task id from OSBS or from standard place
buildinfo['task_id'] = self.get_task_id_from_metadata(metadata) buildinfo['task_id'] = self.get_task_id_from_metadata(metadata)
@ -8775,7 +8774,7 @@ def query_history(tables=None, **kwargs):
fields['revoker.id = %(editor)i'] = '_revoked_by' fields['revoker.id = %(editor)i'] = '_revoked_by'
elif arg == 'after': elif arg == 'after':
if not isinstance(value, str): if not isinstance(value, str):
value = datetime.datetime.fromtimestamp(value).isoformat(' ') value = convert_timestamp(value)
data['after'] = value data['after'] = value
clauses.append('ev1.time > %(after)s OR ev2.time > %(after)s') clauses.append('ev1.time > %(after)s OR ev2.time > %(after)s')
fields['ev1.time > %(after)s'] = '_created_after' fields['ev1.time > %(after)s'] = '_created_after'
@ -8791,7 +8790,7 @@ def query_history(tables=None, **kwargs):
fields[r_test] = '_revoked_after_event' fields[r_test] = '_revoked_after_event'
elif arg == 'before': elif arg == 'before':
if not isinstance(value, str): if not isinstance(value, str):
value = datetime.datetime.fromtimestamp(value).isoformat(' ') value = convert_timestamp(value)
data['before'] = value data['before'] = value
clauses.append('ev1.time < %(before)s OR ev2.time < %(before)s') clauses.append('ev1.time < %(before)s OR ev2.time < %(before)s')
# clauses.append("date_part('epoch', ev1.time) < %(before)s OR " # clauses.append("date_part('epoch', ev1.time) < %(before)s OR "
@ -12581,19 +12580,19 @@ class RootExports(object):
clauses.append('build.state = %(state)i') clauses.append('build.state = %(state)i')
if createdBefore: if createdBefore:
if not isinstance(createdBefore, str): if not isinstance(createdBefore, str):
createdBefore = datetime.datetime.fromtimestamp(createdBefore).isoformat(' ') createdBefore = convert_timestamp(createdBefore)
clauses.append('events.time < %(createdBefore)s') clauses.append('events.time < %(createdBefore)s')
if createdAfter: if createdAfter:
if not isinstance(createdAfter, str): if not isinstance(createdAfter, str):
createdAfter = datetime.datetime.fromtimestamp(createdAfter).isoformat(' ') createdAfter = convert_timestamp(createdAfter)
clauses.append('events.time > %(createdAfter)s') clauses.append('events.time > %(createdAfter)s')
if completeBefore: if completeBefore:
if not isinstance(completeBefore, str): if not isinstance(completeBefore, str):
completeBefore = datetime.datetime.fromtimestamp(completeBefore).isoformat(' ') completeBefore = convert_timestamp(completeBefore)
clauses.append('build.completion_time < %(completeBefore)s') clauses.append('build.completion_time < %(completeBefore)s')
if completeAfter: if completeAfter:
if not isinstance(completeAfter, str): if not isinstance(completeAfter, str):
completeAfter = datetime.datetime.fromtimestamp(completeAfter).isoformat(' ') completeAfter = convert_timestamp(completeAfter)
clauses.append('build.completion_time > %(completeAfter)s') clauses.append('build.completion_time > %(completeAfter)s')
if cgID: if cgID:
cgID = lookup_name('content_generator', cgID, strict=False) cgID = lookup_name('content_generator', cgID, strict=False)
@ -13762,7 +13761,7 @@ class RootExports(object):
if opts.get(key) is not None: if opts.get(key) is not None:
value = opts[key] value = opts[key]
if not isinstance(value, str): if not isinstance(value, str):
opts[key] = datetime.datetime.fromtimestamp(value).isoformat(' ') opts[key] = convert_timestamp(value)
conditions.append('%(field)s %(cmp)s %%(%(key)s)s' % locals()) conditions.append('%(field)s %(cmp)s %%(%(key)s)s' % locals())
query = QueryProcessor(columns=fields, aliases=aliases, tables=tables, joins=joins, query = QueryProcessor(columns=fields, aliases=aliases, tables=tables, joins=joins,