Files
POC-Java-www/pocwww/cards.py
2017-04-21 17:50:59 -05:00

88 lines
3.1 KiB
Python

from pyramid.view import view_config
from datetime import datetime
from datetime import timedelta
from math import ceil
from .pagination import Pagination
def get_all_dates_with_cards(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}}
])
for d in dateagg:
datelist.append({'count': d['count'], 'date': datetime.strptime(d['_id'], "%Y-%m-%d").date()})
return list(datelist)
@view_config(route_name="cards_lastcard_json", renderer="prettyjson")
def json_lastcard(request):
return get_latest_card(request)
@view_config(route_name='cards', renderer='templates/datelist.jinja2')
@view_config(route_name='cards_json', renderer='prettyjson')
def cards(request):
return {'datelist': get_all_dates_with_cards(request), 'navgroup': 'cards'}
@view_config(route_name='cards_page', renderer='templates/cardlist.jinja2')
@view_config(route_name='cards_date', renderer='templates/cardlist.jinja2')
@view_config(route_name='cards_date_json', renderer='prettyjson')
@view_config(route_name='cards_page_json', renderer='prettyjson')
def cards_page(request):
page_num = 1
try:
page_num = int(request.matchdict['page_num'])
except KeyError:
pass
cards_date_start = datetime.now().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'].find({'timestamp': {'$lt': cards_date_end, '$gte': cards_date_start}}).count()
pages = ceil(num_cards / num_per_page)
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',
'datelist': get_all_dates_with_cards(request)
}
@view_config(route_name='cards_singlecard', renderer='templates/cardsingle.jinja2')
@view_config(route_name='cards_singlecard_json', renderer='prettyjson')
def card_single(request):
card = {}
try:
card = list(request.db['cards'].find({"strokeNumber": int(request.matchdict['stroke_number'])}))[0]
except IndexError:
pass
datepage_url = request.referrer.split("/")[3:]
page_num = 1
carddate = ""
if len(datepage_url) > 2:
page_num = int(datepage_url[2])
if len(datepage_url) > 1:
carddate = datepage_url[1]
return {"card": card, 'navgroup': 'cards', 'datelist': get_all_dates_with_cards(request), 'date': carddate, 'datepage': page_num}