def resize(self, width, height, dowatermark=False): """ Создает превьюхи для изображений """ dimensions_folder = '{0}x{1}'.format(width, height) #проверяем, что существует папка с превьюхами path_to_thumbnail_dir = os.path.join( settings.MEDIA_ROOT, self.IMAGE_UPLOAD_TO, 'thumbnails', dimensions_folder).encode('utf-8') if not os.path.exists(path_to_thumbnail_dir): os.makedirs(path_to_thumbnail_dir) original_path = os.path.join(settings.MEDIA_ROOT, self.IMAGE_UPLOAD_TO) original_filename = '{0}/{1}.jpg'.format(original_path, slugify(self.article)).encode('utf-8') try: image = Image.open(original_filename) except IOError: # print('Image not found') return image = ImageOps.fit(image, (width, height), Image.ANTIALIAS) if dowatermark: wm = Image.open(settings.WATERMARK_PATH) wmsize = image.size[0]/2 if wmsize < 100: wmsize = 100 wm.thumbnail((wmsize, wmsize), Image.ANTIALIAS) image.paste(wm, (image.size[0]/2-wm.size[0]/2, image.size[1]/2-wm.size[1]/2), wm) path_to_thumbnail = '{0}/{1}.jpg'.format(path_to_thumbnail_dir, slugify(self.article)).encode('utf-8') image.save(path_to_thumbnail, "JPEG", quality=100)
def forwards(self, orm): from pytils.translit import slugify for section in orm.Section.objects.all(): section.slug = slugify(section.title_uk or section.title) section.save() for article in orm.Article.objects.all(): article.slug = slugify(article.title_uk or article.title) article.save()
def file_upload_path(instance, filename): """Generates upload path Keyword arguments: instance -- FileField filename - String Returns: String """ parts = filename.rsplit('.', 1) name = "%s.%s" % (slugify(translify(parts[0])), slugify(translify(parts[1]))) return "%s/%s/%s/%s" % (strftime('%Y'), strftime('%m'), strftime('%d'), name)
def category(request, id): category = Category.objects.select_related().get(id=id) posts = category.post_set.all() slug = translit.slugify(category.name) category.ct_slug = slug return render(request, 'category.html', {'posts': posts, 'category': category},)
def save(self, commit=True): post = super(PostAdminForm, self).save(commit=False) post.slug = '%i-%s' % ( Post.objects.last().pk+1, slugify(self.cleaned_data['title']) ) post.save() return post
def set_slug(model, src, length=60): slug = slugify(src)[0:length] try: obj = model.objects.get(slug=slug) slug = set_slug(model, slug, length) except model.DoesNotExist: return slug
def post(self, request, *args, **kwargs): btype = request.POST.get('btype', False) resp = u'' if btype: c = BusinessType.objects.create(name=btype, slug=slugify(btype)) resp = u'[{}, {}]'.format(c.name, c.name) return HttpResponse(resp)
def check_for_file_and_upload(self, data): """ Checks to see if a file was passed back by the student. If so, it will be uploaded to S3. @param data: AJAX post dictionary containing keys student_file and valid_files_attached. @return: has_file_to_upload, whether or not a file was in the data dictionary, and image_tag, the html needed to create a link to the uploaded file. """ has_file_to_upload = False image_tag = "" # Ensure that a valid file was uploaded. if ('valid_files_attached' in data and data['valid_files_attached'] in ['true', '1', True] and data['student_file'] is not None and len(data['student_file']) > 0): has_file_to_upload = True student_file = data['student_file'][0] # Bad workaround about cyrillic unicode # student_file.name = str(uuid.uuid4()) + '.' + student_file.name.split(".")[-1] student_file.name = slugify(student_file.name) # Upload the file to S3 and generate html to embed a link. s3_public_url = self.upload_file_to_s3(student_file) image_tag = self.generate_file_link_html_from_url(s3_public_url, student_file.name) return has_file_to_upload, image_tag
def slugify(text): """Make slug from (russian) text""" try: res = translit.slugify(smart_unicode(text, encoding)) except Exception, err: # because filter must die silently res = default_value % {'error': err, 'value': text}
def setSlug(self, names, obj): """ Find slug field and set it Return generated slug or None is slug not exists """ # get obj type fields = self.meta.getCollType(names) if not fields: return None # search slug field name slugName = None for name, params in fields.items(): if 'slug' in params: slugName = name break if not slugName: return None # get slug src slugSrc = fields[slugName]['slug'] # gen slug from src src = obj.get(slugSrc, None) if not src: return None slug = slugify(src) # set slug obj[slugName] = slug return slug
def save(self, *args, **kwargs): self.html_compile = u'%s' % markdown(self.data, ['footnotes', 'admonition', 'headerid', 'nl2br', 'tables', 'wikilinks', 'pyshell']) self.updated = datetime.now() if not self.slug: self.slug = slugify(self.title) super(Page, self).save(*args, **kwargs)
def pointphoto_upload(instance, filename, prefix=None): """ Auto generate name for File and Image fields. :param instance: Instance of Model :param filename: Name of uploaded file :param prefix: Add to path :return: """ name, ext = op.splitext(filename) try: time = instance.timestamp.strftime("%H-%M") if len(instance.name.split(',')) > 2: instance.name = ','.join(instance.name.split(',')[2:]) name = slugify(instance.name) if len(name > 40): name = name[-40:] filename = "%s-%s%s" % (time, name, ext or '.jpg') date = instance.timestamp.strftime("%d-%m-%Y") except: filename = "%s%s" % (uuid.uuid4(), ext or '.jpg') date = datetime.today().strftime('%d-%m-%Y') basedir = op.join(instance._meta.app_label, instance._meta.model_name) if prefix: basedir = op.join(basedir, prefix) return op.join(basedir, date, filename)
def unique_path(page, page_id=None): """Makes unique_path for page, returns new path and slug. Provided @page_id means do not check against self""" slug = slugify(page.slug or page.name)[0:PAGE_SLUG_LENGTH] parent_page = db.select("pages", page, where="id=$parent_id")[0] test_slug, i = slug, 1 try: while True: if not test_slug in config.reserved: new_path = join_path(parent_page.path, test_slug) test = db.select( "pages", locals(), where=("path=$new_path" + web.cond(page_id, " AND NOT id=$page_id", "")), )[0] test_slug = "%s-%d" % (slug, i) i += 1 except IndexError: # Page with test_slug doesn't exist — take this slug if parent_page.ids: ids = parent_page.ids + "," + str(parent_page.id) else: ids = parent_page.id return dict( path=new_path, slug=test_slug, ids=ids, level=parent_page.level + 1)
def save(self, *args, **kwargs): if not self.slug : from pytils.translit import slugify self.slug = slugify(self.title) super(News, self).save(*args, **kwargs)
def save(self, **kwargs): #super(Coll, self).save() if not self.slug: self.uid = Rubrica.objects.latest('pk').id + 1 self.slug = dict(GENDER).get(self.gender) + "-" + translit.slugify(self.title) super(Rubrica, self).save(**kwargs)
def updateSlug(self, names, field, value): # get coll type fields = self.meta.getCollType(names) if not fields: return None # search slug field name slugName = None for name, params in fields.items(): if 'slug' in params: slugName = name break if not slugName: return None # get slug src slugSrc = fields[slugName]['slug'] # slug src must be equal to field if slugSrc != field: return None # gen slug slug = slugify(value) return [slugName, slug]
def on_callback(self, request): if request.method != 'POST': request.respond('This hook only supports POST method.') else: if request.GET.get('secret', [None])[0] != self.bot.config.draftin_secret: request.respond('Wrong secret was specified') else: payload = anyjson.deserialize(request.POST['payload'][0]) title = payload['name'] content = payload['content'] slug = slugify(title) created_at = times.to_universal(payload['created_at']) updated_at = times.to_universal(payload['updated_at']) timezone = self.bot.config.timezone with open(os.path.join( self.bot.config.documents_dir, slug + '.md'), 'w') as f: post_content = self.template.format(title=title, content=content, slug=slug, created_at=times.format(created_at, timezone, '%Y-%m-%d %H:%M'), updated_at=times.format(updated_at, timezone, '%Y-%m-%d %H:%M')) f.write(post_content.encode('utf-8')) try: subprocess.check_output(self.bot.config.update_command, stderr=subprocess.STDOUT, shell=True) except subprocess.CalledProcessError, e: request.respond(u'I tried to update a blog, but there was an error: ' + e.output.encode('utf-8')) else: request.respond('Done, published')
def photo_file_path(instance, filename): """ Path is <kind>/<media_id/digits>/file_name """ name, ext = os.path.splitext(filename) kind, media_id = instance.get_path_parts() return os.path.join(kind, os.path.join(*list(str(media_id))), translit.slugify(name)) + ext
def fieldset_dict(self): # No need to call validate_fieldsets() since we # are using iter_fieldsets. if not hasattr(self, '__fieldset_dict'): self.__fieldset_dict = dict((slugify(fset.title), fset) for \ fset in self.iter_fieldsets()) return self.__fieldset_dict
def save(self, force_insert=False, force_update=False): self.updated_at = datetime.now() if (self.slug == None or self.slug == ''): if not self.id: super(Post, self).save(force_insert, force_update) self.slug = '%d-%s' % (self.id, slugify(self.title)) super(Post, self).save(force_insert, force_update)
def upload(request): """ Uploads a file and send back its URL to CKEditor. TODO: Validate uploads """ # Get the uploaded file from request. f_name = request.FILES['upload'].name.split('.') request.FILES['upload'].name = slugify(f_name[0])+'.'+f_name[1] upload = request.FILES['upload'] upload_ext = os.path.splitext(upload.name)[1] if upload.size > 5242880: return render(request, 'accounts/ckeditor_error.html') # Open output file in which to store upload. upload_filename = get_upload_filename(upload.name, request.user) out = open(upload_filename, 'wb+') # Iterate through chunks and write to destination. for chunk in upload.chunks(): out.write(chunk) out.close() create_thumbnail(upload_filename) # Respond with Javascript sending ckeditor upload url. url = get_media_url(upload_filename) return HttpResponse(""" <script type='text/javascript'> window.parent.CKEDITOR.tools.callFunction(%s, '%s'); </script>""" % (request.GET['CKEditorFuncNum'], url))
def parse_site(**kwargs): xml = urlopen(kwargs['url']).read() all_data = pq(etree.fromstring(xml)) data = pq(all_data) data_items = data(kwargs['field_main']) newss = News_article() for dat in data_items: na = News_article() d = pq(dat) soup = BeautifulSoup(str(d)) na.article = d(kwargs['article']).html() na.src_link = d(kwargs['src_link']).html() na.date = parse_date(soup(kwargs['date'])[0].string) na.slug = slugify(na.article) try: na.image = parse_image(kwargs['image'], soup) except Exception as exc: print str(exc) print na.image count_news_article1 = News_article.objects.filter(article = na.article).count() try: if count_news_article1 == 0: na.text = parse_html(na.src_link, kwargs['tag_name'], kwargs['tag_value']) na.save() except Exception as e: print e
def post(self, request, *args, **kwargs): tag = request.POST.get('tag', False) resp = u'' if tag: c = UserTag.objects.create(name=tag, slug=slugify(tag), author=request.user) resp = [c.pk, c.name] return HttpResponse(json.dumps(resp), content_type='application/json')
def save(self, **kwargs): #super(Coll, self).save() if not self.slug: self.uid = Coll.objects.latest('pk').id + 1 self.slug = translit.slugify(self.title) + "-" + str(self.uid) super(Coll, self).save(**kwargs)
def post(self, request, *args, **kwargs): comp = request.POST.get('competence', False) resp = u'' if comp: c = Competence.objects.create(name=comp, slug=slugify(comp)) resp = u'[{}, {}]'.format(c.name, c.name) return HttpResponse(resp)
def get_uploaded_file_name(filename): if filename: i = filename.rfind('.') uploaded_file = '%s%s' % (slugify(filename[:i]), filename[i:]) else: uploaded_file = None return uploaded_file
def handle(self, *args, **options): qs = SurfacePhoto.objects.all() for i in qs: media_root = settings.MEDIA_ROOT subdir = op.join(i._meta.model_name, i.porch.surface.city.slug) root_dir = op.join(media_root, subdir) if not op.exists(root_dir): makedirs(root_dir) ext = op.splitext(i.image.path)[-1] name = slugify(i.__unicode__()) filename = "id%s_%s%s" % (i.id, name, ext or '.jpg') short_path = op.join(subdir, filename) full_path = op.join(root_dir, filename) try: print 'open image' image = Image.open(i.image.path) image.save(full_path, "PNG") print 'image save complete' except: print 'image save fail' try: print 'set new path for instance' i.image = short_path i.save() print 'instance save ok' except: print 'instance save fail'
def save(self, *args, **kwargs): if not self.slug: from pytils.translit import slugify self.slug = slugify(self.name) self.text = self.text.strip() self.html = render(self.text, self.render_method, unsafe=True) super(Post, self).save(*args, **kwargs)
def eval_image_upload_to(instance, filename): ext = '' n = filename.rfind('.') if n: ext = filename[n:] return os.path.join('images/events', translit.slugify(instance.name) + ext)
def attach_images(filename): dirname = os.path.join(settings.MEDIA_ROOT, Item.IMAGE_UPLOAD_TO).encode('utf-8') articles = list() with zipfile.ZipFile(filename, "r") as f: for name in f.namelist(): try: if type(name) is str: unicode_name = name.decode('UTF-8') else: unicode_name = name except UnicodeDecodeError: unicode_name = name.decode('cp866') unicode_name = unicode_name.split('.')[:-1] unicode_name = '.'.join(unicode_name) articles.append(unicode_name) unicode_name = slugify(unicode_name) + '.jpg' unicode_name = unicode_name.encode('utf-8') file_name = os.path.join(dirname, unicode_name) f2 = open(file_name, 'w') f2.write(f.read(name)) f2.close() f.close() items = Item.objects.filter(article__in=articles) for item in items: item.resize_all()
def post(self, request): if request.user.is_authenticated: b = Book(title=request.POST['title'], text=request.POST['text'], slug=slugify(request.POST['title'])) try: b.save() except IntegrityError: b.slug += datetime.now().strftime('%Y:%m:%d %H:%M:%S:$f') b.title += datetime.now().strftime('%Y:%m:%d %H:%M:%S:$f') b.save() b.author.add(request.user) for g in loads(request.POST['genre']): req_g = Genre.objects.get(id=g) b.genre.add(req_g) b.save() # print(request.POST['title']) # print(request.POST['text']) # print(loads(request.POST['genre'])) return JsonResponse({'ok': True})
def save(self, *args, **kwargs): slug = slugify(self.name) print(slug) testSlug = SubCategory.objects.filter(name_slug=slug) print(testSlug) slugRandom = '' if not self.name_slug or testSlug: if testSlug: slugRandom = '-' + ''.join( choices(string.ascii_lowercase + string.digits, k=2)) self.name_slug = slug + slugRandom else: self.name_slug = slug self.name_lower = self.name.lower() # all_items = self.item_set.all() # for item in all_items: # item.discount = self.discount # item.save() super(SubCategory, self).save(*args, **kwargs)
def test_create_post_for_superuser(self): data = { 'title': 'New post from superuser', 'body': 'Some other text...', 'tags': [self.tag1.id] } self.client.login(username='******', password='******') response = self.client.post(reverse('post_new'), data) self.assertEqual(response.status_code, 302) new_post = Post.objects.filter( title__contains='New post from superuser').first() self.assertEqual(new_post.title, 'New post from superuser') self.assertEqual(new_post.body, 'Some other text...') self.assertEqual(new_post.tags.count(), 1) self.assertEqual(new_post.tags.get(id=self.tag1.id), self.tag1) self.assertEqual(new_post.slug, slugify('New post from superuser')) self.assertEqual(new_post.author, self.superuser) self.assertEqual(new_post.author_status, 'staff')
def save(self, *args, **kwargs): """Транслитерация имени для урла""" if self.title is None or len(self.title) == 0: sub = self.sublocality if self.sublocality else "" try: rooms = u", %s-комнатная" % self.extraflat.rooms_number except: rooms = u"" self.title = u"%s %s%s" % (self.category.name if self.category else "", sub, rooms) if self.slug is None or len(self.slug) == 0: self.slug = slugify(self.title) if self.price_usd is None and self.price_uah: self.price_usd = uah_to_usd(self.price_uah) if self.price_uah is None and self.price_usd: self.price_uah = usd_to_uah(self.price_usd) # if self.author and not self.author.is_admin: if not self.author or not self.author.is_admin: for cut in CuttingWords.objects.all(): self.main_text = self.main_text.replace(cut.cut_words, '') super(Advert, self).save(*args, **kwargs) if self.raw_phones: current_phones = self.phone_set.all() current_numbers = current_phones.values_list('phone', flat=True) phones = [parse_int(x) for x in self.raw_phones.split(',')] for phone in phones: if phone not in current_numbers: phone, c = Phone.objects.get_or_create(phone=phone) self.phone_set.add(phone) for current_phone in current_phones: if current_phone.phone not in phones: self.phone_set.remove(current_phone) super(Advert, self).save(*args, **kwargs)
def on_callback(self, request): if request.method != 'POST': request.respond('This hook only supports POST method.') else: if request.GET.get('secret', [None])[0] != self.bot.config.draftin_secret: request.respond('Wrong secret was specified') else: payload = anyjson.deserialize(request.POST['payload'][0]) title = payload['name'] content = payload['content'] slug = slugify(title) created_at = times.to_universal(payload['created_at']) updated_at = times.to_universal(payload['updated_at']) timezone = self.bot.config.timezone with open( os.path.join(self.bot.config.documents_dir, slug + '.md'), 'w') as f: post_content = self.template.format( title=title, content=content, slug=slug, created_at=times.format(created_at, timezone, '%Y-%m-%d %H:%M'), updated_at=times.format(updated_at, timezone, '%Y-%m-%d %H:%M')) f.write(post_content.encode('utf-8')) try: subprocess.check_output(self.bot.config.update_command, stderr=subprocess.STDOUT, shell=True) except subprocess.CalledProcessError, e: request.respond( u'I tried to update a blog, but there was an error: ' + e.output.encode('utf-8')) else: request.respond('Done, published')
def add_post(request): from pytils.translit import slugify if request.method == 'POST': title = request.POST.get('title') content = request.POST.get('content') upload_file = request.FILES['image'] fs = FileSystemStorage() image = fs.save(upload_file.name, upload_file) post = Posts(title=title, content=content, image=image) post.author = request.user post.slug = slugify(post.title.replace(" ", "-").lower()) post.save() return redirect('user_detail', pk=request.user.pk) return render(request, 'team/user_detail.html')
def post(self, request, user_id=None, slug=None): if slug: account = models.Account.objects.get(user=get_object_or_404( models.User, pk=user_id), slug=slug) if not check_user(user_id, request.user): return redirect('wallet:access_denied') account_form = forms.AccountForm(request.POST, instance=account, files=request.FILES) if not account_form['image']: account_form['image'] = account.image.name else: account_form = forms.AccountForm(request.POST, files=request.FILES) if account_form.is_valid(): new_account = account_form.save(commit=False) new_account.user = request.user new_account.slug = slugify(new_account.name) new_account.save() if new_account.image: edit_image(new_account.image.path) return redirect('wallet:all_accounts')
def import_sections(self, xml_obj): if not self.model_section: return False log.info('import sections') data_list = [] groups_list = [] groups_update_parent = {} self.xml_sections = {xml: pk for pk, xml in self.model_section.objects.values_list('pk', 'xml_id')} for pos, third in enumerate(xml_obj.getchildren(), 1): groups_list = get_tree_from_lxml(third, u'Группы', u'Ид', {'_position_': pos}, groups_list) for group in groups_list: item_data = { 'xml_id': group[u'Ид'], 'position': group['_position_'], 'title': group[u'Наименование'], 'slug': translit.slugify(group[u'Наименование']), 'lft': 0, 'rght': 0, 'tree_id': 0, 'level': 0} if '_parent_' in group: if group['_parent_'] in self.xml_sections: item_data['parent_id'] = self.xml_sections[group['_parent_']] else: groups_update_parent[item_data['xml_id']] = group['_parent_'] data_list.append(self.prepare_section_data(item_data, group)) self.xml_sections = self.import_item_data(data_list, self.xml_sections, self.model_section) for xml_id, parent_xml_id in groups_update_parent.iteritems(): self.model_section.objects.filter(pk=self.xml_sections[xml_id]).\ update(parent=self.xml_sections[parent_xml_id]) self.model_section.objects.rebuild() log.info('import sections time: %s' % (datetime.now() - self.exec_time)) self.exec_time = datetime.now() return True
def add_bookmark(request): try: user = User.objects.get(username=request.user) except: return render(request, 'err_message.html', {'err_message': "Please log in or register!", 'home': 'active'}) form = AddBookmarkForm(request.POST or None, initial={"added_by": user}) # A HTTP POST? if request.method == 'POST': # Have we been provided with a valid form? if form.is_valid(): newbookmark = form.save(commit=False) newbookmark.title = get_title(newbookmark.url) newbookmark.slugtitle = slugify(user.username + " " + newbookmark.title) newbookmark.content = download_links(newbookmark.url, newbookmark.slugtitle) try: form.save() except IntegrityError: return render(request, 'err_message.html', {'err_message': "The bookmark with the title exists!"}) return redirect('/bookmarks/search/?value=' + newbookmark.title) else: print(form.errors) return render(request, 'add_bookmark.html', {'form': form, 'home': 'active'})
def upload_file(file, filename=None, collection=None): _filename, ext = os.path.splitext(file.filename) if not filename: filename = ''.join([slugify(_filename), ext]) else: filename = ''.join([filename, ext]) filename = secure_filename(filename) if collection: filepath = os.path.join(collection, filename) else: filepath = filename if file and allowed_filename(filename): if collection: create_folders( os.path.join(os.path.join(Config.MEDIA_DIR, collection))) file.save(os.path.join(Config.MEDIA_DIR, filepath)) return filepath else: raise Exception('Not allowed file extension')
def get_names(): url = 'https://goroskop365.ru/sovmestimost-imen/agnessa-averyan/' response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') result = [] man_values = [] woman_values = [] women_names_list = soup.find('select', {'name': 'female_name'}) women_names_list = women_names_list.find_all('option') for woman_name in women_names_list: try: woman_values.append(woman_name['value']) except KeyError: continue men_names_list = soup.find('select', {'name': 'male_name'}) men_names_list = men_names_list.find_all('option') for man_name in men_names_list: try: man_values.append(man_name['value']) except KeyError: continue for women_name in woman_values: for man_name in man_values: total_values = [] _str = f'{women_name}-{man_name}' total_values.append(women_name) total_values.append(man_name) total_values.append(slugify(_str)) result.append(total_values) return result
def create_album_for(instance=None, user=None, model = None, **kwargs): """ Universal function for creating albums in different situations """ if not user: user = instance.user ct = ContentType.objects.get_for_model(instance) album_name = u'Альбом %s' % smart_unicode(instance.__unicode__()) #had some issues slug = slugify(album_name+str(instance.id)) album_dict = { 'user': user, 'name': album_name, 'slug': slug, 'content_type': ct, 'object_pk': instance.pk, 'description':u'' } try: album = model.objects.get(content_type = ct, object_pk = instance.pk) except model.DoesNotExist: album = model.objects.create(**album_dict) return album
def migrate_posts(self, topic, new_topic): posts = phpbb3Post.objects.filter(topic=topic) for post in posts: try: username = '******' if post.poster: username = slugify(post.poster.username_clean) user = User.objects.get(username=username) created = datetime.fromtimestamp(post.time) updated = post.edit_time and datetime.fromtimestamp( post.edit_time) or None body = phpbb_html2bbcode(post.text) parser = HTMLParser.HTMLParser() body = parser.unescape(body) body = re.sub(':' + post.bbcode_uid, '', body) # body = clean_bbcode(post.text) Post.objects.create(topic=new_topic, user=user, created=created, updated=updated, user_ip=post.poster_ip, body=body) except User.DoesNotExist: pass
def save(self, *args, **kwargs): if self.old_price == 0: self.old_price = self.price if self.discount > 0: self.discount_val = self.discount self.old_price = self.price self.price = self.price - (self.price * self.discount / 100) else: self.price = self.price + (self.old_price * self.discount_val / 100) self.discount_val = 0 slug = slugify(self.name) if self.name and not self.name_slug: testSlug = Item.objects.filter(name_slug=slug) slugRandom = '' if testSlug: slugRandom = '-' + ''.join( choices(string.ascii_lowercase + string.digits, k=2)) self.name_slug = slug + slugRandom if self.name: self.name_lower = self.name.lower() super(Item, self).save(*args, **kwargs)
def test_delete(self): factory = APIRequestFactory() url = '/content_api/contents/' title = 'Sample content' content_text = 'Sample content text' data = {'title': title, 'content': content_text} request = factory.post(url, data) view = ContentViewSet.as_view({'post': 'create'}) force_authenticate(request, user=self.user) response = view(request) content_pk = response.data.get('pk') self.assertIsNotNone(content_pk) self.assertEqual(response.data.get('slug'), slugify(title)) content = Content.objects.get(title=title) self.assertEqual(content.content, content_text) url = '/content_api/contents/{}/'.format(content_pk) request = factory.delete(url, data) view = ContentViewSet.as_view({'delete': 'destroy'}) force_authenticate(request, user=self.user) response = view(request, pk=1) self.assertIsNone(response.data) with self.assertRaises(Content.DoesNotExist): Content.objects.get(pk=content_pk)
def __init__(self, title_ru="", title_en="", date="", tags=[]): self.title_ru = title_ru self.title_en = translit.slugify(title_ru) self.date = date self.tags = tags
def save(self, *args, **kwargs): value = self.title self.slug = slugify(value) super().save(*args, **kwargs)
def save(self, *args, **kwargs): self.slug = slugify(self.title) super(Group, self).save(*args, **kwargs)
from pytils import translit # простая траслитерация/детранслитерация # обратите внимание на то, что при транслитерации вход - unicode, # выход - str, а в детранслитерации -- наоборот # print translit.translify(u"Это тест и ничего более") #-> Eto test i nichego bolee print translit.translify( u"Традиционно сложные для транслитерации буквы - подъезд, щука") #-> Traditsionno slozhnyie dlya transliteratsii bukvyi - pod`ezd, schuka # и теперь пытаемся вернуть назад... (понятно, что Э и Е получаются одинаково) print translit.detranslify("Eto test i nichego bolee") #-> Ето тест и ничего более print translit.detranslify( "Traditsionno slozhnyie dlya transliteratsii bukvyi - pod`ezd, schuka") #-> Традиционно сложные для транслитерации буквы - подъезд, щука # и пригодные для url и названий каталогов/файлов транслиты # dirify и slugify -- синонимы, действия абсолютно идентичны print translit.slugify( u"Традиционно сложные для транслитерации буквы - подъезд, щука") #-> traditsionno-slozhnyie-dlya-transliteratsii-bukvyi-podezd-schuka # обратного преобразования, понятно, нет :)
def save_slug(self, *args, **kwargs): self.slug = slugify(self.maker) super().save(*args, **kwargs)
def save_news(self, *args, **kwargs): self.slug = slugify(self.title) super().save(*args, **kwargs)
def save(self, *args, **kwargs): if self.auto_slug: self.name_slug = slugify(self.name) super(Promotion, self).save(*args, **kwargs)
def save(self, *args, **kwargs): if not self.slug: self.slug = slugify(self.name) super().save(*args, **kwargs)
def generate_leads_and_tasks(self, user, force=False): first_names = [ u'Вадим', u'Матвей', u'Александр', u'Прохор', u'Николай', u'Семён', u'Глеб', u'Руслан', u'Алексей ', u'Егор', u'Валентин', u'Александр', u'Константин', u'Степан', u'Эрнст', u'Казимир', u'Богдан', u'Мстислав', u'Зиновий', u'Богдан', u'Владислав', u'Мир', u'Серафим', u'Глеб', u'Егор', u'Владлен', u'Сергей', u'Сергей', u'Алексей ', u'Артём' ] last_names = [ u'Энговатов', u'Лобан', u'Яшвили', u'Пашков', u'Овсов', u'Гуринов', u'Лобов', u'Измайлов', u'Волынкин', u'Крутой', u'Никишов', u'Шапиро', u'Цаплин', u'Лавров', u'Монаков', u'Ельцин', u'Пургин', u'Посохов', u'Кярбер', u'Попырин', u'Ольховский', u'Быков', u'Федотов', u'Карташов', u'Катаев', u'Блок', u'Рыжанов', u'Колокольцов', u'Колесов' ] texts_for_message = [ u'В какое время можно провести осмотр?', u'Какое состояние квартиры?', u'вы действительно хотите продать эту квартиру за такую цену?', u'Ипотека возможна?', u'готов купить прямо сейчас за наличные, но со скидкой 30000 грн', u'Не могу до вас дозвониться', u'Сколько собственников у квартиры?', u'Прямая продажа?', u'Почему так дорого?' ] realtor = user.get_realtor() leads_from_ad = 0 if force: realtor.leads.all().delete() realtor.tasks.all().delete() Message.objects.filter( to_user__email__contains='user4demo').delete() Message.objects.filter( from_user__email__contains='user4demo').delete() # ~30 лидов (с разной степенью заполненности инфы и истории) for index in xrange(30): # 5 диалогов с юзерами (в тч 1 или 2 непрочитанных сообщения) if random.randrange(100) < 50 and leads_from_ad < 5: leads_from_ad += 1 ad = user.ads.order_by('?').first() message = Message(basead=ad, to_user=user) message.from_user = User.objects.filter( email__contains='user4demo').order_by('?').first() message.readed = True for i in xrange(0, 2): message.id = None message.time = datetime.datetime.now( ) - datetime.timedelta( seconds=random.randint(60 * 24, 60 * 24 * 30)) message.text = random.choice(texts_for_message) if message.readed: message.readed = random.randrange(100) < 50 message.save() lead = Lead.objects.get(owner=realtor, user=message.from_user) if random.randrange(100) < 30: lead.phone = message.from_user.phones.first().number if random.randrange(100) < 30: lead.email = message.from_user.email if random.randrange(100) < 30: lead.label = random.choice(dict(LEAD_LABELS[1:]).keys()) lead.save() else: lead = Lead.objects.create( owner=realtor, phone='38442000%d' % random.randrange(100, 1000), name=u'%s %s' % (random.choice(first_names), random.choice(last_names))) if random.randrange(100) < 30: lead.email = '%s%s@%s' % ( slugify(lead.name), random.randint(60, 95), random.choice(['ukr.net', 'gmail.com', 'mail.ru'])) if random.randrange(100) < 70: lead.label = random.choice(dict(LEAD_LABELS[1:]).keys()) lead.save() # 3 встречи в календаре на будущее, 1 просроченная. for i in xrange(8): task = Task(owner=realtor, lead=lead, basead=lead.basead) task.lead = realtor.leads.order_by('?').first() task.start = datetime.datetime.now().replace( hour=random.randint(8, 18), minute=0) + datetime.timedelta(days=random.randint(-2, 4)) task.end = task.start + datetime.timedelta(hours=1) task.name = random.choice([ u'забрать ключи', u'показ квартиры', u'составление договора', u'регистрация квартиры' ]) task.save()
def preview(self, width, height): dimensions_folder = '{0}x{1}'.format(width, height) path_to_thumbnail_dir = os.path.join('/media', self.IMAGE_UPLOAD_TO, 'thumbnails', dimensions_folder) return '{0}/{1}.jpg'. format(path_to_thumbnail_dir, slugify(self.article)).encode('utf-8')
def gen_slug(s): slug = slugify(s) return slug + '-' + str(int(time()))
def save(self, *args, **kwargs): self.slug = slugify(self.user, ) super(Author, self).save(*args, **kwargs)
def get_slugified_name(filename): slugified = slugify(filename) return slugified or get_random_string()
def save(self, *args, **kwargs): self.slug = slugify(self.user.get_fio() or self.user.username) super().save(*args, **kwargs)
def save(self, *args, **kwargs): if not self.id: self.slug = slugify(self.title) #чем заполнить, заголовком #super(Content, self).save(*args, **kwargs)#модель Content считается родителем, сохранить любые аргументы super(Content, self).save(*args, **kwargs)