class DomainModel(TinyJsonModel): __tablename__ = "domains" domain = fields.StringField(required=True, validators=[validators.Length(1, 255)]) dnsprovider = fields.StringField(required=True, validators=[validators.Length(1, 25)]) _last_update = fields.DateTimeField(required=True) _created_at = fields.DateTimeField(required=True) def __init__(self, *args, **kwargs): self._last_update = datetime.utcnow() self._created_at = self._last_update #if 'db' in kwargs: # self.Meta.database = kwargs['db'] super(DomainModel, self).__init__(*args, **kwargs) @classmethod def domainexist(cls, domain): table = cls.Meta.database.table(cls.__tablename__) query = where('domain') == domain row = table.get(cond=query) if row is not None: return True else: return False class Meta: database = DOMAINS_DB
class ConfigModel(TinyJsonModel): __tablename__ = "config" name = fields.StringField() key = fields.StringField() CACHE_TYPE = fields.ListField([CacheType]) last_update = fields.DateTimeField(required=True) created_at = fields.DateTimeField(required=True) def __init__(self, *args, **kwargs): self.last_update = datetime.utcnow() self.created_at = self.last_update super(ConfigModel, self).__init__(*args, **kwargs) # this attribute wont be saved because it's not a field address = "this attribute will not be saved" # Example model custom method def created_at_datetime(self): return self.created_at @property def location(self): return "Earth" class Meta: database = dbj
class SiteRedirects(TinyJsonModel): __tablename__ = "siteredirects" hosturl = fields.StringField(required=True, validators=[validators.Length(0, 255)]) domain = fields.StringField(required=True, validators=[validators.Length(1, 255)]) ssl = fields.BoolField(required=True) sslcert = fields.StringField(required=False, validators=[validators.Length(0, 255)]) sslkey = fields.StringField(required=False, validators=[validators.Length(0, 255)]) version = fields.StringField(required=True, validators=[validators.Length(25, 25)])
class SiteVersion(TinyJsonModel): __tablename__ = "siteversions" description = fields.StringField(required=True, validators=[validators.Length(1, 255)]) tag = fields.StringField(required=True, validators=[validators.Length(1, 255)]) date = fields.DateTimeField(required=True) directory = fields.StringField(required=True, validators=[validators.Length(1, 255)]) sitetype = fields.StringField(required=False, validators=[validators.Length(0, 64)]) runtime = fields.StringField(required=False, validators=[validators.Length(0, 64)])
class SiteModel(TinyJsonModel): __tablename__ = "sites" urlprefix = fields.StringField(required=True, validators=[validators.Length(1, 255)]) #sitetype = fields.StringField(required=True, validators=[validators.Length(1, 64)]) sitedescription = fields.StringField(required=True, validators=[validators.Length(1, 255)]) #runtime = fields.StringField(required=True, validators=[validators.Length(1, 64)]) versions = fields.ListField(['SiteVersion']) redirects = fields.ListField(['SiteRedirects']) active_version = fields.StringField(required=True, validators=[validators.Length(25, 25)]) active_dir = fields.StringField(required=True, validators=[validators.Length(1, 255)]) _last_update = fields.DateTimeField(required=True) _created_at = fields.DateTimeField(required=True) def __init__(self, *args, **kwargs): super(SiteModel, self).__init__(*args, **kwargs) self._last_update = datetime.utcnow() self._created_at = self._last_update #if 'db' in kwargs: # self.Meta.database = kwargs['db'] def version_exist(self, version): records = self.to_struct()['versions'] for i, v in enumerate(records): if v['_cuid'] == version: return True return False def redirectexist(self, domain, host): records = self.to_struct()['redirects'] for i, v in enumerate(records): if v['domain'] == domain and v['hosturl'] == host: return True return False @classmethod def redirected_used(cls, domain, host): table = cls.Meta.database.table(cls.__tablename__) allrec = table.all() for rec in allrec: sublst = rec['redirects'] for i, v in enumerate(sublst): if v['domain'] == domain and v['hosturl'] == host: return True, rec['_cuid'] return False, None @classmethod def urlprefix_used(cls, prefix): table = cls.Meta.database.table(cls.__tablename__) allrec = table.all() for rec in allrec: if rec['urlprefix'] == prefix: return True, rec['_cuid'] return False, None class Meta: database = SITES_DB
class CacheType(models.Base): __tablename__ = "cachetypes" engine = fields.StringField(required=True) host = fields.StringField(required=True, validators=[validators.Length(1, 256)]) port = fields.IntField( validators=[validators.Min(0), validators.Max(65535)]) username = fields.StringField() password = fields.StringField()
class ConfigModel(TinyJsonModel): __tablename__ = "config" ENV = fields.StringField(required=True, validators=[validators.Length(3, 25)]) SECRET_KEY = fields.StringField(required=True, validators=[validators.Length(50, 64)]) APP_DIR = fields.StringField(required=True, validators=[validators.Length(1, 253)]) PROJECT_ROOT = fields.StringField( required=True, validators=[validators.Length(1, 256)]) BCRYPT_LOG_ROUNDS = fields.IntField( required=True, validators=[ validators.Min(4), validators.Max(10000) ]) # needs at least 4 to avoid "ValueError: Invalid rounds" DEBUG = fields.BoolField(required=True) ASSETS_DEBUG = fields.BoolField(required=True) DEBUG_TB_ENABLED = fields.BoolField(required=True) DEBUG_TB_INTERCEPT_REDIRECTS = fields.BoolField(required=True) CACHE_TYPE = fields.EmbeddedField(CacheType) SQLALCHEMY_TRACK_MODIFICATIONS = fields.BoolField(required=True) APP_NAME = fields.StringField(required=True, validators=[validators.Length(1, 32)]) APP_TMPL = fields.StringField(required=True, validators=[validators.Length(1, 32)]) DB_NAME = fields.StringField(required=True, validators=[validators.Length(1, 32)]) DB_PATH = fields.StringField(required=True, validators=[validators.Length(1, 256)]) SQLALCHEMY_DATABASE_URI = fields.StringField( required=True, validators=[validators.Length(1, 256)]) WTF_CSRF_ENABLED = fields.BoolField(required=True) TESTING = fields.BoolField(required=True) AUTH_ENGINES = fields.ListField([AuthType]) FLASK_DEBUG_DISABLE_STRICT = fields.BoolField(required=True) _last_update = fields.DateTimeField(required=True) _created_at = fields.DateTimeField(required=True) def __init__(self, *args, **kwargs): self._last_update = datetime.utcnow() self._created_at = self._last_update super(ConfigModel, self).__init__(*args, **kwargs) # Example model custom method def created_at_datetime(self): return self._created_at @property def getauthbackends(self): return self.AUTH_ENGINES class Meta: database = dbj
class PetsModel(TinyJsonModel): __tablename__ = "pets" id = fields.StringField(required=True, validators=[validators.Length(1, 255)]) name = fields.StringField(required=True, validators=[validators.Length(1, 100)]) animal_type = fields.StringField(required=True, validators=[validators.Length(1, 255)]) tags = fields.ListField(['PetTags']) _last_update = fields.DateTimeField(required=True) _created_at = fields.DateTimeField(required=True) def __init__(self, *args, **kwargs): self._last_update = datetime.utcnow() self._created_at = self._last_update super(PetsModel, self).__init__(*args, **kwargs) class Meta: database = PETS_DB
class DatabaseModel(TinyJsonModel): __tablename__ = "databases" dbprovider = fields.StringField(required=True, validators=[validators.Length(5, 63)]) dbdescription = fields.StringField(required=True, validators=[validators.Length(1, 255)]) dbname = fields.StringField(required=True, validators=[validators.Length(1, 63)]) dbuser = fields.StringField(required=True, validators=[validators.Length(1, 32)]) _last_update = fields.DateTimeField(required=True) _created_at = fields.DateTimeField(required=True) def __init__(self, *args, **kwargs): self._last_update = datetime.utcnow() self._created_at = self._last_update #if 'db' in kwargs: # self.Meta.database = kwargs['db'] super(DatabaseModel, self).__init__(*args, **kwargs) class Meta: database = DATABASES_DB
class PetTags(models.Base): id = fields.IntField(required=True) name = fields.StringField(required=True, validators=[validators.Length(1, 20)])
class AuthType(models.Base): __tablename__ = "authtypes" provider = fields.StringField(required=True, validators=[validators.Length(1, 256)])
class CacheType(models.Base): __tablename__ = "cachetypes" name = fields.StringField(required=True)
class Version(TinyJsonModel): __tablename__ = "versions" tag = fields.StringField(required=True, validators=[validators.Length(1, 255)])