Changeset 686

Show
Ignore:
Timestamp:
11/17/10 14:26:42 (3 years ago)
Author:
jose.brandao
Message:

Adding opentrials-recipe

Location:
sandbox
Files:
22 added
2 modified

Legend:

Unmodified
Added
Removed
  • sandbox/django-fossil/fossil/fields.py

    r685 r686  
    8989            self.rel.field_name = cls._meta.pk.name 
    9090 
     91class DictKeyAttribute(dict): 
     92    """ 
     93    Dictionary that allows you access dict key values as attributes 
     94    """ 
     95    def __getattr__(self, name): 
     96        try: 
     97            value = self[name] 
     98        except KeyError: 
     99            raise AttributeError 
     100 
     101        if isinstance(value, dict): 
     102            value = DictKeyAttribute(value) 
     103 
     104        return value 
     105 
    91106class FossilProxy(object): 
    92107    fossil = None 
     
    108123 
    109124    def __getattr__(self, name): 
    110         if name in ('object_fossil','_object_fossil','fossil'): 
     125        if name in ('object_fossil','_object_fossil','fossil','get_attr_from_dict'): 
    111126            raise AttributeError 
    112127 
    113128        if isinstance(self.fossil, dict): 
    114             def get_attr_from_dict(dic, path): 
    115                 """ 
    116                 Recursive function to get a path like key1.date.year from a dict like: 
    117                  
    118                 {'key1': {'date': {'year': 2010}}} 
    119                 """ 
    120                 nodes = filter(bool, map(lambda s: s.strip(), path.split('.'))) # Ignores blank spaces 
    121                 current = nodes[0] 
    122                 value = dic[current] 
    123  
    124                 if len(nodes) == 1: 
    125                     return value 
    126                 else: 
    127                     return get_attr_from_dict(value, '.'.join(nodes[1:])) 
    128  
    129             return get_attr_from_dict(self.fossil, name) 
     129            value = self.fossil[name] 
     130 
     131            if isinstance(value, dict): 
     132                value = DictKeyAttribute(value) 
     133 
     134            return value 
    130135        else: 
    131136            return getattr(self.object_fossil.object, name) 
     
    144149 
    145150    def __unicode__(self): 
    146         return unicode(self.fossil) 
     151        if isinstance(self.fossil, Fossil): 
     152            return unicode(self.fossil) 
     153        else: 
     154            return self.fossil['__unicode__'] 
    147155 
    148156    def __str__(self): 
    149         return str(self.fossil) 
     157        if isinstance(self.fossil, Fossil): 
     158            return str(self.fossil) 
     159        else: 
     160            return self.fossil['__unicode__'] 
    150161 
    151162class FossilSingleObjectDescriptor(ReverseSingleRelatedObjectDescriptor): 
  • sandbox/django-fossil/fossil/models.py

    r659 r686  
    5959 
    6060        try: 
    61             return self.content_type.model_class.objects.deserialize_for_fossil(data) 
     61            return self.content_type.model_class().objects.deserialize_for_fossil(data) 
    6262        except AttributeError: 
    6363            return list(deserialize('json', data))[0]