def _grant(self, rule, subject, accessor, permission, create=False): """ Add an access rule. """ if(isinstance(accessor, str) and accessor not in group_definitions): raise ValueError("Unknown group: %s" % accessor) if(permission in self.permission_list): permission_id = self.permission_list[permission] elif(create): self.connection.runOperation(sql.build_insert('permission', dict( name = permission ))) permission_id = self.connection.getLastInsertId('permission') else: raise ValueError("No such permission %r" % permission) self.connection.runOperation(sql.build_insert('access', { 'object_id' : subject.get_id() if isinstance(subject, interface.Object) else None, 'verb_id' : subject.get_id() if isinstance(subject, interface.Verb) else None, 'property_id' : subject.get_id() if isinstance(subject, interface.Property) else None, 'rule' : rule, 'permission_id' : permission_id, 'type' : 'accessor' if isinstance(accessor, int) else 'group', 'accessor_id' : accessor if isinstance(accessor, int) else None, '"group"' : accessor if isinstance(accessor, str) else None, 'weight' : 0, }))
def test_build_insert2(self): query = sql.build_insert('table', col2='col2_data', col1=sql.RAW("ENCRYPT('something')")) expecting = "INSERT INTO table (col1, col2) VALUES (ENCRYPT('something'), 'col2_data')" self.assertEqual(query, expecting, 'Got "%s" when expecting "%s"' % (query, expecting))
def set_player(self, object_id, player=None, wizard=None, passwd=None, test_salt=None, **attribs): """ Edit the player attributes of an object. """ crypt = None if (passwd is not None): crypt = attribs['crypt'] = hash_password(passwd, salt=test_salt) elif (player is False): crypt = attribs['crypt'] = '!' attribs['enabled'] = player is True attribs['wizard'] = wizard is True if (self.is_player(object_id)): if not (attribs): return self.connection.runOperation( sql.build_update('player', attribs, dict(avatar_id=object_id))) else: self.connection.runOperation( sql.build_insert('player', dict(avatar_id=object_id, **attribs)))
def add_observer(self, object_id, observer_id): """ Add an observer for the provided object. """ self.connection.runOperation( sql.build_insert('object_observer', object_id=object_id, observer_id=observer_id))
def test_build_insert_dot_syntax(self): query = sql.build_insert('db.table', { 'col2': 'col2_data', 'col1': sql.RAW("ENCRYPT('something')") }) expecting = "INSERT INTO db.table (col1, col2) VALUES (ENCRYPT('something'), 'col2_data')" self.assertEqual(query, expecting, 'Got "%s" when expecting "%s"' % (query, expecting))
def test_build_insert_raw(self): query = sql.build_insert('table', { 'col2': 'col2_data', 'col1': 'col1_data' }) expecting = "INSERT INTO table (col1, col2) VALUES ('col1_data', 'col2_data')" self.assertEqual(query, expecting, 'Got "%s" when expecting "%s"' % (query, expecting))
def save(self, obj): """ Save the provided model back into the database. """ obj_type = type(obj).__name__.lower() obj_id = obj.get_id() if (obj_type == 'object'): attribs = dict( name=obj._name, unique_name=('f', 't')[obj._unique_name], owner_id=obj._owner_id, location_id=obj._location_id, ) elif (obj_type == 'verb'): attribs = dict( code=obj._code, filename=obj._filename, owner_id=obj._owner_id, origin_id=obj._origin_id, ability=('f', 't')[obj._ability], method=('f', 't')[obj._method], ) elif (obj_type == 'property'): def check(v): if (v is None): return False elif (v is ""): return False return True attribs = dict( name=obj._name, value=ason.dumps(obj._value) if check(obj._value) else obj._value, owner_id=obj._owner_id, origin_id=obj._origin_id, type=obj._type, ) else: raise RuntimeError( "Don't know how to save an object of type '%s'" % obj_type) if (obj_id): self.connection.runOperation( sql.build_update(obj_type, attribs, dict(id=obj_id))) else: attribs['id'] = sql.RAW('DEFAULT') result = self.connection.runQuery( sql.build_insert(obj_type, attribs) + ' RETURNING id') obj.set_id(result[0]['id']) object_key = '%s-%s' % (obj_type, obj.get_id()) if (object_key not in self.cache): self.cache[object_key] = obj
def _grant(self, rule, subject, accessor, permission, create=False): """ Add an access rule. """ if (isinstance(accessor, str) and accessor not in group_definitions): raise ValueError("Unknown group: %s" % accessor) if (permission in self.permission_list): permission_id = self.permission_list[permission] elif (create): permission_id = self.connection.runQuery( sql.build_insert('permission', dict(name=permission)) + ' RETURNING id')[0]['id'] else: raise ValueError("No such permission %r" % permission) self.connection.runOperation( sql.build_insert( 'access', { 'object_id': subject.get_id() if isinstance(subject, interface.Object) else None, 'verb_id': subject.get_id() if isinstance(subject, interface.Verb) else None, 'property_id': subject.get_id() if isinstance(subject, interface.Property) else None, 'rule': rule, 'permission_id': permission_id, 'type': 'accessor' if isinstance(accessor, int) else 'group', 'accessor_id': accessor if isinstance(accessor, int) else None, '"group"': accessor if isinstance(accessor, str) else None, 'weight': 0, }))
def test_build_multiple_insert(self): query = sql.build_insert('table', [{ 'col2': 'col2_data', 'col1': sql.RAW("ENCRYPT('something')") }, { 'col2': 'col2_data', 'col1': sql.RAW("ENCRYPT('something')") }]) expecting = "INSERT INTO table (col1, col2) VALUES (ENCRYPT('something'), 'col2_data'), (ENCRYPT('something'), 'col2_data')" self.assertEqual(query, expecting, 'Got "%s" when expecting "%s"' % (query, expecting))
def register_task(self, user_id, delay, origin_id, verb_name, args, kwargs): """ Register a delayed verb call. """ task_id = self.pool.runQuery(sql.build_insert('task', dict( user_id = user_id, delay = delay, origin_id = origin_id, verb_name = verb_name, args = args, kwargs = kwargs, )) + ' RETURNING id')[0]['id'] return task_id
def register_task(self, user_id, delay, origin_id, verb_name, args, kwargs): """ Register a delayed verb call. """ self.connection.runOperation(sql.build_insert('task', dict( user_id = user_id, delay = delay, origin_id = origin_id, verb_name = verb_name, args = args, kwargs = kwargs, ))) return self.connection.getLastInsertId('task')
def update_access(self, access_id, rule, access, accessor, permission, weight, subject, deleted): """ Modify an access rule. """ record = {} if not access_id else self.connection.runQuery( sql.interp( """SELECT a.*, p.name AS permission FROM access a INNER JOIN permission p ON a.permission_id = p.id WHERE a.id = %s """, access_id)) if (record): record = record[0] else: record = {} if (deleted): self.connection.runOperation( sql.build_delete('access', id=access_id)) return record['rule'] = rule record['type'] = access record['weight'] = weight record.pop('group', '') if (access == 'group'): record['"group"'] = accessor record['accessor_id'] = None else: record['"group"'] = None record['accessor_id'] = accessor.get_id() if (record.pop('permission', '') != permission): if (permission not in self.permission_list): raise ValueError("Unknown permission: %s" % permission) record['permission_id'] = self.permission_list[permission] if (subject.get_type() == 'object'): record['object_id'] = subject.get_id() elif (subject.get_type() == 'verb'): record['verb_id'] = subject.get_id() elif (subject.get_type() == 'property'): record['property_id'] = subject.get_id() if (access_id): self.connection.runOperation( sql.build_update('access', record, dict(id=access_id))) else: self.connection.runOperation(sql.build_insert('access', **record))
def save(self, obj): """ Save the provided model back into the database. """ obj_type = type(obj).__name__.lower() obj_id = obj.get_id() if(obj_type == 'object'): attribs = dict( name = obj._name, unique_name = ('f', 't')[obj._unique_name], owner_id = obj._owner_id, location_id = obj._location_id, ) elif(obj_type == 'verb'): attribs = dict( code = obj._code, filename = obj._filename, owner_id = obj._owner_id, origin_id = obj._origin_id, ability = ('f', 't')[obj._ability], method = ('f', 't')[obj._method], ) elif(obj_type == 'property'): def check(v): if(v is None): return False elif(v is ""): return False return True attribs = dict( name = obj._name, value = json.dumps(obj._value) if check(obj._value) else obj._value, owner_id = obj._owner_id, origin_id = obj._origin_id, type = obj._type, ) else: raise RuntimeError("Don't know how to save an object of type '%s'" % obj_type) if(obj_id): self.pool.runOperation(sql.build_update(obj_type, attribs, dict(id=obj_id))) else: attribs['id'] = sql.RAW('DEFAULT') result = self.pool.runQuery(sql.build_insert(obj_type, attribs) + ' RETURNING id') obj.set_id(result[0]['id']) object_key = '%s-%s' % (obj_type, obj.get_id()) if(object_key not in self.cache): self.cache[object_key] = obj
def save(self, obj): """ Save the provided model back into the database. """ obj_type = type(obj).__name__.lower() obj_id = obj.get_id() if(obj_type == 'object'): attribs = dict( name = obj._name, unique_name = str(int(obj._unique_name)), owner_id = obj._owner_id, location_id = obj._location_id, ) elif(obj_type == 'verb'): attribs = dict( code = obj._code, filename = obj._filename, owner_id = obj._owner_id, origin_id = obj._origin_id, ability = str(int(obj._ability)), method = str(int(obj._method)), ) elif(obj_type == 'property'): def check(v): if(v is None): return False elif(v is ""): return False return True attribs = dict( name = obj._name, value = ason.dumps(obj._value) if check(obj._value) else obj._value, owner_id = obj._owner_id, origin_id = obj._origin_id, type = obj._type, ) else: raise RuntimeError("Don't know how to save an object of type '%s'" % obj_type) if(obj_id): self.connection.runOperation(sql.build_update(obj_type, attribs, dict(id=obj_id))) else: self.connection.runOperation(sql.build_insert(obj_type, attribs)) obj.set_id(self.connection.getLastInsertId(obj_type)) object_key = '%s-%s' % (obj_type, obj.get_id()) if(object_key not in self.cache): self.cache[object_key] = obj
def update_access(self, access_id, rule, access, accessor, permission, weight, subject, deleted): """ Modify an access rule. """ record = {} if not access_id else self.connection.runQuery(sql.interp( """SELECT a.*, p.name AS permission FROM access a INNER JOIN permission p ON a.permission_id = p.id WHERE a.id = %s """, access_id)) if(record): record = record[0] else: record = {} if(deleted): self.connection.runOperation(sql.build_delete('access', id=access_id)) return record['rule'] = rule record['type'] = access record['weight'] = weight record.pop('group', '') if(access == 'group'): record['"group"'] = accessor record['accessor_id'] = None else: record['"group"'] = None record['accessor_id'] = accessor.get_id() if(record.pop('permission', '') != permission): if(permission not in self.permission_list): raise ValueError("Unknown permission: %s" % permission) record['permission_id'] = self.permission_list[permission] if(subject.get_type() == 'object'): record['object_id'] = subject.get_id() elif(subject.get_type() == 'verb'): record['verb_id'] = subject.get_id() elif(subject.get_type() == 'property'): record['property_id'] = subject.get_id() if(access_id): self.connection.runOperation(sql.build_update('access', record, dict(id=access_id))) else: self.connection.runOperation(sql.build_insert('access', **record))
def register_task(self, user_id, delay, origin_id, verb_name, args, kwargs): """ Register a delayed verb call. """ task_id = self.connection.runQuery( sql.build_insert( 'task', dict( user_id=user_id, delay=delay, origin_id=origin_id, verb_name=verb_name, args=args, kwargs=kwargs, )) + ' RETURNING id')[0]['id'] return task_id
def set_player(self, object_id, player=None, wizard=None, passwd=None, test_salt=None, **attribs): """ Edit the player attributes of an object. """ crypt = None if(passwd is not None): crypt = attribs['crypt'] = hash_password(passwd, salt=test_salt) elif(player is False): crypt = attribs['crypt'] = '!' attribs['enabled'] = str(int(player is True)) attribs['wizard'] = str(int(wizard is True)) if(self.is_player(object_id)): if not(attribs): return self.connection.runOperation(sql.build_update('player', attribs, dict(avatar_id=object_id))) else: self.connection.runOperation(sql.build_insert('player', dict(avatar_id=object_id, **attribs)))
def add_verb_name(self, verb_id, name): """ Add another name for a given verb. """ self.connection.runOperation(sql.build_insert('verb_name', verb_id=verb_id, name=name))
def add_observer(self, object_id, observer_id): """ Add an observer for the provided object. """ self.connection.runOperation(sql.build_insert('object_observer', object_id=object_id, observer_id=observer_id));
def add_alias(self, object_id, alias): """ Add an aliases for the provided object. """ self.connection.runOperation(sql.build_insert('object_alias', object_id=object_id, alias=alias));
def test_build_insert2(self): query = sql.build_insert('table', col2='col2_data', col1=sql.RAW("ENCRYPT('something')")); expecting = "INSERT INTO table (col1, col2) VALUES (ENCRYPT('something'), 'col2_data')" self.failUnlessEqual(query, expecting, 'Got "%s" when expecting "%s"' % (sql, expecting))
def add_alias(self, object_id, alias): """ Add an aliases for the provided object. """ self.connection.runOperation( sql.build_insert('object_alias', object_id=object_id, alias=alias))
# antioch # Copyright (c) 1999-2018 Phil Christensen # # # See LICENSE for details """ Default database bootstrap. """ from antioch.core import interface, bootstrap from antioch.util import sql for name in interface.default_permissions: exchange.connection.runOperation(sql.build_insert('permission', name=name)) exchange.load_permissions() system = exchange.instantiate('object', name='System Object') set_default_permissions_verb = interface.Verb(system) set_default_permissions_verb._method = True set_default_permissions_verb._code = bootstrap.get_source( 'system_set_default_permissions.py') exchange.save(set_default_permissions_verb) set_default_permissions_verb.add_name('set_default_permissions') set_default_permissions_verb(set_default_permissions_verb) set_default_permissions_verb(system) wizard = exchange.instantiate('object', name='Wizard', unique_name=True) wizard.set_owner(wizard) system.set_owner(wizard)
def test_build_multiple_insert(self): query = sql.build_insert('table', [{'col2':'col2_data', 'col1':sql.RAW("ENCRYPT('something')")}, {'col2':'col2_data', 'col1':sql.RAW("ENCRYPT('something')")}]); expecting = "INSERT INTO table (col1, col2) VALUES (ENCRYPT('something'), 'col2_data'), (ENCRYPT('something'), 'col2_data')" self.failUnlessEqual(query, expecting, 'Got "%s" when expecting "%s"' % (sql, expecting))
# Copyright (c) 1999-2019 Phil Christensen # # # See LICENSE for details """ Default database bootstrap. """ from antioch.core import interface, bootstrap from antioch.util import sql for name in interface.default_permissions: exchange.connection.runOperation(sql.build_insert('permission', name=name)) exchange.load_permissions() system = exchange.instantiate('object', name='System Object') set_default_permissions_verb = interface.Verb(system) set_default_permissions_verb._method = True set_default_permissions_verb._code = bootstrap.get_source('system_set_default_permissions.py') exchange.save(set_default_permissions_verb) set_default_permissions_verb.add_name('set_default_permissions') set_default_permissions_verb(set_default_permissions_verb) set_default_permissions_verb(system) wizard = exchange.instantiate('object', name='Wizard', unique_name=True) wizard.set_owner(wizard)
def test_build_insert_dot_syntax(self): query = sql.build_insert('db.table', {'col2':'col2_data', 'col1':sql.RAW("ENCRYPT('something')")}); expecting = "INSERT INTO db.table (col1, col2) VALUES (ENCRYPT('something'), 'col2_data')" self.failUnlessEqual(query, expecting, 'Got "%s" when expecting "%s"' % (sql, expecting))
def add_verb_name(self, verb_id, name): """ Add another name for a given verb. """ self.connection.runOperation( sql.build_insert('verb_name', verb_id=verb_id, name=name))
# Copyright (c) 1999-2016 1999-2012 Phil Christensen # # # See LICENSE for details """ Default database bootstrap. """ from __future__ import with_statement from antioch.core import interface, bootstrap from antioch.util import sql for name in interface.default_permissions: exchange.pool.runOperation(sql.build_insert("permission", name=name)) exchange.load_permissions() system = exchange.instantiate("object", name="System Object") set_default_permissions_verb = interface.Verb(system) set_default_permissions_verb._method = True set_default_permissions_verb._code = bootstrap.get_source("system_set_default_permissions.py") exchange.save(set_default_permissions_verb) set_default_permissions_verb.add_name("set_default_permissions") set_default_permissions_verb(set_default_permissions_verb) set_default_permissions_verb(system) wizard = exchange.instantiate("object", name="Wizard", unique_name=True) wizard.set_owner(wizard)
def test_build_insert_raw(self): query = sql.build_insert('table', {'col2':'col2_data', 'col1':'col1_data'}); expecting = "INSERT INTO table (col1, col2) VALUES ('col1_data', 'col2_data')" self.failUnlessEqual(query, expecting, 'Got "%s" when expecting "%s"' % (sql, expecting))