Exemple #1
0
 def __filterkwargs(self, objectconstraints=False, **kwargs): 
     from rdf.models import Predicate, Resource
     if kwargs.has_key('subject'):
         s = Predicate.locate_resource(kwargs['subject'])
         if s is None:
             raise Exception('subject (%s) has no resource field' % unicode(kwargs['subject']))
         else:
             kwargs['subject'] = s
     k = 'object'
     if kwargs.has_key(k):
         # XXX This is dirty...
         # Also overlaps with parts of Statement and Predicate.
         v = kwargs[k]
         if v is not None:
             if isinstance(v, Resource):
                 del kwargs[k]
                 kwargs['object_resource'] = v
             elif isinstance(v, Model) and hasattr(v, 'resource'):
                 del kwargs[k]
                 kwargs['object_resource'] = v.resource
             elif objectconstraints:
                 del kwargs[k]
                 p = kwargs['predicate']
                 reverse = p.Range.__name__.lower()
                 if isinstance(v, dict):
                     for vk, vv in v.items():
                         kwargs['__'.join((reverse, vk, 'exact'))] = vv
                 else:
                     kwargs[reverse + '__value__exact'] = v
     return kwargs
Exemple #2
0
 def _rdf_property(self, e):
     try: 
         label = e.find(RDFS_LABEL).text
         resource, create = self._rdf_property_resource(e, label)
         if create is True: yield resource
         domain, create = _rdf_property_domain(e)
         if create is True: yield domain
         range, create = _rdf_property_range(e) 
         if create is True: yield range
         field_name = _rdf_property_field_name(e)
         cardinality = _rdf_property_cardinality(e)
         description = _rdf_property_dc_description(e, label)
         match = Predicate.objects.filter(resource=resource)
         if 1 > match.count():
             predicate = Predicate(
                 resource=resource, 
                 title=label.title(), 
                 description=description, 
                 domain=domain, 
                 range=range, 
                 cardinality=cardinality, 
                 field_name=field_name)
         else:
             predicate = match[0]
             predicate.title = label.title()
             predicate.description = description
             predicate.domain = domain
             predicate.range = range
             predicate.cardinality = cardinality
             predicate.field_name = field_name
         self._rdf_property_subpropertyof(e, predicate)
         yield predicate
     except Exception, x: # IGNORE:W0703
         self._except(Exception, x, 'failed to parse property `%s`' % resource) # IGNORE:E1101