def main(self, root, **kwargs): root.data('tree.data', self.treedata()) root.h1('A simple tree') root.tree(storepath='tree.data') root.h1('See the attributes with shift mouseover') #root.tree(storepath='tree.data',inspect='shift') root.tree(storepath='pages', hideValues=True, inspect='shift') root.data('pages', Bag(dict(root=DirectoryResolver('/'))))
def get_items(self, items, child_name=None, **kwargs): result = Bag() for key, item in items.items(): _customClasses = [] item['_pkey'] = key if item['last_refresh_age'] > 60: _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) result.setItem(key, Bag(item), _customClasses=' '.join(_customClasses)) return result
def test_01_tree_res(self, pane): """ tree resolver """ pane.tree(storepath='.geodata', labelAttribute='nome', hideValues=True) geodata = Bag() geodata.addItem('italia', ResolverGeo(_page=self), nome='Italia') pane.data('.geodata', geodata)
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
def getGnrConfig(config_path=None, set_environment=False): config_path = config_path or gnrConfigPath() if not config_path or not os.path.isdir(config_path): raise Exception('Missing genro configuration') gnr_config = Bag(config_path) if set_environment: setEnvironment(gnr_config) return gnr_config
def test_1_context_creation(self, pane): """Context creation """ center = self.common_pages_container(pane, height='350px', background='whitesmoke', datapath='test') fb = center.formbuilder(cols=1, border_spacing='3px', fld_width='8em', datapath='bar.mycontext') center.defineContext('context_foo', 'bar.mycontext', value=Bag(dict(egg='spam')), savesession=True) fb.textbox(value='^.egg', lbl='Context value') fb.textbox(value='^.egg?attribute_1', lbl='Context attr')
def test_setItem_addItem(self): b = Bag() b['name'] = 'John' b['surname'] = 'Doe' b['birthday'] = datetime.date(1974, 11, 23) b['phone'] = Bag() b['phone'].setItem('office', 555450210) b.setItem('phone.home', 555345670, private=True) b.setItem('phone.mobile', 555230450, sim='vadophone', fbplayer='gattuso') b.addItem('phone.mobile', 444230450, sim='tom') #add is used for multiple keys #b.toXml('data/testbag.xml') assert b == self.mybag
def writeError(self,description=None,error_type=None,user=None,user_ip=None,user_agent=None,**kwargs): error_data = Bag(self.db.currentEnv) error_data.update(kwargs) rec = dict(description=description,error_data=error_data,username=user,user_ip=user_ip,user_agent=user_agent,error_type=error_type or 'ERR') with self.db.tempEnv(connectionName='system',storename=self.db.rootstore): self.insert(rec) self.db.commit() return rec
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
def create_instance(self, code): instanceconfig = Bag(self.pkg.instance_template()) instanceconfig.setAttr('hosted', instance=code) instanceconfig.setAttr('db', dbname=code) base_path = os.path.dirname(self.pkg.instance_folder(code)) im = InstanceMaker(code, base_path=base_path, config=instanceconfig) im.do() return im.instance_path
def build_instanceconfig_xml(path=None): instanceconfig_bag = Bag() instanceconfig_bag.setItem('packages',None) instanceconfig_bag.setItem('authentication.xml_auth',None, dict(defaultTags='user,xml')) password = get_random_password(size=6) instanceconfig_bag.setItem('authentication.xml_auth.admin',None, dict(pwd=password, tags='_DEV_,admin,user')) print "Default password for user admin is %s, you can change it by editing %s" %(password, path) instanceconfig_bag.toXml(path,typevalue=False,pretty=True)
def rpc_handle_anwsers(self, answers=None): answers = Bag(answers or '') for page_id, page_answers in answers.items(): with self.clientPage(page_id) as clientPage: for value, changepath in page_answers.digest( '#v,#a.client_path'): clientPage.set(changepath, value) print 'HEY SETTO IN CLIENTPAGE'
def rpc_gridData(self): result = Bag() date = datetime.date.today() for i in range(100): pkey = 'r_%i' % i result[pkey] = Bag({ '_pkey': pkey, 'filter': 'A', 'language': 'Python', 'language_id': '6c75RL4uPJiMu5oEcfrx1w', 'name': 'Dsc %i' % i, 'qt': None, 'new': bool(i % 2), 'size': 'big', 'date': date + datetime.timedelta(i) }) return result
def rpc_get_subscribed_tables(self): l = self.site.register_page.get_index(index_name='*') result = Bag() for i, elem in enumerate(l): print elem result.setItem('r_%i' % i, None, label=elem) print result return result
def getSessionData(self, page_id): data = self.session.get(page_id) if data is None: data = Bag() self.session[page_id] = data else: data.restoreFromPicklable() return data
def diskDirectory(self): pages = Bag(self.site.sitemap['showcase']) for k in pages.keys(): if hasattr(pages[k], '_htraverse'): pages[k].sort() #print pages #self.setPath(pages) return pages
def maintenance_update_data(self, exclude_guest=None,**kwargs): result = Bag() result['users'] = self._maintenance_get_items(self.site.register.users(), 'connections',exclude_guest=exclude_guest) connections = self.site.register.connections() result['connections'] = self._maintenance_get_items(connections, 'pages') pages = self.site.register.pages() result['pages'] = self._maintenance_get_items(pages,exclude_guest=exclude_guest) return result
def rootPage(self, *args, **kwargs): kwargs = kwargs or {} args = args or tuple() return Bag({ 'page_id': self.page_id, 'connection_id': self.connection_id, 'user': self.user }).toXml()
def importXmlData(self, path): """Populates a database from an XML file :param path: the file path""" data = Bag(path) for table, pkg in data.digest('#k,#a.pkg'): for n in data[table]: self.table(table, pkg=pkg).insertOrUpdate(n.attr)
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
def test_setItemPos(self): b = Bag({'a': 1, 'b': 2, 'c': 3, 'd': 4}) b.setItem('e', 5, _position='<') assert b['#0'] == 5 b.setItem('f', 6, _position='<c') assert b['#2'] == 6 b.setItem('g', 7, _position='<#3') assert b['#3'] == 7
def getMailTemplate(self, tpl, locale): localelang = locale.split('-')[0] tplfile = self.getResource( os.path.join('mail_templates', localelang, tpl)) if not tplfile: tplfile = self.getResource(os.path.join('mail_templates', tpl)) if tplfile: return Bag(tplfile)
def importTable(self, tbl): if len(tbl) > 23: tbl = tbl[:23] cmdpath = os.path.join(self.folderdialog4d, 'exp_%s.xml' % tbl) b = Bag() b['command'] = 'Export4dTables' b['t4d.tbl'] = tbl b.toXml(cmdpath)
def tableData_states(self): mytable = Bag() mytable.setItem('r1', None, id='CA', caption='California') mytable.setItem('r2', None, id='IL', caption='Illinois') mytable.setItem('r3', None, id='NY', caption='New York') mytable.setItem('r4', None, id='TX', caption='Texas') mytable.setItem('r5', None, id='AL', caption='Alabama') return mytable
def list_users(self): usersDict = self._page.site.register.users() result = Bag() for user, item_user in usersDict.items(): item = Bag() data = item_user.pop('data', None) item_user.pop('datachanges', None) item_user.pop('datachanges_idx', None) item_user.pop('connections') item['info'] = Bag([('%s:%s' % (k, str(v).replace('.', '_')), v) for k, v in item_user.items()]) item['data'] = data item.setItem('connections', PagesTreeResolver(user=user), cacheTime=3) result.setItem(user, item, user=user) return result
def load(self, path): """Loads the structure from an XML file :param path: path of the file to load""" cls = self.__class__ b = Bag() b.fromXml(path, bagcls=cls, empty=cls) self[''] = self.merge(b)
def rpc_update_data(self, **kwargs): result = Bag() result['users'] = self.get_items(self.site.register.users(), 'connections') connections = self.site.register.connections() result['connections'] = self.get_items(connections, 'pages') pages = self.site.register.pages() result['pages'] = self.get_items(pages) return result
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
def df_previewForm(self, frame, mastertable=None): bar = frame.top.slotToolbar('parentStackButtons,*,tplmenu,3') menuslot = bar.tplmenu.div() menuslot.div('^#FORM.dynamicFormTester.tplToShow', _class='floatingPopup', font_size='.9em', font_weight='bold', color='#555', cursor='pointer', padding='2px', rounded=4) menuslot.menu( _class='smallmenu', values='^#FORM.dynamicFormTester.menuvalues', modifiers='*', action='SET #FORM.dynamicFormTester.tplToShow = $1.label') menuslot.dataFormula( "#FORM.dynamicFormTester.menuvalues", """'auto,'+custom_templates.keys().join(",");""", custom_templates='^#FORM.record.df_custom_templates', _if='custom_templates && custom_templates.len()', _else='"auto"', _delay=1) menuslot.dataFormula("#FORM.dynamicFormTester.tplToShow", "'auto'", _fired='^#FORM.record.loaded') bc = frame.center.borderContainer() bc.contentPane(region='right', width='40%', splitter=True, padding='15px', background='#eee').div( innerHTML='^#FORM.dynamicFormTester.tplRendered', background='white', shadow='3px 3px 6px gray', padding='4px', rounded=4) bc.data('#FORM.dynamicFormTester.data', Bag()) bc.dataFormula( "#FORM.dynamicFormTester.tplRendered", "tplToShow=='auto'?currdata.getFormattedValue():dataTemplate(custom_templates.getItem(tplToShow+'.tpl'),currdata);", custom_templates='^#FORM.record.df_custom_templates', currdata='^#FORM.dynamicFormTester.data', tplToShow='^#FORM.dynamicFormTester.tplToShow', _delay=100, _if='tplToShow') bc.dataController("currdata.clear();", _fired='^#FORM.pkey', currdata='=#FORM.dynamicFormTester.data') bc.contentPane(region='center').dynamicFieldsTestPane( df_table=mastertable, df_pkey='^#FORM.pkey', _fired='^#FORM.dynamicFormTester._refresh_fields', datapath='#FORM.dynamicFormTester.data', _if='showpreview', showpreview='^#FORM.dynamicFormTester.showpreview')
def getTestData2(self): result = Bag() result.setItem('r_0',None,nome='Mario Rossi',eta=30,peso=80,altezza=190, chart_backgroundColor='red') result.setItem('r_1',None,nome='Luigi Bianchi',eta=38,peso=90,altezza=180, chart_backgroundColor='green') result.setItem('r_2',None,nome='Rossella Albini',eta=22,peso=60,altezza=170, chart_backgroundColor='navy') return result