Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
punctuation
"""
# Check that Tables cannot start with underscores
self.assertRaises(SyntaxError, Table, None, "_abc")
# Check that Tables cannot contain punctuation other than underscores
self.assertRaises(SyntaxError, Table, None, "a.bc")
# Check that Tables cannot be a name of a method or property of DAL
for x in ["define_table", "tables", "as_dict"]:
self.assertRaises(SyntaxError, Table, None, x)
# Check that Table allows underscores in the body of a field name.
self.assertTrue(
Table(None, "a_bc"),
"Table isn't allowing underscores in tablename. It should.",
)
# Check that Table names don't allow a python keyword
self.assertRaises(SyntaxError, Table, None, "True")
self.assertRaises(SyntaxError, Table, None, "elif")
self.assertRaises(SyntaxError, Table, None, "while")
# Check that Table names don't allow a non-valid python identifier
non_valid_examples = ["1x", "xx$%@%", "xx yy", "yy\na", "yy\n"]
for a in non_valid_examples:
self.assertRaises(SyntaxError, Table, None, a)
# Check that Table names don't allow a unicode string
non_valid_examples = [
"ℙƴ☂ℌøἤ",
def testTableAlias(self):
db = DAL(DEFAULT_URI, check_reserved=['all'])
persons = Table(db, 'persons', Field('firstname',
'string'), Field('lastname', 'string'))
aliens = persons.with_alias('aliens')
# Are the different table instances with the same fields
self.assertTrue(persons is not aliens)
self.assertTrue(set(persons.fields) == set(aliens.fields))
db.close()
def define_signature(self):
settings = self.settings
reference_user = 'reference %s' % settings.table_user_name
def lazy_user(auth=self):
return auth.user_id
def represent(id, record=None, s=settings):
try:
user = s.table_user(id)
return '%s %s' % (user.get("first_name", user.get("email")),
user.get("last_name", ''))
except:
return id
ondelete = self.settings.ondelete
self.signature = Table(
self.db, 'auth_signature',
Field('is_active', 'boolean',
default=True,
readable=False, writable=False,
label='Is Active'),
Field('created_on', 'datetime',
default=lambda: datetime.now(),
writable=False, readable=False,
label='Created On'),
Field('created_by',
reference_user,
default=lazy_user, represent=represent,
writable=False, readable=False,
label='Created By', ondelete=ondelete),
Field('modified_on', 'datetime',
update=lambda: datetime.now(),
or not self.types[field_type]:
raise SyntaxError('Field: unknown field type: %s' % field_type)
else:
ftype = self.types[field_type](**attr)
myfields[field.name] = ftype
if not polymodel:
model_cls = ndb.Model
table._tableobj = classobj(table._tablename, (model_cls, ), myfields)
# Set NDB caching variables
if self.ndb_settings and (table._tablename in self.ndb_settings):
for k, v in self.ndb_settings.iteritems():
setattr(table._tableobj, k, v)
elif polymodel==True:
pm_cls = NDBPolyModel
table._tableobj = classobj(table._tablename, (pm_cls, ), myfields)
elif isinstance(polymodel,Table):
table._tableobj = classobj(table._tablename, (polymodel._tableobj, ), myfields)
else:
raise SyntaxError("polymodel must be None, True, a table or a tablename")
return None
def join(self, val, query_env={}):
if isinstance(val, (Table, Select)):
val = val.query_name(query_env.get("parent_scope", []))
elif not isinstance(val, basestring):
val = self.expand(val, query_env=query_env)
return "JOIN %s" % val
request = current.request
T = current.T
reference_user = 'reference %s' % settings.table_user_name
def lazy_user(auth=self):
return auth.user_id
def represent(id, record=None, s=settings):
try:
user = s.table_user(id)
return '%s %s' % (user.get("first_name", user.get("email")),
user.get("last_name", ''))
except:
return id
ondelete = self.settings.ondelete
self.signature = Table(
self.db, 'auth_signature',
Field('is_active', 'boolean',
default=True,
readable=False, writable=False,
label=T('Is Active')),
Field('created_on', 'datetime',
default=request.now,
writable=False, readable=False,
label=T('Created On')),
Field('created_by',
reference_user,
default=lazy_user, represent=represent,
writable=False, readable=False,
label=T('Created By'), ondelete=ondelete),
Field('modified_on', 'datetime',
update=request.now, default=request.now,
**others
):
self._db = self.db = None # both for backward compatibility
self.table = self._table = None
self.op = None
self.first = None
self.second = None
if PY2 and isinstance(fieldname, unicode):
try:
fieldname = str(fieldname)
except UnicodeEncodeError:
raise SyntaxError("Field: invalid unicode field name")
self.name = fieldname = cleanup(fieldname)
if (
not isinstance(fieldname, str)
or hasattr(Table, fieldname)
or not REGEX_VALID_TB_FLD.match(fieldname)
or REGEX_PYTHON_KEYWORDS.match(fieldname)
):
raise SyntaxError(
"Field: invalid field name: %s, "
'use rname for "funny" names' % fieldname
)
if not isinstance(type, (Table, Field)):
self.type = type
else:
self.type = "reference %s" % type
self.length = (
length if length is not None else DEFAULTLENGTH.get(self.type, 512)
)
def where(self, query=None, ignore_common_filters=None):
if isinstance(query, Table):
query = self._adapter.id_query(query)
elif isinstance(query, Field):
query = query != None
elif isinstance(query, dict):
icf = query.get("ignore_common_filters")
if icf:
ignore_common_filters = icf
return Set(self, query, ignore_common_filters=ignore_common_filters)