def render(self, context): try: target = self.target.resolve(context) except VariableDoesNotExist: msg = ( u"{% get_metadata %} needs some path information.\n" u"Please use RequestContext with the django.core.context_processors.request context processor.\n" "Or provide a path or object explicitly, eg {% get_metadata for path %} or {% get_metadata for object %}" ) raise template.TemplateSyntaxError(msg) else: if callable(target): target = target() if isinstance(target, basestring): path = target elif hasattr(target, 'get_absolute_url'): path = target.get_absolute_url() elif hasattr(target, "__iter__") and 'get_absolute_url' in target: path = target['get_absolute_url']() else: path = None kwargs = {} # If a site is given, pass that on if self.site: kwargs['site'] = self.site.resolve(context) # If a language is given, pass that on if self.language: kwargs['language'] = self.language.resolve(context) metadata = None # If the target is a django model object if hasattr(target, 'pk'): metadata = get_linked_metadata(target, self.metadata_name, context, **kwargs) if not isinstance(path, basestring): path = None if not metadata: # Fetch the metadata try: metadata = get_metadata(path, self.metadata_name, context, **kwargs) except Exception as e: raise template.TemplateSyntaxError(e) # If a variable name is given, store the result there if self.variable_name is not None: context[self.variable_name] = metadata return "" else: return unicode(metadata)
def render(self, context): try: target = self.target.resolve(context) except VariableDoesNotExist: msg = (u"{% get_metadata %} needs some path information.\n" u"Please use RequestContext with the django.core.context_processors.request context processor.\n" "Or provide a path or object explicitly, eg {% get_metadata for path %} or {% get_metadata for object %}") raise template.TemplateSyntaxError(msg) else: if callable(target): target = target() if isinstance(target, basestring): path = target elif hasattr(target, 'get_absolute_url'): path = target.get_absolute_url() elif hasattr(target, "__iter__") and 'get_absolute_url' in target: path = target['get_absolute_url']() else: path = None kwargs = {} # If a site is given, pass that on if self.site: kwargs['site'] = self.site.resolve(context) # If a language is given, pass that on if self.language: kwargs['language'] = self.language.resolve(context) metadata = None # If the target is a django model object if hasattr(target, 'pk'): metadata = get_linked_metadata(target, self.metadata_name, context, **kwargs) if not isinstance(path, basestring): path = None if not metadata: # Fetch the metadata try: metadata = get_metadata(path, self.metadata_name, context, **kwargs) except Exception, e: raise template.TemplateSyntaxError(e)
def post_comment_to_facebook(request, user, comment): # TODO factor this stuff out into an opengraph/facebook app social_auth = user.social_auth.get(provider="facebook") url = "https://graph.facebook.com/me/{ns}:comment_on".format( ns=settings.FACEBOOK_NAMESPACE, ) object_url = comment.content_object.get_absolute_url() object_type = get_metadata(object_url).og_type.value if object_type is None: raise AttributeError("Unable to find og:type from URL %s" % object_url) # Remove namespace, if any if ":" in object_type: unused, object_type = object_type.split(":", 1) data = { "access_token": ACCESS_TOKEN or social_auth.extra_data["access_token"], object_type: "http://{host}{path}".format( host=request.get_host(), path=object_url, ), "fb:explicitly_shared": True, "message": comment.comment, } resp = requests.post(url, data) resp_data = resp.json if resp.status_code != requests.codes.ok: e = FacebookErrorMessage( "%s: %s" % (resp_data["error"]["type"], resp_data["error"]["message"])) e.response = resp raise e if "id" in resp_data: return resp_data["id"] raise requests.exceptions.HTTPError("Unknown data: %s" % resp_data)
def get_meta(attr, path='/'): try: return getattr(get_metadata(path), attr).value except: return ''