예제 #1
0
파일: database.py 프로젝트: laranea/solango
 def create_object(self, instance):
     obj = idict()
     for field in ["method", "xml", "doc_pk", "error"]:
         obj[field] = getattr(instance, field)        
     return obj
예제 #2
0
    def __init__(self, arg, initial=False):
        """
        Takes a model, form or dict.
        
        For a model or form it assumes that you are trying to create a document
        from the values
        
        For a dict it assumes that you received results from Solr and you want 
        to make a Python object representation of the model     
        """
        
        self.fields = deepcopy(self.base_fields)
        self.pk_field = None
        
        self._instance = None
        self.orginal_dict = {}
        
        self.data_dict = {}
        self.highlight = ""
        self.boost = ""
        self._transformed = False
        
        #Model
        if isinstance(arg, Model):
            self._instance = arg
            self.data_dict = model_to_dict(arg)
        #Form
        elif isinstance(arg, BaseForm):
            if not arg.is_valid():
                raise AttributeError("Form is not valid %s" % 
                                     ["%s:%s" % (key, "".join(value))
                                       for key, value in arg.errors] )
            if not arg.cleaned_data.has_key("id"):
                raise AttributeError("Solango requires that all forms have"+ \
                                " an id field. subclass forms.BaseSolangoForm")
            
            #We need a primary key. This seems to to the trick
            instance = idict(arg.cleaned_data)
            instance.model = get_instance_key(arg)
            
            self._instance = instance
            self.data_dict = arg.cleaned_data
        elif initial:
            self._instance = idict(arg)
            self.data_dict = arg
        #Dictionary
        elif isinstance(arg, dict):
            self.data_dict = arg
        #Error
        else:
            raise ValueError('Argument must be a Model, Form or a Dictionary')
        
        # Find Primary Key Field
        for field in self.fields.values():
            #Save value
            if isinstance(field, search_fields.PrimaryKeyField):
                self.pk_field = field
                if self._instance and not hasattr(self._instance, "pk"):
                    pk = getattr(self._instance,field.name)
                    setattr(self._instance, "pk", pk)
                break
    
        if not self.pk_field:
            raise NoPrimaryKeyFieldException('Search Document needs a Primary Key Field')

        
        if self._instance:
            self._transform_field(self.pk_field)
            self.boost = self.get_boost(self._instance)
        
        elif self.data_dict:
            self.clean()
            self._transformed = True
    
        #Set Up the render Methods.
        for key, template in self.templates:
            setattr(self, "render_%s" % key,
                    curry(self._render_doc_as, template=template))
예제 #3
0
파일: dummy.py 프로젝트: laranea/solango
 def create_object(self, instance):
     return idict()