def pony_setup(request, app, tmpdir, realdburl): pytest.importorskip("pony") from pony.orm import Database, Optional, Required, Set from pony.orm.core import SetInstance SetInstance.append = SetInstance.add db = Database() class Role(db.Entity): name = Required(str, unique=True) description = Optional(str, nullable=True) users = Set(lambda: User) class User(db.Entity): email = Required(str) fs_uniquifier = Required(str, nullable=False) username = Optional(str) security_number = Optional(int) password = Optional(str, nullable=True) last_login_at = Optional(datetime) current_login_at = Optional(datetime) tf_primary_method = Optional(str, nullable=True) tf_totp_secret = Optional(str, nullable=True) tf_phone_number = Optional(str, nullable=True) us_totp_secrets = Optional(str, nullable=True) us_phone_number = Optional(str, nullable=True) last_login_ip = Optional(str) current_login_ip = Optional(str) login_count = Optional(int) active = Required(bool, default=True) confirmed_at = Optional(datetime) roles = Set(lambda: Role) def has_role(self, name): return name in {r.name for r in self.roles.copy()} if realdburl: db_url, db_info = _setup_realdb(realdburl) pieces = urlsplit(db_url) db.bind( provider=pieces.scheme.split("+")[0], user=pieces.username, password=pieces.password, host=pieces.hostname, database=pieces.path[1:], ) else: app.config["DATABASE"] = {"name": ":memory:", "engine": "pony.SqliteDatabase"} db.bind("sqlite", ":memory:", create_db=True) db.generate_mapping(create_tables=True) def tear_down(): if realdburl: _teardown_realdb(db_info) request.addfinalizer(tear_down) return PonyUserDatastore(db, User, Role)
def pony_setup(request, app, tmpdir, realdburl): from pony.orm import Database, Optional, Required, Set from pony.orm.core import SetInstance SetInstance.append = SetInstance.add db = Database() class Role(db.Entity): name = Required(str, unique=True) description = Optional(str, nullable=True) users = Set(lambda: User) class User(db.Entity): email = Required(str) username = Optional(str) security_number = Optional(int) password = Optional(str, nullable=True) last_login_at = Optional(datetime) current_login_at = Optional(datetime) last_login_ip = Optional(str) current_login_ip = Optional(str) login_count = Optional(int) active = Required(bool, default=True) confirmed_at = Optional(datetime) roles = Set(lambda: Role) def has_role(self, name): return name in {r.name for r in self.roles.copy()} if realdburl: db_url, db_info = _setup_realdb(realdburl) pieces = urlsplit(db_url) db.bind(provider=pieces.scheme.split('+')[0], user=pieces.username, password=pieces.password, host=pieces.hostname, database=pieces.path[1:]) else: app.config['DATABASE'] = { 'name': ':memory:', 'engine': 'pony.SqliteDatabase' } db.bind('sqlite', ':memory:', create_db=True) db.generate_mapping(create_tables=True) def tear_down(): if realdburl: _teardown_realdb(db_info) request.addfinalizer(tear_down) return PonyUserDatastore(db, User, Role)
def pony_datastore(request, app, tmpdir): from pony.orm import Database, Optional, Required, Set from pony.orm.core import SetInstance SetInstance.append = SetInstance.add db = Database() class Role(db.Entity): name = Required(str, unique=True) description = Optional(str, nullable=True) users = Set(lambda: User) class User(db.Entity): email = Required(str) username = Optional(str) password = Optional(str, nullable=True) last_login_at = Optional(datetime) current_login_at = Optional(datetime) last_login_ip = Optional(str) current_login_ip = Optional(str) login_count = Optional(int) active = Required(bool, default=True) confirmed_at = Optional(datetime) roles = Set(lambda: Role) def has_role(self, name): return name in {r.name for r in self.roles.copy()} app.config['DATABASE'] = { 'name': ':memory:', 'engine': 'pony.SqliteDatabase' } db.bind('sqlite', ':memory:', create_db=True) db.generate_mapping(create_tables=True) return PonyUserDatastore(db, User, Role)
current_login_at = Optional(datetime) last_login_ip = Optional(str, max_len=50) current_login_ip = Optional(str, max_len=50) login_count = Optional(int, sql_default=0) roles = Set("Roles", table='sys_users_roles') def verify_password(self, password): from flask_security.utils import verify_password return verify_password(password, self.password) class Roles(db.Entity, RoleMixin): _table_ = 'sys_roles' name = Required(str, unique=True, max_len=10, index='idx_roles_name') display = Required(str, unique=True, max_len=50, index='idx_roles_display') users = Set("Users") def __eq__(self, other): return super(object).__eq__(other) def __ne__(self, other): return not self.__eq__(other) def __hash__(self): return super(object).__hash__() user_datastore = PonyUserDatastore(db, Users, Roles) security = Security(app, user_datastore, register_blueprint=False)