Пример #1
0
 def test_old_truncate_words(self):
     self.assertEqual(u'The quick brown fox jumped over the lazy dog.',
         text.truncate_words(u'The quick brown fox jumped over the lazy dog.', 10))
     self.assertEqual(u'The quick brown fox ...',
         text.truncate_words('The quick brown fox jumped over the lazy dog.', 4))
     self.assertEqual(u'The quick brown fox ....',
         text.truncate_words('The quick brown fox jumped over the lazy dog.', 4, '....'))
Пример #2
0
 def test_truncate_words(self):
     self.assertEqual(u'The quick brown fox jumped over the lazy dog.',
         text.truncate_words(u'The quick brown fox jumped over the lazy dog.', 10))
     self.assertEqual(u'The quick brown fox ...',
         text.truncate_words('The quick brown fox jumped over the lazy dog.', 4))
     self.assertEqual(u'The quick brown fox ....',
         text.truncate_words('The quick brown fox jumped over the lazy dog.', 4, '....'))
Пример #3
0
def prepare_json_list(pins):
	"""
	Return list of dictionaries describing pins. This should be used when returning pins in JSON.
	"""
	pin_list = []
	for p in pins:
		if hasattr(p, 'is_advertisment'):
			data = {'content': p.get_advertisment()}
		else:
			try:
				image = get_thumbnail(p.get_image(), '266', crop='center')
				im = {'url': image.url, 'width': image.width, 'height': image.height}
			except ThumbnailError:
				continue
			comments = []
			for c in p.comments:
				if c.user:
					try:
						c_image = get_thumbnail(c.user.get_profile().image, '30x30', crop='center')
						c_im = {'url': c_image.url, 'width': c_image.width, 'height': c_image.height}
					except ThumbnailError:
						continue
				comments.append({'im': c_im,'comment': truncate_words(c.comment, 5)})
			data = {'pk': p.pk, 'absolute_url': p.get_absolute_url(),'popup_url': p.get_popup_url(), 'number_of_repins': p.get_number_of_repins(), 
			'number_of_likes': p.get_number_of_likes(), 'thumbnail': im ,
				'description': truncate_words(p.description, 15), 'comments': comments}
		pin_list.append(data)

	return pin_list
Пример #4
0
def get_latest_media(limit=5):
    from photologue.models import Photo
    from maitreya_van.multimedia.models import EmbeddedVideo
    # TODO: FIx this - find songs as well
    photos = Photo.objects.order_by('-date_added')[:limit]
    videos = EmbeddedVideo.objects.order_by('-timestamp')[:limit]
    media = []
    word_lim = 4
    for photo in photos:
        media.append({
            'type': 'Photo',
            'title': truncate_words(photo.title, word_lim),
            'url': reverse('pl-photo', kwargs={'slug': photo.title_slug}),
            'timestamp': photo.date_added
        })

    for vid in videos:
        media.append({
            'type': 'Video',
            'title': truncate_words(vid.title, word_lim),
            'url': reverse('video_detail', kwargs={'slug':vid.slug}),
            'timestamp': vid.timestamp,
        })

    media = sorted(media, key=lambda m: m['timestamp'], reverse=True)
    return media[:limit]
Пример #5
0
 def test_truncate_words(self):
     self.assertEqual(
         u'The quick brown fox jumped over the lazy dog.',
         text.truncate_words(
             u'The quick brown fox jumped over the lazy dog.', 10))
     self.assertEqual(
         u'The quick brown fox ...',
         text.truncate_words(
             'The quick brown fox jumped over the lazy dog.', 4))
     self.assertEqual(
         u'The quick brown fox ....',
         text.truncate_words(
             'The quick brown fox jumped over the lazy dog.', 4, '....'))
     self.assertEqual(
         u'<p><strong><em>The quick brown fox jumped over the lazy dog.</em></strong></p>',
         text.truncate_html_words(
             '<p><strong><em>The quick brown fox jumped over the lazy dog.</em></strong></p>',
             10))
     self.assertEqual(
         u'<p><strong><em>The quick brown fox ...</em></strong></p>',
         text.truncate_html_words(
             '<p><strong><em>The quick brown fox jumped over the lazy dog.</em></strong></p>',
             4))
     self.assertEqual(
         u'<p><strong><em>The quick brown fox ....</em></strong></p>',
         text.truncate_html_words(
             '<p><strong><em>The quick brown fox jumped over the lazy dog.</em></strong></p>',
             4, '....'))
     self.assertEqual(
         u'<p><strong><em>The quick brown fox</em></strong></p>',
         text.truncate_html_words(
             '<p><strong><em>The quick brown fox jumped over the lazy dog.</em></strong></p>',
             4, None))
Пример #6
0
 def test_old_truncate_words(self):
     with warnings.catch_warnings(record=True) as w:
         self.assertEqual(u'The quick brown fox jumped over the lazy dog.',
             text.truncate_words(u'The quick brown fox jumped over the lazy dog.', 10))
         self.assertEqual(u'The quick brown fox ...',
             text.truncate_words('The quick brown fox jumped over the lazy dog.', 4))
         self.assertEqual(u'The quick brown fox ....',
             text.truncate_words('The quick brown fox jumped over the lazy dog.', 4, '....'))
         self.assertEqual(len(w), 3)
Пример #7
0
Файл: text.py Проект: pvl/django
 def test_old_truncate_words(self):
     with warnings.catch_warnings(record=True) as w:
         warnings.simplefilter("always")
         self.assertEqual(u'The quick brown fox jumped over the lazy dog.',
             text.truncate_words(u'The quick brown fox jumped over the lazy dog.', 10))
         self.assertEqual(u'The quick brown fox ...',
             text.truncate_words('The quick brown fox jumped over the lazy dog.', 4))
         self.assertEqual(u'The quick brown fox ....',
             text.truncate_words('The quick brown fox jumped over the lazy dog.', 4, '....'))
         self.assertGreater(len(w), 0)
Пример #8
0
 def test_old_truncate_words(self):
     with warnings.catch_warnings(record=True) as w:
         warnings.simplefilter("always")
         self.assertEqual('The quick brown fox jumped over the lazy dog.',
             text.truncate_words('The quick brown fox jumped over the lazy dog.', 10))
         self.assertEqual('The quick brown fox ...',
             text.truncate_words('The quick brown fox jumped over the lazy dog.', 4))
         self.assertEqual('The quick brown fox ....',
             text.truncate_words('The quick brown fox jumped over the lazy dog.', 4, '....'))
         self.assertGreater(len(w), 0)
Пример #9
0
 def test_truncate_words(self):
     self.assertEqual(
         u"The quick brown fox jumped over the lazy dog.",
         text.truncate_words(u"The quick brown fox jumped over the lazy dog.", 10),
     )
     self.assertEqual(
         u"The quick brown fox ...", text.truncate_words("The quick brown fox jumped over the lazy dog.", 4)
     )
     self.assertEqual(
         u"The quick brown fox ....", text.truncate_words("The quick brown fox jumped over the lazy dog.", 4, "....")
     )
Пример #10
0
def prepare_json_list(pins):
    """
	Return list of dictionaries describing pins. This should be used when returning pins in JSON.
	"""
    pin_list = []
    for p in pins:
        if hasattr(p, 'is_advertisment'):
            data = {'content': p.get_advertisment()}
        else:
            try:
                image = get_thumbnail(p.get_image(), '266', crop='center')
                im = {
                    'url': image.url,
                    'width': image.width,
                    'height': image.height
                }
            except ThumbnailError:
                continue
            comments = []
            for c in p.comments:
                if c.user:
                    try:
                        c_image = get_thumbnail(c.user.get_profile().image,
                                                '30x30',
                                                crop='center')
                        c_im = {
                            'url': c_image.url,
                            'width': c_image.width,
                            'height': c_image.height
                        }
                    except ThumbnailError:
                        continue
                comments.append({
                    'im': c_im,
                    'comment': truncate_words(c.comment, 5)
                })
            data = {
                'pk': p.pk,
                'absolute_url': p.get_absolute_url(),
                'popup_url': p.get_popup_url(),
                'number_of_repins': p.get_number_of_repins(),
                'number_of_likes': p.get_number_of_likes(),
                'thumbnail': im,
                'description': truncate_words(p.description, 15),
                'comments': comments
            }
        pin_list.append(data)

    return pin_list
Пример #11
0
 def test_truncate_words(self):
     self.assertEqual(u'The quick brown fox jumped over the lazy dog.',
         text.truncate_words(u'The quick brown fox jumped over the lazy dog.', 10))
     self.assertEqual(u'The quick brown fox ...',
         text.truncate_words('The quick brown fox jumped over the lazy dog.', 4))
     self.assertEqual(u'The quick brown fox ....',
         text.truncate_words('The quick brown fox jumped over the lazy dog.', 4, '....'))
     self.assertEqual(u'<p><strong><em>The quick brown fox jumped over the lazy dog.</em></strong></p>',
         text.truncate_html_words('<p><strong><em>The quick brown fox jumped over the lazy dog.</em></strong></p>', 10))
     self.assertEqual(u'<p><strong><em>The quick brown fox ...</em></strong></p>',
         text.truncate_html_words('<p><strong><em>The quick brown fox jumped over the lazy dog.</em></strong></p>', 4))
     self.assertEqual(u'<p><strong><em>The quick brown fox ....</em></strong></p>',
         text.truncate_html_words('<p><strong><em>The quick brown fox jumped over the lazy dog.</em></strong></p>', 4, '....'))
     self.assertEqual(u'<p><strong><em>The quick brown fox</em></strong></p>',
         text.truncate_html_words('<p><strong><em>The quick brown fox jumped over the lazy dog.</em></strong></p>', 4, None))
Пример #12
0
def new_post(blog_id, username, password, post, publish):
    """metaWeblog.newPost(blog_id, username, password, post, publish)
    => post_id"""
    user = authenticate(username, password, 'zinnia.add_entry')
    if post.get('dateCreated'):
        creation_date = datetime.strptime(post['dateCreated'].value.replace('Z', '').replace('-', ''),
                                          '%Y%m%dT%H:%M:%S')
    else:
        creation_date = datetime.now()

    entry_dict = {'title': post['title'],
                  'content': post['description'],
                  'excerpt': post.get('mt_excerpt', truncate_words(strip_tags(post['description']), 50)),
                  'creation_date': creation_date,
                  'last_update': creation_date,
                  'comment_enabled': post.get('mt_allow_comments', 1) == 1,
                  'pingback_enabled': post.get('mt_allow_pings', 1) == 1,
                  'tags': post.has_key('mt_keywords') and post['mt_keywords'] or '',
                  'slug': post.has_key('wp_slug') and post['wp_slug'] or slugify(post['title']),
                  'status': publish and PUBLISHED or DRAFT}
    entry = Entry.objects.create(**entry_dict)

    author = user
    if post.has_key('wp_author_id') and user.has_perm('zinnia.can_change_author'):
        if int(post['wp_author_id']) != user.pk:
            author = User.objects.get(pk=post['wp_author_id'])
    entry.authors.add(author)

    entry.sites.add(Site.objects.get_current())
    if post.has_key('categories'):
        entry.categories.add(*[Category.objects.get_or_create(title=cat, slug=slugify(cat))[0]
                               for cat in post['categories']])

    return entry.pk
Пример #13
0
 def get_short_message(self, words=8):
     """
     Trims message to the specified number of words.
     
     Good for use in the admin.
     """
     return truncate_words(strip_tags(self.message), words)
Пример #14
0
    def get_description(self):
        object = self.object

        ### Assign variables -----------------------
        site_name = get_setting('site', 'global', 'sitedisplayname')
        geo_location = get_setting('site', 'global', 'sitegeographiclocation')

        if object.description:
            content = object.description

        content = strip_tags(content)  #strips HTML tags
        content = unescape_entities(content)
        content = content.replace("\n", "").replace("\r", "")
        content = truncate_words(content, 50)  # ~ about 250 chars

        ### Build string -----------------------
        value = object.name

        value = '%s : %s' % (value, content)

        value = '%s Photo Sets for %s, %s' % (value, site_name, geo_location)

        value = value.strip()

        return value
Пример #15
0
    def render(self, context, instance, placeholder):
        request = context.get("request", None)
        if context.has_key("request"):
            lang = get_language_from_request(request)
        else:
            lang = settings.LANGUAGE_CODE

        # Get all FaqEntryPlugins on this page and in this language
        plugins = get_cmsplugin_queryset(request).filter(
            plugin_type="CMSFaqEntryPlugin",
            placeholder__page=instance.page,
            language=lang,
            placeholder__slot__iexact=placeholder,
            parent__isnull=True
        ).order_by("position").select_related()

        faqentry_plugins = []

        # Make a list of the FaqEntry plugin objects
        for plugin in plugins:
            # Truncate the entry's body
            if instance.truncate_body:
                plugin.faqentry.body = truncate_words(plugin.faqentry.body, instance.truncate_body)
            # Show the entry's body or not
            if not instance.show_body:
                plugin.faqentry.body = ''
            faqentry_plugins.append(plugin.faqentry)

        context.update({
            "faq_list": faqentry_plugins,
            "css": instance.get_css_display(),
            "placeholder": placeholder,
        })
        return context
Пример #16
0
def film_description(context, film, words=None, edit=False):
    short = False
    if film.description:
        descr = unicode(strip_tags(film.description))
    else:
        if film.is_tv_series:
            descr = gettext("Unfortunately, this tv series does not have a description, yet.")
        else:
            descr = gettext("Unfortunately, this film does not have a description, yet.")
    if (not film.description) and film.imdb_code:
        imdb_address = "http://imdb.com/title/tt" + str(film.imdb_code) + "/"
        descr += _("\nYou can try ") + \
                "<a href=\"" + imdb_address + "\">IMDB</a>."
    if words:
        description = unicode(truncate_words(descr, words))
        short = True
    else:
        description = descr
    return {
        'film':film,
        'edit':edit,
        'can_edit': context['request'].user.is_authenticated(),
        'description':description,
        'short': short
    }
Пример #17
0
 def func(obj):
     f = getattr(obj, field.name)
     url_name = 'admin:%s_%s_change' % (f._meta.app_label,
                                        f._meta.module_name)
     url = urlresolvers.reverse(url_name, args=(f.pk, ))
     name = escape(truncate_words(unicode(f), 10))
     return u'<a href="%s">%s</a>' % (url, name)
Пример #18
0
 def label_for_value(self, value):
     key = self.rel.get_related_field().name
     obj = self.rel.to._default_manager.get(**{key: value})
     if django.get_version() >= "1.4":
         return Truncator(obj).words(14, truncate='...')
     else:
         return truncate_words(obj, 14)
Пример #19
0
 def label_for_value(self, value):
     key = self.rel.get_related_field().name
     try:
         obj = self.rel.to._default_manager.get(**{key: value})
     except (ValueError, self.rel.to.DoesNotExist):
         return ''
     return truncate_words(obj, 14)
Пример #20
0
def edit_post(post_id, username, password, post, publish):
    """metaWeblog.editPost(post_id, username, password, post, publish)
    => boolean"""
    user = authenticate(username, password, 'zinnia.change_entry')
    entry = Entry.objects.get(id=post_id, authors=user)
    if post.get('dateCreated'):
        creation_date = datetime.strptime(post['dateCreated'].value.replace('Z', '').replace('-', ''),
                                          '%Y%m%dT%H:%M:%S')
    else:
        creation_date = entry.creation_date

    entry.title = post['title']
    entry.content = post['description']
    entry.excerpt = post.get('mt_excerpt', truncate_words(strip_tags(post['description']), 50))
    entry.creation_date = creation_date
    entry.last_update = datetime.now()
    entry.comment_enabled = post.get('mt_allow_comments', 1) == 1
    entry.pingback_enabled = post.get('mt_allow_pings', 1) == 1
    entry.tags = post.has_key('mt_keywords') and post['mt_keywords'] or ''
    entry.slug = post.has_key('wp_slug') and post['wp_slug'] or slugify(post['title'])
    entry.status = publish and PUBLISHED or DRAFT
    entry.save()

    if post.has_key('wp_author_id') and user.has_perm('zinnia.can_change_author'):
        if int(post['wp_author_id']) != user.pk:
            author = User.objects.get(pk=post['wp_author_id'])
            entry.authors.clear()
            entry.authors.add(author)

    if post.has_key('categories'):
        entry.categories.clear()
        entry.categories.add(*[Category.objects.get_or_create(title=cat, slug=slugify(cat))[0]
                               for cat in post['categories']])
    return True
Пример #21
0
    def render(self, context, instance, placeholder):

        #get all FaqEntryPlugins on this page and in this language
        language = context.get('lang', settings.LANGUAGE_CODE)
        # plugins = instance.page.cmsplugin_set.filter(plugin_type='CMSFaqEntryPlugin', language=language)
        # fix for django-cms 2.1.3; instance has no "cmsplugin_set" property
        plugins = FaqEntry.objects.filter(plugin_type='CMSFaqEntryPlugin',
                                          language=language,
                                          placeholder__page=instance.page)

        faqentry_plugins = []

        #make a list of the faqentry plugin objects
        for plugin in plugins:
            #truncate the entry's body
            if instance.truncate_body:
                plugin.faqentry.body = truncate_words(plugin.faqentry.body,
                                                      instance.truncate_body)
            #show the entry's body or not
            if not instance.show_body:
                plugin.faqentry.body = ''
            faqentry_plugins.append(plugin.faqentry)

        context.update({
            'faq_list': faqentry_plugins,
            'css': instance.get_css_display(),
            'placeholder': placeholder,
        })
        return context
Пример #22
0
def film_description(context, film, words=None, edit=False):
    short = False
    if film.description:
        descr = unicode(strip_tags(film.description))
    else:
        if film.is_tv_series:
            descr = gettext(
                "Unfortunately, this tv series does not have a description, yet."
            )
        else:
            descr = gettext(
                "Unfortunately, this film does not have a description, yet.")
    if (not film.description) and film.imdb_code:
        imdb_address = "http://imdb.com/title/tt" + str(film.imdb_code) + "/"
        descr += _("\nYou can try ") + \
                "<a href=\"" + imdb_address + "\">IMDB</a>."
    if words:
        description = unicode(truncate_words(descr, words))
        short = True
    else:
        description = descr
    return {
        'film': film,
        'edit': edit,
        'can_edit': context['request'].user.is_authenticated(),
        'description': description,
        'short': short
    }
Пример #23
0
    def get_description(self):
        object = self.object

        ### Assign variables -----------------------
        site_name = get_setting('site','global','sitedisplayname')
        geo_location = get_setting('site','global','sitegeographiclocation')

        if object.description:
            content = object.description

        content = strip_tags(content) #strips HTML tags
        content = unescape_entities(content)
        content = content.replace("\n","").replace("\r","")
        content = truncate_words(content, 50) # ~ about 250 chars

        ### Build string -----------------------
        value = object.name

        value = '%s : %s' % (value, content)

        value = '%s Photo Sets for %s, %s' % (
            value, site_name, geo_location)

        value = value.strip()

        return value
Пример #24
0
 def func(obj):
     f = getattr(obj, field.name)
     url_name = 'admin:%s_%s_change' % (f._meta.app_label,
                                        f._meta.module_name)
     url = urlresolvers.reverse(url_name, args=(f.pk,))
     name = escape(truncate_words(unicode(f), 10))
     return u'<a href="%s">%s</a>' % (url, name)
Пример #25
0
 def label_for_value(self, value):
     key = self.rel.get_related_field().name
     try:
         obj = self.rel.to._default_manager.using(self.db).get(**{key: value})
         return '&nbsp;<strong>%s</strong>' % escape(truncate_words(obj, 14))
     except (ValueError, self.rel.to.DoesNotExist):
         return ''
Пример #26
0
def auto_post(request):

    # GraphAPI is the main class from facebook_sdp.py
    graph = facebook_sdk.GraphAPI(settings.FACEBOOK_PAGE_TOKEN)

    articles = ArticleDetails.objects.order_by('?')[:1]

    for article in articles:

        message = article.header.topic.name.encode(
            'utf-8'
        ) + " - " + article.header.name.encode(
            'utf-8'
        ) + "\n--------------------------------\n" + escape(
            truncate_words(article.summary.raw, 10)
        ).encode(
            'utf-8'
        ) + "\n\n  اضغط على الرابط أدناه لقراءة المادة كاملة ولإبداء رأيك فيها"

        attachment = {}
        attachment['name'] = article.header.topic.name.encode(
            'utf-8') + " - " + article.header.name.encode('utf-8')
        attachment[
            'link'] = settings.domain + "topics/" + article.header.topic.slug + "/" + article.slug + "/"
        attachment['description'] = article.summary.raw.encode('utf-8')
        attachment[
            'picture'] = "http://dostour.eg/sharek/static/images/facebook.png"

        graph.put_wall_post(message, attachment, settings.FACEBOOK_PAGE_ID)

    return HttpResponse(attachment['name'])
Пример #27
0
    def handle(self, *args, **options):

        images = ArticleImage.objects.all()
        for image in images:
            image.slug = SlugifyUniquely(truncate_words(image.caption, 4),
                                         ArticleImage)
            image.save()
Пример #28
0
 def label_for_value(self, value):
     key = self.rel.get_related_field().name
     obj = self.rel.to._default_manager.get(**{key: value})
     if django.get_version() >= "1.4":
         return Truncator(obj).words(14, truncate='...')
     else:
         return truncate_words(obj, 14)
Пример #29
0
    def render(self, context, instance, placeholder):

        #get all FaqEntryPlugins on this page and in this language
        language = context.get('lang', settings.LANGUAGE_CODE)
        # plugins = instance.page.cmsplugin_set.filter(plugin_type='CMSFaqEntryPlugin', language=language)
        # fix for django-cms 2.1.3; instance has no "cmsplugin_set" property
        plugins = FaqEntry.objects.filter(plugin_type='CMSFaqEntryPlugin', language=language, placeholder__page=instance.page)

        faqentry_plugins = []

        #make a list of the faqentry plugin objects
        for plugin in plugins:
            #truncate the entry's body
            if instance.truncate_body:
                plugin.faqentry.body = truncate_words(plugin.faqentry.body, instance.truncate_body)
            #show the entry's body or not
            if not instance.show_body:
                plugin.faqentry.body = ''
            faqentry_plugins.append(plugin.faqentry)

        context.update({
            'faq_list': faqentry_plugins,
            'css': instance.get_css_display(),
            'placeholder': placeholder,
        })
        return context
Пример #30
0
 def label_for_value(self, value):
     key = self.rel.get_related_field().name
     try:
         obj = self.rel.to._default_manager.using(self.db).get(**{key: value})
         return '&nbsp;<strong>%s</strong>' % escape(truncate_words(obj, 14))
     except (ValueError, self.rel.to.DoesNotExist):
         return ''
Пример #31
0
    def render(self, context, instance, placeholder):
        request = context.get("request", None)
        if context.has_key("request"):
            lang = get_language_from_request(request)
        else:
            lang = settings.LANGUAGE_CODE

        # Get all FaqEntryPlugins on this page and in this language
        plugins = get_cmsplugin_queryset(request).filter(
            plugin_type="CMSFaqEntryPlugin",
            placeholder__page=instance.page,
            language=lang,
            placeholder__slot__iexact=placeholder,
            parent__isnull=True).order_by("position").select_related()

        faqentry_plugins = []

        # Make a list of the FaqEntry plugin objects
        for plugin in plugins:
            # Truncate the entry's body
            if instance.truncate_body:
                plugin.faqentry.body = truncate_words(plugin.faqentry.body,
                                                      instance.truncate_body)
            # Show the entry's body or not
            if not instance.show_body:
                plugin.faqentry.body = ''
            faqentry_plugins.append(plugin.faqentry)

        context.update({
            "faq_list": faqentry_plugins,
            "css": instance.get_css_display(),
            "placeholder": placeholder,
        })
        return context
 def label_for_value(self, value):
     from django.utils.text import truncate_words
     key = self.rel.get_related_field().name
     obj = self.rel.to._default_manager.get(**{key: value})
     if hasattr(obj, 'ajax_str') and callable(obj.ajax_str):
         obj = obj.ajax_str()
     return truncate_words(obj, 14)
Пример #33
0
    def render(self, context):
        title = self.vars[0].var

        if title.find("'") == -1 and title.find('"') == -1:
            try:
                val = self.vars[0]
                title = val.resolve(context)
            except:
                title = ''

        else:
            title = title.strip("'").strip('"')
            title = smart_unicode(title)

        url = None

        title = truncate_words(title, 6)

        if len(self.vars) > 1:
            val = self.vars[1]
            try:
                url = val.resolve(context)
            except VariableDoesNotExist:
                print 'URL does not exist', val
                url = None

        return create_crumb(title, url)
Пример #34
0
def fetch_data_from_url(url, content):
    data = {"url": url}
    try:
        readable = Readability(url, content)
        data["title"] = reduce_whitespace(unescape_entities(readable.get_article_title()))
        # Try to get abstract from meta description:
        abstract = reduce_whitespace(unescape_entities(strip_tags(readable.get_meta_description()).strip()))
        if not abstract:
            abstract = reduce_whitespace(unescape_entities(strip_tags(readable.get_article_text()).strip()))
        abstract = truncate_words(abstract, 200)
        data["abstract"] = abstract
    except ReadabilityException:
        pass

    if VIDEO_URL_RE.search(url):
        data["media_formats"] = MediaFormat.objects.filter(name="Video")

    urls = URL_RE.findall(content)
    OLD_CC_LICENCES = [l[0] for l in CC_OLD_LICENSES[1:]]

    for url in urls:
        if CC_LICENSE_URL_RE.match(url):
            url = url.lower()
            if url in OLD_CC_LICENCES:
                data["license_type"] = "cc-old"
                data["license_cc_old"] = url
            else:
                data["license_type"] = "cc"
                data["license_cc"] = url

    return data
Пример #35
0
 def label_for_value(self, value):
     key = self.rel.get_related_field().name
     try:
         obj = self.rel.to._default_manager.get(**{key: value})
     except (ValueError, self.rel.to.DoesNotExist):
         return ''
     return truncate_words(obj, 14)
Пример #36
0
    def render(self, context):
        title = self.vars[0].var

        if title.find("'")==-1 and title.find('"')==-1:
            try:
                val = self.vars[0]
                title = val.resolve(context)
            except:
                title = ''

        else:
            title=title.strip("'").strip('"')
            title=smart_unicode(title)

        url = None

        title = truncate_words(title, 6)


        if len(self.vars)>1:
            val = self.vars[1]
            try:
                url = val.resolve(context)
            except VariableDoesNotExist:
                print 'URL does not exist', val
                url = None

        return create_crumb(title, url)
Пример #37
0
    def import_entries(self, feed_entries):
        """Import entries"""
        for feed_entry in feed_entries:
            self.write_out('> %s... ' % feed_entry.title)
            creation_date = datetime(*feed_entry.date_parsed[:6])
            slug = slugify(feed_entry.title)[:255]

            if Entry.objects.filter(creation_date__year=creation_date.year,
                                    creation_date__month=creation_date.month,
                                    creation_date__day=creation_date.day,
                                    slug=slug):
                self.write_out(self.style.NOTICE(
                    'SKIPPED (already imported)\n'))
                continue

            categories = self.import_categories(feed_entry)
            entry_dict = {'title': feed_entry.title[:255],
                          'content': feed_entry.description,
                          'excerpt': feed_entry.get('summary'),
                          'status': PUBLISHED,
                          'creation_date': creation_date,
                          'start_publication': creation_date,
                          'last_update': datetime.now(),
                          'slug': slug}

            if not entry_dict['excerpt'] and self.auto_excerpt:
                entry_dict['excerpt'] = truncate_words(
                    strip_tags(feed_entry.description), 50)
            if self.tags:
                entry_dict['tags'] = self.import_tags(categories)

            entry = Entry(**entry_dict)
            entry.save()
            entry.categories.add(*categories)
            entry.sites.add(self.SITE)

            if self.image_enclosure:
                for enclosure in feed_entry.enclosures:
                    if 'image' in enclosure.get('type') \
                           and enclosure.get('href'):
                        img_tmp = NamedTemporaryFile(delete=True)
                        img_tmp.write(urlopen(enclosure['href']).read())
                        img_tmp.flush()
                        entry.image.save(slug, File(img_tmp))
                        break

            if self.default_author:
                entry.authors.add(self.default_author)
            elif feed_entry.get('author_detail'):
                try:
                    user = User.objects.create_user(
                        slugify(feed_entry.author_detail.get('name')),
                        feed_entry.author_detail.get('email', ''))
                except IntegrityError:
                    user = User.objects.get(
                        username=slugify(feed_entry.author_detail.get('name')))
                entry.authors.add(user)

            self.write_out(self.style.ITEM('OK\n'))
Пример #38
0
	def _get_jqw_value(self, value):
		# GUARD: No value?
		if value in (None, u''):
			return ''

		key = self.rel.get_related_field().name
		obj = self.rel.to._default_manager.get(**{key: value})
		return truncate_words(obj, 14)
Пример #39
0
 def handle(self, *args, **options):
     
     
     
     images = ArticleImage.objects.all()
     for image in images:
         image.slug = SlugifyUniquely(truncate_words(image.caption, 4), ArticleImage)
         image.save()
Пример #40
0
 def __unicode__(self):
     """ String representation of asset """
     if self.title:
         return self.title
     elif self.body:
         return truncate_words(strip_tags(mark_safe(self.body)), 4)
     else:
         return 'Asset %s' % self.asset_id
Пример #41
0
	def _get_jqw_value(self, value):
		# GUARD: No value?
		if value in (None, u''):
			return ''

		key = self.rel.get_related_field().name
		obj = self.rel.to._default_manager.get(**{key: value})
		return truncate_words(obj, 14)
Пример #42
0
    def get_description(self):
        # TODO: Optimize this SEM algorithm
        description = self.object.description

        description = strip_tags(description)
        description = strip_entities(description)
        description = truncate_words(description, 40, "")
        return description
Пример #43
0
 def label_for_value(self, value):
     obj = self._get_obj(value)
     obj_url = '/%s/%s/%s/' % (self.rel.to._meta.app_label,
                               self.rel.to._meta.object_name.lower(),
                               obj.pk)
     label = truncate_words(obj, 14)
     return '&nbsp;<a class="js-hashadr" href="%s">%s</a>' % (obj_url,
                                                              label)
Пример #44
0
Файл: admin.py Проект: bward/syo
 def save_model(self, request, obj, form, change):
     obj.user = request.user
     obj.save()
     if obj.facebook and not change:
         graph = facebook.GraphAPI(get_page_access_token(request, settings.FACEBOOK_PAGE_ID))
         graph.put_object('me', 'feed', link='http://www.sheffieldyouthorchestra.org' + obj.get_absolute_url(),
                                         name=obj.title,
                                         message=text.truncate_words(obj.content, 30))
Пример #45
0
    def teaser(self):
        if self.description:
            return self.description

        if self.cleaned_text:
            return truncate_words(striptags(self.cleaned_text), 50)

        return u'None available.'
Пример #46
0
def abstract(value):
    """ Tries to extract the first paragraph of an html string. """

    match = re.search(r"<p>(.+?)</p>", value, re.IGNORECASE | re.DOTALL)
    if match:
        return strip_tags(match.group(1))
    else:
        return truncate_words(strip_tags(value), 40, "...")
Пример #47
0
    def get_description(self):
        # TODO: Optimize this SEM algorithm
        description = self.object.description

        description = strip_tags(description)
        description = strip_entities(description)
        description = truncate_words(description, 40, '')
        return description
Пример #48
0
 def get_refusal_reason_choices(self):
     not_applicable = [(_("Law not applicable"), _("No law can be applied"))]
     if self.meta:
         return not_applicable +\
                 [(l[0], "%s: %s" % (law.name, l[1])) for law in self.combined.all()
                      for l in law.get_refusal_reason_choices()[1:]]
     else:
         return not_applicable + \
             [(x, truncate_words(x, 12)) for x in self.refusal_reasons.splitlines()]
Пример #49
0
	def _get_jqw_value(self, value):
		# GUARD: No value?
		if value in (None, u''):
			return ''

		label = unicode(value)
		for v, l in self.choices:
			if value == v:
				label = l
		return truncate_words(label, 14)
Пример #50
0
def truncatewords(value, length):
    # Jinja2 has it's own ``truncate`` filter that supports word
    # boundaries and more stuff, but cannot deal with HTML.
    try:
        from django.utils.text import Truncator
    except ImportError:
        from django.utils.text import truncate_words  # Django < 1.6
    else:
        truncate_words = lambda value, length: Truncator(value).words(length)
    return truncate_words(value, int(length))
Пример #51
0
 def dotlan_location(self):
     if str(self.location) == str(self.locationID):
         try:
             loc = CelestialObject.objects.get(itemID=self.locationID)
             location_name = loc.itemName
         except CelestialObject.DoesNotExist:
             location_name = self.location
     else:
         location_name = self.location
     url = self.DOTLAN_SEARCH_URL + '?' + urllib.urlencode({'q': location_name})
     return self.DOTLAN_LINK % (url, truncate_words(location_name, 6))
Пример #52
0
def new_post(blog_id, username, password, post, publish):
    """metaWeblog.newPost(blog_id, username, password, post, publish)
    => post_id"""
    user = authenticate(username, password, 'gstudio.add_nodetype')
    if post.get('dateCreated'):
        creation_date = datetime.strptime(
            post['dateCreated'].value.replace('Z', '').replace('-', ''),
            '%Y%m%dT%H:%M:%S')
    else:
        creation_date = datetime.now()

    nodetype_dict = {
        'title':
        post['title'],
        'content':
        post['description'],
        'excerpt':
        post.get('mt_excerpt',
                 truncate_words(strip_tags(post['description']), 50)),
        'creation_date':
        creation_date,
        'last_update':
        creation_date,
        'comment_enabled':
        post.get('mt_allow_comments', 1) == 1,
        'pingback_enabled':
        post.get('mt_allow_pings', 1) == 1,
        'featured':
        post.get('sticky', 0) == 1,
        'tags':
        'mt_keywords' in post and post['mt_keywords'] or '',
        'slug':
        'wp_slug' in post and post['wp_slug'] or slugify(post['title']),
        'password':
        post.get('wp_password', ''),
        'status':
        publish and PUBLISHED or DRAFT
    }
    nodetype = Nodetype.objects.create(**nodetype_dict)

    author = user
    if 'wp_author_id' in post and user.has_perm('gstudio.can_change_author'):
        if int(post['wp_author_id']) != user.pk:
            author = User.objects.get(pk=post['wp_author_id'])
    nodetype.authors.add(author)

    nodetype.sites.add(Site.objects.get_current())
    if 'metatypes' in post:
        nodetype.metatypes.add(*[
            Metatype.objects.get_or_create(title=cat, slug=slugify(cat))[0]
            for cat in post['metatypes']
        ])

    return nodetype.pk
Пример #53
0
def add_story_comment(request, story):
    # TODO check if comment is authorized on this story
    if request.method == 'POST':
        form = ArticleCommentsForm(request.POST)
        if form.is_valid():
            com = form.save(commit=False)
            if form.cleaned_data['title'] == '':
                com.title = truncate_words(com.comment, 4, '')
            com.article_id = story
            com.owner = request.user
            com.save()
    return HttpResponseRedirect(request.META['HTTP_REFERER'])
Пример #54
0
def truncatewords(value, arg):
    """
    Truncates a string after a certain number of words.

    Argument: Number of words to truncate after.
    """
    from django.utils.text import truncate_words
    try:
        length = int(arg)
    except ValueError: # Invalid literal for int().
        return value # Fail silently.
    return truncate_words(value, length)
Пример #55
0
    def import_entry(self, title, content, item_node):
        """Importing an entry but some data are missing like
        the image, related entries, start_publication and end_publication.
        start_publication and creation_date will use the same value,
        wich is always in Wordpress $post->post_date"""
        creation_date = datetime.strptime(
            item_node.find('{%s}post_date' % WP_NS).text, '%Y-%m-%d %H:%M:%S')

        excerpt = item_node.find('{%sexcerpt/}encoded' % WP_NS).text
        if not excerpt:
            if self.auto_excerpt:
                excerpt = truncate_words(strip_tags(content), 50)
            else:
                excerpt = ''

        entry_dict = {
            'content': content,
            'excerpt': excerpt,
            # Prefer use this function than
            # item_node.find('{%s}post_name' % WP_NS).text
            # Because slug can be not well formated
            'slug': slugify(title)[:255] or 'post-%s' % item_node.find(
                '{%s}post_id' % WP_NS).text,
            'tags': ', '.join(self.get_entry_tags(item_node.findall(
                'category'))),
            'status': self.REVERSE_STATUS[item_node.find(
                '{%s}status' % WP_NS).text],
            'comment_enabled': item_node.find(
                '{%s}comment_status' % WP_NS).text == 'open',
            'pingback_enabled': item_node.find(
                '{%s}ping_status' % WP_NS).text == 'open',
            'featured': item_node.find('{%s}is_sticky' % WP_NS).text == '1',
            'password': item_node.find('{%s}post_password' % WP_NS).text or '',
            'login_required': item_node.find(
                '{%s}status' % WP_NS).text == 'private',
            'creation_date': creation_date,
            'last_update': datetime.now(),
            'start_publication': creation_date}

        entry, created = Entry.objects.get_or_create(title=title,
                                                     defaults=entry_dict)

        entry.categories.add(*self.get_entry_categories(
            item_node.findall('category')))
        entry.authors.add(self.authors[item_node.find(
            '{http://purl.org/dc/elements/1.1/}creator').text])
        entry.sites.add(self.SITE)

        #current_id = item_node.find('{%s}post_id' % WP_NS).text
        #parent_id = item_node.find('%s}post_parent' % WP_NS).text

        return entry
Пример #56
0
    def import_gbobjects(self, feed_gbobjects):
        """Import gbobjects"""
        for feed_gbobject in feed_gbobjects:
            self.write_out('> %s... ' % feed_gbobject.title)
            creation_date = datetime(*feed_gbobject.date_parsed[:6])
            slug = slugify(feed_gbobject.title)[:255]

            if Gbobject.objects.filter(
                    creation_date__year=creation_date.year,
                    creation_date__month=creation_date.month,
                    creation_date__day=creation_date.day,
                    slug=slug):
                self.write_out(
                    self.style.NOTICE('SKIPPED (already imported)\n'))
                continue

            objecttypes = self.import_objecttypes(feed_gbobject)
            gbobject_dict = {
                'title': feed_gbobject.title[:255],
                'content': feed_gbobject.description,
                'excerpt': feed_gbobject.get('summary'),
                'status': PUBLISHED,
                'creation_date': creation_date,
                'start_publication': creation_date,
                'last_update': datetime.now(),
                'slug': slug
            }

            if not gbobject_dict['excerpt'] and self.auto_excerpt:
                gbobject_dict['excerpt'] = truncate_words(
                    strip_tags(feed_gbobject.description), 50)
            if self.Objecttype_tag:
                gbobject_dict['tags'] = self.import_tags(objecttypes)

            gbobject = Gbobject(**gbobject_dict)
            gbobject.save()
            gbobject.objecttypes.add(*objecttypes)
            gbobject.sites.add(self.SITE)

            if self.default_author:
                gbobject.authors.add(self.default_author)
            elif feed_gbobject.get('author_detail'):
                try:
                    user = User.objects.create_user(
                        slugify(feed_gbobject.author_detail.get('name')),
                        feed_gbobject.author_detail.get('email', ''))
                except IntegrityError:
                    user = User.objects.get(username=slugify(
                        feed_gbobject.author_detail.get('name')))
                gbobject.authors.add(user)

            self.write_out(self.style.ITEM('OK\n'))
Пример #57
0
    def save_model(self, request, entry, form, change):
        """Save the authors, update time, make an excerpt"""
        if not form.cleaned_data.get('excerpt') and entry.status == PUBLISHED:
            entry.excerpt = truncate_words(strip_tags(entry.content), 50)

        if entry.pk and not request.user.has_perm('blog.can_change_author'):
            form.cleaned_data['authors'] = entry.authors.all()

        if not form.cleaned_data.get('authors'):
            form.cleaned_data['authors'].append(request.user)

        entry.last_update = datetime.now()
        entry.save()
Пример #58
0
    def save_model(self, request, attributetype, form, change):
        """Save the authors, update time, make an excerpt"""
        if not form.cleaned_data.get('excerpt') and attributetype.status == PUBLISHED:
            attributetype.excerpt = truncate_words(strip_tags(attributetype.content), 50)

        if attributetype.pk and not request.user.has_perm('gstudio.can_change_author'):
            form.cleaned_data['authors'] = attributetype.authors.all()

        if not form.cleaned_data.get('authors'):
            form.cleaned_data['authors'].append(request.user)

        attributetype.last_update = datetime.now()
        attributetype.save()
Пример #59
0
def truncatewords_by_chars(value, arg):
    """
    Truncate words based on the number of characters
    based on original truncatewords filter code
    
    Receives a parameter separated by spaces where each field means:
     - limit: number of characters after which the string is truncated
     - lower bound: if char number is higher than limit, truncate by lower bound
     - higher bound: if char number is less than limit, truncate by higher bound
    """
    from django.utils.text import truncate_words
    try:
        args = arg.split(' ')
        limit = int(args[0])
        lower = int(args[1])
        higher = int(args[2])
    except ValueError:  # Invalid literal for int().
        return value
    if len(value) >= limit:
        return truncate_words(value, lower)
    if len(value) < limit:
        return truncate_words(value, higher)