Card data working in website, get cards by date & page
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
###
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -1,10 +1,31 @@
|
||||
{% from 'pagination.jinja2' import render_pagination %}
|
||||
|
||||
|
||||
{% extends "layout.jinja2" %}
|
||||
|
||||
{% block content %}
|
||||
<div class="content">
|
||||
<h1>Card Data Page {{page_num}} / {{total_pages}}</h1>
|
||||
{% for card in cards %}
|
||||
<p><a href="/card/view/{{card.strokeNumber}}">{{card.timestamp}}</a></p>
|
||||
{% endfor %}
|
||||
<h1>Card Data Page {{page_num}} / {{total_pages}}</h1>
|
||||
|
||||
<div style="text-center">
|
||||
{{render_pagination(pagination, "/cards/" + cards_date)}}
|
||||
</div>
|
||||
|
||||
<table class="table table-striped"
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Stroke</th>
|
||||
<th>Datetime</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for card in cards %}
|
||||
<tr>
|
||||
<td>{{card.strokeNumber}}</td>
|
||||
<td><a href="/card/view/{{card.strokeNumber}}">{{card.timestamp}}</a></td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{% endblock content %}
|
||||
|
||||
23
www/pocwww/pocwww/templates/datelist.jinja2
Normal file
23
www/pocwww/pocwww/templates/datelist.jinja2
Normal file
@@ -0,0 +1,23 @@
|
||||
{% extends "layout.jinja2" %}
|
||||
|
||||
{% block content %}
|
||||
<div class="content">
|
||||
<h1>Card Dates </h1>
|
||||
<table class="table table-striped"
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Date</th>
|
||||
<th>Cards</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for day in datelist %}
|
||||
<tr>
|
||||
<td><a href="/cards/{{day.date}}">{{day.date}}</a></td>
|
||||
<td>{{day.count}} cards</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{% endblock content %}
|
||||
@@ -1,6 +1,6 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
@@ -28,52 +28,52 @@
|
||||
|
||||
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
|
||||
<!--[if lt IE 9]>
|
||||
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
|
||||
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
|
||||
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
|
||||
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
|
||||
<![endif]-->
|
||||
</head>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<body>
|
||||
|
||||
<nav class="navbar navbar-inverse navbar-fixed-top">
|
||||
<div class="container-fluid">
|
||||
<div class="navbar-header">
|
||||
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a class="navbar-brand" href="#">Henry POC</a>
|
||||
<div class="container-fluid">
|
||||
<div class="navbar-header">
|
||||
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a class="navbar-brand" href="#">Henry POC</a>
|
||||
</div>
|
||||
<div id="navbar" class="navbar-collapse collapse">
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<li><a href="/configuration">Configuration</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div id="navbar" class="navbar-collapse collapse">
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<li><a href="/configuration">Configuration</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-sm-3 col-md-2 sidebar">
|
||||
<ul class="nav nav-sidebar">
|
||||
<li class="active"><a href="/">Dashboard</a></li>
|
||||
<li><a href="/cards">Cards</a></li>
|
||||
<li><a href="/values">Values</a></li>
|
||||
<li><a href="/gaugeoff">Gauge-Off</a></li>
|
||||
</ul>
|
||||
<ul class="nav nav-sidebar">
|
||||
<li><a href="/fluidshots">Fluid Shots</a></li>
|
||||
<li><a href="/welltests">Well Tests</a></li>
|
||||
</ul>
|
||||
<div class="row">
|
||||
<div class="col-sm-3 col-md-2 sidebar">
|
||||
<ul class="nav nav-sidebar">
|
||||
<li {% if (navgroup == 'dashboard') %}class="active"{% endif %}><a href="/">Dashboard</a></li>
|
||||
<li {% if (navgroup == 'cards') %}class="active"{% endif %}><a href="/cards">Cards</a></li>
|
||||
<li {% if (navgroup == 'values') %}class="active"{% endif %}><a href="/values">Values</a></li>
|
||||
<li {% if (navgroup == 'gaugeoff') %}class="active"{% endif %}><a href="/gaugeoff">Gauge-Off</a></li>
|
||||
</ul>
|
||||
<ul class="nav nav-sidebar">
|
||||
<li><a href="/fluidshots">Fluid Shots</a></li>
|
||||
<li><a href="/welltests">Well Tests</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
|
||||
{% block content %}
|
||||
<p>No content</p>
|
||||
{% endblock content %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
|
||||
{% block content %}
|
||||
<p>No content</p>
|
||||
{% endblock content %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Bootstrap core JavaScript
|
||||
@@ -82,5 +82,5 @@
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
|
||||
<!-- Latest compiled and minified JavaScript -->
|
||||
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
|
||||
</body>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
41
www/pocwww/pocwww/templates/pagination.jinja2
Normal file
41
www/pocwww/pocwww/templates/pagination.jinja2
Normal file
@@ -0,0 +1,41 @@
|
||||
{% macro render_pagination(pagination, endpoint) %}
|
||||
|
||||
<ul class="pagination">
|
||||
|
||||
{% if pagination.has_prev %}
|
||||
<li>
|
||||
<a href="{{endpoint}}/{{pagination.prev_num}}" aria-label="Previous">
|
||||
<span aria-hidden="true">«</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% for p in pagination.iter_pages(left_edge=1, left_current=2, right_current=3, right_edge=1) %}
|
||||
{% if p %}
|
||||
{% if p != pagination.page %}
|
||||
<li>
|
||||
<a href="{{endpoint}}/{{p}}">{{ p }}</a>
|
||||
</li>
|
||||
{% else %}
|
||||
<li class="active">
|
||||
<a href="{{endpoint}}/{{p}}">{{ p }}</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
<li class="disabled">
|
||||
<span class="ellipsis">…</span>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
{% if pagination.has_next %}
|
||||
<li>
|
||||
<a href="{{endpoint}}/{{pagination.next_num}}" aria-label="Next">
|
||||
<span aria-hidden="true">»</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
</ul>
|
||||
|
||||
{% endmacro %}
|
||||
@@ -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'}
|
||||
|
||||
Reference in New Issue
Block a user