Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
def get_meta(attr, path='/'):
    try:
        return getattr(get_metadata(path), attr).value
    except:
        return ''