def test_get_quote_id(self): quote1 = Quote("quote11", description="somequote11", created_at=None) DBSession.add(quote1) quote2 = Quote("quote22", description="somequote22", created_at=None) DBSession.add(quote2) DBSession.flush() id = 2 request = testing.DummyRequest() request.matchdict["id"] = id view_obj = QuoteView(request) response_content = view_obj.get_quote() self.assertEqual(response_content.status_code, 200)
def test_get_quotes(self): quote1 = Quote("quote111", description="somequote111", created_at=None) DBSession.add(quote1) quote2 = Quote("quote222", description="somequote222", created_at=None) DBSession.add(quote2) quote3 = Quote("quote333", description="somequote333", created_at=None) DBSession.add(quote3) DBSession.flush() request = testing.DummyRequest() view_obj = QuoteView(request=request) response = view_obj.get_quotes() self.assertEqual(response.status_code, 200) if "200" in str(request.response): return True
def handle(self, *args, **options): if Quote.objects.count() > 0: sys.exit('Not an empty DB, cowardly exiting') username = options['username'] try: user = User.objects.get(username=username) except User.DoesNotExist: error = (f'User {username} does not exist in DB, create it ' 'via manage.py or register on the quotes site') sys.exit(error) try: max_quotes = int(options['limit']) except ValueError: sys.exit('Please specify an numeric value for limit') resp = requests.get(INSPIRATIONAL_QUOTES) lines = resp.text.strip().splitlines() headers = 'quote author genre'.split() reader = csv.DictReader(lines, fieldnames=headers, delimiter=';') quotes = [] # ignore header / TODO shuffle quotes? for row in list(reader)[1:max_quotes + 1]: quote = Quote(quote=row['quote'], author=row['author'], user=user) quotes.append(quote) Quote.objects.bulk_create(quotes) print(f'Done: {max_quotes} quotes created')
def test_getAllQuotesList_whenTwoQuotes_shouldRenderCorrectTemplateWithTwoQuotes(self): user = User(username='******', password='******') user.save() profile = ProfileUser(user=user, favorite_book=None, location=None, profile_picture=None) profile.save() quotes_created = ( Quote(user=profile, text='d', author='d', image=None), Quote(user=profile, text='m', author='m', image=None), ) [quote.save() for quote in quotes_created] response = self.test_client.get(reverse('all quotes')) self.assertTemplateUsed(response, 'quotes/all_quotes_list.html') quotes = response.context['quotes'] self.assertEqual(2, len(quotes))
def save_quotes(quotes, user): quotes = list(quotes) for quote in quotes: Quote(text='\n'.join(quote['text']), legacy_hash=quote['legacy_hash'], submitter=user).save() q = Quote.objects.get(legacy_hash=quote['legacy_hash']) q.timestamp = quote['timestamp'] q.save()
def test_create_and_populateDB(self): self.config = testing.setUp() with transaction.manager: try: DBSession.add( Quote( title="quote_teste1", description= "If you don’t like unit testing your product," " most likely your customers won’t like to test it either.", created_at=None)) DBSession.add( Quote( title="quote_teste2", description= "Software testing proves the existence of bugs not their absence.", created_at=None)) DBSession.flush() except DBAPIError as exec: print("SQLAlchemy Error:", exec.args)
def test_populate_and_queryDB(self): self.config = testing.setUp() with transaction.manager: added_quote1 = Quote( title="quote_teste3", description="“All code is guilty, until proven innocent.”", created_at=None) added_quote2 = Quote( title="quote_teste4", description="“First, solve the problem. Then, write the code.”", created_at=None) DBSession.add(added_quote1) DBSession.add(added_quote2) DBSession.flush() result = DBSession.query(Quote).all() for row in result: row_dict = dict(title=row.title, description=row.description, created_at=row.created_at) print(row_dict) self.assertEqual(type(row_dict), dict)
def save(self): lines = [ Line.parse(l) for l in self.cleaned_data['quote'].splitlines() ] quote = Quote() quote.save() for line in lines: line.quote = quote line.save() return quote
def test_delete_quotes(self): quote = Quote("quote_test1", description="somequote", created_at=None) DBSession.add(quote) DBSession.flush() request = testing.DummyRequest() request.matchdict["id"] = 1 view_obj = QuoteView(request) response = view_obj.delete_quote() print(response) print(type(response.body)) self.assertEqual(response.status_code, 200) if "200" in str(request.response): return True
def quotesformview(request): if request.method == 'POST': if request.POST.get('title') and request.POST.get( 'person') and request.POST.get('quote'): quote = Quote() #quote_cate = QuoteCategory() quote.title = request.POST.get('title') quote.author = request.POST.get('person') quote.quote = request.POST.get('quote') quote.owner = request.POST.get('owner') quote.save() return redirect('quotes') else: return render(request, 'quotesform.html')
def add_quote_shortcut(request): payload = json.loads(unquote(str(request.body))[10:-1]) print(payload) added_by_userid = payload['user']['id'] added_by_username = payload['user']['name'] teamid = payload['user']['team_id'] quote = payload['message']['text'].replace('+', ' ') q = Quote(added_by_userid=added_by_userid, added_by_username=added_by_username, teamid=teamid, text=quote, channel="#slack") q.save() return HttpResponse(status=status.HTTP_200_OK)
def test_serializeModel(self): DBSession.remove() self.config = testing.setUp() id = 10 for i in range(15, 18): quote = Quote("quote_teste{0}".format(id), description="foo{0}".format(id), created_at=None) DBSession.add(quote) DBSession.flush() id += 1 rows = DBSession.query(Quote).count() random_id = (randint(1, rows)) random_json_query = DBSession.query(Quote).filter_by( id=random_id).first().to_json() print("Serialized: ", random_json_query) self.assertEqual(type(random_json_query), dict)
def test_random_queryDB(self): DBSession.remove() self.config = testing.setUp() id = 20 for i in range(1, 5): quote = Quote(title="quote_teste{0}".format(id), description="foo{0}".format(id), created_at=None) DBSession.add(quote) DBSession.flush() id += 1 rows = DBSession.query(Quote).count() print("Number of table rows", str(rows)) random_id = (randint(1, rows)) print("Picked quote:", random_id) random_query = DBSession.query(Quote).filter_by(id=random_id).first() print(random_query.to_dict()) self.assertEqual(type(random_query.to_dict()), dict)
def test_initDb(self): self.config = testing.setUp() with transaction.manager: model = Quote(title="quoteTest", description="Quality is never an accident;" " it is always the result of intelligent effort.", created_at=None) DBSession.add(model) DBSession.flush() quote_id = DBSession.query(Quote).first().to_json() json_quote = DBSession.query(Quote).filter_by( id="1").first().to_dict() description = DBSession.query(Quote.description).order_by( Quote.created_at).first() print(quote_id) print(json_quote) print(description)
def process_item(self, item, spider): """Save quotes in the database This method is called for every item pipeline component """ session = self.Session() quote = Quote() author = Author() tag = Tag() author.name = item["author_name"] author.birthday = item["author_birthday"] author.bornlocation = item["author_bornlocation"] author.bio = item["author_bio"] quote.quote_content = item["quote_content"] # check whether the author exists exist_author = session.query(Author).filter_by( name=author.name).first() if exist_author is not None: # the current author exists quote.author = exist_author else: quote.author = author # check whether the current quote has tags or not if "tags" in item: for tag_name in item["tags"]: tag = Tag(name=tag_name) # check whether the current tag already exists in the database exist_tag = session.query(Tag).filter_by(name=tag.name).first() if exist_tag is not None: # the current tag exists tag = exist_tag quote.tags.append(tag) try: session.add(quote) session.commit() except: session.rollback() raise finally: session.close() return item
def add_quote(request): body = str(request.body) if body.find('&') == -1: payload = json.loads(unquote(body)[10:-1]) print(payload) try: added_by_userid = payload['user']['id'] added_by_username = payload['user']['name'] teamid = payload['user']['team_id'] quote = payload['message']['text'].replace('+', ' ') except KeyError: data = { "response_type": "in_channel", "text": f"You need to provide a quote to add!", } return JsonResponse(data) else: payload = dict(item.split("=") for item in body.split('&')) try: added_by_userid = payload['user_id'] added_by_username = payload['user_name'] teamid = payload['team_id'] quote = payload['text'] except KeyError: data = { "response_type": "in_channel", "text": f"You need to provide a quote to add!", } return JsonResponse(data) q = Quote(added_by_userid=added_by_userid, added_by_username=added_by_username, teamid=teamid, text=quote, channel="#slack") q.save() data = { "response_type": "in_channel", "text": f"Quote added as #{q.id}", } return JsonResponse(data)
def handle(self, *args, **options): if Quote.objects.count() > 0: sys.exit("Database is not empty. Aborting population.") username = options["username"] try: user = User.objects.get(username=username) except User.DoesNotExist: error = ( f"User {username} does not exist in the DB. Create the user" "via `manage.py createsuperuser` or register on the page.") try: max_quotes = int(options["limit"]) except ValueError: sys.exit("Limit has to be numeric!") response = requests.get(QUOTE_RESOURCE) lines = response.text.strip().splitlines() headers = "quote author genre".split( ) # What a strange way to create a list. reader = csv.DictReader(lines, fieldnames=headers, delimiter=";") quotes = [] first_content_row = 1 last_content_row = first_content_row + max_quotes for row in list(reader)[first_content_row:last_content_row]: quote = Quote( quote=row["quote"], author=row["author"], user=user, ) quotes.append(quote) Quote.objects.bulk_create(quotes) created_quotes_count = len(quotes) print(f"Done. {created_quotes_count} quotes created.")
def test_handle_escape(self): q = Quote(added_by='test runner', quote='Foo\\|Bar|Baz') self.assertEqual(list(q.lines), ['Foo|Bar', 'Baz'])
def test_strip_whitespace(self): q = Quote(added_by='test runner', quote='Foo | Bar | Baz') self.assertEqual(list(q.lines), ['Foo', 'Bar', 'Baz'])
def home(request): """ Displays list of generated quotes from quotesondesign. """ if request.method == "GET": posts = request.GET.get('posts', 4) page = request.GET.get('page', 1) # response = requests.get("https://quotesondesign.com/wp-json/wp/v2/posts?filter[orderby]=rand&filter[posts_per_page]=30") response = requests.get( "https://quotesondesign.com/wp-json/wp/v2/posts/?orderby=rand&filter[posts_per_page]=30" ) data = response.json() quotes = [] for dict_item in data: quote = Quote() quote.content = list( map(lambda d: parse_content(d), [ value['rendered'] for key, value in dict_item.items() if key == "content" ]))[0] # temporary update after API v5.0 quote.author = dict_item['title'][ 'rendered'] # temporary update after API v5.0 check = Quote.objects.filter(content=quote.content).all( ) # returns Queryset if quote content exists if not check: quote.save() else: quote.id = check.values("id")[0][ 'id'] # If in database, store existing quote id into object sent for template rendering q = Quote.objects.get( id=quote.id) # fetches quote from database quote.no_user_likes = q.like_set.all().count( ) # generate number of user likes for particular quote quote.no_user_favourites = q.favourite_set.all().count( ) # generate number of user likes for particular quote quote.check_liked = check.values("check_liked")[0][ "check_liked"] # check if quote has been liked by logged in user quote.check_favourited = check.values("check_favourited")[0][ "check_favourited"] # check if quote has been favourited by logged in user quotes.append(quote) # Paginate quotes quotes = quotes_paginator(quotes, posts, page) return render( request, 'quotes/home.html', { 'quotes': quotes, 'posts': posts, 'page': page, 'max_posts': list(range(3, 6)) }) elif request.method == "POST": # URL queries are always fetched via GET, not POST; request.POST.get() is only for retrieving from request.body posts = request.GET.get('posts', 4) page = request.GET.get('page', 1) if request.user is not AnonymousUser and isinstance( request.POST.get('submit_user_like'), str): quote_id = request.POST.get("submit_user_like") Like.objects.get_or_create( user=request.user, quote_id=quote_id ) # Creates Like entry in table quotes_like. Outputs (Like object, boolean on whether created) quote = Quote.objects.get(id=quote_id) if (quote.check_liked == True): quote.check_liked = False quote.save() Like.objects.filter(quote=quote_id).delete() messages.success(request, "Unliked!") else: quote.check_liked = True quote.save() messages.success(request, "Liked!") elif request.user is not AnonymousUser and isinstance( request.POST.get('submit_user_favourite'), str): quote_id = request.POST.get("submit_user_favourite") Favourite.objects.get_or_create( user=request.user, quote_id=request.POST.get('submit_user_favourite')) quote = Quote.objects.get(id=quote_id) if (quote.check_favourited == True): quote.check_favourited = False quote.save() Favourite.objects.filter(quote=quote_id).delete() messages.success(request, "Removed from favourites!") else: quote.check_favourited = True quote.save() messages.success(request, "Favourited!") # Build redirect string back to 'quotes-home' with 'posts' and 'page' url query base_url = reverse('quotes-home') query_string = urlencode({'posts': posts, 'page': page}) url = '{}?{}'.format(base_url, query_string) return redirect(url)
def test_strip_escape(self): q = Quote(added_by='test runner', quote='I guess !qsay is broken :\\|') self.assertEqual(list(q.lines), ['I guess !qsay is broken :|'])