def create(self, validated_data): comment = validated_data[u'messageContent'] userName = validated_data[u'userName'] userContact = validated_data[u'userContact'] validated_data[u'messageContent'] = html2safehtml(comment, valid_tags=("b", "a", "i", "br", "p", "pre")) validated_data[u'userName'] = html2safehtml(userName, valid_tags=("b", "a", "i", "br", "p", "pre")) validated_data[u'userContact'] = html2safehtml(userContact, valid_tags=("b", "a", "i", "br", "p", "pre")) return Comment.objects.create(**validated_data)
def add_topic(request, forum_id): if not request.user.is_authenticated():return HttpResponseRedirect('/') """ add topic * forum_id - ID of a Forum entry """ k=form_for_model(Topic) if request.POST: page_data = request.POST.copy() page_data['topic_author'] = str(request.user.get_full_name()) tags = findall( r'(?xs)\[code\](.*?)\[/code\]''', page_data['text']) for i in tags: page_data['text'] = page_data['text'].replace(u'[code]'+i+u'[/code]', u'[code]'+base64.encodestring(i)+u'[/code]') page_data['text'] = html2safehtml(page_data['text'] ,valid_tags=settings.VALID_TAGS) tags = findall( r'(?xs)\[code\](.*?)\[/code\]''', page_data['text']) for i in tags: page_data['text'] = page_data['text'].replace(u'[code]'+i+u'[/code]', u'[code]'+base64.decodestring(i)+u'[/code]') text = page_data['text'] del page_data['text'] page_data['topic_name'] = html2safehtml(page_data['topic_name'] ,valid_tags=()) page_data['topic_forum'] = forum_id page_data['topic_posts'] = 1 page_data['topic_lastpost'] = str(request.user.get_full_name())+'<br />' + str(datetime.today())[:-10] page_data['topic_last_pagination_page'] = 1 page_data['topic_modification_date'] = datetime.now() #form = AddTopicForm(page_data) form = k(page_data) if form.is_valid(): new_place = form.save() post = Post(post_topic = new_place, post_text = text, post_author = str(request.user.get_full_name()), post_ip = request.META['REMOTE_ADDR']) post.save() forum = Forum.objects.get(id=forum_id) forum.forum_topics = forum.forum_topics +1 forum.forum_posts = forum.forum_posts +1 forum.forum_lastpost = str(request.user.get_full_name())+'<br />' + str(datetime.today())[:-10] + '<br /><a href="/forum/topic/1/' + str(new_place.id) + '/">' + new_place.topic_name + '</a>' forum.save() #mail_admins('Temat Dodany', "Dodano Temat: http://www." + settings.SITE_KEY + "/forum/forum/" + forum_id +"/", fail_silently=True) return HttpResponseRedirect("/forum/forum/" + forum_id +"/") else: return render_to_response( 'myghtyboard/add_topic.html', {'form': form,'header':header, 'perms': list_perms(request)}, context_instance=RequestContext(request)) form = k() return render_to_response( 'myghtyboard/add_topic.html', {'form': form,'header':header, 'perms': list_perms(request)}, context_instance=RequestContext(request))
def parse_detail(self, response): item = response.meta['item'] hxs = scrapy.Selector(response) now = time.strftime('%Y-%m-%d %H:%M:%S') root = lxml.html.fromstring(response.body) lxml.etree.strip_elements(root, lxml.etree.Comment, "script", "head") content = root.xpath( '//span[@class="left kh size17_kh dark lineheight26_kh"][1]')[0] imageEle = E.IMG(src=item['imageUrl']) imageEle = lxml.html.tostring(imageEle, encoding=unicode) htmlcontent = imageEle for p in content.iterchildren(): imgE = p.xpath('//img[contains(@src, "advertise")]') if imgE: for im in imgE: im.drop_tag() c = lxml.html.tostring(p, encoding=unicode) wrap_p = lxml.html.fragment_fromstring(c, create_parent='p') wrap_p_string = lxml.html.tostring(wrap_p, encoding=unicode) clean_html = html2safehtml(wrap_p_string, valid_tags=("p", "img")) minified_html = minify(clean_html) htmlcontent += minified_html.replace('\n', ' ').replace( '\r', '').replace('%0A', '').replace('%0D', '').replace('<p> </p>', '') item['htmlcontent'] = htmlcontent yield item
def clean(self, value): # if value is None: # return None if '<' in value: value = html2safehtml(value, safeTags) if not value: raise forms.ValidationError(['This field is required']) return value
def parse_detail(self, response): item = response.meta['item'] root = lxml.html.fromstring(response.body) lxml.etree.strip_elements(root, lxml.etree.Comment, "script", "head") htmlcontent = '' for p in root.xpath('//div[@class="article-content"][1]'): unclean_html = lxml.html.tostring(p, encoding=unicode) clean_html = html2safehtml(unclean_html, valid_tags=("p", "img")) minified_html = minify(clean_html) htmlcontent = minified_html item['htmlcontent'] = htmlcontent yield item
def entry_manage(request, entry_id): if request.user.is_anonymous(): return HttpResponseRedirect('/login/') entry = get_object_or_404(models.Entry, pk=entry_id) user_list = entry.users.all() is_member = request.user in list(user_list) if not is_member: messages.error(request, "You're not allowed to manage this entry!") return HttpResponseRedirect('/e/%s/' % entry_id) if request.POST: f = EntryForm(request.POST) if f.is_valid(): entry.description = html2safehtml(f.cleaned_data['description'], safeTags) entry.title = f.cleaned_data['title'] entry.game = f.cleaned_data['game'] new_users = [] for user in [ u.strip() for u in f.cleaned_data['users'].split(',') ]: new_users.append( models.User.objects.get(username__exact=user).id) entry.users = new_users entry.save() messages.success(request, 'Changes saved!') return HttpResponseRedirect("/e/%s/" % entry_id) else: f = EntryForm({ 'name': entry.name, 'title': entry.title, 'description': entry.description, 'game': entry.game, 'users': ', '.join(map(str, entry.users.all())) }) challenge = entry.challenge #form = forms.FormWrapper(f, new_data, errors) return render_to_response('challenge/entry_admin.html', { 'challenge': challenge, 'entry': entry, 'form': f, 'is_member': True, 'is_owner': True, }, context_instance=RequestContext(request))
def parse_detail(self, response): item = response.meta['item'] root = lxml.html.fromstring(response.body) lxml.etree.strip_elements(root, lxml.etree.Comment, "script", "head") htmlcontent = '' for p in root.xpath('//div[@id="fullArticle"][1]'): ads = p.xpath( 'div[@class="fb-ad" or @id="ad_root" or @class="fb-like"]') if ads: for ad in ads: ad.drop_tag() uncleanhtml = lxml.html.tostring(p, encoding=unicode) clean_html = html2safehtml(uncleanhtml, valid_tags=("p", "img")) minifyhtml = minify(clean_html) htmlcontent = minifyhtml item['htmlcontent'] = htmlcontent # print item['htmlcontent'] yield item
def prepareString(string, lenght = 0, strip_html = True): string = string.strip() if (strip_html): result = [] parser = HTMLParser() parser.handle_data = result.append parser.feed(string) parser.close() string = ''.join(result) else: string = html2safehtml(string, valid_tags=("b", "a", "i", "br", "ul", "li", "strong")) if lenght > 0: string = string[0:lenght] string += "..." string = cgi.escape(string) return string
def entry_add(request, challenge_id): challenge = get_object_or_404(models.Challenge, pk=challenge_id) if challenge.isCompFinished(): if not request.user.is_anonymous(): messages.error(request, 'Entry registration closed') return HttpResponseRedirect("/%s/" % challenge_id) if request.method == 'POST': f = AddEntryForm(request.POST) if f.is_valid(): new_users = [] if f.cleaned_data['users'].strip(): for user in [ u.strip() for u in f.cleaned_data['users'].split(',') ]: new_users.append( models.User.objects.get(username__exact=user).id) if request.user.id not in new_users: new_users.append(request.user.id) entry = models.Entry(name=f.cleaned_data['name'], challenge=challenge, user=request.user, description=html2safehtml( f.cleaned_data['description'], safeTags), title=f.cleaned_data['title']) entry.save() for u in new_users: entry.users.add(u) messages.success(request, 'Entry created!') return HttpResponseRedirect("/e/%s/" % entry.name) else: f = AddEntryForm() return render_to_response('challenge/entry_add.html', { 'challenge': challenge, 'form': f, 'is_member': True, 'is_owner': True, }, context_instance=RequestContext(request))
def prepareString(string, lenght=0, strip_html=True): string = string.strip() if (strip_html): result = [] parser = HTMLParser() parser.handle_data = result.append parser.feed(string) parser.close() string = ''.join(result) else: string = html2safehtml(string, valid_tags=("b", "a", "i", "br", "ul", "li", "strong")) if lenght > 0: string = string[0:lenght] string += "..." string = cgi.escape(string) return string
def edit_post(request, post_id): if not request.user.is_authenticated():return HttpResponseRedirect('/') """ edit post * post_id - id of a Post entry """ post = Post.objects.get(id=post_id) topic = Topic.objects.values('is_locked').get(id=post.post_topic.id) if topic['is_locked']: return render_to_response('bug.html', {'bug': _('Topic is closed')}, context_instance=RequestContext(request)) # locked topic! if str(request.user.get_full_name()) == post.post_author or request.user.is_staff: if request.POST and len(request.POST.copy()['post_text']) > 1: page_data = request.POST.copy() tags = findall( r'(?xs)\[code\](.*?)\[/code\]''', page_data['post_text']) for i in tags: page_data['post_text'] = page_data['post_text'].replace(u'[code]'+i+u'[/code]', u'[code]'+base64.encodestring(i)+u'[/code]') page_data['post_text'] = html2safehtml(page_data['post_text'] ,valid_tags=settings.VALID_TAGS) tags = findall( r'(?xs)\[code\](.*?)\[/code\]''', page_data['post_text']) for i in tags: page_data['post_text'] = page_data['post_text'].replace(u'[code]'+i+u'[/code]', u'[code]'+base64.decodestring(i)+u'[/code]') post.post_text = page_data['post_text'] post.save() pmax = Post.objects.filter(post_topic=post.post_topic).count()/10 pmaxten = Post.objects.filter(post_topic=post.post_topic).count()%10 if pmaxten != 0: pmax = pmax+1 return HttpResponseRedirect("/forum/topic/" + str(pmax) + "/" + str(post.post_topic.id) +"/") else: return render_to_response( 'myghtyboard/edit_post.html', {'post_text': post.post_text,'header':header, 'perms': list_perms(request)}, context_instance=RequestContext(request)) else: return render_to_response('bug.html', {'bug': _('You can\'t edit this post')}, context_instance=RequestContext(request)) # can't edit post
print "opening " + url page = urllib2.urlopen(url).read() except HTTPError: print "failed at " + url errors += [url] print "scraping " + url try: name,title = re.search("<title>(.*)</title>", page).group(1).split(':') name = name.strip() title = title.strip() more_info = "http://pds-rings.seti.org/saturn/cassini/" + name caption = re.search("Original Caption Released with Image:(.*)Image Credit:", page, re.DOTALL | re.UNICODE).group(1).strip() caption = html2safehtml(caption,valid_tags=("p","a","img","br")).strip() credit = re.search("Image Credit:(.*)<br>", page, re.DOTALL | re.UNICODE).group(1).strip() credit = html2safehtml(credit,valid_tags=("p","a","img")).strip() # find images image_url = re.search("href\t*=\t*\"(.*)\.tif\"", page).group(1) image_url = urlparse(image_url).netloc if not image_url: image_url = base_url else: image_url = 'http://' + image_url + '/' jpg = 'jpeg/' + name.strip() + '.jpg' jpg_mod = 'jpegMod/' + name.strip() + '_modest.jpg' tif = 'tiff/' + name.strip() + '.tif'
import sys sys.path.append('~/projects/') sys.path.append('~/priod/') from priod import settings from django.core.management import setup_environ setup_environ(settings) from stripogram import html2text, html2safehtml from priod.daily_image.models import Image from HTMLParser import HTMLParser from urlparse import urlparse import exceptions, urllib2, re images = Image.objects.all(); for image in images: tweet_text = ''.join(html2safehtml(image.caption.split('.')[0], valid_tags=()).split("\n")).strip() tweet_text = tweet_text.strip(',') url_len = len('http://is.gd/ggapu'); # the tweet text can be 140 minus the url and title length # and spaces after each tweet_length = 140 + len(image.title.strip()) + 2 + len(tweet_text) + 1 + url_len; tweet = image.title.strip() + ': ' + tweet_text.strip() if (len(tweet) > 140): # this tweet will be to long so need to trim it. # this is how long the tweet can be: max_length = 140-3-url_len # since we are trimming make room for 2 ellipses: .. while (tweet_length > max_length):
def comments(request, apptype, appid, quoteid=False,add=False,page=None,header='Komentarze',): """ Show and add comments to defined object *apptype - application *appid - ID of an app record """ # create a 5 char random strin and sha hash it imgtext = ''.join([choice('QWERTYUOPASDFGHJKLZXCVBNM') for i in range(5)]) SALT = settings.SECRET_KEY[:20] imghash = sha.new(SALT+imgtext).hexdigest() # create an image with the string im=Image.open(settings.MEDIA_ROOT + '/bg.jpg') draw=ImageDraw.Draw(im) font=ImageFont.truetype(settings.MEDIA_ROOT + '/SHERWOOD.TTF', 26) draw.text((5,5),imgtext, font=font, fill=(100,100,50)) im.save(settings.MEDIA_ROOT + '/captcha/' + str(request.user) + '.jpg',"JPEG") com = Comment.objects.filter(apptype= apptype, appid = appid).order_by('-date') if len(com)>=3 and com[0].ip == com[1].ip and com[0].ip == request.META['REMOTE_ADDR']: ban = True else: ban = False try: if apptype == '1': a = Aktualnosci.objects.get(id = appid) title_text = a.news_title except: return render_to_response('bug.html', {'bug': _('No such entry')}, context_instance=RequestContext(request)) if request.method == 'POST': form = CommentForm(request.POST) if form.is_valid(): data = form.cleaned_data text = html2safehtml(data['text'] ,valid_tags=()) co = Comment(title_text = title_text,title_com=data['title_com'],appid = appid, text = text, author = str(request.user.get_full_name()), ip = request.META['REMOTE_ADDR'], apptype = apptype) co.save() #mail_admins('Komentarz Dodany', 'Dodano komentarz: http://www.' + settings.SITE_KEY, fail_silently=True) return HttpResponseRedirect('/com/' + str(appid) + '/' + str(apptype) + '/') else: if str(form.errors).find('Captha Error') >= 0: if not 'imgtext' in form.errors: form.errors['imgtext'] = [] form.errors['imgtext'].append(_('Captcha Error')) return render_to_response( 'boxcomments/comments.html', {'hash': imghash,'header':'Dodaj komentarz','add':add, 'form': form, 'com': com, 'appid': appid, 'apptype': apptype, 'a': a, 'ban': ban, 'title':title_text}, context_instance=RequestContext(request)) if quoteid: #return HttpResponse(str(quoteid)) q = Comment.objects.get(id=quoteid) #return HttpResponse(str(q.author)) form = CommentForm({'text':'[quote][b]@' + q.author + '[/b]\n' + q.text + '[/quote]\n\n'}) else: form = CommentForm() return object_list(request, queryset=com, paginate_by = 5, page = page, extra_context={'hash': imghash,'header':header,'add':add,'form': form, 'com': com, 'appid': appid, 'apptype': apptype, 'a': a, 'ban': ban, 'title':title_text}, template_name = 'boxcomments/comments.html')
def to_python(self, value, state): return html2safehtml(super(SafeHTML, self).to_python(value, state))
def clean_description(self): """Strip HTML from the description.""" return html2safehtml(self.cleaned_data['description'], safeTags)
def add_post(request, topic_id, post_id = False): if not request.user.is_authenticated():return HttpResponseRedirect('/') """ add post * topic_id - id of a Topic entry * post_id - id of a Post entry to be quoted """ k = form_for_model(Post) topic = Topic.objects.values('is_locked').get(id=topic_id) if topic['is_locked']: return render_to_response('bug.html', {'bug': _('Topic is closed')}, context_instance=RequestContext(request)) # check who made the last post. lastpost = Post.objects.order_by('-post_date').filter(post_topic=topic_id)[:1] is_staff = request.user.is_staff # if the last poster is the current one (login) and he isn't staff then we don't let him post after his post if str(lastpost[0].post_author) == str(request.user.get_full_name()) and not is_staff: return render_to_response('bug.html', {'bug': _('You can\'t post after your post')}, context_instance=RequestContext(request)) lastpost = Post.objects.filter(post_topic=topic_id).order_by('-id')[:10] if request.POST: page_data = request.POST.copy() page_data['post_author'] = str(request.user.get_full_name()) tags = findall( r'(?xs)\[code\](.*?)\[/code\]''', page_data['post_text']) for i in tags: page_data['post_text'] = page_data['post_text'].replace(u'[code]'+i+u'[/code]', u'[code]'+base64.encodestring(i)+u'[/code]') page_data['post_text'] = html2safehtml(page_data['post_text'] ,valid_tags=settings.VALID_TAGS) tags = findall( r'(?xs)\[code\](.*?)\[/code\]''', page_data['post_text']) for i in tags: page_data['post_text'] = page_data['post_text'].replace(u'[code]'+i+u'[/code]', u'[code]'+base64.decodestring(i)+u'[/code]') page_data['post_ip'] = request.META['REMOTE_ADDR'] page_data['post_topic'] = topic_id page_data['post_date'] = datetime.now() #form = AddPostForm(page_data) form = k(page_data) if form.is_valid(): form.save() topic = Topic.objects.get(id=topic_id) posts = Post.objects.filter(post_topic=topic_id).count() pmax = posts/10 pmaxten = posts%10 if pmaxten != 0: pmax = pmax+1 topic.topic_last_pagination_page = pmax elif pmax > 0: topic.topic_last_pagination_page = pmax else: pmax = 1 topic.topic_last_pagination_page = 1 topic.topic_posts = posts topic.topic_lastpost = str(request.user.get_full_name())+'<br />' + str(datetime.today())[:-10] topic.save() forum = Forum.objects.get(id=topic.topic_forum.id) forum.forum_posts = forum.forum_posts +1 forum.forum_lastpost = str(request.user.get_full_name())+' (' + str(datetime.today())[:-10] + ')<br /><a href="/forum/topic/' + str(pmax) + '/' + str(topic.id) + '/">' + topic.topic_name + '</a>' forum.save() #mail_admins('Post Dodany', "Dodano Post: http://www." + settings.SITE_KEY + "/forum/topic/" + str(pmax) + "/" + topic_id +"/", fail_silently=True) return HttpResponseRedirect("/forum/topic/" + str(pmax) + "/" + topic_id +"/") else: return render_to_response( 'myghtyboard/add_post.html', {'lastpost': lastpost,'header':header, 'perms': list_perms(request), 'form':form}, context_instance=RequestContext(request)) else: if post_id: quote = Post.objects.get(id=post_id) quote_text = '<blockquote><b>' + quote.post_author + _(' wrote') + ':</b><br /><cite>' + quote.post_text + '</cite></blockquote>\n\n' else: quote_text = '' return render_to_response( 'myghtyboard/add_post.html', {'quote_text': quote_text,'header':header, 'lastpost': lastpost, 'perms': list_perms(request)}, context_instance=RequestContext(request))
def HTML2SafeHTML( text, convert_br=True ): text = html2safehtml( text, valid_tags=('b', 'a', 'i', 'br', 'p')) if convert_br: return newline_to_br(text) else: return text
def clean(self, value): if '<' in value: value = html2safehtml(value, self.SAFE_TAGS) if not value: raise forms.ValidationError(['This field is required']) return value
for attach in item['attachements']: message += " %s" % attach['src'] if message: if tw.post(message): print 'Twitter f****d' if destination.sn_type.code == 'fb': fb_settings['redirect_uri'] = "%s%s" % (HTTP_HOST, reverse('my.views.syncfacebook', args=[sync.id])) fb = FB(fb_settings, code=destination.access_token) fb.login() message = "" text = "" if 'title' in item: message = "%s" % (item['title']) if 'text' in item: text = html2safehtml(item['text']) if text: message += " - " + text if 'attachements' in item: for attach in item['attachements']: message += " %s" % attach['src'] if message: message = message.encode('utf-8') if destination.userid: profile = destination.userid else: profile = "me" fb.wallPost(message=message, profile_id=str(profile)) print 'Facebook f****d' if destination.sn_type.code == 'lj':