19 from __future__ import print_function |
19 from __future__ import print_function |
20 |
20 |
21 __docformat__ = "restructuredtext en" |
21 __docformat__ = "restructuredtext en" |
22 |
22 |
23 import sys |
23 import sys |
24 import os |
|
25 import re |
24 import re |
26 import subprocess |
25 import subprocess |
27 from os.path import abspath |
26 from os.path import abspath |
28 from logging import getLogger |
27 from logging import getLogger |
|
28 from datetime import time, datetime |
29 |
29 |
30 from six import string_types |
30 from six import string_types |
31 from six.moves import filter |
31 from six.moves import filter |
32 |
32 |
33 from logilab import database as db, common as lgc |
33 from logilab import database as db, common as lgc |
34 from logilab.common.shellutils import ProgressBar, DummyProgressBar |
34 from logilab.common.shellutils import ProgressBar, DummyProgressBar |
35 from logilab.common.deprecation import deprecated |
35 from logilab.common.deprecation import deprecated |
36 from logilab.common.logging_ext import set_log_methods |
36 from logilab.common.logging_ext import set_log_methods |
|
37 from logilab.common.date import utctime, utcdatetime |
37 from logilab.database.sqlgen import SQLGenerator |
38 from logilab.database.sqlgen import SQLGenerator |
38 |
39 |
39 from cubicweb import Binary, ConfigurationError |
40 from cubicweb import Binary, ConfigurationError |
40 from cubicweb.uilib import remove_html_tags |
41 from cubicweb.uilib import remove_html_tags |
41 from cubicweb.schema import PURE_VIRTUAL_RTYPES |
42 from cubicweb.schema import PURE_VIRTUAL_RTYPES |
374 newargs = {} |
375 newargs = {} |
375 for key, val in args.iteritems(): |
376 for key, val in args.iteritems(): |
376 # convert cubicweb binary into db binary |
377 # convert cubicweb binary into db binary |
377 if isinstance(val, Binary): |
378 if isinstance(val, Binary): |
378 val = self._binary(val.getvalue()) |
379 val = self._binary(val.getvalue()) |
|
380 # convert timestamp to utc. |
|
381 # expect SET TiME ZONE to UTC at connection opening time. |
|
382 # This shouldn't change anything for datetime without TZ. |
|
383 elif isinstance(val, datetime) and val.tzinfo is not None: |
|
384 val = utcdatetime(val) |
|
385 elif isinstance(val, time) and val.tzinfo is not None: |
|
386 val = utctime(val) |
379 newargs[key] = val |
387 newargs[key] = val |
380 # should not collide |
388 # should not collide |
|
389 assert not (frozenset(newargs) & frozenset(query_args)), \ |
|
390 'unexpected collision: %s' % (frozenset(newargs) & frozenset(query_args)) |
381 newargs.update(query_args) |
391 newargs.update(query_args) |
382 return newargs |
392 return newargs |
383 return query_args |
393 return query_args |
384 |
394 |
385 def process_result(self, cursor, cnx=None, column_callbacks=None): |
395 def process_result(self, cursor, cnx=None, column_callbacks=None): |