Contact: fumanchu@aminus.org

Log in as guest/dejavu to create tickets

I think I've seen this ORM somewhere before...

Changeset 8

Show
Ignore:
Timestamp:
10/09/04 18:01:37
Author:
fumanchu
Message:

codewalk and logic are now modules in dejavu

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/__init__.py

    r7 r8  
    11import ConfigParser 
    22import containers 
    3 import logic 
     3import datetime 
    44import xray 
    55 
    66from dejavu.analysis import * 
    77from dejavu.readme import * 
     8from dejavu import logic 
    89 
    910 
     
    425426# Otherwise, you should create your own instance 
    426427# per application. 
    427 arena = Arena() 
     428dejavuarena = Arena() 
    428429 
    429430def _synapses_func(key, farClass, farKey): 
     
    729730    pass 
    730731 
     732 
     733########################################################################### 
     734##                                                                       ## 
     735##                           Logic functions                             ## 
     736##                                                                       ## 
     737########################################################################### 
     738 
     739 
     740def icontains(a, b): 
     741    """Case-insensitive test b in a. Note the operand order.""" 
     742    if a is None or b is None: 
     743        return False 
     744    return b.lower() in a.lower() 
     745 
     746def icontainedby(a, b): 
     747    """Case-insensitive test a in b. Note the operand order.""" 
     748    if a is None or b is None: 
     749        return False 
     750    return a.lower() in b.lower() 
     751 
     752def istartswith(a, b): 
     753    """True if a starts with b (case-insensitive), False otherwise.""" 
     754    if a is None or b is None: 
     755        return False 
     756    return a.lower().startswith(b.lower()) 
     757 
     758def iendswith(a, b): 
     759    """True if a ends with b (case-insensitive), False otherwise.""" 
     760    if a is None or b is None: 
     761        return False 
     762    return a.lower().endswith(b.lower()) 
     763 
     764def ieq(a, b): 
     765    """True if a == b (case-insensitive), False otherwise.""" 
     766    if a is None or b is None: 
     767        return False 
     768    return (a.lower() == b.lower()) 
     769 
     770def year(value): 
     771    """The year attribute of a date.""" 
     772    if isinstance(value, (datetime.date, datetime.datetime)): 
     773        return value.year 
     774    else: 
     775        return None 
     776 
     777def now(): 
     778    """Late-bound datetime.datetime.now(). Taint this when early binding.""" 
     779    return datetime.datetime.now() 
     780now.bind_late = True 
     781 
     782def today(): 
     783    """Late-bound datetime.date.today(). Taint this when early binding.""" 
     784    return datetime.date.today() 
     785today.bind_late = True 
     786 
     787def iscurrentweek(value): 
     788    """If value is in the current week, return True, else False.""" 
     789    if isinstance(value, (datetime.date, datetime.datetime)): 
     790        return datetime.date.today().strftime('%W%Y') == value.strftime('%W%Y') 
     791    else: 
     792        return False 
     793iscurrentweek.bind_late = True 
  • trunk/engines.py

    r7 r8  
    1414    import pickle 
    1515import dejavu 
    16 import logic 
     16from dejavu import logic 
    1717import sets 
    1818import xray 
  • trunk/storage/__init__.py

    r7 r8  
    280280            lock.release() 
    281281 
     282 
     283class Adapter(object): 
     284    """Transform values according to their type.""" 
     285     
     286    def __init__(self): 
     287        self.default_processor = unicode 
     288        self.processors = {} 
     289     
     290    def coerce(self, value, valuetype=None): 
     291        if valuetype is None: 
     292            valuetype = type(value) 
     293        xform = self.processors.get(valuetype, self.default_processor) 
     294        return xform(value) 
     295 
  • trunk/storage/storeado.py

    r7 r8  
    88import pythoncom 
    99import threading 
    10 import codewalk 
    1110import datetime 
    1211try: 
     
    1514    import pickle 
    1615import recur 
    17 import logic 
    18 import new 
    19  
    20 from dejavu import storage 
     16from types import FunctionType 
     17 
     18import dejavu 
     19from dejavu import storage, codewalk, logic 
    2120 
    2221adOpenForwardOnly = 0 
     
    4443def time_from_com(com_date): 
    4544    """Return a valid (day, datetime.time) from a COM date or time object.""" 
    46     hour, min = divmod(86400 * (float(com_date) % 1), 3600) 
    47     min, sec = divmod(min, 60) 
     45    hour, mins = divmod(86400 * (float(com_date) % 1), 3600) 
     46    mins, sec = divmod(mins, 60) 
    4847    # Must do both int() and round() or we'll be up to 1 second off. 
    4948    hour = int(round(hour)) 
    50     min = int(round(min)) 
     49    mins = int(round(mins)) 
    5150    sec = int(round(sec)) 
    52     return recur.sane_time(0, hour, min, sec) 
    53  
    54  
    55 class AdapterFromADO(logic.Adapter): 
     51    return recur.sane_time(0, hour, mins, sec) 
     52 
     53 
     54class AdapterFromADO(storage.Adapter): 
    5655    """Coerce incoming values from ADO to Dejavu datatypes.""" 
    5756    def __init__(self, unit=None): 
     
    172171 
    173172 
    174 class AdapterToADOFields(logic.Adapter): 
     173class AdapterToADOFields(storage.Adapter): 
    175174    """Coerce outgoing values from Dejavu datatypes to ADO.Field types.""" 
    176175     
     
    221220 
    222221 
    223 class AdapterToADOSQL(logic.Adapter): 
     222class AdapterToADOSQL(storage.Adapter): 
    224223    """Coerce Expression constants to ADO SQL.""" 
    225224     
     
    300299     
    301300    sql_cmp_op = ('<', '<=', '=', '!=', '>', '>=', 'in', 'not in') 
    302     functions = {logic.icontains: lambda x, y: x + " Like '%" + y[1:-1] + "%'", 
    303                  logic.icontainedby: icontainedby, 
    304                  logic.istartswith: lambda x, y: x + " Like '" + y[1:-1] + "%'", 
    305                  logic.iendswith: lambda x, y: x + " Like '%" + y[1:-1] + "'", 
    306                  logic.ieq: lambda x, y: x + " = " + y, 
    307                  logic.now: lambda: "getdate()", 
    308                  logic.today: lambda: "DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)", 
    309                  logic.year: lambda x: "YEAR(" + x + ")", 
     301    functions = {dejavu.icontains: lambda x, y: x + " Like '%" + y[1:-1] + "%'", 
     302                 dejavu.icontainedby: icontainedby, 
     303                 dejavu.istartswith: lambda x, y: x + " Like '" + y[1:-1] + "%'", 
     304                 dejavu.iendswith: lambda x, y: x + " Like '%" + y[1:-1] + "'", 
     305                 dejavu.ieq: lambda x, y: x + " = " + y, 
     306                 dejavu.now: lambda: "getdate()", 
     307                 dejavu.today: lambda: "DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)", 
     308                 dejavu.year: lambda x: "YEAR(" + x + ")", 
    310309                 } 
    311310     
     
    332331            term, operation = terms.pop() 
    333332            # All this checking of None is done so that a function 
    334             # (like logic.iscurrentweek) can be labeled imperfect-- 
     333            # (like dejavu.iscurrentweek) can be labeled imperfect-- 
    335334            # all Units (which match the rest of the Expression) 
    336335            # will be recalled. They can then be compared in 
     
    359358        # Some constants are function or class objects, 
    360359        # which should not be coerced. 
    361         no_coerce = (new.function, type) 
     360        no_coerce = (FunctionType, type) 
    362361        if not isinstance(val, no_coerce): 
    363362            val = self.adapter.coerce(val) 
     
    686685        if not path: return firstcls.__name__ 
    687686         
    688         path = self.arena.associations.shortest_path(firstcls, path[0]) 
    689         path.pop(0) 
    690         cls = path[0] 
     687        spath = self.arena.associations.shortest_path(firstcls, path[0]) 
     688        spath.pop(0) 
     689        cls = spath[0] 
    691690        leftkey, rightkey = firstcls._associations[cls] 
    692691        params = {u'prefix': u'djv', 
     
    696695                  u'rightkey': rightkey, 
    697696                  } 
    698         if len(path) == 1: 
     697        if len(spath) == 1: 
    699698            params[u'child'] = u"[%(prefix)s%(right)s]" % params 
    700699        else: 
    701             params[u'child'] = u"(%s)" % self._join(path) 
     700            params[u'child'] = u"(%s)" % self._join(spath) 
    702701         
    703702        return (u"[%(prefix)s%(left)s] LEFT JOIN %(child)s" 
     
    10081007class ADOSQLDecompiler_MSAccess(ADOSQLDecompiler): 
    10091008    sql_cmp_op = ('<', '<=', '=', '<>', '>', '>=', 'in', 'not in') 
    1010     functions = {logic.icontains: lambda x, y: x + " Like '%" + y[1:-1] + "%'", 
    1011                  logic.icontainedby: icontainedby, 
    1012                  logic.istartswith: lambda x, y: x + " Like '" + y[1:-1] + "%'", 
    1013                  logic.iendswith: lambda x, y: x + " Like '%" + y[1:-1] + "'", 
    1014                  logic.ieq: lambda x, y: x + " = " + y, 
    1015                  logic.now: lambda: "Now()", 
    1016                  logic.today: lambda: "DateValue(Now())", 
    1017                  logic.year: lambda x: "Year(" + x + ")", 
     1009    functions = {dejavu.icontains: lambda x, y: x + " Like '%" + y[1:-1] + "%'", 
     1010                 dejavu.icontainedby: icontainedby, 
     1011                 dejavu.istartswith: lambda x, y: x + " Like '" + y[1:-1] + "%'", 
     1012                 dejavu.iendswith: lambda x, y: x + " Like '%" + y[1:-1] + "'", 
     1013                 dejavu.ieq: lambda x, y: x + " = " + y, 
     1014                 dejavu.now: lambda: "Now()", 
     1015                 dejavu.today: lambda: "DateValue(Now())", 
     1016                 dejavu.year: lambda x: "Year(" + x + ")", 
    10181017                 } 
    10191018 
  • trunk/storage/storeodbc.py

    r7 r8  
    44 
    55import fixedpoint 
    6 import codewalk 
    76import datetime 
    87import pickle 
    9 import logic 
    108import dbi, odbc 
    119 
    1210import dejavu 
    13 from dejavu import storage 
    14  
    15  
    16 class AdapterFromODBC(logic.Adapter): 
     11from dejavu import storage, codewalk 
     12 
     13 
     14class AdapterFromODBC(storage.Adapter): 
    1715    """Transform incoming values from ODBC to Dejavu datatypes.""" 
    1816     
     
    9189 
    9290 
    93 class AdapterToODBCSQL(logic.Adapter): 
     91class AdapterToODBCSQL(storage.Adapter): 
    9492    """Transform Expression values according to their type for ODBC SQL.""" 
    9593     
     
    154152     
    155153    sql_cmp_op = ('<', '<=', '=', '<>', '>', '>=', 'in', 'not in') 
    156     functions = {logic.icontains: lambda x, y: x + " Like '%" + y[1:-1] + "%'", 
    157                  logic.icontainedby: _icontainedby, 
    158                  logic.istartswith: lambda x, y: x + " Like '" + y[1:-1] + "%'", 
    159                  logic.iendswith: lambda x, y: x + " Like '%" + y[1:-1] + "'", 
    160                  logic.ieq: lambda x, y: x + " = " + y, 
     154    functions = {dejavu.icontains: lambda x, y: x + " Like '%" + y[1:-1] + "%'", 
     155                 dejavu.icontainedby: _icontainedby, 
     156                 dejavu.istartswith: lambda x, y: x + " Like '" + y[1:-1] + "%'", 
     157                 dejavu.iendswith: lambda x, y: x + " Like '%" + y[1:-1] + "'", 
     158                 dejavu.ieq: lambda x, y: x + " = " + y, 
    161159                 } 
    162160     
  • trunk/storage/test_storeado.py

    r7 r8  
    55import storeado 
    66import dejavu 
    7 import logic 
     7from dejavu import logic 
    88 
    99arena = dejavu.Arena() 
     
    5555         
    5656        # Test now(), today(), year() 
    57         sel(lambda x: x.FirstDate > logic.today(), 
     57        sel(lambda x: x.FirstDate > dejavu.today(), 
    5858            u"SELECT * FROM [djvThings] WHERE [djvThings].[FirstDate] > DateValue(Now())", False) 
    59         sel(lambda x: x.Event == logic.now(), 
     59        sel(lambda x: x.Event == dejavu.now(), 
    6060            u"SELECT * FROM [djvThings] WHERE [djvThings].[Event] = Now()", False) 
    61         sel(lambda x: logic.year(x.Event) == 2004, 
     61        sel(lambda x: dejavu.year(x.Event) == 2004, 
    6262            u"SELECT * FROM [djvThings] WHERE Year([djvThings].[Event]) = 2004", False) 
    6363##         
     
    167167         
    168168        # logic and other functions 
    169         trial(lambda x: logic.ieq(x.Name, 'Johann'), u"[djvThings].[Name] = 'Johann'", False) 
    170         trial(lambda x: logic.icontains(x.Name, 'tool'), u"[djvThings].[Name] Like '%tool%'", False) 
    171         trial(lambda x: logic.icontainedby(x.Name, ('Johann', 'Gambolputty', 'de von Ausfern')), 
     169        trial(lambda x: dejavu.ieq(x.Name, 'Johann'), u"[djvThings].[Name] = 'Johann'", False) 
     170        trial(lambda x: dejavu.icontains(x.Name, 'tool'), u"[djvThings].[Name] Like '%tool%'", False) 
     171        trial(lambda x: dejavu.icontainedby(x.Name, ('Johann', 'Gambolputty', 'de von Ausfern')), 
    172172              u"[djvThings].[Name] in ('Johann', 'Gambolputty', 'de von Ausfern')", False) 
    173173        reqZip = '92104' 
  • trunk/storage/test_storeodbc.py

    r7 r8  
    44import datetime 
    55import dejavu 
    6 import logic 
    76import dbi 
    8 from dejavu import servers 
     7from dejavu import servers, logic 
    98 
    109 
     
    137136         
    138137        # logic functions 
    139         trial(lambda x: logic.ieq(x.Name, 'Johann'), u"[Name] = 'Johann'", False) 
    140         trial(lambda x: logic.icontains(x.Name, 'tool'), u"[Name] Like '%tool%'", False) 
    141         trial(lambda x: logic.icontainedby(x.Name, ('Johann', 'Gambolputty', 'de von Ausfern')), 
     138        trial(lambda x: dejavu.ieq(x.Name, 'Johann'), u"[Name] = 'Johann'", False) 
     139        trial(lambda x: dejavu.icontains(x.Name, 'tool'), u"[Name] Like '%tool%'", False) 
     140        trial(lambda x: dejavu.icontainedby(x.Name, ('Johann', 'Gambolputty', 'de von Ausfern')), 
    142141              u"[Name] in ('Johann', 'Gambolputty', 'de von Ausfern')", False) 
    143142