示例#1
0
文件: render.py 项目: foamdino/warp
 def render_view(self, request):   
     objID = int(request.resource.args[0])
     obj = store.get(self.model, objID)
     
     return helpers.renderTemplateObj(request,
                                      self._getViewTemplate(),
                                      crud=self.crudModel(obj))
示例#2
0
文件: site.py 项目: foamdino/warp
    def getSession(self, uid):
        session = store.get(DBSession, uid)

        if session is None:
            raise KeyError(uid)

        return session
示例#3
0
文件: render.py 项目: rjweir/warp
    def render_edit(self, request):
        objID = int(request.resource.args[0])
        obj = store.get(self.model, objID)

        return helpers.renderTemplateObj(request,
                                         self._getCrudTemplate(),
                                         obj=self.crudModel(obj),
                                         redirect=helpers.url(request.node, 'view', request.resource.args))
示例#4
0
文件: render.py 项目: foamdino/warp
    def render_edit(self, request):
        objID = int(request.resource.args[0])
        obj = store.get(self.model, objID)
        crud = self.crudModel(obj)

        return helpers.renderTemplateObj(request,
                                         self._getEditTemplate(),
                                         crud=crud,
                                         redirect=crud.saveRedirect(request))
示例#5
0
文件: render.py 项目: foamdino/warp
 def render_image(self, request):
     try:
         className, objID, attrName = request.resource.args
         objID = int(objID)
         klass = exposedStormClasses[className][0]
         obj = store.get(klass, objID)
     except Exception, e:
         import traceback
         traceback.print_exc()
         return NoResource().render(request)
示例#6
0
文件: render.py 项目: foamdino/warp
    def render_delete(self, request):
        objID = int(request.resource.args[0])
        obj = store.get(self.model, objID)

        if obj is not None:
            store.remove(obj)
            store.commit()

        request.redirect(helpers.url(request.node))
        return "Redirecting..."
示例#7
0
文件: colproxy.py 项目: rjweir/warp
    def save(self, val, request):
        try:
            val = int(val)
        except ValueError:
            return u"Invalid value"
            
        refClass = self.obj.__class__.__dict__[self.col]._relation.remote_cls

        obj = store.get(refClass, val)

        if obj is None:
            return u"No such object (id %s)" % val

        setattr(self.obj, self.col, obj)
示例#8
0
文件: render.py 项目: rjweir/warp
 def render_image(self, request):
     try:
         className, objID, attrName = request.resource.args
         objID = int(objID)
         klass = exposedStormClasses[className]
         obj = store.get(klass, objID)
     except:
         return NoResource().render(request)
     
     val = getattr(obj, attrName)
     
     if val is None:
         return NoResource().render(request)
     else:
         return static.Data(val, "image/jpeg").render(request)
示例#9
0
文件: colproxy.py 项目: foamdino/warp
    def render_edit(self, request):

        # Make sure it's loaded
        getattr(self.obj, self.col)

        reference = self.obj.__class__.__dict__[self.col]
        idCol = reference._local_key[0].name
        noEdit = getattr(self.obj, "noEdit", [])

        # We get the _id field here rather than the reference value
        # itself, because the reference works only on objects that
        # have been added to the store, and we want to avoid that
        # when creating things (since they may not satisfy constraints,
        # and will get added when the database gets flushed on e.g. a find())
        objID = getattr(self.obj, idCol)

        refClass = reference._relation.remote_cls
        crudClass = getCrudClass(refClass)

        if self.col in noEdit or idCol in noEdit:
            obj = store.get(refClass, objID)
            return '<input type="hidden" name="warpform-%s" value="%s" />%s' % (
                self.fieldName(),
                objID,
                crudClass(obj).name(request),
            )

        allObjs = [(crudClass(o).name(request), o) for o in store.find(refClass, *self.conditions)]
        allObjs.sort()

        if objID is None:
            sel = lambda o: ""
        else:
            sel = lambda o: ' selected="selected"' if o.id == objID else ""

        options = []

        if self.allowNone:
            options.append('<option value="">[None]</option>')

        options.extend('<option value="%s"%s>%s</option>' % (o.id, sel(o), name) for (name, o) in allObjs)

        return '<select name="warpform-%s">\n%s\n</select>' % (self.fieldName(), "\n".join(options))
示例#10
0
文件: colproxy.py 项目: foamdino/warp
    def save(self, val, request):

        try:
            if self.allowNone and val == "":
                val = None
            else:
                val = int(val)
        except ValueError:
            return u"Invalid value"

        refClass = self.obj.__class__.__dict__[self.col]._relation.remote_cls

        if val is not None:
            obj = store.get(refClass, val)
            if obj is None:
                return u"No such object (id %s)" % val
            val = obj.id

        # As in render_edit, set the _id col rather than the reference
        # itself, since the latter works only if this object is
        # already in the store
        reference = self.obj.__class__.__dict__[self.col]
        idCol = reference._local_key[0].name
        setattr(self.obj, idCol, val)
示例#11
0
文件: form.py 项目: foamdino/warp
def applyForm(objects, request):

    errors = []
    actions = []
    results = {
        'created': [],
        'updated': [],
        'deleted': [],
    }

    for jsobj in objects:

        if not all(jsobj.get(k) for k in ('action', 'model')):
            raise ValueError("Invalid object: %s" % jsobj)
            
        try:
            model, crudClass = exposedStormClasses[jsobj['model']]
        except KeyError:
            errors.append((None, u"Unknown or unexposed model: %s" % jsobj['model']))
            continue


        if jsobj['action'] == 'create':
            obj = model()
            obj.fakeID = 'n' + jsobj['id']
            results['created'].append(obj)

            # We haven't added the object to the store, because it may not
            # satisfy constraints yet. Down below, when we know things are
            # okay, we go back and add it.

        else:

            try:
                objID = int(jsobj['id'])
            except ValueError:
                errors.append((None, u"Invalid id: %s" % jsobj['id']))
                continue

            obj = store.get(model, objID)
            if obj is None:
                errors.append((None, u"Missing ID '%s' for model '%s'" % (jsobj['id'], jsobj['model'])))
                continue

            results['updated'].append(obj)


        for (key, val) in jsobj['fields'].iteritems():
            try:
                attr = str(key)
            except UnicodeEncodeError:
                errors.append((None, u"Invalid field name '%s'" % attr))
                continue

            # XXX TODO -- Access check goes here (or, uh, somewhere)
            # ...

            crud = crudClass(obj)
            actions.append( (crud, attr, val) )


    if errors:
        return (False, errors)

    for (crud, attr, val) in actions:
        error = crud.save(attr, val, request)

        if error is not None:
            key = crud.getProxy(attr, request).fieldName()
            errors.append((key, error))

    if errors:
        return (False, errors)

    for obj in results['created']:
        store.add(obj)

    return (True, results)
示例#12
0
文件: form.py 项目: rjweir/warp
def applyForm(objects, request):

    errors = []
    actions = []
    results = {
        'created': [],
        'updated': [],
        'deleted': [],
    }

    for jsobj in objects:

        if not all(jsobj.get(k) for k in ('action', 'model')):
            raise ValueError("Invalid object: %s" % jsobj)
            
        try:
            model = exposedStormClasses[jsobj['model']]
        except KeyError:
            errors.append((None, u"Unknown model: %s" % jsobj['model']))
            continue

        try:
            model.__warp_crud__
        except AttributeError:
            errors.append((None, u"Model %s has no crud class" % jsobj['model']))
            continue


        if jsobj['action'] == 'create':
            obj = model()
            store.add(obj)
            obj.fakeID = '*' + jsobj['id']
            results['created'].append(obj)

        else:

            try:
                objID = int(jsobj['id'])
            except ValueError:
                errors.append((None, u"Invalid id: %s" % jsobj['id']))
                continue

            obj = store.get(model, objID)
            if obj is None:
                errors.append((None, u"Missing ID '%s' for model '%s'" % (jsobj['id'], jsobj['model'])))
                continue

            results['updated'].append(obj)


        for (key, val) in jsobj['fields'].iteritems():
            try:
                attr = str(key)
            except UnicodeEncodeError:
                errors.append((None, u"Invalid field name '%s'" % attr))
                continue

            # XXX TODO -- Access check goes here (or, uh, somewhere)
            # ...

            crud = model.__warp_crud__(obj)
            actions.append( (crud, attr, val) )


    if errors:
        return (False, errors)

    for (crud, attr, val) in actions:
        error = crud.save(attr, val, request)
        if error is not None:
            key = crud.getProxy(attr, request).fieldName()
            errors.append((key, error))

    if errors:
        return (False, errors)

    return (True, results)
示例#13
0
文件: fulltext.py 项目: foamdino/warp
def search(term, language='english'):
    for modelName, doc_id in store.execute(SEARCH_SQL, (language, term.encode("utf-8"))):
        model = searchModels[modelName]
        yield store.get(model, doc_id)