diff --git a/buildout.cfg b/buildout.cfg index 86d7456..025a314 100644 --- a/buildout.cfg +++ b/buildout.cfg @@ -2,13 +2,14 @@ newest = false extensions = gp.vcsdevelop parts = eggs test -develop = . pyramidapp +develop = . pyramidapp ../fa.jquery [eggs] recipe = zc.recipe.egg eggs = pyramid_formalchemy pyramidapp + fa.jquery WebTest PasteScript Sphinx @@ -20,7 +21,7 @@ eggs = nose initialization = import os - os.chdir('pyramidapp') + os.chdir(os.path.join('${buildout:directory}', 'pyramidapp')) scripts= nosetests=nosetests paster=paster_serve diff --git a/pyramid_formalchemy/__init__.py b/pyramid_formalchemy/__init__.py index cf01fa5..443a59c 100644 --- a/pyramid_formalchemy/__init__.py +++ b/pyramid_formalchemy/__init__.py @@ -1,9 +1,18 @@ # -*- coding: utf-8 -*- def include(config): + """include formalchemy's zcml""" + config.load_zcml('pyramid.includes:configure.zcml') config.load_zcml('pyramid_formalchemy:configure.zcml') + config.load_zcml('pyramid_formalchemy:views.zcml') -def configure(config, models=None, forms=None, session_factory=None, package=None): +def include_jquery(config): + """include formalchemy's zcml""" + config.load_zcml('pyramid.includes:configure.zcml') + config.load_zcml('pyramid_formalchemy:configure.zcml') + config.load_zcml('fa.jquery:configure.zcml') + +def configure(config, models=None, forms=None, session_factory=None, package=None, use_jquery=True): """configure formalchemy's admin interface""" if models: models = config.maybe_dotted(models) @@ -26,6 +35,9 @@ def configure(config, models=None, forms=None, session_factory=None, package=Non 'fa.session_factory': session_factory, }) - config.add_route('fa_admin', '/admin/*traverse', - factory='pyramid_formalchemy.resources.AdminView') - + if use_jquery: + config.add_route('fa_admin', '/admin/*traverse', + factory='pyramid_formalchemy.resources.AdminView') + else: + config.add_route('fa_admin', '/admin/*traverse', + factory='pyramid_formalchemy.resources.AdminView') diff --git a/pyramid_formalchemy/configure.zcml b/pyramid_formalchemy/configure.zcml index 3547854..940a647 100644 --- a/pyramid_formalchemy/configure.zcml +++ b/pyramid_formalchemy/configure.zcml @@ -1,122 +1,9 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/pyramid_formalchemy/resources.py b/pyramid_formalchemy/resources.py index 892d1e7..c1e9e5a 100644 --- a/pyramid_formalchemy/resources.py +++ b/pyramid_formalchemy/resources.py @@ -8,7 +8,7 @@ class AdminView(object): request.format = 'html' self.__parent__ = self.__name__ = None def __getitem__(self, item): - if item in ('json',): + if item in ('json', 'xhr'): self.request.format = item return self model = ModelListing(self.request, item) @@ -22,7 +22,7 @@ class ModelListing(object): self.__name__ = name self.__parent__ = None def __getitem__(self, item): - if item in ('json',): + if item in ('json', 'xhr'): self.request.format = item return self if item in ('new',): diff --git a/pyramid_formalchemy/view.zcml b/pyramid_formalchemy/view.zcml new file mode 100644 index 0000000..20e1093 --- /dev/null +++ b/pyramid_formalchemy/view.zcml @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pyramid_formalchemy/views.py b/pyramid_formalchemy/views.py index d06a7ff..5ce1da9 100644 --- a/pyramid_formalchemy/views.py +++ b/pyramid_formalchemy/views.py @@ -11,7 +11,9 @@ from formalchemy import fatypes from pyramid.view import view_config from pyramid.renderers import render from pyramid.renderers import get_renderer +from pyramid.response import Response from pyramid import httpexceptions as exc +from pyramid.exceptions import NotFound try: from formalchemy.ext.couchdb import Document @@ -99,7 +101,7 @@ class ModelView(object): return model elif hasattr(self.model, self.model_name): return getattr(self.model, self.model_name) - raise exc.HTTPNotFound(description='model %s not found' % self.model_name) + raise NotFound() def get_fieldset(self, id): if self.forms and hasattr(self.forms, self.model_name): @@ -166,7 +168,7 @@ class ModelView(object): if meth is not None: return meth(**kwargs) else: - return exc.HTTPNotfound() + raise NotFound() kwargs.update( main = get_renderer('pyramid_formalchemy:templates/admin/master.pt').implementation(), model_name=self.model_name, @@ -196,18 +198,18 @@ class ModelView(object): return data def render_xhr_format(self, fs=None, **kwargs): - response.content_type = 'text/html' + self.request.response_content_type = 'text/html' if fs is not None: - if 'field' in request.GET: - field_name = request.GET.get('field') + if 'field' in self.request.GET: + field_name = self.request.GET.get('field') fields = fs.render_fields if field_name in fields: field = fields[field_name] return field.render() else: - return exc.HTTPNotfound() - return fs.render() - return '' + raise NotFound() + return Response(fs.render()) + return Response('') def get_page(self, **kwargs): """return a ``webhelpers.paginate.Page`` used to display ``Grid``. @@ -252,7 +254,7 @@ class ModelView(object): model = S.query(model).get(id) if model: return model - raise exc.HTTPNotFound() + raise NotFound() def get_fieldset(self, id=None): """return a ``FieldSet`` object bound to the correct record for ``id``. diff --git a/pyramidapp/pyramidapp.db b/pyramidapp/pyramidapp.db new file mode 100644 index 0000000..cbf4612 Binary files /dev/null and b/pyramidapp/pyramidapp.db differ diff --git a/pyramidapp/pyramidapp/__init__.py b/pyramidapp/pyramidapp/__init__.py index 9a76d61..faea3d8 100644 --- a/pyramidapp/pyramidapp/__init__.py +++ b/pyramidapp/pyramidapp/__init__.py @@ -13,8 +13,8 @@ def main(global_config, **settings): config.add_static_view('static', 'pyramidapp:static') config.add_route('home', '/', view='pyramidapp.views.my_view', view_renderer='templates/mytemplate.pt') - pyramid_formalchemy.include(config) - pyramid_formalchemy.configure(config, package='pyramidapp') + pyramid_formalchemy.include_jquery(config) + pyramid_formalchemy.configure(config, package='pyramidapp', use_jquery=True) return config.make_wsgi_app()