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)