Exemplo n.º 1
0
    def update_or_add(self, **kwargs):
        assert kwargs, 'update_or_add() must be passed at least one keyword argument'
        defaults = kwargs.pop('defaults', {})
        obj = get_first(self.filter(**kwargs))
        result = (obj, False, True)
        create = False
        if not obj:
            obj = self.model()
            result = (obj, True, False)
            create = True
        try:
            params = dict([(k, v) for k, v in kwargs.items() if '__' not in k])
            params.update(defaults)
            for attr, val in params.items():
                if hasattr(obj, attr):
                    setattr(obj, attr, val)
            sid = transaction.savepoint()
            obj.save(force_update=not create)
            if not create:
                self.add(obj)
            transaction.savepoint_commit(sid)

            return result
        except IntegrityError, e:
            transaction.savepoint_rollback(sid)
 def resolve_result_medium(self):
     """
         Get the Medium of the result key or default
     :return:
     """
     return get_first(
         # See if a Medium exists with a key corresponding to the result
         # Default to the default Medium for results
         Medium.objects.filter(key=self.result_db_entity_key.replace(
             'result', 'result__medium')),
         default=Medium.objects.get(key=ResultMediumKey.DEFAULT))
 def resolve_result_medium(self):
     """
         Get the Medium of the result key or default
     :return:
     """
     return get_first(
         # See if a Medium exists with a key corresponding to the result
         # Default to the default Medium for results
         Medium.objects.filter(key=self.result_db_entity_key.replace('result', 'result__medium')),
         default=Medium.objects.get(key=ResultMediumKey.DEFAULT)
     )
Exemplo n.º 4
0
    def get_related_resource(self, related_instance):
        """
        Instantiates the related resource. Override this method to subclass according to the related instance, rather
        than just using the to class of the Field
        """
        related_resource_class = get_first(filter(
            # Check for object_class since some of our dynamic resources lack one
            lambda resource_class: resource_class._meta.object_class and issubclass(related_instance.__class__, resource_class._meta.object_class),
            self.to_class().__class__.__subclasses__()), None)
        related_resource = related_resource_class() if related_resource_class else self.to_class()

        if related_resource._meta.api_name is None:
            if self._resource and self._resource._meta.api_name is not None:
                related_resource._meta.api_name = self._resource._meta.api_name

        # Try to be efficient about DB queries.
        related_resource.instance = related_instance
        return related_resource
Exemplo n.º 5
0
    def get_related_resource(self, related_instance):
        """
        Instantiates the related resource. Override this method to subclass according to the related instance, rather
        than just using the to class of the Field
        """
        related_resource_class = get_first(filter(
            # Check for object_class since some of our dynamic resources lack one
            lambda resource_class: resource_class._meta.object_class and issubclass(related_instance.__class__, resource_class._meta.object_class),
            self.to_class().__class__.__subclasses__()), None)
        related_resource = related_resource_class() if related_resource_class else self.to_class()

        if related_resource._meta.api_name is None:
            if self._resource and self._resource._meta.api_name is not None:
                related_resource._meta.api_name = self._resource._meta.api_name

        # Try to be efficient about DB queries.
        related_resource.instance = related_instance
        return related_resource
Exemplo n.º 6
0
 def flat_building_densities_query(bundle):
     return get_first(
         FlatBuiltForm.objects.filter(built_form_id=bundle.obj.id))
Exemplo n.º 7
0
 def flat_building_densities_query(bundle):
     return get_first(FlatBuiltForm.objects.filter(built_form_id=bundle.obj.id))