From bd291d6e6c03bc075ff2d6e6a62ad93766b283e3 Mon Sep 17 00:00:00 2001 From: Patrick McDonagh Date: Mon, 13 Feb 2017 15:04:07 -0600 Subject: [PATCH] Card data working in website, get cards by date & page --- www/pocwww/development.ini | 3 +- www/pocwww/pocwww/__init__.py | 4 +- www/pocwww/pocwww/templates/cardlist.jinja2 | 29 ++++++- www/pocwww/pocwww/templates/datelist.jinja2 | 23 ++++++ www/pocwww/pocwww/templates/layout.jinja2 | 78 +++++++++---------- www/pocwww/pocwww/templates/pagination.jinja2 | 41 ++++++++++ www/pocwww/pocwww/views.py | 75 ++++++++++++++++-- 7 files changed, 201 insertions(+), 52 deletions(-) create mode 100644 www/pocwww/pocwww/templates/datelist.jinja2 create mode 100644 www/pocwww/pocwww/templates/pagination.jinja2 diff --git a/www/pocwww/development.ini b/www/pocwww/development.ini index 6b27287..396142f 100644 --- a/www/pocwww/development.ini +++ b/www/pocwww/development.ini @@ -18,7 +18,8 @@ pyramid.includes = # '127.0.0.1' and '::1'. # debugtoolbar.hosts = 127.0.0.1 ::1 -mongo_uri = mongodb://localhost:27017/poc +# mongo_uri = mongodb://localhost:27017/poc +mongo_uri = mongodb://10.20.155.202:27017/poc ### diff --git a/www/pocwww/pocwww/__init__.py b/www/pocwww/pocwww/__init__.py index 1ca1f98..65c7d62 100644 --- a/www/pocwww/pocwww/__init__.py +++ b/www/pocwww/pocwww/__init__.py @@ -31,8 +31,10 @@ def main(global_config, **settings): config.add_request_method(add_db, 'db', reify=True) config.add_static_view('static', 'static', cache_max_age=3600) config.add_route('home', '/') - config.add_route('cards_page', '/cards/{page_num}') + config.add_route('cards_page', '/cards/{cards_date}/{page_num}') + config.add_route('cards_date', '/cards/{cards_date}') config.add_route('cards', '/cards') + config.add_route('card_single', "/card/view/{stroke_number}") config.scan() return config.make_wsgi_app() diff --git a/www/pocwww/pocwww/templates/cardlist.jinja2 b/www/pocwww/pocwww/templates/cardlist.jinja2 index ca11d1b..1b50abf 100644 --- a/www/pocwww/pocwww/templates/cardlist.jinja2 +++ b/www/pocwww/pocwww/templates/cardlist.jinja2 @@ -1,10 +1,31 @@ +{% from 'pagination.jinja2' import render_pagination %} + + {% extends "layout.jinja2" %} {% block content %}
-

Card Data Page {{page_num}} / {{total_pages}}

- {% for card in cards %} -

{{card.timestamp}}

- {% endfor %} +

Card Data Page {{page_num}} / {{total_pages}}

+ +
+ {{render_pagination(pagination, "/cards/" + cards_date)}} +
+ + + + + + + + + {% for card in cards %} + + + + + {% endfor %} + +
StrokeDatetime
{{card.strokeNumber}}{{card.timestamp}}
{% endblock content %} diff --git a/www/pocwww/pocwww/templates/datelist.jinja2 b/www/pocwww/pocwww/templates/datelist.jinja2 new file mode 100644 index 0000000..ae65d06 --- /dev/null +++ b/www/pocwww/pocwww/templates/datelist.jinja2 @@ -0,0 +1,23 @@ +{% extends "layout.jinja2" %} + +{% block content %} +
+

Card Dates

+ + + + + + + + {% for day in datelist %} + + + + + {% endfor %} + +
DateCards
{{day.date}}{{day.count}} cards
+
+{% endblock content %} diff --git a/www/pocwww/pocwww/templates/layout.jinja2 b/www/pocwww/pocwww/templates/layout.jinja2 index 2963f60..72f6e0f 100644 --- a/www/pocwww/pocwww/templates/layout.jinja2 +++ b/www/pocwww/pocwww/templates/layout.jinja2 @@ -1,6 +1,6 @@ - + @@ -28,52 +28,52 @@ - + - +
-
-
- + diff --git a/www/pocwww/pocwww/templates/pagination.jinja2 b/www/pocwww/pocwww/templates/pagination.jinja2 new file mode 100644 index 0000000..48c433f --- /dev/null +++ b/www/pocwww/pocwww/templates/pagination.jinja2 @@ -0,0 +1,41 @@ +{% macro render_pagination(pagination, endpoint) %} + + + +{% endmacro %} diff --git a/www/pocwww/pocwww/views.py b/www/pocwww/pocwww/views.py index 0952882..7fc101a 100644 --- a/www/pocwww/pocwww/views.py +++ b/www/pocwww/pocwww/views.py @@ -1,11 +1,47 @@ from pyramid.view import view_config +from datetime import datetime, timedelta from math import ceil +class Pagination(object): + + def __init__(self, page, per_page, total_count): + self.page = page + self.per_page = per_page + self.total_count = total_count + self.prev_num = page - 1 + self.next_num = page + 1 + + @property + def pages(self): + return int(ceil(self.total_count / float(self.per_page))) + + @property + def has_prev(self): + return self.page > 1 + + @property + def has_next(self): + return self.page < self.pages + + def iter_pages(self, left_edge=2, left_current=2, + right_current=5, right_edge=2): + last = 0 + for num in range(1, self.pages + 1): + if num <= left_edge or \ + (num > self.page - left_current - 1 and + num < self.page + right_current) or \ + num > self.pages - right_edge: + if last + 1 != num: + yield None + yield num + last = num + + @view_config(route_name='home', renderer='templates/mytemplate.jinja2') def my_view(request): - return {'project': 'POC Web Interface'} + return {'project': 'POC Web Interface', 'navgroup':'dashboard'} def card_page(request): @@ -15,19 +51,44 @@ def card_page(request): except KeyError: pass + cards_date_start = datetime.utcnow().replace(hour=0, minute=0, second=0, microsecond=0) + try: + cards_date_start = datetime.strptime(request.matchdict['cards_date'], "%Y-%m-%d") + except KeyError: + pass + + cards_date_end = cards_date_start + timedelta(days=1) + num_per_page = 100 - num_cards = request.db['cards'].count() + num_cards = request.db['cards'].find({'timestamp': {'$lt': cards_date_end, '$gte': cards_date_start}}).count() pages = ceil(num_cards / num_per_page) - cards = request.db['cards'].find().sort("timestamp", -1).skip(num_per_page * (page_num - 1)).limit(num_per_page) - return {'cards': list(cards), 'page_num': page_num, 'total_pages': pages} + cards = request.db['cards'].find({'timestamp': {'$lt': cards_date_end, '$gte': cards_date_start}}).sort("timestamp", -1).skip(num_per_page * (page_num - 1)).limit(num_per_page) + return {'cards': list(cards), 'pagination': Pagination(page_num, num_per_page, num_cards), 'cards_date': cards_date_start.strftime("%Y-%m-%d"), 'navgroup': 'cards'} -@view_config(route_name='cards', renderer='templates/cardlist.jinja2') +@view_config(route_name='cards', renderer='templates/datelist.jinja2') def cards(request): - return card_page(request) + datelist = [] + dateagg = request.db['cards'].aggregate([ + {"$group": { + "_id": {"$concat": [ + {"$substr": [{"$year": "$timestamp"}, 0, 4]}, + "-", + {"$substr": [{"$month": "$timestamp"}, 0, 2]}, + "-", + {"$substr": [{"$dayOfMonth": "$timestamp"}, 0, 2]}, + ]}, + "count": {"$sum": 1} + }}, + {"$sort": {"_id": 1}} + ], useCursor=False) + for d in dateagg: + datelist.append({'count': d['count'], 'date': datetime.strptime(d['_id'], "%Y-%m-%d").date()}) + return {'datelist': list(datelist), 'navgroup': 'cards'} +@view_config(route_name='cards_date', renderer='templates/cardlist.jinja2') @view_config(route_name='cards_page', renderer='templates/cardlist.jinja2') def cards_page(request): return card_page(request) @@ -36,4 +97,4 @@ def cards_page(request): @view_config(route_name='card_single', renderer='templates/cardsingle.jinja2') def card_single(request): card = list(request.db['cards'].find({"strokeNumber": int(request.matchdict['stroke_number'])})) - return {"card": card[0]} + return {"card": card[0], 'navgroup': 'cards'}