diff --git a/.gitignore b/.gitignore index 2b0d3df..c44aa15 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -rattail_poser.egg-info/ +rattail_demo.egg-info/ diff --git a/MANIFEST.in b/MANIFEST.in index ad763db..71cd135 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,6 +1,6 @@ # -*- mode: conf -*- -recursive-include poser/web/static *.css -recursive-include poser/web/static *.js +recursive-include rattail_demo/web/static *.css +recursive-include rattail_demo/web/static *.js -recursive-include poser/web/templates *.mako +recursive-include rattail_demo/web/templates *.mako diff --git a/README.rst b/README.rst index 1a247c1..d9633ac 100644 --- a/README.rst +++ b/README.rst @@ -1,6 +1,6 @@ -Rattail 'Poser' -=============== +Rattail Demo +============ This project serves as a working demo, to illustrate various concepts of the Rattail software framework. See the `Rattail Wiki`_ for more info. diff --git a/poser/web/templates/menu.mako b/poser/web/templates/menu.mako deleted file mode 100644 index e0fa107..0000000 --- a/poser/web/templates/menu.mako +++ /dev/null @@ -1,139 +0,0 @@ -## -*- coding: utf-8 -*- - -<%def name="main_menu_items()"> - - % if request.has_any_perm('schedule.view', 'timesheet.view'): -
  • - Time Clock - -
  • - % endif - -
  • - Products - -
  • - -
  • - Vendors - -
  • - -
  • - Company - -
  • - -
  • - Reports - -
  • - - % if request.has_any_perm('batch.handheld.list', 'batch.inventory.list'): -
  • - Batches - -
  • - % endif - - % if request.has_any_perm('users.list', 'roles.list', 'labelprofiles.list', 'settings.list', 'emailprofiles.list', 'datasyncchanges.list'): -
  • - Admin - -
  • - % endif - - % if request.user: -
  • - ${request.user}${" ({})".format(inbox_count) if inbox_count else ''} - -
  • - % else: -
  • ${h.link_to("Login", url('login'))}
  • - % endif - - diff --git a/poser/__init__.py b/rattail_demo/__init__.py similarity index 80% rename from poser/__init__.py rename to rattail_demo/__init__.py index 489a9b0..30e5b51 100644 --- a/poser/__init__.py +++ b/rattail_demo/__init__.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- """ -Rattail 'Poser' (demo project) +Rattail Demo """ from __future__ import unicode_literals, absolute_import diff --git a/poser/_version.py b/rattail_demo/_version.py similarity index 100% rename from poser/_version.py rename to rattail_demo/_version.py diff --git a/poser/web/__init__.py b/rattail_demo/web/__init__.py similarity index 100% rename from poser/web/__init__.py rename to rattail_demo/web/__init__.py diff --git a/poser/web/app.py b/rattail_demo/web/app.py similarity index 67% rename from poser/web/app.py rename to rattail_demo/web/app.py index 9eff28d..dbb35bb 100644 --- a/poser/web/app.py +++ b/rattail_demo/web/app.py @@ -15,8 +15,8 @@ def main(global_config, **settings): # set some defaults for PostgreSQL app.provide_postgresql_settings(settings) - # prefer Poser templates over Tailbone; use 'better' theme - settings.setdefault('mako.directories', ['poser.web:templates', + # prefer demo templates over tailbone; use 'better' theme + settings.setdefault('mako.directories', ['rattail_demo.web:templates', 'tailbone:templates/themes/better', 'tailbone:templates',]) @@ -24,15 +24,10 @@ def main(global_config, **settings): rattail_config = app.make_rattail_config(settings) pyramid_config = app.make_pyramid_config(settings) - # bring in the rest of Tailbone + # bring in rest of rattail-demo etc. pyramid_config.include('tailbone.static') pyramid_config.include('tailbone.subscribers') - pyramid_config.include('tailbone.views') - - # # bring in the rest of Poser - # pyramid_config.include('poser.web.subscribers') - # pyramid_config.include('poser.web.static') - # pyramid_config.include('poser.web.views') + pyramid_config.include('rattail_demo.web.views') # configure PostgreSQL some more app.configure_postgresql(pyramid_config) diff --git a/rattail_demo/web/templates/base.mako b/rattail_demo/web/templates/base.mako new file mode 100644 index 0000000..deb08b7 --- /dev/null +++ b/rattail_demo/web/templates/base.mako @@ -0,0 +1,14 @@ +## -*- coding: utf-8 -*- +<%inherit file="tailbone:templates/themes/better/base.mako" /> + +<%def name="global_title()">${"[STAGE] " if not request.rattail_config.production() else ''}Rattail Demo + +<%def name="favicon()"> + + + +<%def name="header_logo()"> + ${h.image(request.static_url('tailbone:static/img/rattail.ico'), "Header Logo", height='49')} + + +${parent.body()} diff --git a/rattail_demo/web/templates/home.mako b/rattail_demo/web/templates/home.mako new file mode 100644 index 0000000..f67c76d --- /dev/null +++ b/rattail_demo/web/templates/home.mako @@ -0,0 +1,7 @@ +## -*- coding: utf-8 -*- +<%inherit file="tailbone:templates/home.mako" /> + + diff --git a/rattail_demo/web/templates/menu.mako b/rattail_demo/web/templates/menu.mako new file mode 100644 index 0000000..5571b55 --- /dev/null +++ b/rattail_demo/web/templates/menu.mako @@ -0,0 +1,110 @@ +## -*- coding: utf-8 -*- + +<%def name="main_menu_items()"> + + % if request.has_any_perm('products.list', 'vendors.list', 'brands.list', 'families.list', 'reportcodes.list'): +
  • + Products + +
  • + % endif + + % if request.has_any_perm('people.list', 'customers.list', 'employees.list'): +
  • + People + +
  • + % endif + + % if request.has_any_perm('stores.list', 'departments.list', 'subdepartments.list'): +
  • + Company + +
  • + % endif + + % if request.has_any_perm('batch.handheld.list', 'batch.inventory.list'): +
  • + Batches + +
  • + % endif + + % if request.has_any_perm('users.list', 'roles.list', 'settings.list'): +
  • + Admin + +
  • + % endif + + % if request.user: +
  • + ${request.user}${" ({})".format(inbox_count) if inbox_count else ''} + +
  • + % else: +
  • ${h.link_to("Login", url('login'))}
  • + % endif + + diff --git a/rattail_demo/web/views/__init__.py b/rattail_demo/web/views/__init__.py new file mode 100644 index 0000000..2c2c3eb --- /dev/null +++ b/rattail_demo/web/views/__init__.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- +""" +Web views +""" + +from __future__ import unicode_literals, absolute_import + +from tailbone import views as base + + +def bogus_error(request): + """ + A special view which simply raises an error, for the sake of testing + uncaught exception handling. + """ + raise Exception("Congratulations, you have triggered a bogus error.") + + +def includeme(config): + + config.add_route('home', '/') + config.add_view(base.home, route_name='home', renderer='/home.mako') + + config.add_route('bogus_error', '/bogus-error') + config.add_view(bogus_error, route_name='bogus_error', + permission='admin') + + # TODO: merge above views into common + # core views + config.include('rattail_demo.web.views.common') + config.include('tailbone.views.auth') + + # main table views + config.include('tailbone.views.brands') + config.include('tailbone.views.customers') + config.include('tailbone.views.departments') + config.include('tailbone.views.employees') + config.include('tailbone.views.families') + 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.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') diff --git a/rattail_demo/web/views/common.py b/rattail_demo/web/views/common.py new file mode 100644 index 0000000..0098090 --- /dev/null +++ b/rattail_demo/web/views/common.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +""" +Common views +""" + +from __future__ import unicode_literals, absolute_import + +from tailbone.views import common as base + +import rattail_demo + + +class CommonView(base.CommonView): + + project_title = "Rattail Demo" + project_version = rattail_demo.__version__ + + +def includeme(config): + CommonView.defaults(config) diff --git a/setup.py b/setup.py index 28cc8a9..53148a4 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- """ -Setup script for Rattail 'Poser' +Setup script for Rattail Demo """ from __future__ import unicode_literals, absolute_import @@ -10,7 +10,7 @@ from setuptools import setup, find_packages here = os.path.abspath(os.path.dirname(__file__)) -execfile(os.path.join(here, 'poser', '_version.py')) +execfile(os.path.join(here, 'rattail_demo', '_version.py')) README = open(os.path.join(here, 'README.rst')).read() @@ -44,12 +44,13 @@ requires = [ # package # low high 'psycopg2', # 2.6.2 - 'rattail', # 0.7.25 + 'Tailbone', # 0.5.49 + 'xlrd', # 1.0.0 ] setup( - name = "rattail-poser", + name = "rattail-demo", version = __version__, author = "Lance Edgar", author_email = "lance@edbob.org", @@ -58,9 +59,7 @@ setup( long_description = README, classifiers = [ - 'Private :: Do No Upload', 'Development Status :: 3 - Alpha', - 'Environment :: Console', 'Intended Audience :: Developers', 'Natural Language :: English', 'Operating System :: OS Independent', @@ -75,7 +74,7 @@ setup( entry_points = { 'paste.app_factory': [ - 'main = poser.web.app:main', + 'main = rattail_demo.web.app:main', ], }, )