Skip to content

Commit b9cdbc7

Browse files
committed
init
0 parents  commit b9cdbc7

File tree

36 files changed

+1682
-0
lines changed

36 files changed

+1682
-0
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?xml version="1.0" ?>
2+
<GenRoBag>
3+
<db dbname="pbg"/>
4+
5+
<packages>
6+
<gnrcore_adm pkgcode="gnrcore:adm"/>
7+
<gnrcore_sys pkgcode="gnrcore:sys"/>
8+
<gnrextra_srvy pkgcode="gnrextra:srvy"/>
9+
<comm pkgcode="comm"/>
10+
</packages>
11+
12+
<authentication pkg="adm">
13+
<py_auth defaultTags="user" pkg="adm" method="authenticate"/>
14+
</authentication>
15+
16+
<site>
17+
<wsgi mainpackage='comm'/>
18+
</site>
19+
</GenRoBag>

instances/pbg/root.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#!/usr/bin/env python2.6
2+
import sys
3+
sys.stdout = sys.stderr
4+
from gnr.web.gnrwsgisite import GnrWsgiSite
5+
site = GnrWsgiSite(__file__)
6+
7+
def application(environ,start_response):
8+
return site(environ,start_response)
9+
10+
if __name__ == '__main__':
11+
from gnr.web.server import NewServer
12+
server=NewServer(__file__)
13+
server.run()

packages/comm/localization.xml

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
<?xml version='1.0' encoding='UTF-8'?>
2+
<GenRoBag><main path="main.py" ext="py"><en_community base="Community"></en_community></main>
3+
<menu path="menu.py" ext="py"><en_my_profile base="My profile" it="Mio profilo"></en_my_profile>
4+
<en_developers base="Developers" it="Sviluppatori"></en_developers>
5+
<en_projects base="Projects" it="Progetti"></en_projects>
6+
<en_lookups base="Lookups"></en_lookups>
7+
<en_community base="Community"></en_community>
8+
<en_surveys base="Surveys" it="Sondaggi"></en_surveys>
9+
<en_administration fr="Administration" en="Administration tools" de="Verwaltung" it="Amministrazione sistema" base="Administration"></en_administration>
10+
<en_system fr="Système" de="System" en="System" it="Sistema" base="System"></en_system></menu>
11+
<model><_packages><adm><group path="model/_packages/adm/group.py" ext="py"><en_community_developer base="Community Developer" it="Sviluppatore community"></en_community_developer></group></adm></_packages>
12+
<developer path="model/developer.py" ext="py"><en_developer base="Developer" it="Sviluppatore"></en_developer>
13+
<en_developers base="Developers" it="Sviluppatori"></en_developers>
14+
<en_name fr="Nom" de="Name" en="Name" it="Nome" base="Name"></en_name>
15+
<en_surname base="Surname" it="Cognome"></en_surname>
16+
<en_country base="Country" it="Nazione"></en_country>
17+
<en_geocode base="Geocode" it="Geolocalizzazione"></en_geocode>
18+
<en_locality base="Locality" it="Località"></en_locality>
19+
<en_full_address base="Full address" it="Indirizzo completo"></en_full_address>
20+
<en_photo base="Photo" it="Foto"></en_photo>
21+
<en_bio base="Bio" it="Bio"></en_bio>
22+
<en_telegram_username base="Telegram username" it="Username Telegram"></en_telegram_username>
23+
<en_user fr="Utilisateur" de="Benutzer" en="User" it="Utente" base="User"></en_user>
24+
<en_languages fr="Langues" de="Sprachen" en="Languages" it="Linguaggi" base="Languages"></en_languages>
25+
<en_qualifications base="Qualifications" it="Titoli di studio"></en_qualifications>
26+
<en_topics base="Topics" it="Argomenti"></en_topics>
27+
<en_hobbies base="Hobbies"></en_hobbies></developer>
28+
<developer_hobby path="model/developer_hobby.py" ext="py"><en_developer_hobbies base="Developer hobbies" it="Hobby sviluppatore"></en_developer_hobbies>
29+
<en_developer_hobby base="Developer hobby" it="Hobby sviluppatore"></en_developer_hobby>
30+
<en_developer base="Developer" it="Sviluppatore"></en_developer>
31+
<en_hobby base="Hobby"></en_hobby>
32+
<en_level base="Level" de="Höhe" en="Level" fr="Niveau" it="Livello"></en_level></developer_hobby>
33+
<developer_language path="model/developer_language.py" ext="py"><en_developer_languages base="Developer languages" it="Lingue sviluppatore"></en_developer_languages>
34+
<en_developer_language base="Developer language" it="Lingua sviluppatore"></en_developer_language>
35+
<en_developer base="Developer" it="Sviluppatore"></en_developer>
36+
<en_language base="Language" it="Linguaggio"></en_language>
37+
<en_level base="Level" de="Höhe" en="Level" fr="Niveau" it="Livello"></en_level>
38+
<en_programming_language base="Programming language" it="Linguaggio di programmazione"></en_programming_language></developer_language>
39+
<developer_qualification path="model/developer_qualification.py" ext="py"><en_developer_qualifications base="Developer qualifications" it="Titoli di studio sviluppatore"></en_developer_qualifications>
40+
<en_developer_qualification base="Developer qualification" it="Titolo di studio sviluppatore"></en_developer_qualification>
41+
<en_developer base="Developer" it="Sviluppatore"></en_developer>
42+
<en_qualification base="Qualification" it="Titolo di studio"></en_qualification>
43+
<en_level base="Level" de="Höhe" en="Level" fr="Niveau" it="Livello"></en_level></developer_qualification>
44+
<developer_topic path="model/developer_topic.py" ext="py"><en_developer_topics base="Developer topics" it="Interessi sviluppatore"></en_developer_topics>
45+
<en_developer_topic base="Developer topic" it="Interesse sviluppatore"></en_developer_topic>
46+
<en_developer base="Developer" it="Sviluppatore"></en_developer>
47+
<en_topic base="Topic" de="Thema" en="Topic" fr="Sujet" it="Argomento"></en_topic>
48+
<en_level base="Level" de="Höhe" en="Level" fr="Niveau" it="Livello"></en_level></developer_topic>
49+
<hobby path="model/hobby.py" ext="py"><en_hobby base="Hobby"></en_hobby>
50+
<en_hobbies base="Hobbies"></en_hobbies>
51+
<en_description base="Description" en="Description" it="Descrizione"></en_description></hobby>
52+
<language path="model/language.py" ext="py"><en_programming_language base="Programming Language" it="Linguaggio di programmazione"></en_programming_language>
53+
<en_programming_languages base="Programming Languages" it="Linguaggi di programmazione"></en_programming_languages>
54+
<en_code base="Code" en="Code" it="Codice"></en_code>
55+
<en_description base="Description" en="Description" it="Descrizione"></en_description></language>
56+
<project path="model/project.py" ext="py"><en_project base="Project" it="Progetto"></en_project>
57+
<en_projects base="Projects" it="Progetti"></en_projects>
58+
<en_name fr="Nom" de="Name" en="Name" it="Nome" base="Name"></en_name>
59+
<en_description base="Description" en="Description" it="Descrizione"></en_description>
60+
<en_descr_ base="Descr."></en_descr_>
61+
<en_project_url base="Project URL" it="URL progetto"></en_project_url>
62+
<en_repository_url base="Repository URL" it="URL repository"></en_repository_url>
63+
<en_developer base="Developer" it="Sviluppatore"></en_developer></project>
64+
<qualification path="model/qualification.py" ext="py"><en_educational_qualification base="Educational qualification" it="Titolo di studio"></en_educational_qualification>
65+
<en_educational_qualifications base="Educational qualifications" it="Titoli di studio"></en_educational_qualifications>
66+
<en_code base="Code" en="Code" it="Codice"></en_code>
67+
<en_description base="Description" en="Description" it="Descrizione"></en_description></qualification>
68+
<topic path="model/topic.py" ext="py"><en_topic base="Topic" de="Thema" en="Topic" fr="Sujet" it="Argomento"></en_topic>
69+
<en_topics base="Topics" it="Argomenti"></en_topics>
70+
<en_description base="Description" en="Description" it="Descrizione"></en_description></topic></model>
71+
<resources><tables><_packages><sys><service><th_service path="resources/tables/_packages/sys/service/th_service.py" ext="py"><en_add_a_repository_service base="Add a repository service" it="Aggiungi un service repository"></en_add_a_repository_service>
72+
<en_implementation base="Implementation" it="Implementazione"></en_implementation></th_service></service></sys></_packages>
73+
<developer><th_developer path="resources/tables/developer/th_developer.py" ext="py"><en_tg_username base="Tg username" it="Username Tg"></en_tg_username>
74+
<en_languages fr="Langues" de="Sprachen" en="Languages" it="Linguaggi" base="Languages"></en_languages>
75+
<en_qualifications base="Qualifications" it="Titoli di studio"></en_qualifications>
76+
<en_topics base="Topics" it="Argomenti"></en_topics>
77+
<en_hobbies base="Hobbies"></en_hobbies>
78+
<en_developer_info base="Developer info" it="Info sviluppatore"></en_developer_info>
79+
<en_address base="Address" it="Indirizzo"></en_address>
80+
<en_save fr="Sauvegarder" de="Speichern" en="Save" it="Salva" base="Save"></en_save></th_developer></developer>
81+
<hobby><th_hobby path="resources/tables/hobby/th_hobby.py" ext="py"><en_no base="No"></en_no>
82+
<en_low base="Low" it="Basso"></en_low>
83+
<en_medium base="Medium" it="Medio"></en_medium>
84+
<en_good base="Good" it="Buono"></en_good>
85+
<en_excellent base="Excellent" it="Eccellente"></en_excellent></th_hobby></hobby>
86+
<language><th_language path="resources/tables/language/th_language.py" ext="py"><en_no base="No"></en_no>
87+
<en_low base="Low" it="Basso"></en_low>
88+
<en_medium base="Medium" it="Medio"></en_medium>
89+
<en_good base="Good" it="Buono"></en_good>
90+
<en_excellent base="Excellent" it="Eccellente"></en_excellent></th_language></language>
91+
<qualification><th_qualification path="resources/tables/qualification/th_qualification.py" ext="py"><en_no base="No"></en_no>
92+
<en_low base="Low" it="Basso"></en_low>
93+
<en_medium base="Medium" it="Medio"></en_medium>
94+
<en_good base="Good" it="Buono"></en_good>
95+
<en_excellent base="Excellent" it="Eccellente"></en_excellent></th_qualification></qualification>
96+
<topic><th_topic path="resources/tables/topic/th_topic.py" ext="py"><en_no base="No"></en_no>
97+
<en_low base="Low" it="Basso"></en_low>
98+
<en_medium base="Medium" it="Medio"></en_medium>
99+
<en_good base="Good" it="Buono"></en_good>
100+
<en_excellent base="Excellent" it="Eccellente"></en_excellent></th_topic></topic></tables></resources></GenRoBag>

packages/comm/main.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#!/usr/bin/env python
2+
# encoding: utf-8
3+
from gnr.app.gnrdbo import GnrDboTable, GnrDboPackage
4+
5+
class Package(GnrDboPackage):
6+
def config_attributes(self):
7+
return dict(comment='Community package',sqlschema='comm',sqlprefix=True,
8+
name_short='!![en]Community', name_long='!![en]Community', name_full='!![en]Community')
9+
10+
def config_db(self, pkg):
11+
pass
12+
13+
class Table(GnrDboTable):
14+
pass

packages/comm/menu.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# encoding: utf-8
2+
from gnr.core.gnrdecorator import metadata
3+
4+
class Menu(object):
5+
def config(self,root,**kwargs):
6+
root.thpage("!![en]My profile", table='comm.developer', pkey=self.db.currentEnv.get('developer_id'))
7+
root.thpage(u"!![en]Developers", table="comm.developer")
8+
root.thpage(u"!![en]Projects", table="comm.project")
9+
root.lookupBranch(u"!![en]Lookups", pkg="comm")
10+
root.webpage(u"!![en]Community", filepath="/comm/community_map")
11+
root.packageBranch(u"!![en]Surveys", pkg="srvy", tags='admin')
12+
root.packageBranch(u"!![en]Administration", tags="superadmin,_DEV_", pkg="adm")
13+
root.packageBranch(u"!![en]System", tags="_DEV_", pkg="sys")
14+
15+
@metadata(group_code='COMM')
16+
def config_community(self,root,**kwargs):
17+
root.thpage("!![en]My profile", table='comm.developer', formResource='FormProfile',
18+
pkey=self.db.currentEnv.get('developer_id'), form_locked=False)
19+
root.webpage(u"!![en]Community", filepath="/comm/community_map")
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# encoding: utf-8
2+
from gnr.core.gnrdecorator import metadata
3+
4+
class Table(object):
5+
6+
@metadata(mandatory=True)
7+
def sysRecord_COMM(self):
8+
return self.newrecord(code='COMM', description='!![en]Community Developer')
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# encoding: utf-8
2+
3+
class Table(object):
4+
5+
def trigger_onUpdating(self,record,old_record=None):
6+
if old_record['status'] != 'conf' and record['status'] == 'conf':
7+
group_code = self.db.table('adm.group').sysRecord('COMM')['code']
8+
record['group_code'] = group_code
9+
self.db.table('comm.developer').createDeveloper(record)

packages/comm/model/developer.py

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
# encoding: utf-8
2+
3+
class Table(object):
4+
def config_db(self,pkg):
5+
tbl=pkg.table('developer', pkey='id', name_long='!![en]Developer', name_plural='!![en]Developers',
6+
caption_field='tg_username')
7+
self.sysFields(tbl)
8+
9+
tbl.column('name', size=':30', name_long='!![en]Name', group='card')
10+
tbl.column('surname', size=':30', name_long='!![en]Surname',group='card')
11+
tbl.column('email', name_long='Email',group='card')
12+
tbl.column('country', name_long='!![en]Country',group='card')
13+
tbl.column('position', name_long='!![en]Geocode')
14+
tbl.column('locality', name_long='!![en]Locality')
15+
tbl.column('region', name_long='!![en]Region')
16+
tbl.column('state', name_long='!![en]State')
17+
tbl.column('city', name_long='!![en]City')
18+
tbl.column('full_address', name_long='!![en]Full address')
19+
tbl.column('photo_url',dtype='P', name_long='!![en]Photo')
20+
tbl.column('bio', name_long='!![en]Bio')
21+
tbl.column('tg_username', name_long='!![en]Telegram username')
22+
tbl.column('nickname', name_long='!![en]Nickname')
23+
tbl.column('github', name_long='!![en]Github')
24+
tbl.column('website', name_long='!![en]Website')
25+
tbl.column('user_id',size='22', group='_', name_long='!![en]User',unique=True
26+
).relation('adm.user.id', one_one=True, relation_name='developer',
27+
mode='foreignkey', onDelete='raise')
28+
29+
tbl.formulaColumn('fullname',"$name || ' ' || $surname", name_long='Fullname')
30+
tbl.pyColumn('dev_template', py_method='templateColumn', template_name='dev_row')
31+
32+
tbl.formulaColumn('languages',"array_to_string(ARRAY(#lang),', ')",
33+
select_lang=dict(table='comm.developer_language',
34+
columns='$caption_from_developer',
35+
where='$developer_id=#THIS.id',
36+
order_by='$level desc'),
37+
name_long='!![en]Languages')
38+
tbl.formulaColumn('qualifications',"array_to_string(ARRAY(#qual),', ')",
39+
select_qual=dict(table='comm.developer_qualification',
40+
columns='$caption_from_developer',
41+
where='$developer_id=#THIS.id'),
42+
name_long='!![en]Qualifications')
43+
tbl.formulaColumn('topics',"array_to_string(ARRAY(#topic),', ')",
44+
select_topic=dict(table='comm.developer_topic',
45+
columns='$caption_from_developer',
46+
where='$developer_id=#THIS.id'),
47+
name_long='!![en]Topics')
48+
tbl.formulaColumn('hobbies',"array_to_string(ARRAY(#hobby),', ')",
49+
select_hobby=dict(table='comm.developer_hobby',
50+
columns='$caption_from_developer',
51+
where='$developer_id=#THIS.id'),
52+
name_long='!![en]Hobbies')
53+
54+
def createDeveloper(self,user_record):
55+
if self.checkDuplicate(user_id=user_record['id']):
56+
#existing developer with the same user_id
57+
return
58+
new_developer = self.newrecord(name = user_record['firstname'],
59+
surname = user_record['lastname'], email = user_record['email'],
60+
user_id = user_record['id'], )
61+
self.insert(new_developer)
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
#!/usr/bin/env python
2+
# encoding: utf-8
3+
4+
from gnr.core.gnrbag import Bag
5+
6+
class Table(object):
7+
8+
def config_db(self, pkg):
9+
tbl = pkg.table('developer_hobby', pkey='id', name_plural='!![en]Developer hobbies',
10+
name_long=u'!![en]Developer hobby', caption_field='hobby')
11+
self.sysFields(tbl)
12+
13+
tbl.column('developer_id',size='22',name_long = '!![en]Developer',group='_').relation('comm.developer.id',
14+
onDelete='cascade',
15+
mode='foreignkey',
16+
relation_name='hobbies')
17+
tbl.column('hobby_id',size='22',name_long = '!![en]Hobby',group='_').relation('comm.hobby.id',
18+
onDelete='cascade',
19+
mode='foreignkey',
20+
relation_name='developers')
21+
22+
tbl.column('level', dtype='L',name_long='!![en]Level')
23+
24+
tbl.aliasColumn('hobby', '@hobby_id.description', name_long='!![en]Hobby')
25+
tbl.formulaColumn('caption_from_developer',"""@hobby_id.description || '[' ||CAST ($level AS TEXT) || ']'""")
26+
27+
def updateHobbyInfo(self,developer_id=None,hobby_info=None):
28+
self.deleteSelection('developer_id',developer_id)
29+
for hobby_id,level in hobby_info.items():
30+
self.insert(self.newrecord(hobby_id=hobby_id,level=level,developer_id=developer_id))
31+
32+
def getHobbyInfo(self,developer_id=None):
33+
f = self.query(where='$developer_id=:did',did=developer_id).fetch()
34+
result = Bag()
35+
for r in f:
36+
result[r['hobby_id']] = r['level']
37+
return result
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#!/usr/bin/env python
2+
# encoding: utf-8
3+
from gnr.core.gnrbag import Bag
4+
5+
class Table(object):
6+
7+
def config_db(self, pkg):
8+
tbl = pkg.table('developer_language', pkey='id', name_plural='!![en]Developer languages',
9+
name_long=u'!![en]Developer language', caption_field='language')
10+
self.sysFields(tbl)
11+
12+
tbl.column('developer_id',size='22',name_long = '!![en]Developer',group='_').relation('comm.developer.id',
13+
onDelete='cascade',
14+
mode='foreignkey',
15+
relation_name='languages')
16+
tbl.column('language_code',size=':3',name_long = '!![en]Language',group='_').relation('comm.language.code',
17+
onDelete='cascade',
18+
mode='foreignkey',
19+
relation_name='developers')
20+
tbl.column('level', dtype='L',name_long='!![en]Level')
21+
22+
tbl.aliasColumn('language', '@language_code.description', name_long='!![en]Programming language')
23+
tbl.formulaColumn('caption_from_developer',"""@language_code.description || '[' ||CAST ($level AS TEXT) || ']'""")
24+
25+
def updateLanguageInfo(self,developer_id=None,language_info=None):
26+
self.deleteSelection('developer_id',developer_id)
27+
for language_code,level in language_info.items():
28+
self.insert(self.newrecord(language_code=language_code,level=level,developer_id=developer_id))
29+
30+
def getLanguageInfo(self,developer_id=None):
31+
f = self.query(where='$developer_id=:did',did=developer_id).fetch()
32+
result = Bag()
33+
for r in f:
34+
result[r['language_code']] = r['level']
35+
return result

0 commit comments

Comments
 (0)