Skip to content
Snippets Groups Projects
Commit 3a26ac60e6f4 authored by sylvain thenault's avatar sylvain thenault
Browse files

backport (more complete) cw implementation of etype_frop_pyobj, provide...

backport (more complete) cw implementation of etype_frop_pyobj, provide datetime support while keeping mx DateTime support by default
parent d38132309706
No related branches found
No related tags found
No related merge requests found
......@@ -3,10 +3,10 @@
This module defines all the nodes we can find in a RQL Syntax tree, except
root nodes, defined in the `stmts` module.
:copyright: 2003-2008 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
:copyright: 2003-2009 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
:contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
:license: General Public License version 2 - http://www.gnu.org/licenses
"""
__docformat__ = "restructuredtext en"
from itertools import chain
......@@ -7,8 +7,11 @@
:contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
:license: General Public License version 2 - http://www.gnu.org/licenses
"""
__docformat__ = "restructuredtext en"
from itertools import chain
from decimal import Decimal
from datetime import datetime, date, time, timedelta
from time import localtime
try:
......@@ -14,3 +17,3 @@
try:
from mx.DateTime import DateTimeType, today, now
from mx.DateTime import DateTimeType, DateTimeDeltaType, today, now
except:
......@@ -16,13 +19,5 @@
except:
from datetime import datetime as DateTimeType, date, datetime
from time import localtime
def now():
return datetime(*localtime()[:6])
def today():
return date(*localtime()[:3])
KEYWORD_MAP = {'NOW' : now,
'TODAY': today}
pass
from rql import CoercionError
from rql.base import BaseNode, Node, BinaryNode, LeafNode
......@@ -32,4 +27,28 @@
CONSTANT_TYPES = frozenset((None, 'Date', 'Datetime', 'Boolean', 'Float', 'Int',
'String', 'Substitute', 'etype'))
KEYWORD_MAP = {'NOW' : now,
'TODAY': today}
# keep using mx DateTime by default for bw compat
def use_py_datetime():
global KEYWORD_MAP
KEYWORD_MAP = {'NOW' : datetime.now,
'TODAY': date.today}
ETYPE_PYOBJ_MAP = { bool: 'Boolean',
int: 'Int',
long: 'Int',
float: 'Float',
Decimal: 'Decimal',
unicode: 'String',
str: 'String',
datetime: 'Datetime',
date: 'Date',
time: 'Time',
timedelta: 'Interval',
DateTimeType: 'Datetime',
DateTimeDeltaType: 'Datetime',
}
def etype_from_pyobj(value):
......@@ -35,15 +54,10 @@
def etype_from_pyobj(value):
# try to guess type from value
if isinstance(value, bool):
return 'Boolean'
if isinstance(value, (int, long)):
return 'Int'
if isinstance(value, DateTimeType):
return 'Datetime'
elif isinstance(value, float):
return 'Float'
# XXX Bytes
return 'String'
"""guess yams type from python value"""
# note:
# * Password is not selectable so no problem)
# * use type(value) and not value.__class__ since mx instances have no
# __class__ attribute
return ETYPE_PYOBJ_MAP[type(value)]
def variable_ref(var):
"""get a VariableRef"""
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment