"""
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, value, user):
    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
    # 10
    raise SyntaxError('invalid syntax', ('usercode', 1, 9, u'for a in'))
======================================================================
"""