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, '....'))
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, '....'))
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
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]
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))
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)
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)
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)
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, "....") )
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
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))
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
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)
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
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 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 }
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)
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)
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)
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
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
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 }
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
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)
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 ' <strong>%s</strong>' % escape(truncate_words(obj, 14)) except (ValueError, self.rel.to.DoesNotExist): return ''
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'])
def handle(self, *args, **options): images = ArticleImage.objects.all() for image in images: image.slug = SlugifyUniquely(truncate_words(image.caption, 4), ArticleImage) image.save()
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)
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)
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
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)
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'))
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)
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
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
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 ' <a class="js-hashadr" href="%s">%s</a>' % (obj_url, label)
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))
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.'
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, "...")
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
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()]
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)
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))
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))
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
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'])
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)
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
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'))
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()
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()
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)