Initial content as generated from scaffold
This commit is contained in:
commit
9b0bbb74c2
27 changed files with 748 additions and 0 deletions
0
rattail_tutorial/web/__init__.py
Normal file
0
rattail_tutorial/web/__init__.py
Normal file
35
rattail_tutorial/web/app.py
Normal file
35
rattail_tutorial/web/app.py
Normal file
|
@ -0,0 +1,35 @@
|
|||
# -*- coding: utf-8; mode: python; -*-
|
||||
"""
|
||||
Rattail Tutorial web app
|
||||
"""
|
||||
|
||||
from __future__ import unicode_literals, absolute_import
|
||||
|
||||
from tailbone import app
|
||||
|
||||
|
||||
def main(global_config, **settings):
|
||||
"""
|
||||
This function returns a Pyramid WSGI application.
|
||||
"""
|
||||
# prefer Rattail Tutorial templates over Tailbone
|
||||
settings.setdefault('mako.directories', ['rattail_tutorial.web:templates',
|
||||
'tailbone:templates',])
|
||||
|
||||
# for graceful handling of postgres restart
|
||||
settings.setdefault('retry.attempts', 2)
|
||||
|
||||
# make config objects
|
||||
rattail_config = app.make_rattail_config(settings)
|
||||
pyramid_config = app.make_pyramid_config(settings)
|
||||
|
||||
# bring in the rest of Rattail Tutorial
|
||||
pyramid_config.include('rattail_tutorial.web.static')
|
||||
pyramid_config.include('rattail_tutorial.web.subscribers')
|
||||
pyramid_config.include('rattail_tutorial.web.views')
|
||||
|
||||
# for graceful handling of postgres restart
|
||||
pyramid_config.add_tween('tailbone.tweens.sqlerror_tween_factory',
|
||||
under='pyramid_tm.tm_tween_factory')
|
||||
|
||||
return pyramid_config.make_wsgi_app()
|
170
rattail_tutorial/web/menus.py
Normal file
170
rattail_tutorial/web/menus.py
Normal file
|
@ -0,0 +1,170 @@
|
|||
# -*- coding: utf-8; -*-
|
||||
"""
|
||||
Web Menus
|
||||
"""
|
||||
|
||||
from __future__ import unicode_literals, absolute_import
|
||||
|
||||
|
||||
def simple_menus(request):
|
||||
url = request.route_url
|
||||
|
||||
menus = [
|
||||
{
|
||||
'title': "Products",
|
||||
'type': 'menu',
|
||||
'items': [
|
||||
{
|
||||
'title': "Products",
|
||||
'url': url('products'),
|
||||
'perm': 'products.list',
|
||||
},
|
||||
{
|
||||
'title': "Brands",
|
||||
'url': url('brands'),
|
||||
'perm': 'brands.list',
|
||||
},
|
||||
{
|
||||
'title': "Report Codes",
|
||||
'url': url('reportcodes'),
|
||||
'perm': 'reportcodes.list',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
'title': "Vendors",
|
||||
'type': 'menu',
|
||||
'items': [
|
||||
{
|
||||
'title': "Vendors",
|
||||
'url': url('vendors'),
|
||||
'perm': 'vendors.list',
|
||||
},
|
||||
{'type': 'sep'},
|
||||
{
|
||||
'title': "Catalogs",
|
||||
'url': url('vendorcatalogs'),
|
||||
'perm': 'vendorcatalogs.list',
|
||||
},
|
||||
{
|
||||
'title': "Upload New Catalog",
|
||||
'url': url('vendorcatalogs.create'),
|
||||
'perm': 'vendorcatalogs.create',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
'title': "Company",
|
||||
'type': 'menu',
|
||||
'items': [
|
||||
{
|
||||
'title': "Stores",
|
||||
'url': url('stores'),
|
||||
'perm': 'stores.list',
|
||||
},
|
||||
{
|
||||
'title': "Departments",
|
||||
'url': url('departments'),
|
||||
'perm': 'departments.list',
|
||||
},
|
||||
{
|
||||
'title': "Subdepartments",
|
||||
'url': url('subdepartments'),
|
||||
'perm': 'subdepartments.list',
|
||||
},
|
||||
{'type': 'sep'},
|
||||
{
|
||||
'title': "Employees",
|
||||
'url': url('employees'),
|
||||
'perm': 'employees.list',
|
||||
},
|
||||
{'type': 'sep'},
|
||||
{
|
||||
'title': "Customers",
|
||||
'url': url('customers'),
|
||||
'perm': 'customers.list',
|
||||
},
|
||||
{
|
||||
'title': "Customer Groups",
|
||||
'url': url('customergroups'),
|
||||
'perm': 'customergroups.list',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
'title': "Batches",
|
||||
'type': 'menu',
|
||||
'items': [
|
||||
{
|
||||
'title': "Handheld",
|
||||
'url': url('batch.handheld'),
|
||||
'perm': 'batch.handheld.list',
|
||||
},
|
||||
{
|
||||
'title': "Inventory",
|
||||
'url': url('batch.inventory'),
|
||||
'perm': 'batch.inventory.list',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
'title': "Admin",
|
||||
'type': 'menu',
|
||||
'items': [
|
||||
{
|
||||
'title': "Users",
|
||||
'url': url('users'),
|
||||
'perm': 'users.list',
|
||||
},
|
||||
{
|
||||
'title': "User Events",
|
||||
'url': url('userevents'),
|
||||
'perm': 'userevents.list',
|
||||
},
|
||||
{
|
||||
'title': "Roles",
|
||||
'url': url('roles'),
|
||||
'perm': 'roles.list',
|
||||
},
|
||||
{'type': 'sep'},
|
||||
{
|
||||
'title': "App Settings",
|
||||
'url': url('appsettings'),
|
||||
'perm': 'settings.list',
|
||||
},
|
||||
{
|
||||
'title': "Email Settings",
|
||||
'url': url('emailprofiles'),
|
||||
'perm': 'emailprofiles.list',
|
||||
},
|
||||
{
|
||||
'title': "Email Attempts",
|
||||
'url': url('email_attempts'),
|
||||
'perm': 'email_attempts.list',
|
||||
},
|
||||
{
|
||||
'title': "Raw Settings",
|
||||
'url': url('settings'),
|
||||
'perm': 'settings.list',
|
||||
},
|
||||
{'type': 'sep'},
|
||||
{
|
||||
'title': "DataSync Changes",
|
||||
'url': url('datasyncchanges'),
|
||||
'perm': 'datasync.list',
|
||||
},
|
||||
{
|
||||
'title': "Tables",
|
||||
'url': url('tables'),
|
||||
'perm': 'tables.list',
|
||||
},
|
||||
{
|
||||
'title': "Rattail Tutorial Upgrades",
|
||||
'url': url('upgrades'),
|
||||
'perm': 'upgrades.list',
|
||||
},
|
||||
],
|
||||
},
|
||||
]
|
||||
|
||||
return menus
|
9
rattail_tutorial/web/static/__init__.py
Normal file
9
rattail_tutorial/web/static/__init__.py
Normal file
|
@ -0,0 +1,9 @@
|
|||
# -*- coding: utf-8; mode: python -*-
|
||||
"""
|
||||
Static assets
|
||||
"""
|
||||
|
||||
|
||||
def includeme(config):
|
||||
config.include('tailbone.static')
|
||||
config.add_static_view('rattail_tutorial', 'rattail_tutorial.web:static', cache_max_age=3600)
|
18
rattail_tutorial/web/subscribers.py
Normal file
18
rattail_tutorial/web/subscribers.py
Normal file
|
@ -0,0 +1,18 @@
|
|||
# -*- coding: utf-8; mode: python -*-
|
||||
"""
|
||||
Pyramid event subscribers
|
||||
"""
|
||||
|
||||
from __future__ import unicode_literals, absolute_import
|
||||
|
||||
import rattail_tutorial
|
||||
|
||||
|
||||
def add_rattail_tutorial_to_context(event):
|
||||
renderer_globals = event
|
||||
renderer_globals['rattail_tutorial'] = rattail_tutorial
|
||||
|
||||
|
||||
def includeme(config):
|
||||
config.include('tailbone.subscribers')
|
||||
config.add_subscriber(add_rattail_tutorial_to_context, 'pyramid.events.BeforeRender')
|
20
rattail_tutorial/web/templates/base_meta.mako
Normal file
20
rattail_tutorial/web/templates/base_meta.mako
Normal file
|
@ -0,0 +1,20 @@
|
|||
## -*- coding: utf-8; mode: html; -*-
|
||||
<%inherit file="tailbone:templates/base_meta.mako" />
|
||||
|
||||
## default behavior is to read app_title from settings
|
||||
## <%def name="app_title()">Rattail Tutorial</%def>
|
||||
|
||||
<%def name="favicon()">
|
||||
## <link rel="icon" type="image/x-icon" href="${request.static_url('rattail_tutorial.web:static/favicon.ico')}" />
|
||||
<link rel="icon" type="image/x-icon" href="${request.static_url('tailbone:static/img/rattail.ico')}" />
|
||||
</%def>
|
||||
|
||||
<%def name="header_logo()">
|
||||
${h.image(request.static_url('tailbone:static/img/rattail.ico'), "Header Logo", style="height: 49px;")}
|
||||
</%def>
|
||||
|
||||
<%def name="footer()">
|
||||
<p class="has-text-centered">
|
||||
${h.link_to("Rattail Tutorial {}{}".format(rattail_tutorial.__version__, '' if request.rattail_config.production() else '+dev'), url('about'))}
|
||||
</p>
|
||||
</%def>
|
14
rattail_tutorial/web/templates/home.mako
Normal file
14
rattail_tutorial/web/templates/home.mako
Normal file
|
@ -0,0 +1,14 @@
|
|||
## -*- coding: utf-8; mode: html; -*-
|
||||
<%inherit file="tailbone:templates/home.mako" />
|
||||
|
||||
<%def name="title()">Home</%def>
|
||||
|
||||
<div class="logo">
|
||||
|
||||
## ${h.image(request.static_url('rattail_tutorial.web:static/img/rattail_tutorial.jpg'), "Rattail Tutorial Logo", id='logo', width=500)}
|
||||
${h.image(request.static_url('tailbone:static/img/home_logo.png'), "Rattail Logo")}
|
||||
|
||||
</div>
|
||||
|
||||
<h1 style="text-align: center;">Welcome to Rattail Tutorial</h1>
|
||||
|
18
rattail_tutorial/web/templates/login.mako
Normal file
18
rattail_tutorial/web/templates/login.mako
Normal file
|
@ -0,0 +1,18 @@
|
|||
## -*- coding: utf-8; mode: html; -*-
|
||||
<%inherit file="tailbone:templates/login.mako" />
|
||||
|
||||
<%def name="extra_styles()">
|
||||
${parent.extra_styles()}
|
||||
<style type="text/css">
|
||||
#logo {
|
||||
margin: 40px auto;
|
||||
}
|
||||
</style>
|
||||
</%def>
|
||||
|
||||
<%def name="logo()">
|
||||
## ${h.image(request.static_url('ratbob.web:static/img/ratbob.jpg'), "Ratbob Logo", id='logo', width=500)}
|
||||
${h.image(request.static_url('tailbone:static/img/home_logo.png'), "Rattail Logo", id='logo')}
|
||||
</%def>
|
||||
|
||||
${parent.body()}
|
27
rattail_tutorial/web/templates/mobile/base.mako
Normal file
27
rattail_tutorial/web/templates/mobile/base.mako
Normal file
|
@ -0,0 +1,27 @@
|
|||
## -*- coding: utf-8; mode: html; -*-
|
||||
<%inherit file="tailbone:templates/mobile/base.mako" />
|
||||
|
||||
<%def name="app_title()">Rattail Tutorial</%def>
|
||||
|
||||
<%def name="mobile_usermenu()">
|
||||
<div id="usermenu" data-role="panel" data-display="overlay">
|
||||
<ul data-role="listview">
|
||||
<li data-icon="home">${h.link_to("Home", url('mobile.home'))}</li>
|
||||
% if request.is_root:
|
||||
<li class="root-user" data-icon="forbidden">${h.link_to("Stop being root", url('stop_root'), **{'data-ajax': 'false'})}</li>
|
||||
% elif request.is_admin:
|
||||
<li class="root-user" data-icon="forbidden">${h.link_to("Become root", url('become_root'), **{'data-ajax': 'false'})}</li>
|
||||
% endif
|
||||
<li data-icon="lock">${h.link_to("Logout", url('logout'), **{'data-ajax': 'false'})}</li>
|
||||
<li data-icon="info">${h.link_to("About {}".format(capture(self.app_title)), url('mobile.about'))}</li>
|
||||
</ul>
|
||||
</div>
|
||||
</%def>
|
||||
|
||||
<%def name="mobile_footer()">
|
||||
<div data-role="footer">
|
||||
<h4>${h.link_to("Rattail Tutorial {}{}".format(rattail_tutorial.__version__, '' if request.rattail_config.production() else '+dev'), url('mobile.about'))}</h4>
|
||||
</div>
|
||||
</%def>
|
||||
|
||||
${parent.body()}
|
8
rattail_tutorial/web/templates/mobile/home.mako
Normal file
8
rattail_tutorial/web/templates/mobile/home.mako
Normal file
|
@ -0,0 +1,8 @@
|
|||
## -*- coding: utf-8; mode: html; -*-
|
||||
<%inherit file="tailbone:templates/mobile/home.mako" />
|
||||
|
||||
<div style="text-align: center;">
|
||||
## ${h.image(request.static_url('rattail_tutorial.web:static/img/rattail_tutorial.jpg'), "Rattail Tutorial Logo", width='300')}
|
||||
${h.image(request.static_url('tailbone:static/img/home_logo.png'), "Rattail Logo", width='400')}
|
||||
<h3>Welcome to ${self.app_title()}</h3>
|
||||
</div>
|
40
rattail_tutorial/web/views/__init__.py
Normal file
40
rattail_tutorial/web/views/__init__.py
Normal file
|
@ -0,0 +1,40 @@
|
|||
# -*- coding: utf-8; mode: python; -*-
|
||||
"""
|
||||
Views
|
||||
"""
|
||||
|
||||
from __future__ import unicode_literals, absolute_import
|
||||
|
||||
|
||||
def includeme(config):
|
||||
|
||||
# core views
|
||||
config.include('rattail_tutorial.web.views.common')
|
||||
config.include('tailbone.views.auth')
|
||||
config.include('tailbone.views.tables')
|
||||
config.include('tailbone.views.upgrades')
|
||||
config.include('tailbone.views.progress')
|
||||
|
||||
# main table views
|
||||
config.include('tailbone.views.brands')
|
||||
config.include('tailbone.views.customers')
|
||||
config.include('tailbone.views.customergroups')
|
||||
config.include('tailbone.views.datasync')
|
||||
config.include('tailbone.views.departments')
|
||||
config.include('tailbone.views.email')
|
||||
config.include('tailbone.views.employees')
|
||||
config.include('tailbone.views.messages')
|
||||
config.include('tailbone.views.people')
|
||||
config.include('tailbone.views.products')
|
||||
config.include('tailbone.views.reportcodes')
|
||||
config.include('tailbone.views.roles')
|
||||
config.include('tailbone.views.settings')
|
||||
config.include('tailbone.views.shifts')
|
||||
config.include('tailbone.views.stores')
|
||||
config.include('tailbone.views.subdepartments')
|
||||
config.include('tailbone.views.users')
|
||||
config.include('tailbone.views.vendors')
|
||||
|
||||
# batch views
|
||||
config.include('tailbone.views.handheld')
|
||||
config.include('tailbone.views.inventory')
|
20
rattail_tutorial/web/views/common.py
Normal file
20
rattail_tutorial/web/views/common.py
Normal file
|
@ -0,0 +1,20 @@
|
|||
# -*- coding: utf-8; mode: python; -*-
|
||||
"""
|
||||
Common views
|
||||
"""
|
||||
|
||||
from __future__ import unicode_literals, absolute_import
|
||||
|
||||
from tailbone.views import common as base
|
||||
|
||||
import rattail_tutorial
|
||||
|
||||
|
||||
class CommonView(base.CommonView):
|
||||
|
||||
project_title = "Rattail Tutorial"
|
||||
project_version = rattail_tutorial.__version__ + '+dev'
|
||||
|
||||
|
||||
def includeme(config):
|
||||
CommonView.defaults(config)
|
Loading…
Add table
Add a link
Reference in a new issue