gristlabs_grist-core/sandbox/grist/usercode.py
Paul Fitzpatrick b82eec714a (core) move data engine code to core
Summary:
this moves sandbox/grist to core, and adds a requirements.txt
file for reconstructing the content of sandbox/thirdparty.

Test Plan:
existing tests pass.
Tested core functionality manually.  Tested docker build manually.

Reviewers: dsagal

Reviewed By: dsagal

Differential Revision: https://phab.getgrist.com/D2563
2020-07-29 08:57:25 -04:00

69 lines
1.9 KiB
Python

"""
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()
def _default_country(rec, table):
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
raise SyntaxError('invalid syntax on line 1 col 11')
======================================================================
"""