2020-07-27 18:57:36 +00:00
|
|
|
"""
|
|
|
|
usercode.py isn't a real module, but an example of a module produced by gencode.py from the
|
|
|
|
user-defined document schema.
|
|
|
|
|
|
|
|
It is the same code that's produced from the test schema in test_gencode.py. In fact, it is used
|
|
|
|
as part of that test.
|
|
|
|
|
|
|
|
User-defined Tables (i.e. classes that derive from grist.Table) automatically get some additional
|
|
|
|
members:
|
|
|
|
|
|
|
|
Record - a class derived from grist.Record, with a property for each table column.
|
|
|
|
RecordSet - a class derived from grist.Record, with a property for each table column.
|
|
|
|
RecordSet.Record - a reference to the Record class above
|
|
|
|
|
|
|
|
======================================================================
|
|
|
|
import grist
|
|
|
|
from functions import * # global uppercase functions
|
|
|
|
import datetime, math, re # modules commonly needed in formulas
|
|
|
|
|
|
|
|
|
|
|
|
@grist.UserTable
|
|
|
|
class Students:
|
|
|
|
firstName = grist.Text()
|
|
|
|
lastName = grist.Text()
|
|
|
|
school = grist.Reference('Schools')
|
|
|
|
|
|
|
|
def fullName(rec, table):
|
|
|
|
return rec.firstName + ' ' + rec.lastName
|
|
|
|
|
|
|
|
def fullNameLen(rec, table):
|
|
|
|
return len(rec.fullName)
|
|
|
|
|
|
|
|
def schoolShort(rec, table):
|
|
|
|
return rec.school.name.split(' ')[0]
|
|
|
|
|
|
|
|
def schoolRegion(rec, table):
|
|
|
|
addr = rec.school.address
|
|
|
|
return addr.state if addr.country == 'US' else addr.region
|
|
|
|
|
|
|
|
@grist.formulaType(grist.Reference('Schools'))
|
|
|
|
def school2(rec, table):
|
|
|
|
return Schools.lookupFirst(name=rec.school.name)
|
|
|
|
|
|
|
|
|
|
|
|
@grist.UserTable
|
|
|
|
class Schools:
|
|
|
|
name = grist.Text()
|
|
|
|
address = grist.Reference('Address')
|
|
|
|
|
|
|
|
|
|
|
|
@grist.UserTable
|
|
|
|
class Address:
|
|
|
|
city = grist.Text()
|
|
|
|
state = grist.Text()
|
|
|
|
|
2021-07-15 00:45:53 +00:00
|
|
|
def _default_country(rec, table, value, user):
|
2020-07-27 18:57:36 +00:00
|
|
|
return 'US'
|
|
|
|
country = grist.Text()
|
|
|
|
|
|
|
|
def region(rec, table):
|
|
|
|
return {'US': 'North America', 'UK': 'Europe'}.get(rec.country, 'N/A')
|
|
|
|
|
|
|
|
def badSyntax(rec, table):
|
|
|
|
# for a in b
|
|
|
|
# 10
|
2021-09-24 13:06:39 +00:00
|
|
|
raise SyntaxError('invalid syntax', ('usercode', 1, 11, u'for a in b'))
|
2020-07-27 18:57:36 +00:00
|
|
|
======================================================================
|
|
|
|
"""
|