src/p4l/mapping/serializers.py
changeset 142 c365a6e23a56
parent 131 f1854630734f
equal deleted inserted replaced
141:740d595d6728 142:c365a6e23a56
    29 #
    29 #
    30 # The fact that you are presently reading this means that you have had
    30 # The fact that you are presently reading this means that you have had
    31 # knowledge of the CeCILL-B license and that you accept its terms.
    31 # knowledge of the CeCILL-B license and that you accept its terms.
    32 #
    32 #
    33 
    33 
       
    34 from collections import OrderedDict
    34 import logging
    35 import logging
    35 
    36 
    36 from rdflib.namespace import RDF
    37 from rdflib.namespace import RDF
    37 from rdflib.term import URIRef, Literal, BNode
    38 from rdflib.term import URIRef, Literal, BNode, Identifier
    38 from collections import OrderedDict
       
    39 
    39 
    40 
    40 
    41 logger = logging.getLogger(__name__)
    41 logger = logging.getLogger(__name__)
    42 
    42 
    43 class BaseSerializer(object):
    43 class BaseSerializer(object):
    78     
    78     
    79     def get_rdf_object(self, obj, fieldname):
    79     def get_rdf_object(self, obj, fieldname):
    80         res = self.convert(getattr(obj, self.source or fieldname))
    80         res = self.convert(getattr(obj, self.source or fieldname))
    81         if res is None:
    81         if res is None:
    82             return
    82             return
    83         if not isinstance(res, Literal):
    83         if not isinstance(res, Identifier):
    84             res = Literal(unicode(res))        
    84             res = Literal(unicode(res))        
       
    85         
    85         lang = getattr(obj, self.lang_field, None) if self.lang_field else None
    86         lang = getattr(obj, self.lang_field, None) if self.lang_field else None
    86         
    87         
    87         return Literal(res.value, lang) if lang else res
    88         return Literal(res.value, lang) if lang else res
    88 
    89 
    89 class BooleanFieldSerializer(SimpleFieldSerializer):
    90 class BooleanFieldSerializer(SimpleFieldSerializer):
    97 
    98 
    98 
    99 
    99 class RelatedFieldSerializer(SimpleFieldSerializer):
   100 class RelatedFieldSerializer(SimpleFieldSerializer):
   100         
   101         
   101     def __init__(self, value_field, predicate=None, convert=None, source=None, many=False, lang_field=None):
   102     def __init__(self, value_field, predicate=None, convert=None, source=None, many=False, lang_field=None):
   102         super(RelatedFieldSerializer, self).__init__(predicate, convert, source, lang_field=lang_field)
   103         super(RelatedFieldSerializer, self).__init__(predicate=predicate, convert=convert, source=source, lang_field=lang_field)
   103         self.many = many
   104         self.many = many
   104         self.value_field = value_field
   105         self.value_field = value_field
   105 
   106 
   106     def to_graph(self, subject, obj, fieldname, graph):
   107     def to_graph(self, subject, obj, fieldname, graph):
   107         value = getattr(obj, fieldname, None)
   108         value = getattr(obj, fieldname, None)