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
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