Пример #1
0
 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)
Пример #2
0
    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
Пример #3
0
    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')
Пример #4
0
    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))
Пример #5
0
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()
Пример #6
0
 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)
Пример #7
0
 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)
Пример #8
0
    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
Пример #9
0
 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
Пример #10
0
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')
Пример #11
0
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)
Пример #12
0
 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)
Пример #13
0
 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)
Пример #14
0
    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)
Пример #15
0
    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
Пример #16
0
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.")
Пример #18
0
 def test_handle_escape(self):
     q = Quote(added_by='test runner', quote='Foo\\|Bar|Baz')
     self.assertEqual(list(q.lines), ['Foo|Bar', 'Baz'])
Пример #19
0
 def test_strip_whitespace(self):
     q = Quote(added_by='test runner', quote='Foo | Bar | Baz')
     self.assertEqual(list(q.lines), ['Foo', 'Bar', 'Baz'])
Пример #20
0
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)
Пример #21
0
 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 :|'])