Changeset 4913

Show
Ignore:
Timestamp:
07/09/08 14:34:37 (6 months ago)
Author:
alberto
Message:

merged prioritized branch into trunk

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • projects/TurboJson/trunk/setup.cfg

    r4744 r4913  
     1[aliases] 
     2release = egg_info -RDb "" sdist bdist_egg register upload 
     3 
    14[egg_info] 
    25tag_build = .dev 
  • projects/TurboJson/trunk/setup.py

    r4891 r4913  
    2020    install_requires = [ 
    2121        'PEAK-Rules >= 0.5a1.dev-r2555', 
    22         'simplejson >= 1.9.1' 
     22        'simplejson >= 1.9.1', 
     23        'prioritized_methods >= 0.1.3dev_20080709, ==dev' 
    2324    ], 
    2425    zip_safe = True, 
  • projects/TurboJson/trunk/turbojson/jsonify.py

    r4795 r4913  
    44import decimal 
    55 
    6 from peak.rules import abstract, when 
     6from peak.rules import abstract 
     7from prioritized_methods import prioritized_when 
    78 
    89from simplejson import JSONEncoder 
     
    3233 
    3334# This is for easier usage and backward compatibility: 
    34 jsonify.when = lambda *args, **kwargs: when(jsonify, *args, **kwargs
     35jsonify.when = prioritized_when.__get__(jsonify
    3536 
    3637 
    37 @jsonify.when("isinstance(obj, (datetime.date, datetime.datetime))"
     38@jsonify.when("isinstance(obj, (datetime.date, datetime.datetime))",-1
    3839def jsonify_datetime(obj): 
    3940    """JSONify datetime and date objects.""" 
    4041    return str(obj) 
    4142 
    42 @jsonify.when("isinstance(obj, decimal.Decimal)"
     43@jsonify.when("isinstance(obj, decimal.Decimal)",-1
    4344def jsonify_decimal(obj): 
    4445    """JSONify decimal objects.""" 
    4546    return float(obj) 
    4647 
    47 @jsonify.when("hasattr(obj, '__json__')"
     48@jsonify.when("hasattr(obj, '__json__')",-1
    4849def jsonify_explicit(obj): 
    4950    """JSONify objects with explicit JSONification method.""" 
     
    7677            and hasattr(obj.__class__, 'sqlmeta')) 
    7778 
    78     @jsonify.when("is_sqlobject(obj)" 
    79         " and not hasattr(obj, '__json__')") 
     79    @jsonify.when("is_sqlobject(obj)" " and not hasattr(obj, '__json__')", -1) 
    8080    def jsonify_sqlobject(obj): 
    8181        """JSONify SQLObjects.""" 
     
    9191    else: 
    9292 
    93         @jsonify.when("isinstance(obj, SelectResultsClass)"
     93        @jsonify.when("isinstance(obj, SelectResultsClass)",-1
    9494        def jsonify_select_results(obj): 
    9595            """JSONify SQLObject.SelectResults.""" 
     
    112112            return hasattr(obj, '_sa_class_manager') 
    113113 
    114         @jsonify.when("is_saobject(obj)" 
    115             " and not hasattr(obj, '__json__')") 
     114        @jsonify.when("is_saobject(obj) and not hasattr(obj, '__json__')",-1) 
    116115        def jsonify_saobject(obj): 
    117116            """JSONify SQLAlchemy objects.""" 
     
    128127                and isinstance(obj.c, OrderedProperties)) 
    129128 
    130         @jsonify.when("is_saobject(obj)" 
    131             " and not hasattr(obj, '__json__')") 
     129        @jsonify.when("is_saobject(obj) and not hasattr(obj, '__json__')",-1) 
    132130        def jsonify_saobject(obj): 
    133131            """JSONify SQLAlchemy objects.""" 
     
    144142        else: # SQLAlchemy < 0.4 
    145143 
    146             @jsonify.when("isinstance(obj, InstrumentedList)"
     144            @jsonify.when("isinstance(obj, InstrumentedList)",-1
    147145            def jsonify_instrumented_list(obj): 
    148146                """JSONify SQLAlchemy instrumented lists.""" 
  • projects/TurboJson/trunk/turbojson/tests/test_sqlalchemy.py

    r4580 r4913  
    2323            Column('id', Integer, primary_key=True), 
    2424            Column('val', String(8))) 
     25    test4 = Table('test4', metadata, 
     26            Column('id', Integer, primary_key=True), 
     27            Column('val', String(8))) 
    2528    metadata.create_all() 
    2629 
     
    3942    mapper(Test3, test3) 
    4043 
     44    class Test4(object): 
     45        pass 
     46    mapper(Test4, test4) 
     47 
    4148    test1.insert().execute({'id':1, 'val':'bob'}) 
    4249    test2.insert().execute({'id':1, 'test1id':1, 'val':'fred'}) 
    4350    test2.insert().execute({'id':2, 'test1id':1, 'val':'alice'}) 
    4451    test3.insert().execute({'id':1, 'val':'bob'}) 
     52    test4.insert().execute({'id':1, 'val':'alberto'}) 
    4553 
    4654except ImportError: 
     
    6876        encoded = jsonify.encode(t) 
    6977        assert encoded == '{"id": 1, "val": "bob", "customized": true}' 
     78 
     79    def test_priority_override(): 
     80        s = create_session() 
     81        t = s.query(Test4).get(1) 
     82        encoded = jsonify.encode(t) 
     83        assert encoded == '{"id": 1, "val": "alberto"}' 
     84 
     85        @jsonify.jsonify.when((Test4,)) 
     86        def jsonify_test4(obj): 
     87            return {'val':obj.val} 
     88 
     89        encoded = jsonify.encode(t) 
     90        assert encoded == '{"val": "alberto"}' 
     91