Conjunto de mudanças 5460 no repositório publico


Ignorar:
Timestamp:
31/10/2011 16:52:22 (8 anos atrás)
Autor:
fabianosantos
Mensagem:

Refactory do CRUD, utilizando conceitos de classe abstrata.

Localização:
il.spdo/trunk/il/spdo
Arquivos:
3 editados

Legenda:

Não Modificado
Adicionado
Removido
  • il.spdo/trunk/il/spdo/api.py

    r5457 r5460  
    11# -*- coding: utf-8 -*-
     2
     3# TODO: revisar imports
    24import os
    3 
    45from five import grok
    56from zope.interface import Interface
     
    78from zope.globalrequest import getRequest
    89from zope.app.component.hooks import getSite
    9 
    1010from il.spdo.config import MessageFactory as _
    1111from il.spdo import db
     
    2222    grok.provides(ISPDOAPI)
    2323
    24     def rec_id(self, name='id', form_name='form.widgets.id'):
    25         """Recupera o ID de um objeto no request.
    26         """
    27         request = getRequest()
    28         return request.get(name, None) or request.get(form_name, None)
     24    def rec_id(self):
     25        r = getRequest()
     26        return r.get('id', r.get('form.widgets.id', None))
    2927       
    3028
  • il.spdo/trunk/il/spdo/browser/forms/area.py

    r5448 r5460  
    11# -*- coding: utf-8 -*-
    22
     3from il.spdo.browser.forms import base
    34from five import grok
    45from plone.app.layout.navigation.interfaces import INavigationRoot
    5 from Products.statusmessages.interfaces import IStatusMessage
    6 from il.spdo.browser.forms import base
    7 from il.spdo.config import MessageFactory as _
    86from il.spdo.interfaces import IArea
    97from il.spdo.db import Area
     8from il.spdo.config import MessageFactory as _
    109from il.spdo.config import Session
    1110
     
    1918
    2019    schema = IArea
     20    klass = Area
    2121    label = _(u'Adicionar Área')
    2222    description = _(u'Formulário de cadastro de uma área do organograma.')
     
    3030        session.add(area)
    3131        session.flush()
    32         #self.area_id = area.id
    3332        return area
    34 
    35     def nextURL(self):
    36         url_base = self.context.absolute_url()
    37         self.redirect(url_base + '/@@list-area')
    3833
    3934
     
    4742
    4843    schema = IArea
     44    klass = Area
    4945    label = _(u'Editar Área')
    5046    descrition = _(u'Formulário de edição de uma área do organograma.')
    51 
    52     def getContent(self):
    53         session = Session()
    54         return session.query(Area).get(self.rec_id())
    55 
    56     def applyChanges(self, data):
    57         content = self.getContent()
    58         if content:
    59             for k, v in data.items():
    60                 setattr(content, k, v)
    61             return True
    62 
    63     def nextURL(self):
    64         url_base = self.context.absolute_url()
    65         self.redirect(url_base + '/@@show-area?id=' + self.rec_id())
    6647
    6748
     
    7556
    7657    schema = IArea
     58    klass = Area
    7759    label = _(u'Detalhes da Área')
    7860    description = _(u'Formulário de visualização de uma área do organograma.')
    79 
    80     def getContent(self):
    81         session = Session()
    82         return session.query(Area).get(self.rec_id())
    83 
    84     def nextURL(self):
    85         url_base = self.context.absolute_url()
    86         self.redirect(url_base + '/@@list-area')
    87 
    88     def editURL(self):
    89         url_base = self.context.absolute_url()
    90         self.redirect(url_base + '/@@edit-area?id=%s' % self.rec_id())
    91 
  • il.spdo/trunk/il/spdo/browser/forms/base.py

    r5439 r5460  
    11# -*- coding: utf-8 -*-
    22
     3from plone.directives import form
    34from five import grok
    4 from plone.directives import form
     5from plone.app.layout.navigation.interfaces import INavigationRoot
    56from z3c.form import button
     7from Products.statusmessages.interfaces import IStatusMessage
    68from sqlalchemy.exc import IntegrityError
    7 from plone.app.layout.navigation.interfaces import INavigationRoot
    8 from Products.statusmessages.interfaces import IStatusMessage
    99from il.spdo.config import MessageFactory as _
     10from zope.app.component.hooks import getSite
     11from Products.CMFCore.utils import getToolByName
     12from il.spdo.config import Session
     13
     14def getTableName(klass):
     15    return klass.__name__.lower()
    1016
    1117class AddForm(form.SchemaForm):
     
    2127
    2228    def nextURL(self):
    23         raise NotImplementedError
     29        urltool = getToolByName(getSite(), 'portal_url')
     30        urlbase = urltool.getPortalObject().absolute_url()
     31        self.redirect("%s%s%s" % (urlbase, '/@@list-', getTableName(self.klass)))
    2432
    2533    @button.buttonAndHandler(_(u'Cadastar'), name='cadastrar')
     
    3341            obj = self.createAndAdd(data)
    3442        except IntegrityError, e:
    35             status.add(_(u'Falha de integridade relacional: ' + str(e)), 'error')   # TODO: talvez nao seja bom mostrar o erro do banco, mas logar no event.log
     43            # TODO: talvez nao seja bom mostrar o erro do banco, mas logar no event.log
     44            status.add(_(u'Falha de integridade relacional: ' + str(e)), 'error')   
    3645        else:
    3746            status.add(_(u'Cadastro efetuado com sucesso.'), 'info')
     
    5564
    5665    def getContent(self):
    57         raise NotImplementedError
     66        session = Session()
     67        return session.query(self.klass).get(self.rec_id())
    5868
    5969    def applyChanges(self, data):
    60         raise NotImplementedError
     70        content = self.getContent()
     71        if content:
     72            for k, v in data.items():
     73                setattr(content, k, v)
     74            return True
    6175
    6276    def nextURL(self):
    63         raise NotImplementedError
     77        urltool = getToolByName(getSite(), 'portal_url')
     78        urlbase = urltool.getPortalObject().absolute_url()
     79        self.redirect("%s%s%s?id=%s" % (urlbase, '/@@show-', getTableName(self.klass), self.rec_id()))
    6480
    6581    def rec_id(self):
     
    7692            self.applyChanges(data)
    7793        except IntegrityError, e:
    78             status.add(_(u'Falha de integridade relacional: ' + str(e)), 'error')   # TODO: talvez nao seja bom mostrar o erro do banco, mas logar no event.log
     94            # TODO: talvez nao seja bom mostrar o erro do banco, mas logar no event.log
     95            status.add(_(u'Falha de integridade relacional: ' + str(e)), 'error')   
    7996        else:
    8097            status.add(_(u"Alterações efetuadas"), "info")
     
    99116    mode = 'display'
    100117
    101     def getContent(self):
    102         raise NotImplementedError
    103 
    104118    def removeItem(self):
    105119        raise NotImplementedError
    106120
     121    def getContent(self):
     122        session = Session()
     123        return session.query(self.klass).get(self.rec_id())
     124
    107125    def nextURL(self):
    108         raise NotImplementedError
     126        urltool = getToolByName(getSite(), 'portal_url')
     127        urlbase = urltool.getPortalObject().absolute_url()
     128        self.redirect("%s%s%s" % (urlbase, '/@@list-', getTableName(self.klass)))
    109129
    110130    def editURL(self):
    111         raise NotImplementedError
     131        urltool = getToolByName(getSite(), 'portal_url')
     132        urlbase = urltool.getPortalObject().absolute_url()
     133        self.redirect("%s%s%s?id=%s" % (urlbase, '/@@edit-', getTableName(self.klass), self.rec_id()))
    112134
    113135    def rec_id(self):
     
    133155        self.actions["excluir"].addClass("context")
    134156        self.actions["voltar"].addClass("standalone")
    135 
Note: Veja TracChangeset para ajuda no uso do visualizador de conjunto de mudanças.
 

The contents and data of this website are published under license:
Creative Commons 4.0 Brasil - Atribuir Fonte - Compartilhar Igual.