Example #1
0
 def ht_remoteHtableViewStore(self,
                              table=None,
                              caption_field=None,
                              condition=None,
                              condition_kwargs=None,
                              caption=None,
                              dbstore=None,
                              columns=None,
                              related_kwargs=None,
                              **kwargs):
     b = Bag()
     tblobj = self.db.table(table)
     caption = caption or tblobj.name_plural
     condition_kwargs = condition_kwargs or dict()
     condition_kwargs.update(dictExtract(kwargs, 'condition_'))
     v = TableHandlerTreeResolver(_page=self,
                                  table=table,
                                  caption_field=caption_field,
                                  condition=condition,
                                  dbstore=dbstore,
                                  columns=columns,
                                  related_kwargs=related_kwargs,
                                  condition_kwargs=condition_kwargs)
     b.setItem('root',
               v,
               caption=caption,
               child_count=1,
               pkey='',
               treeIdentifier='_root_')
     return b
Example #2
0
 def ht_moveHierarchical(self,
                         table=None,
                         pkey=None,
                         into_pkey=None,
                         parent_id=None,
                         into_parent_id=None,
                         modifiers=None):
     tblobj = self.db.table(table)
     if not modifiers:
         into_pkey = into_pkey or None
         tblobj.batchUpdate(dict(parent_id=into_pkey),
                            where='$id=:pkey',
                            pkey=pkey)
         self.db.commit()
     elif (modifiers == 'Shift' or modifiers == 'Shift,Meta') and (
             into_parent_id
             == parent_id) and tblobj.column('_row_count') is not None:
         where = '$parent_id=:p_id' if parent_id else '$parent_id IS NULL'
         f = tblobj.query(where=where,
                          p_id=parent_id,
                          for_update=True,
                          order_by='$_row_count',
                          addPkeyColumn=False).fetch()
         b = Bag([(r['id'], dict(r)) for r in f])
         pref = '>' if modifiers == 'Shift' else '<'
         b.setItem(pkey, b.pop(pkey), _position='%s%s' % (pref, into_pkey))
         for k, r in enumerate(b.values()):
             counter = k + 1
             if r['_row_count'] != counter:
                 old_rec = dict(r)
                 r['_row_count'] = counter
                 tblobj.update(r, old_rec)
         self.db.commit()
Example #3
0
    def load(self):
        page = self._page
        mailbox_tblobj = page.db.table('email.mailbox')
        where = '$parent_id IS NULL'
        if self.parent_id:
            where = '$parent_id=:p_id'  #sottopratiche
        elif self.account_id:
            where = '$account_id =:a_id AND $parent_id IS NULL'
        elif self.user_id:
            where = 'user_id=:u_id AND $parent_id IS NULL'
        else:
            where = '$parent_id IS NULL AND $user_id IS NULL AND $account_id IS NULL'

        q = mailbox_tblobj.query(where=where,
                                 p_id=self.parent_id,
                                 columns='*,$child_count',
                                 a_id=self.account_id,
                                 u_id=self.user_id,
                                 order_by='$system_code,$name')
        result = Bag()
        mailboxes = q.fetch()
        for mb in mailboxes:
            record = dict(mb)
            caption = mb['name']
            pkey = record['id']
            result.setItem(pkey,
                           MailboxResolver(_page=page, parent_id=pkey),
                           caption=caption,
                           child_count=record['child_count'],
                           pkey=pkey,
                           account_id=record['account_id'],
                           system_code=record['system_code'],
                           parent_id=self.parent_id)

        return result
Example #4
0
 def _buildSiteMenu_prepare(self, menubag, basepath=None):
     basepath = basepath or []
     result = Bag()
     for node in menubag.nodes:
         value = node.getStaticValue()
         attributes = {}
         attributes.update(node.getAttr())
         currbasepath = basepath
         if 'basepath' in attributes:
             newbasepath = attributes.pop('basepath')
             if newbasepath.startswith('/'):
                 currbasepath = [self.site.home_uri + newbasepath[1:]]
             else:
                 currbasepath = basepath + [newbasepath]
         if isinstance(value, Bag):
             value = self._buildSiteMenu_prepare(value, currbasepath)
         else:
             value = None
             filepath = attributes.get('file')
             if filepath:
                 if not filepath.startswith('/'):
                     attributes['file'] = os.path.join(*(currbasepath + [filepath]))
                 else:
                     attributes['file'] = self.site.home_uri + filepath.lstrip('/')
         result.setItem(node.label, value, attributes)
     return result
Example #5
0
 def rpc_getNewEvent(self):
     b = Bag()
     b.setItem(
         'id2', None, {
             'id': 'id2',
             'date': '2008-12-26::D',
             'start_time': "2008-12-26 13:00:00::DH",
             'end_time': "2008-12-26 15:00:00::DH",
             'all_day': False,
             'repeated': False,
             'title': "Title 2",
             'description':
             "This is the body of entry with id: id3 and title: Title 3",
             'event_type': "reminder,meeting"
         })
     b.setItem(
         "2008-12-27", None, {
             'id': 'id4',
             'date': "2008-12-27::D",
             'start_time': "2008-12-27 16:00:00::DH",
             'end_time': "2008-12-27 17:00:00::DH",
             'all_day': False,
             'repeated': False,
             'title': "Title 4",
             'description':
             "This is the body of entry with id: id3 and title: Title 3",
             'event_type': "reminder,meeting"
         })
     return b
Example #6
0
 def get_datachanges(self, page_id, user=None, local_datachanges=None):
     """add???
     
     :param page_id: add???
     :param user: add???. Default value is ``None``
     :param local_datachanges: add???. Default value is ``None``
     :returns: add???
     """
     result = Bag()
     local_datachanges = local_datachanges or []
     with self.register.pageStore(page_id) as pagestore:
         external_datachanges = list(pagestore.datachanges) or []
         subscriptions = pagestore.getItem('_subscriptions') or Bag()
         pagestore.reset_datachanges()
         store_datachanges = []
         for storename, storesubscriptions in subscriptions.items():
             store = self.register.userStore(user) if storename == 'user' else self.register.stores(storename)
             with store:
                 self._get_storechanges(store, storesubscriptions.items(), page_id, store_datachanges)
                 
         for j, change in enumerate(external_datachanges + local_datachanges + store_datachanges):
             result.setItem('sc_%i' % j, change.value, change_path=change.path, change_reason=change.reason,
                            change_fired=change.fired, change_attr=change.attributes,
                            change_ts=change.change_ts, change_delete=change.delete)
     return result
Example #7
0
    def load(self):
        page = self._page
        mailbox_tblobj = page.db.table('email.mailbox')
        where = '$parent_id IS NULL'
        if self.parent_id:
            where='$parent_id=:p_id' #sottopratiche
        elif self.account_id:
            where = '$account_id =:a_id AND $parent_id IS NULL' 
        elif self.user_id:
            where='user_id=:u_id AND $parent_id IS NULL' 
        else:
            where = '$parent_id IS NULL AND $user_id IS NULL AND $account_id IS NULL'

        q = mailbox_tblobj.query(where=where,p_id=self.parent_id,columns='*,$child_count',
                                        a_id=self.account_id,u_id=self.user_id,order_by='$system_code,$name')
        result = Bag()
        mailboxes = q.fetch()
        for mb in mailboxes:
            record = dict(mb)
            caption = mb['name']
            pkey = record['id']
            result.setItem(pkey,MailboxResolver(_page=page,parent_id=pkey),
                            caption=caption,
                            child_count=record['child_count'],pkey=pkey,
                            account_id=record['account_id'],system_code=record['system_code'],
                            parent_id=self.parent_id)

        return result
Example #8
0
 def queryFromQueryBase(self):
     result = Bag()
     querybase = self.queryBase()
     op_not = querybase.get('op_not', 'yes')
     column = querybase.get('column')
     column_dtype = None
     if column:
         column_dtype = self.tblobj.column(column).getAttr('dtype')
     not_caption = '&nbsp;' if op_not == 'yes' else '!!not'
     result.setItem(
         'c_0', querybase.get('val'), {
             'op':
             querybase.get('op'),
             'column':
             column,
             'op_caption':
             '!!%s' %
             self.db.whereTranslator.opCaption(querybase.get('op')),
             'not':
             op_not,
             'not_caption':
             not_caption,
             'column_dtype':
             column_dtype,
             'column_caption':
             self.app._relPathToCaption(self.maintable, column)
         })
     return result
Example #9
0
    def main(self,root,**kwargs):
        tblnuts = self.db.table('glbl.nuts')
        b = Bag()
        root_id = tblnuts.readColumns(columns='$id',where='$code=:c',c='IT')
        z = tblnuts.query(where="""$hierarchical_pkey LIKE :p || '%%'""",p=root_id,
                        order_by='$hierarchical_pkey',columns='$hierarchical_pkey,$code,$description,$level').fetch()
        comuni_gruped = self.db.table('glbl.comune').query(columns='$codice_comune,$sigla_provincia,$denominazione,$superficie,$popolazione_residente,@sigla_provincia.nome AS nome_provincia',
                        addPkeyColumn=False).fetchGrouped('nome_provincia')  
        for r in z:
            r = dict(r)
            v = Bag()
            b.setItem(r['hierarchical_pkey'].replace('/','.'), v,**r)
            if r['level'] == 3 and r['description'] in comuni_gruped: 
                for c in comuni_gruped[r['description']]:
                    c['level'] = r['level']+1
                    v.setItem(c['codice_comune'],None,**dict(c))

        root.data('albero_comuni_z',b)   
        root.dataFormula('albero_comuni','albero_comuni.deepCopy()',albero_comuni='=albero_comuni_z',_onStart=1000)
        bc = root.borderContainer()
        left = bc.contentPane(region='left',width='600px',splitter=True)
        bc.contentPane(region='center',background='red')
        tree = left.treeGrid(storepath='albero_comuni')
        tree.column('descrizione',name='Descrizione',
                    contentCb="""return this.attr.description || (this.attr.codice_comune +'-'+ this.attr.denominazione)""")
        tree.column('superficie',dtype='L',size=60,emptyValue=0,name='Sup.')
        tree.column('popolazione_residente',dtype='L',size=60,emptyValue=0,name='Pop.')
        bc.contentPane(region='bottom',height='150px',splitter=True,background='green')
Example #10
0
 def testmerge(self):
     newbag = Bag()
     newbag.setItem('Henry',
                    self.fullbag['friends.Henry'],
                    role='documentation and tests')
     newbag.setItem('Xavier',
                    'Mr Xavier',
                    role='documentation manager',
                    age=26)
     allflagstrue = self.fullbag['office'].merge(newbag)  #all flags true
     allflagsfalse = self.fullbag['office'].merge(newbag,
                                                  upd_values=False,
                                                  add_values=False,
                                                  upd_attr=False,
                                                  add_attr=False)
     self.assertEqual(allflagsfalse.asString(),
                      self.fullbag['office'].asString())
     notupdatevalues = self.fullbag['office'].merge(newbag,
                                                    upd_values=False)
     self.assertTrue(isinstance(self.fullbag['office.Xavier'], Bag))
     notaddvalues = self.fullbag['office'].merge(newbag, add_values=False)
     self.assertEqual(len(self.fullbag['office'].items()),
                      len(notaddvalues.items()))
     notupdateattrs = self.fullbag['office'].merge(newbag, upd_attr=False)
     self.assertEqual(self.fullbag['office.Xavier?a:role'],
                      notupdateattrs['Xavier?a:role'])
     notaddattrs = self.fullbag['office'].merge(newbag, add_attr=False)
     self.assertFalse(notaddattrs.getAttr('Xavier', 'age', default=False))
Example #11
0
    def table_script_resource_tree_data(self, table=None, res_type=None):
        #pkg,tblname = table.split('.')
        tblobj = self.db.table(table)
        pkg = tblobj.pkg.name
        tblname = tblobj.name
        result = Bag()
        resources = self.site.resource_loader.resourcesAtPath(
            page=self, pkg=None, path='tables/_default/%s' % res_type)
        resources_pkg = self.site.resource_loader.resourcesAtPath(
            page=self, pkg=pkg, path='tables/%s/%s' % (tblname, res_type))
        resources_custom = self.site.resource_loader.resourcesAtPath(
            page=self,
            pkg=self.package.name,
            path='tables/_packages/%s/%s/%s' % (pkg, tblname, res_type))
        resources.update(resources_pkg)
        resources.update(resources_custom)

        forbiddenNodes = []

        def cb(node, _pathlist=None):
            has_parameters = False
            if node.attr['file_ext'] == 'py':
                resmodule = gnrImport(node.attr['abs_path'])
                tags = getattr(resmodule, 'tags', '')
                if tags and not self.application.checkResourcePermission(
                        tags, self.userTags):
                    if node.label == '_doc':
                        forbiddenNodes.append('.'.join(_pathlist))
                    return
                caption = getattr(resmodule, 'caption', node.label)
                description = getattr(resmodule, 'description', '')
                description = getattr(resmodule, 'needSelection', True)
                if node.label == '_doc':
                    result.setAttr(
                        '.'.join(_pathlist),
                        dict(caption=caption,
                             description=description,
                             tags=tags,
                             has_parameters=has_parameters))
                else:
                    mainclass = getattr(resmodule, 'Main', None)
                    assert mainclass, 'Main class is mandatory in tablescript resource'
                    has_parameters = hasattr(mainclass, 'parameters_pane')
                    result.setItem('.'.join(_pathlist + [node.label]),
                                   None,
                                   caption=caption,
                                   description=description,
                                   resource=node.attr['rel_path'][:-3],
                                   has_parameters=has_parameters)

        pl = []
        resources.walk(cb, _pathlist=pl)
        if '_common' in result:
            n = result.popNode('_common')
            if len(result):
                result.setItem('r_zz', None, caption='-')
            result.setItem(n.label, n.value, n.attr)
        for forbidden in forbiddenNodes:
            result.pop(forbidden)
        return result
Example #12
0
 def rpc_getItems(self, url=None, **kwargs):
     rss = Bag(url)['rss.channel'].digest('#v')
     rows = Bag()
     for i, item in enumerate(rss):
         if isinstance(item, Bag):
             rows.setItem('n_%i' % i, None, title=item['title'], link=item['link'], description=item['description'])
     return  rows
Example #13
0
 def getProcessesBag(self,
                     columns=None,
                     userName=None,
                     processName=None,
                     memPerc=None,
                     cpuPerc=None):
     columns = (columns or 'pid,name').split(',')
     result = Bag()
     for p in psutil.process_iter():
         if userName and userName != p.username:
             continue
         if processName and not re.match(processName, p.name):
             continue
         d = p.as_dict()
         d['create_time'] = datetime.datetime.fromtimestamp(
             d['create_time'])
         d['cpu_percent'] = d['cpu_percent'] or 0.
         d['memory_percent'] = d['memory_percent'] or 0.
         if memPerc and d['memory_percent'] < memPerc:
             continue
         if cpuPerc and d['cpu_percent'] < cpuPerc:
             continue
         row = Bag([(k, d[k]) for k in columns if k in d])
         result.setItem('p_%s' % p.pid, row)
     return result
Example #14
0
    def getSyncTables(self, _querystring=None, _id=None, **kwargs):
        result = Bag()
        if _id:
            tableobj = self.db.table(_id)
            tblattr = tableobj.attributes
            caption = tableobj.fullname
            result.setItem(
                _id.replace('.', '_'),
                None,
                caption=caption,
                multidb='complete' if tblattr['multidb'] == '*' else 'partial',
                tablename=caption,
                _pkey=caption)
            return result, dict(columns='tablename,multidb',
                                headers='Table,Multidb')
        if _querystring:
            _querystring = _querystring.replace('*', '')

        for pkgobj in self.db.packages.values():
            for tableobj in pkgobj.tables.values():
                tblattr = tableobj.attributes
                caption = tableobj.fullname
                if tblattr.get('multidb') and _querystring in caption:
                    result.setItem('%s_%s' % (pkgobj.id, tableobj.name),
                                   None,
                                   caption=caption,
                                   multidb='complete'
                                   if tblattr['multidb'] == '*' else 'partial',
                                   tablename=caption,
                                   _pkey=caption)
        return result, dict(columns='tablename,multidb',
                            headers='Table,Multidb')
Example #15
0
 def getTemplate(self, letterhead_id=None, name=None):
     if not (name or letterhead_id):
         return Bag()
     result = Bag()
     if letterhead_id:
         pkeys = self.letterheadChain(letterhead_id)
         f = self.query(where='$id IN :pkeys',
                        pkeys=pkeys,
                        columns='*,$data').fetchAsDict('id')
         if not f:
             return result
         for i, pkey in enumerate(pkeys):
             result.setItem('layer_%i' % i, Bag(f[pkey]['data']))
         if f[letterhead_id]['next_letterhead_id']:
             result['next_letterhead'] = self.getTemplate(
                 f[letterhead_id]['next_letterhead_id'])
         return result
     else:
         templatelist = name.split(',')
         f = self.query(where='$name IN :names',
                        names=templatelist,
                        columns='name,version,data').fetchAsDict(key='name')
         if not f:
             return result
         for i, name in enumerate(templatelist):
             result.setItem('layer_%i' % i, Bag(f[name]['data']))
     return result
Example #16
0
 def _columnPythonCode(self,col,relation=None):
     attributes = Bag()
     col = col.deepcopy()
     name = col.pop('name')
     dtype = col.pop('dtype')
     size = col.pop('size')
     name_long = col.pop('name_long')
     name_short = col.pop('name_short')
     tag = col.pop('tag') #column,formulaColumn,aliasColumn,pyColumn
     if dtype and dtype not in ('A','T','C'):
         attributes['dtype'] = dtype
     if size:
         attributes['size'] = size
     attributes.setItem('name_long', name_long or name,localized=True)
     if name_short:
         attributes.setItem('name_short', name_short,localized=True)
     attributes.update(col)
     relationCode = ''
     if relation and relation['relation']:
         relationCode = '.%s' %self._relationPythonCode(relation)
     coltype = 'column'
     if attributes['sql_formula'] or attributes['select'] or attributes['exists']:
         coltype = 'formulaColumn'
     elif attributes['relation_path']:
         coltype = 'aliasColumn'
     elif attributes['pymethod']:
         coltype = 'pyColumn'
     return "tbl.%s('%s'%s)%s" % (coltype,name, self.bagToArgString(attributes),relationCode)
Example #17
0
 def tableTreeBag(self, packages=None, omit=None, tabletype=None):
     """add???
     
     :param packages: add???. Default value is ``None``
     :param omit: add???. Default value is ``None``
     :param tabletype: add???. Default value is ``None``
     :returns: add???
     """
     result = Bag()
     for pkg, pkgobj in self.packages.items():
         if (pkg in packages and omit) or (not pkg in packages
                                           and not omit):
             continue
         pkgattr = dict(pkgobj.attributes)
         pkgattr['caption'] = pkgobj.attributes.get('name_long', pkg)
         result.setItem(pkg, Bag(), **pkgattr)
         for tbl, tblobj in pkgobj.tables.items():
             tblattr = dict(tblobj.attributes)
             if tabletype and tblattr.get('tabletype') != tabletype:
                 continue
             tblattr['caption'] = tblobj.attributes.get('name_long', pkg)
             result[pkg].setItem(tbl, None, **tblattr)
         if len(result[pkg]) == 0:
             result.pop(pkg)
     return result
Example #18
0
 def _columnPythonCode(self, col, relation=None):
     attributes = Bag()
     col = col.deepcopy()
     name = col.pop('name')
     dtype = col.pop('dtype')
     size = col.pop('size')
     name_long = col.pop('name_long')
     name_short = col.pop('name_short')
     tag = col.pop('tag')  #column,formulaColumn,aliasColumn,pyColumn
     if dtype and dtype not in ('A', 'T', 'C'):
         attributes['dtype'] = dtype
     if size:
         attributes['size'] = size
     attributes.setItem('name_long', name_long or name, localized=True)
     if name_short:
         attributes.setItem('name_short', name_short, localized=True)
     attributes.update(col)
     relationCode = ''
     if relation and relation['relation']:
         relationCode = '.%s' % self._relationPythonCode(relation)
     coltype = 'column'
     if attributes['sql_formula'] or attributes['select'] or attributes[
             'exists']:
         coltype = 'formulaColumn'
     elif attributes['relation_path']:
         coltype = 'aliasColumn'
     elif attributes['pymethod']:
         coltype = 'pyColumn'
     return "tbl.%s('%s'%s)%s" % (
         coltype, name, self.bagToArgString(attributes), relationCode)
Example #19
0
    def result_bag(self, result):
        error = getattr(self, 'error', None)
        page = self.page
        envelope = Bag()
        resultAttrs = {}
        if isinstance(result, tuple):
            resultAttrs = result[1]
            if len(result) == 3 and isinstance(result[2], Bag):
                page.setInClientData(result[2])
            result = result[0]
            if resultAttrs is not None:
                envelope['resultType'] = 'node'
        if error:
            envelope['error'] = error
        if isinstance(result, page.domSrcFactory):
            resultAttrs['__cls'] = 'domsource'
        if page.isLocalizer():
            envelope['_localizerStatus'] = '*_localizerStatus*'
        envelope.setItem('result', result, _attributes=resultAttrs)
        dataChanges = self.page.collectClientDatachanges()
        if dataChanges:
            envelope.setItem('dataChanges', dataChanges)
        page.response.content_type = "text/xml"
        xmlresult = envelope.toXml(unresolved=True,
                                   translate_cb=page.localizer.translateText,
                                   omitUnknownTypes=True,
                                   catalog=page.catalog)
        if page.isLocalizer():
            xmlresult = xmlresult.replace('*_localizerStatus*',
                                          page.localizer.status)

        return xmlresult
Example #20
0
    def result_bag(self, result):
        error = getattr(self, 'error', None)
        page = self.page
        envelope = Bag()
        resultAttrs = {}
        if isinstance(result, tuple):
            resultAttrs = result[1]
            if len(result) == 3 and isinstance(result[2], Bag):
                page.setInClientData(result[2])
            result = result[0]
            if resultAttrs is not None:
                envelope['resultType'] = 'node'
        if error:
            envelope['error'] = error
        if isinstance(result, page.domSrcFactory):
            resultAttrs['__cls'] = 'domsource'
        if page.isLocalizer():
            envelope['_localizerStatus'] = '*_localizerStatus*'
        envelope.setItem('result', result, _attributes=resultAttrs)
        dataChanges = self.page.collectClientDatachanges()
        if dataChanges:
            envelope.setItem('dataChanges', dataChanges)
        page.response.content_type = "text/xml"
        xmlresult = envelope.toXml(unresolved=True,
                                   translate_cb=page.localizer.translateText, omitUnknownTypes=True,
                                   catalog=page.catalog)
        if page.isLocalizer():
            xmlresult = xmlresult.replace('*_localizerStatus*', page.localizer.status)

        return xmlresult
Example #21
0
    def configDefault_CORE(self, record=None):
        stressbag = record['stress_tracks']
        stressbag['p'] = Bag(dict(track_name='Physical',
                          n_boxes=2, code='p', 
                          skill='PHYSIQUE', 
                          extra_box_1=1,
                          extra_box_2=3,
                          extra_box_3=None))
        stressbag['m'] = Bag(dict(track_name='Mental',
                              n_boxes=2, 
                              code='m', 
                              skill='WILL',
                              extra_box_1=1,
                              extra_box_2=3,
                              extra_box_3=None))

        record.update(dict(pc_phases=3,
                     game_creation=True,
                     use_phases=True))

        if record['use_approaches']:
            record.update(dict( approach_set='STD'))
        else:
            consequences_slots = Bag(record['consequences_slots'])
            consequences_slots.setItem('mild2', Bag(dict(code='m2', 
                                      shifts=2, label='Mild opt.', 
                                      skill='PHYSIQUE',
                                      lv=5)),
                                      _position=1)
            record.update(dict(stunt_sets='STD',
                                skill_sets='STD',
                                 skill_cap=4,
                                 consequences_slots=consequences_slots))
Example #22
0
 def storeBottoni(self, selected_pkey=None, **kwargs):
     tbl_prodotto_tipo = self.db.table('fatt.prodotto_tipo')
     where = """(CASE WHEN :selected_pkey IS NULL 
                      THEN $parent_id IS NULL
                      ELSE $parent_id = :selected_pkey 
                 END) AND ($child_count>0 OR @prodotti.id IS NOT NULL)
     """
     template = "%(descrizione)s"
     f = tbl_prodotto_tipo.query(where=where,
                                 selected_pkey=selected_pkey).fetch()
     _class = 'bottone bottone_tipo_prodotto'
     isFinalValue = False
     if not f:
         f = self.db.table('fatt.prodotto').query(
             where='$prodotto_tipo_id=:selected_pkey',
             selected_pkey=selected_pkey).fetch()
         template = "Codice:%(codice)s<br/>%(descrizione)s<br/>P.U.:%(prezzo_unitario)2f"
         _class = 'bottone bottone_prodotto'
         isFinalValue = True
     result = Bag()
     for i, r in enumerate(f):
         result.setItem('r_%s' % i,
                        template % r,
                        pkey=r['pkey'],
                        isFinalValue=isFinalValue,
                        _class=_class)
     return result
Example #23
0
    def _maintenance_get_items(self, items, child_name=None,exclude_guest=None, **kwargs):
        result = Bag()
        now = datetime.now()

        for item in items:
            item = dict(item)
            key = item['register_item_id']
            item.pop('data',None)
            if exclude_guest and ( key.startswith('guest_') or item.get('user','').startswith('guest_')):
                continue
            _customClasses = []
            item['_pkey'] = key
            item['alive'] = True
            item['age'] = (now - item.get('start_ts')).seconds
            item['last_refresh_age'] = (now - item.get('last_refresh_ts',item['start_ts'])).seconds
            item['last_event_age'] = (now - item.get('last_user_ts',item['start_ts'])).seconds
            item['last_rpc_age'] = (now - item.get('last_rpc_ts',item['start_ts'])).seconds
            if item['last_refresh_age'] > 60:
                item['alive'] = False
                _customClasses.append('disconnected')
            elif item['last_event_age'] > 60:
                _customClasses.append('inactive')
           #if child_name and not item[child_name]:
           #    _customClasses.append('no_children')
            item.pop('datachanges', None)
            #if child_name is None:
            #    self.maintenance_cellServerProfile(item)
            result.setItem(key, None, _customClasses=' '.join(_customClasses), **item)
        return result
Example #24
0
 def getTestData(self,
                 n=None,
                 count=None,
                 interval=None,
                 dtstart=None,
                 series=None,
                 datamode=None):
     result = Bag()
     if n:
         g = xrange(1, n)
     else:
         g = rrule.rrule(rrule.MINUTELY,
                         count=count,
                         interval=interval,
                         dtstart=dtstart)
     j = 0
     for i in g:
         attr = OrderedDict(c_0=i)
         for k, s in enumerate(series):
             attr['c_%s' % (k + 1)] = randint(*s)
         if datamode == 'value':
             result.setItem('r_%s' % j, Bag(attr))
         else:
             result.setItem('r_%s' % j, None, attr)
         j += 1
     return result
Example #25
0
 def onLoading(self, record, newrecord, loadingParameters, recInfo):
     tags = record['auth_tags']
     b = Bag()
     if tags:
         for n, tag in enumerate(tags.split(',')):
             b.setItem('r%i.tagname' % n, tag)
     record.setItem('tag_bag', b, _bag_md5=tags)
Example #26
0
 def rpc_getItems(self, url=None, **kwargs):
     rss = Bag(url)['rss.channel'].digest('#v')
     rows = Bag()
     for i, item in enumerate(rss):
         if isinstance(item, Bag):
             rows.setItem('n_%i' % i, None, title=item['title'], link=item['link'], description=item['description'])
     return  rows
Example #27
0
    def getTableContraints(self, table=None, schema=None):
        """Get a (list of) dict containing details about a column or all the columns of a table.
        Each dict has those info: name, position, default, dtype, length, notnull
        Every other info stored in information_schema.columns is available with the prefix '_mysql_'"""
        sql = """SELECT constraint_type,column_name,tc.table_name,tc.table_schema,tc.constraint_name
            FROM information_schema.table_constraints AS tc 
            JOIN information_schema.key_column_usage AS cu 
                ON cu.constraint_name=tc.constraint_name  
                WHERE constraint_type='UNIQUE'
                %s%s;"""
        filtertable = ""
        if table:
            filtertable = " AND tc.table_name=:table"
        filterschema = ""
        if schema:
            filterschema = " AND tc.table_schema=:schema"
        result = self.dbroot.execute(sql % (filtertable, filterschema),
                                     dict(schema=schema,
                                          table=table)).fetchall()

        res_bag = Bag()
        for row in result:
            row = dict(row)
            res_bag.setItem(
                '%(table_schema)s.%(table_name)s.%(column_name)s' % row,
                row['constraint_name'])
        return res_bag
Example #28
0
class DojoApiReader(object):
    discard = ['provides', 'resources', 'mixins']
    discard = []

    def __init__(self, apipath, resultpath=None):
        self.resultpath = resultpath or os.path.dirname(apipath)
        self.source = Bag(apipath)['javascript']
        self.apibag = Bag()
        for node in self.source:
            attr = dict(node.attr)
            value = node.value
            location = attr.pop('location')
            if isinstance(value, Bag):
                value = self.convertObject(value)
            if location in self.apibag:
                print 'redefining object:', location
            else:
                self.write(location, value, attr)
                self.apibag.setItem(location, value, attr)

    def write(self, location, obj, attr):
        destpath = [self.resultpath, 'objects'
                    ] + location.split('.') + 'obj.xml'
        if attr:
            print attr
        destpath = os.path.join(**destpath)
        obj.toXml(destpath, autocreate=True)

    def convertObject(self, src):
        result = Bag()
        for node in src:
            label = node.label
            if label in self.discard:
                continue
            attr = dict(node.attr)
            value = node.value
            if label == 'mixins':
                label = 'mixins_%s' % attr.get('scope', 'undefined_scope')
            if isinstance(value, Bag):
                value = self.convertItems(value)
            if label in result:
                print 'redefining:', label
            result.setItem(label, value, attr)
        return result

    def convertItems(self, items):
        result = Bag()
        for k, node in enumerate(items):
            label = node.label
            value = node.value
            attr = dict(node.attr)
            if label == 'method':
                label = attr.get('name')
            if label == 'property':
                label = attr.get('name')
            else:
                label = 'r_%i' % k
            if label:
                result.setItem(label, value, attr)
        return result
Example #29
0
class StaticHandlerManager(object):
    """ This class handles the StaticHandlers"""

    def __init__(self, site):
        self.site = site
        self.statics = Bag()

    def addAllStatics(self, module=None):
        """inspect self (or other modules) for StaticHandler subclasses and 
        do addStatic for each"""
        module = module or sys.modules[self.__module__]

        def is_StaticHandler(cls):
            return inspect.isclass(cls) and issubclass(cls, StaticHandler) and cls is not StaticHandler

        statichandler_classes = inspect.getmembers(module, is_StaticHandler)
        for statichandler in statichandler_classes:
            self.add(statichandler[1])

    def add(self, static_handler_factory, **kwargs):
        static_handler = static_handler_factory(self.site, **kwargs)
        self.statics.setItem(static_handler.prefix, static_handler, **kwargs)

    def get(self, static_name):
        return self.statics[static_name]

    def static_dispatcher(self, path_list, environ, start_response, download=False, **kwargs):
        handler = self.get(path_list[0][1:])
        if handler:
            return handler.serve(path_list, environ, start_response, download=download, **kwargs)
        else:
            return self.site.not_found_exception(environ, start_response)
Example #30
0
 def getMoverTableRows(self,tablerow=None,movercode=None,**kwargs):
     pkeys = tablerow['pkeys'].keys()
     table = tablerow['table']
     objtype = tablerow['objtype']
     tblobj = self.db.table(table)
     columns,mask = tblobj.rowcaptionDecode(tblobj.rowcaption)
     if columns:
         columns = ','.join(columns)
     f = tblobj.query(where='$pkey IN :pkeys',pkeys=tablerow['pkeys'].keys(),columns=columns).fetch()
     result = Bag()
     for r in f:
         result.setItem(r['pkey'],None,_pkey=r['pkey'],db_caption=tblobj.recordCaption(record=r),_customClasses='mover_db')
     indexpath = self.page.site.getStaticPath('user:temp','mover','index.xml')
     if os.path.isfile(indexpath):
         indexbag = Bag(indexpath)
         moverrows = indexbag.getItem('records.%s' %movercode)
         if not moverrows:
             return result
         for pkey in pkeys:
             rownode = moverrows.getNode(pkey)
             if rownode:
                 xml_caption=rownode.attr['caption']
                 if not pkey in result:
                     result.setItem(pkey,None,_pkey=pkey,xml_caption=xml_caption,_customClasses='mover_xml',objtype=objtype,table=tablerow['reftable'])
                 else:
                     result.getNode(pkey).attr.update(xml_caption=xml_caption,_customClasses='mover_both',objtype=objtype,table=tablerow['reftable'])
     return result
Example #31
0
 def fh_slotbar_form_add(self,
                         pane,
                         parentForm=True,
                         defaults=None,
                         **kwargs):
     menupath = None
     if defaults:
         menubag = Bag()
         for i, (caption, default_kw) in enumerate(defaults):
             menubag.setItem('r_%i' % i,
                             None,
                             caption=caption,
                             default_kw=default_kw)
         pane.data('.addrow_menu_store', menubag)
         menupath = '.addrow_menu_store'
         pane.slotButton('!!Add',
                         action='this.form.newrecord($1.default_kw);',
                         menupath=menupath,
                         iconClass="iconbox add_record",
                         parentForm=parentForm,
                         **kwargs)
     else:
         pane.formButton('!!Add',
                         topic='navigationEvent',
                         command='add',
                         iconClass="iconbox add_record",
                         parentForm=parentForm,
                         **kwargs)
Example #32
0
    def te_renderTemplate(self, templateBuilder, record_id=None, extraData=None, locale=None,contentOnly=False,**kwargs):
        record = Bag()
        if record_id:
            record = templateBuilder.data_tblobj.record(pkey=record_id,
                                                        virtual_columns=templateBuilder.virtual_columns).output('bag')
        else:
            record = templateBuilder.data_tblobj.record(pkey='*sample*',ignoreMissing=True,
                                                        virtual_columns=templateBuilder.virtual_columns).output('sample')
        if extraData:
            record.update(extraData)
        locale = locale or templateBuilder.locale
        formats = templateBuilder.formats or dict()
        masks = templateBuilder.masks or dict()
        editcols = templateBuilder.editcols or dict()

        df_templates = templateBuilder.df_templates or dict()
        dtypes = templateBuilder.dtypes or dict()

        record.setItem('_env_', Bag(self.db.currentEnv))
        #record.setItem('_template_', templateBuilder.doctemplate_info)
        htmlContent = templateReplace(templateBuilder.doctemplate,record, safeMode=True,noneIsBlank=False,locale=locale, 
                                                            formats=formats,masks=masks,editcols=editcols,df_templates=df_templates,
                                                            dtypes=dtypes,localizer=self.localizer,
                                                            urlformatter=self.externalUrl)
        if contentOnly:
            return htmlContent
        body = templateBuilder(htmlContent=htmlContent,
                            record=record,page_debug='silver',**kwargs)
        return body
Example #33
0
    def getTableContraints(self, table=None, schema=None):
        """Get a (list of) dict containing details about a column or all the columns of a table.
        Each dict has those info: name, position, default, dtype, length, notnull
        Every other info stored in information_schema.columns is available with the prefix '_pg_'"""
        sql = """SELECT CONSTRAINT_TYPE,COLUMN_NAME,TC.TABLE_NAME,TC.TABLE_SCHEMA,TC.CONSTRAINT_NAME
            FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS tc 
            JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE AS CU 
                ON CU.CONSTRAINT_NAME=TC.CONSTRAINT_NAME  
                WHERE CONSTRAINT_TYPE='UNIQUE'
                %s%s;"""
        filtertable = ""
        if table:
            filtertable = " AND TC.TABLE_NAME=:table"
        filterschema = ""
        if schema:
            filterschema = " AND TC.TABLE_SCHEMA=:schema"
        result = self.dbroot.execute(sql % (filtertable,filterschema),
                                      dict(schema=schema,
                                           table=table)).fetchall()

        res_bag = Bag()
        for row in result:
            row=dict(row)
            res_bag.setItem('%(TABLE_SCHEMA)s.%(TABLE_NAME)s.%(COLUMN_NAME)s'%row,row['CONSTRAINT_NAME'])
        return res_bag
Example #34
0
 def test_2_rrc(self, pane):
     """First test description"""
     pane.data('.dati', self.getDati())
     pane.dataController('SET .gridstore = dati.deepCopy();',
                         dati='=.dati',
                         _fired='^loadBag')
     frame = pane.bagGrid(
         frameCode='rrc',
         title='remoteRowController test',
         struct=self.gridstruct_2,
         height='300px',
         table='glbl.localita',
         storepath='.gridstore',
         grid_remoteRowController=self.test_remoteRowController,
         default_descrizione='riga acquisto',
         grid_remoteRowController_defaults=dict(provincia='MI', qty=8),
         grid_menuPath='aaa')
     b = Bag()
     b.setItem('m_1', None, caption='poppo', action='ciao')
     pane.data('aaa', b)
     bar = frame.bottom.slotBar('loadbtn,testbtn')
     bar.loadbtn.button('Load', fire='.loadBag')
     bar.testbtn.button('Test',
                        action="""
         var t = new gnr.GnrBag();
         t.setItem('r2',null,{city:'roma',address:'corso como'});
         t.setBackRef();
         var v = t.getItem('r2.city?=#z')
         console.log('xxxx',v)
         """)
Example #35
0
 def fgr_slotbar_addrow(
     self,
     pane,
     _class="iconbox add_row",
     disabled="^.disabledButton",
     enable=None,
     delay=300,
     defaults=None,
     **kwargs
 ):
     kwargs.setdefault("visible", enable)
     menupath = None
     if defaults:
         menubag = Bag()
         for i, (caption, default_kw) in enumerate(defaults):
             menubag.setItem("r_%i" % i, None, caption=caption, default_kw=default_kw)
         pane.data(".addrow_menu_store", menubag)
         menupath = ".addrow_menu_store"
     return pane.slotButton(
         label="!!Add",
         publish="addrow",
         iconClass=_class,
         disabled=disabled,
         _delay=delay,
         menupath=menupath,
         **kwargs
     )
Example #36
0
 def _pe_getLetterhead(self, letterhead_id=None, **kwargs):
     letterheadtbl = self.db.table('adm.htmltemplate')
     next_letterhead_id = None
     if ',' in letterhead_id:
         letterhead_id, next_letterhead_id = letterhead_id.split(',')
     else:
         next_letterhead_id = letterheadtbl.readColumns(
             pkey=letterhead_id, columns='$next_letterhead_id')
     result = Bag()
     base = letterheadtbl.getHtmlBuilder(letterhead_pkeys=letterhead_id)
     base.finalize(base.body)
     basehtml = base.root.getItem('#0.#1').toXml(
         omitRoot=True,
         autocreate=True,
         forcedTagAttr='tag',
         docHeader=' ',
         addBagTypeAttr=False,
         typeattrs=False,
         self_closed_tags=['meta', 'br', 'img'])
     result.setItem('page_base', basehtml)
     if next_letterhead_id:
         next = letterheadtbl.getHtmlBuilder(
             letterhead_pkeys=next_letterhead_id)
         base.finalize(next.body)
         nexthtml = next.root.getItem('#0.#1').toXml(
             omitRoot=True,
             autocreate=True,
             forcedTagAttr='tag',
             docHeader=' ',
             addBagTypeAttr=False,
             typeattrs=False,
             self_closed_tags=['meta', 'br', 'img'])
         result.setItem('page_next', nexthtml)
     return result
Example #37
0
    def _maintenance_get_items(self, items, child_name=None,exclude_guest=None, **kwargs):
        result = Bag()
        now = datetime.now()

        for key, item in items.items():
            item = dict(item)
            item.pop('data',None)
            if exclude_guest and ( key.startswith('guest_') or item.get('user','').startswith('guest_')):
                continue
            _customClasses = []
            item['_pkey'] = key
            item['alive'] = True
            item['age'] = (now - item['start_ts']).seconds
            last_refresh_ts = item.get('last_refresh_ts') or item['start_ts']
            last_user_ts = item.get('last_user_ts') or item['start_ts']
            last_rpc_ts = item.get('last_rpc_ts') or item['start_ts']
            item['last_refresh_age'] = (now - last_refresh_ts).seconds
            item['last_event_age'] = (now - last_user_ts).seconds
            item['last_rpc_age'] = (now - last_rpc_ts).seconds

            if item['last_refresh_age'] > 60:
                item['alive'] = False
                _customClasses.append('disconnected')
            elif item['last_event_age'] > 60:
                _customClasses.append('inactive')
           #if child_name and not item[child_name]:
           #    _customClasses.append('no_children')
            item.pop('datachanges', None)
            #if child_name is None:
            #    self.maintenance_cellServerProfile(item)
            result.setItem(key, None, _customClasses=' '.join(_customClasses), **item)
        return result
Example #38
0
    def ht_htableViewStore(self,pane,table=None,storepath='.store',caption_field=None,condition=None,caption=None,
                               dbstore=None,root_id=None,columns=None,related_kwargs=None,resolved=False,**kwargs):
        b = Bag()
        tblobj = self.db.table(table)
        caption = caption or tblobj.name_plural
        if condition:
            d = pane.dataRpc(storepath,self.ht_remoteHtableViewStore,
                        table=table,
                        caption_field=caption_field,
                        condition=condition,
                        childname='store',caption=caption,dbstore=dbstore,
                        columns=columns,related_kwargs=related_kwargs,
                        **kwargs)
            return d
        v = TableHandlerTreeResolver(_page=self,table=table,caption_field=caption_field,dbstore=dbstore,related_kwargs=related_kwargs,
                                                root_id=root_id,columns=columns)
        b.setItem('root',v,caption=tblobj.name_long,
                                                child_count=1,pkey='',treeIdentifier='_root_')
        if resolved:
            def cb(self,*args,**kwargs):
                pass
            b.walk(cb)
        d = pane.data(storepath,b,childname='store',caption=caption,table=table) 

        return d
Example #39
0
 def connected_users_bag(self, exclude=None, exclude_guest=True, max_age=600):
     users = self.page.site.register.users()
     result = Bag()
     exclude = exclude or []
     now = datetime.now()
     if isinstance(exclude, basestring):
         exclude = exclude.split(',')
     for user, arguments in users.items():
         if user in exclude:
             continue
         row = dict()
         if exclude_guest and user.startswith('guest_') or user == self.page.user:
             continue
         _customClasses = []
         row['_pkey'] = user
         row['iconClass'] = 'greenLight'
         last_refresh_ts = arguments.get('last_refresh_ts') or arguments['start_ts']
         last_user_ts = arguments.get('last_user_ts') or arguments['start_ts']
         last_refresh_age = (now - last_refresh_ts).seconds
         last_event_age = (now - last_user_ts).seconds
         if last_refresh_age > 60:
             _customClasses.append('user_disconnected')
             row['iconClass'] = 'grayLight'
         elif last_event_age>300:
             _customClasses.append('user_away')
             row['iconClass'] = 'redLight'
         elif last_event_age > 60:
             _customClasses.append('user_idle')
             row['iconClass'] = 'yellowLight'
         row['_customClasses'] = _customClasses
         row['caption'] = arguments['user_name'] or user
         row.update(arguments)
         row.pop('datachanges', None)
         result.setItem(user, None, **row)
     return result
Example #40
0
 def getTableContraints(self, table=None, schema=None):
     """Get a (list of) dict containing details about a column or all the columns of a table.
     Each dict has those info: name, position, default, dtype, length, notnull
     Every other info stored in information_schema.columns is available with the prefix '_mysql_'"""
     sql = """SELECT constraint_type,column_name,tc.table_name,tc.table_schema,tc.constraint_name
         FROM information_schema.table_constraints AS tc 
         JOIN information_schema.key_column_usage AS cu 
             ON cu.constraint_name=tc.constraint_name  
             WHERE constraint_type='UNIQUE'
             %s%s;"""
     filtertable = ""
     if table:
         filtertable = " AND tc.table_name=:table"
     filterschema = ""
     if schema:
         filterschema = " AND tc.table_schema=:schema"
     result = self.dbroot.execute(sql % (filtertable,filterschema),
                                   dict(schema=schema,
                                        table=table)).fetchall()
         
     res_bag = Bag()
     for row in result:
         row=dict(row)
         res_bag.setItem('%(table_schema)s.%(table_name)s.%(column_name)s'%row,row['constraint_name'])
     return res_bag
Example #41
0
 def _buildSiteMenu_prepare(self, menubag, basepath=None):
     basepath = basepath or []
     result = Bag()
     for node in menubag.nodes:
         value = node.getStaticValue()
         attributes = {}
         attributes.update(node.getAttr())
         currbasepath = basepath
         if 'basepath' in attributes:
             newbasepath = attributes.pop('basepath')
             if newbasepath.startswith('/'):
                 currbasepath = [self.site.home_uri + newbasepath[1:]]
             else:
                 currbasepath = basepath + [newbasepath]
         if isinstance(value, Bag):
             value = self._buildSiteMenu_prepare(value, currbasepath)
         else:
             value = None
             filepath = attributes.get('file')
             if filepath:
                 if not filepath.startswith('/'):
                     attributes['file'] = os.path.join(*(currbasepath +
                                                         [filepath]))
                 else:
                     attributes[
                         'file'] = self.site.home_uri + filepath.lstrip('/')
         result.setItem(node.label, value, attributes)
     return result
Example #42
0
 def te_menuTemplates(self,table=None):
     result = Bag()
     from_userobject = self.db.table('adm.userobject').userObjectMenu(table,'template') #todo
     for n in from_userobject:
         result.setItem(n.label,None,tplmode='userobject',**n.attr)
     result.setItem('__newtpl__',None,caption='!!New Template')
     return result
Example #43
0
 def fgr_slotbar_addrow(self,
                        pane,
                        _class='iconbox add_row',
                        disabled='^.disabledButton',
                        enable=None,
                        delay=300,
                        defaults=None,
                        **kwargs):
     kwargs.setdefault('visible', enable)
     menupath = None
     if defaults:
         menubag = None
         menupath = '.addrow_menu_store'
         if isinstance(defaults, Bag):
             menubag = defaults
         elif isinstance(defaults, basestring):
             menupath = defaults
         else:
             menubag = Bag()
             for i, (caption, default_kw) in enumerate(defaults):
                 menubag.setItem('r_%i' % i,
                                 None,
                                 caption=caption,
                                 default_kw=default_kw)
         if menubag:
             pane.data('.addrow_menu_store', menubag)
     return pane.slotButton(label='!!Add',
                            childname='addButton',
                            publish='addrow',
                            iconClass=_class,
                            disabled=disabled,
                            _delay=delay,
                            menupath=menupath,
                            **kwargs)
Example #44
0
class DojoApiReader(object):
    discard = ['provides', 'resources', 'mixins']
    discard = []

    def __init__(self, apipath, resultpath=None):
        self.resultpath = resultpath or os.path.dirname(apipath)
        self.source = Bag(apipath)['javascript']
        self.apibag = Bag()
        for node in self.source:
            attr = dict(node.attr)
            value = node.value
            location = attr.pop('location')
            if isinstance(value, Bag):
                value = self.convertObject(value)
            if location in self.apibag:
                print 'redefining object:', location
            else:
                self.write(location, value, attr)
                self.apibag.setItem(location, value, attr)

    def write(self, location, obj, attr):
        destpath = [self.resultpath, 'objects'] + location.split('.') + 'obj.xml'
        if attr:
            print attr
        destpath = os.path.join(**destpath)
        obj.toXml(destpath, autocreate=True)

    def convertObject(self, src):
        result = Bag()
        for node in src:
            label = node.label
            if label in self.discard:
                continue
            attr = dict(node.attr)
            value = node.value
            if label == 'mixins':
                label = 'mixins_%s' % attr.get('scope', 'undefined_scope')
            if isinstance(value, Bag):
                value = self.convertItems(value)
            if label in result:
                print 'redefining:', label
            result.setItem(label, value, attr)
        return result

    def convertItems(self, items):
        result = Bag()
        for k, node in enumerate(items):
            label = node.label
            value = node.value
            attr = dict(node.attr)
            if label == 'method':
                label = attr.get('name')
            if label == 'property':
                label = attr.get('name')
            else:
                label = 'r_%i' % k
            if label:
                result.setItem(label, value, attr)
        return result
Example #45
0
 def rpc_saveRecordCluster(self,
                           data,
                           table=None,
                           _nocommit=False,
                           rowcaption=None,
                           _autoreload=False,
                           **kwargs):
     """add???
     
     :param data: add???
     :param table: add???. Default value is ``None``
     :param _nocommit: boolean. add???. Default value is ``False``
     :param rowcaption: add???. Default value is ``None``
     :param _autoreload: boolean. add???. Default value is ``False``
     :returns: add???
     """
     #resultAttr = None #todo define what we put into resultAttr
     resultAttr = {}
     onSavingMethod = 'onSaving'
     onSavedMethod = 'onSaved'
     maintable = getattr(self, 'maintable')
     table = table or maintable
     tblobj = self.db.table(table)
     if table != maintable:
         onSavingMethod = 'onSaving_%s' % table.replace('.', '_')
         onSavedMethod = 'onSaved_%s' % table.replace('.', '_')
     onSavingHandler = getattr(self, onSavingMethod, None)
     onSavedHandler = getattr(self, onSavedMethod, None)
     node = data.getNode('record')
     recordCluster = node.value
     recordClusterAttr = node.getAttr()
     onSavedKwargs = dict()
     if onSavingHandler:
         onSavedKwargs = onSavingHandler(
             recordCluster, recordClusterAttr, resultAttr=resultAttr) or {}
     virtual_columns = self.pageStore().getItem(
         'tables.%s.virtual_columns' % table)
     if virtual_columns:
         for virtual_col in virtual_columns.keys():
             recordCluster.pop(virtual_col, None)
     record = tblobj.writeRecordCluster(recordCluster, recordClusterAttr)
     if onSavedHandler:
         onSavedHandler(record, resultAttr=resultAttr, **onSavedKwargs)
     if not _nocommit:
         self.db.commit()
     if not 'caption' in resultAttr:
         resultAttr['caption'] = tblobj.recordCaption(record,
                                                      rowcaption=rowcaption)
     pkey = record[tblobj.pkey]
     if _autoreload:
         result = Bag()
         result.setItem('pkey', pkey, **resultAttr)
         keyToLoad = pkey if _autoreload is True else _autoreload
         record, recInfo = self.app.rpc_getRecord(pkey=keyToLoad,
                                                  table=table)
         result.setItem('loadedRecord', record, **recInfo)
         return result
     else:
         return (pkey, resultAttr)
Example #46
0
 def buildViews(self):
     """TODO"""
     elements = self.dbroot.adapter.listElements('views', schema=self.schema)
     children = Bag(self.children)
     for element in elements:
         if not element in children:
             children.setItem(element, None, tag='view')
     return SqlTableList(parent=self.structparent, name=self.name, attrs=self.attrs, children=children)
Example #47
0
 def test_2_filtering(self,pane):
     fb = pane.formbuilder(cols=1,border_spacing='3px')
     b = Bag()
     b.setItem('r1',None,caption='Foo',id='A')
     b.setItem('r2',None,caption='Bar',id='B')
     b.setItem('r3',None,caption='Spam',id='C')
     fb.data('.store',b)
     fb.filteringSelect(value='^.tbag',lbl='Test bag 1',storepath='.store')
Example #48
0
 def commandMenu(self):
     b=Bag()
     b.setItem('make', None, action='genro.mypane.updateContent()')
     b.setItem('crea', None)
     b.setItem('-', None)
     b.setItem('trasforma.basso', None, caption=u'Giù', dir='d')
     b.setItem('trasforma.alto', None, caption='Su', dir='u')
     return b
Example #49
0
 def griddata(self):
     result = Bag()
     result.setItem("r1", None, code="CA", caption="California")
     result.setItem("r2", None, code="IL", caption="Illinois", disabled=True)
     result.setItem("r3", None, code="NY", caption="New York", checked="^.checked")
     result.setItem("r4", None, code="TX", caption="Texas", disabled="^.disabled")
     result.setItem("r5", None, code="AL", caption="Alabama")
     return result
Example #50
0
 def griddata(self):
     result=Bag()
     result.setItem('r1',None,code='CA',caption='California')
     result.setItem('r2',None,code='IL',caption='Illinois',disabled=True)
     result.setItem('r3',None,code='NY',caption='New York',checked='^.checked')
     result.setItem('r4',None,code='TX',caption='Texas',disabled='^.disabled')
     result.setItem('r5',None,code='AL',caption='Alabama')
     return result
Example #51
0
 def remoteRowControllerBatch(self, handlerName=None, rows=None, **kwargs):
     handler = self.getPublicMethod("rpc", handlerName)
     result = Bag()
     if not handler:
         return
     for r in rows:
         result.setItem(r.label, handler(row=r.value, row_attr=r.attr, **kwargs))
     return result
Example #52
0
 def test_update(self):
     b = Bag(BAG_DATA)
     c = Bag()
     c.setItem('hobbie.sport', 'soccer', role='forward')
     c.setItem('name', 'John K.')
     b.update(c)
     assert b['name'] == 'John K.'
     assert b.getAttr('hobbie.sport', 'role') == 'forward'
Example #53
0
 def tableMenu(self,currPkg=None):
     if not currPkg:
         return
     lookup_tables = self.getLookupTable(pkg=currPkg)
     result = Bag()
     for t in lookup_tables:
         result.setItem(t.fullname.replace('.','_'),Bag(code=t.fullname,description=t.name_long))
     return result
Example #54
0
 def rpc_getLoadedFiles(self, uploadPath=None, **kwargs):
     path = self.site.getStaticPath(uploadPath)
     result = Bag()
     b = DirectoryResolver(path)
     for i, n in enumerate(
             [(t[1], t[2]) for t in b.digest('#a.file_ext,#a.file_name,#a.abs_path') if t[0] == 'xls']):
         result.setItem('r_%i' % i, None, filename=n[0], filepath=n[1])
     return result
Example #55
0
 def prepareSkills(self, game_record):
     result = Bag()
     cap = game_record['skill_cap']
     for i in range(cap):
         #slots = cap - i
         rate = i+1
         result.setItem('lv%i'%rate,'')
     return result