コード例 #1
0
ファイル: resources.py プロジェクト: tiktuk/djangoembed
    def test_json_handling(self):
        resource = oembed.site.embed(self.category_url)

        json = resource.json
        another_resource = OEmbedResource.create_json(json)

        self.assertEqual(resource.get_data(), another_resource.get_data())
コード例 #2
0
ファイル: sites.py プロジェクト: hawkerpl/k2
def embed(self, url, **kwargs):
    """
    The heart of the matter
    """
    try:
        # first figure out the provider
        provider = self.provider_for_url(url)
    except OEmbedMissingEndpoint:
        raise
    else:
        try:
            # check the database for a cached response, because of certain
            # race conditions that exist with get_or_create(), do a filter
            # lookup and just grab the first item
            stored_match = StoredOEmbed.objects.filter(
                match=url, 
                maxwidth=kwargs.get('maxwidth', None), 
                maxheight=kwargs.get('maxheight', None),
                date_expires__gte=datetime.datetime.now())[0]
            return OEmbedResource.create_json(stored_match.response_json)
        except IndexError:
            # query the endpoint and cache response in db
            # prevent None from being passed in as a GET param
            params = dict([(k, v) for k, v in kwargs.items() if v])
            
            # request an oembed resource for the url
            resource = provider.request_resource(url, **params)
            
            try:
                cache_age = int(resource.cache_age)
                if cache_age < MIN_OEMBED_TTL:
                    cache_age = MIN_OEMBED_TTL
            except:
                cache_age = DEFAULT_OEMBED_TTL
            
            date_expires = datetime.datetime.now() + datetime.timedelta(seconds=cache_age)
            
            stored_oembed, created = StoredOEmbed.objects.get_or_create(
                match=url,
                maxwidth=kwargs.get('maxwidth', None),
                maxheight=kwargs.get('maxheight', None))
            
            stored_oembed.response_json = resource.json
            stored_oembed.resource_type = resource.type
            stored_oembed.thumbnail_url = resource.thumbnail_url
            stored_oembed.date_expires = date_expires
            
            if resource.content_object:
                stored_oembed.content_object = resource.content_object
            
            stored_oembed.save()
            return resource
コード例 #3
0
    def embed(self, url, **kwargs):
        """
        The heart of the matter
        """
        try:
            # first figure out the provider
            provider = self.provider_for_url(url)
        except OEmbedMissingEndpoint:
            raise
        else:
            try:
                # check the database for a cached response, because of certain
                # race conditions that exist with get_or_create(), do a filter
                # lookup and just grab the first item
                stored_match = StoredOEmbed.objects.filter(
                    match=url,
                    maxwidth=kwargs.get('maxwidth', None),
                    maxheight=kwargs.get('maxheight', None),
                    date_expires__gte=datetime.datetime.now())[0]
                return OEmbedResource.create_json(stored_match.response_json)
            except IndexError:
                # query the endpoint and cache response in db
                # prevent None from being passed in as a GET param
                params = dict([(k, v) for k, v in kwargs.items() if v])

                # request an oembed resource for the url
                resource = provider.request_resource(url, **params)

                try:
                    cache_age = int(resource.cache_age)
                    if cache_age < MIN_OEMBED_TTL:
                        cache_age = MIN_OEMBED_TTL
                except:
                    cache_age = DEFAULT_OEMBED_TTL

                date_expires = datetime.datetime.now() + datetime.timedelta(
                    seconds=cache_age)

                stored_oembed, created = StoredOEmbed.objects.get_or_create(
                    match=url,
                    maxwidth=kwargs.get('maxwidth', None),
                    maxheight=kwargs.get('maxheight', None))

                stored_oembed.response_json = resource.json
                stored_oembed.resource_type = resource.type
                stored_oembed.date_expires = date_expires

                if resource.content_object:
                    stored_oembed.content_object = resource.content_object

                stored_oembed.save()
                return resource