def get_by_name(self, **kwargs): """ Retireves a SuperTag by its name. Can use freebase to disambiguate the names. """ # Retrieve the object with the given arguments obj = super(SuperTagManager, self).get(**kwargs) # If object has a substitute speficied, use that tag enstead obj = obj.substitute or obj # Return object if freebase is not used if not st_settings.USE_FREEBASE: return obj # Try to find the name using freebase fb_name = retrieve_freebase_name(obj.name, obj.stype) try: # Try to retrieve the existing name given by freebase # in our database new_tag = self.get(name__iexact=fb_name) # Return the new tag or the new tags substitute return new_tag.substitute or new_tag except: # Simply return the obj if something went wrong return obj
def create_alternate(self, **kwargs): """ Alternate method for creating SuperTags while optionally using freebase to disambiguate the names """ # Retrieve the arguments used to create a new tag name = kwargs.get("name", None) stype = kwargs.get("stype", None) # Create and return the new tag if freebase is not used. if not (st_settings.USE_FREEBASE and name): return super(SuperTagManager, self).create(**kwargs) fb_name = retrieve_freebase_name(name, stype) try: new_tag = self.get(name__iexact=fb_name) return new_tag.substitute or new_tag except: kwargs["name"] = fb_name.lower() kwargs["slug"] = slugify(fb_name)[:50] return super(SuperTagManager, self).create(**kwargs)