Ejemplo n.º 1
0
class Job(Model):
    """Job cache model."""

    __database__ = BaseCache.model_db

    created_at = DateTimeField()
    updated_at = DateTimeField()

    job_id = TextField(primary_key=True, index=True)
    user_id = TextField(index=True)

    state = TextField()
    extras = JSONField()

    def in_progress(self):
        """Mark job in progress."""
        self.state = USER_JOB_STATE_IN_PROGRESS
        self.save()

    def complete(self):
        """Mark job as completed."""
        self.state = USER_JOB_STATE_COMPLETED
        self.save()

    def fail_job(self, error):
        """Mark job as failed."""
        self.state = USER_JOB_STATE_FAILED

        if not self.extras:
            self.extras = {}

        self.extras['error'] = error
        self.save()
Ejemplo n.º 2
0
class File(Model):
    """User file object."""

    __database__ = BaseCache.model_db

    created_at = DateTimeField()

    file_id = TextField(primary_key=True, index=True)
    user_id = TextField(index=True)

    content_type = TextField()
    file_name = TextField()

    file_size = IntegerField()

    relative_path = TextField()
    is_archive = BooleanField()
    is_dir = BooleanField()
    unpack_archive = BooleanField()

    @property
    def abs_path(self):
        """Full path of cached file."""
        return CACHE_UPLOADS_PATH / self.user_id / self.relative_path

    def valid_file(self):
        """Ensure a file exists."""
        if self.abs_path.exists():
            self.is_dir = self.abs_path.is_dir()
            return True

        return False
Ejemplo n.º 3
0
class Deploy(CustomModel):
    __database__ = db
    id = TextField(primary_key=True)
    project_id = TextField(index=True)
    build_id = TextField(index=True)
    creation_date = DateTimeField(index=True, default=datetime.datetime.now)

    def __init__(self, *args, **kwargs) -> None:
        kwargs['id'] = deploy_id(kwargs['project_id'], kwargs['build_id'])
        super().__init__(*args, **kwargs)

    @property
    def build(self) -> Build:
        """
        Returns the build for this deployment
        """
        return Build.get(Build.id == self.build_id) 
    
    @property
    def project(self) -> Project:
        """
        Returns the project for this deployment
        """
        return Project.get(Project.id == self.project_id)

    @property
    def log_path(self) -> Path:
        """
        Path to self.project.log_path/deploys/self.id
        """
        return self.project.log_path / "deploys" / self.id
Ejemplo n.º 4
0
class Player(Model):
    __database__ = db
    name = TextField(
        primary_key=True)  ## combination of game, lobbyname and playername
    lobby = TextField(index=True)
    user = IntegerField()

    data = JSONField()
Ejemplo n.º 5
0
class Score(Model):
    __database__ = db
    casa = TextField(index=True)
    carta = TextField(index=True)
    ponto = TextField(index=True)
    move = TextField(index=True)
    valor = IntegerField(index=True)
    data = DateTimeField()
Ejemplo n.º 6
0
class Location(Model):
    __database__ = WALRUS_DB
    # __namespace__ = 'my-app'
    name = TextField(primary_key=True)
    county = TextField()
    state = TextField(index=True)
    country = TextField()
    confirmed = HashField()
    deaths = HashField()
Ejemplo n.º 7
0
class User(Model):
    """User cache model."""

    __database__ = BaseCache.model_db

    user_id = TextField(primary_key=True, index=True)
    fullname = TextField()
    email = TextField()
    token = TextField()
Ejemplo n.º 8
0
class GroupSettings(RBase):
    id = TextField(primary_key=True)
    welcome_text = TextField(default=welcome_text)
    invite_text = TextField(default=invite_text)
    group_patterns = JSONField(default=group_patterns)
    creators = ListField()
    mp_forward = JSONField(default=[])
    kick_quorum_n = IntegerField(default=5)
    kick_period = IntegerField(default=5)
    kick_text = TextField(default=kick_text)
Ejemplo n.º 9
0
class User(Model):
    __database__ = db
    user_id = TextField(primary_key=True)
    nome = TextField(index=True, default=u"__NONE__")
    escola = TextField(index=True, default=u"__NONE__")
    genero = TextField(index=True, default=u"__NONE__")
    serie = IntegerField(index=True, default=0)
    idade = IntegerField(index=True, default=0)
    score = ListField(as_json=True)
    data = DateTimeField(default=datetime.datetime(1, 2, 1, 0, 0, 0, 0))
Ejemplo n.º 10
0
class Lobby(Model):
    __database__ = db
    name = TextField(primary_key=True)
    timestamp = IntegerField()
    mode = TextField()
    password = TextField()

    game = IntegerField(index=True)
    setup = IntegerField()
    owner = IntegerField()
Ejemplo n.º 11
0
class Issue(Model):
    __database__ = db
    issue_name = TextField(index=True)
    id = TextField(primary_key=True, default=lambda: str(
        time.time()).replace('.', ''))
    date_created = DateField(default=datetime.datetime.now, index=True)

    def serialize(self):
        return dict(id=self.id,
                    name=self.issue_name,
                    date_created=str(self.date_created))
Ejemplo n.º 12
0
class Project(CustomModel):
    __database__ = db
    name = TextField(index=True)
    org = TextField(index=True)
    id = TextField(primary_key=True)
    url = TextField(index=True)
    creation_date = DateTimeField(index=True, default=datetime.datetime.now)
    secrets = JSONField(default={})

    def __init__(self, *args, **kwargs) -> None:
        kwargs['id'] = project_id(kwargs['org'], kwargs['name'])
        super().__init__(*args, **kwargs)

    @property
    def full_name(self) -> str:
        """
        Munges org and name together to get a more unique name
        """
        return f"{self.org}/{self.name}"

    @property
    def log_path(self) -> Path:
        """
        Path to log_base/project.id
        """
        return log_base / self.id

    @property
    def builds(self) -> Any:
        """
        Returns a list of builds for this project ordered by their creation_date
        """
        return Build.query(Build.project_id == self.id, order_by=Build.creation_date)
    
    @property
    def deploys(self) -> Any:
        """
        Returns a list of deployments for this project ordered by their creation_date
        """
        return Deploy.query(Deploy.project_id == self.id, order_by=Deploy.creation_date)

    def build(self) -> None:
        """
        Trys to bulid the project and creates new build record
        """
        pass
Ejemplo n.º 13
0
class Project(Model):
    """User project object."""

    __database__ = BaseCache.model_db

    created_at = DateTimeField()

    project_id = TextField(primary_key=True, index=True)
    user_id = TextField(index=True)

    clone_depth = IntegerField()
    git_url = TextField()

    name = TextField()
    fullname = TextField()
    email = TextField()
    owner = TextField()
    token = TextField()

    @property
    def abs_path(self):
        """Full path of cached project."""
        return CACHE_PROJECTS_PATH / self.user_id / self.owner / self.name

    def exists(self):
        """Ensure a project exists on file system."""
        return self.abs_path.exists()

    def ttl_expired(self, ttl=None):
        """Check if project time to live has expired."""
        if not self.created_at:
            # If record does not contain created_at,
            # it means its an old record, and
            # we should mark it for deletion.
            return True

        ttl = ttl or int(os.getenv('RENKU_SVC_CLEANUP_TTL_PROJECTS', 1800))

        created_at = (self.created_at -
                      datetime.utcfromtimestamp(0)).total_seconds() * 1e+3

        age = ((time.time() * 1e+3) - created_at) / 1e+3
        return self.exists() and age >= ttl

    def purge(self):
        """Removes project from file system and cache."""
        shutil.rmtree(str(self.abs_path))
        self.delete()

    def is_locked(self, jobs):
        """Check if file locked by given jobs."""
        return bool(
            next((job for job in jobs if self.project_id in job.locked),
                 False))
Ejemplo n.º 14
0
class AutoBotSubmission(AutoBotBaseModel):
    submission_id = TextField(primary_key=True)
    author = TextField(index=True)
    submission_time = IntegerField()
    is_series = BooleanField()
    sent_series_pm = BooleanField()
    deleted = BooleanField()

    @classmethod
    def set_ttl(cls, submission, ttl=86400):
        submission.to_hash().expire(ttl=ttl)

    def set_index_ttls(self, ttl=86400):
        '''Kind of a hacky way to get index keys to expire since they
        are normally created without any TTL whatsoever.'''
        for mi in self._indexes:
            for index in mi.get_indexes():
                key = index.get_key(index.field_value(self)).key
                self.database.expire(key, ttl)
Ejemplo n.º 15
0
class Build(CustomModel):
    __database__ = db
    id = TextField(primary_key=True)
    project_id = TextField(index=True)
    commit_id = TextField(index=True)
    branch = TextField(index=True)
    creation_date = DateTimeField(index=True, default=datetime.datetime.now)

    def __init__(self, *args, **kwargs) -> None:
        kwargs['id'] = build_id(kwargs['project_id'], kwargs['commit_id'])
        super().__init__(*args, **kwargs)

    @property
    def project(self) -> Project:
        """
        Returns the project this build is for
        """
        return Project.get(Project.id == self.project_id)

    @property
    def log_path(self) -> Path:
        """
        Path to self.project.log_path/self.id
        """
        return self.project.log_path / "builds" / self.id
    
    @property
    def logs(self) -> str:
        """
        Reads the contents of a build log
        """
        return self.log_path.open().read()

    @property
    def deploys(self) -> Any:
        """
        Returns a list of Deploys for this build ordered by their creation_date
        """
        return Deploy.query(Deploy.build_id == self.id, order_by=Deploy.creation_date)
Ejemplo n.º 16
0
class Player(walrus.Model):
    database = db
    name = TextField(primary_key=True)
    bank_roll = IntegerField(default=100)
    extra_bet = IntegerField(default=0)

    def __repr__(self):
        return u"%s: Bank$: %d" % (self.name, self.bank_roll)

    def win(self, bet):
        self.bank_roll += bet

    def lose(self, bet):
        self.bank_roll -= bet
Ejemplo n.º 17
0
class UploadCache(Model):
    __database__ = redis_db

    _id = 0
    id = IntegerField(primary_key=True)
    cache = ListField()
    sequence_number = IntegerField(default=0)
    max_sequence_number = IntegerField(default=0)
    # store upload file information
    size = IntegerField(default=0)
    path = TextField(default='/')
    md5 = TextField()
    upload_date = DateTimeField()
    file_name = TextField()
    filetype = IntegerField()
    user_id = IntegerField()
    # store saving task information
    saving_task_start = BooleanField(default=False)

    @classmethod
    def generate_id(cls):
        rv = cls._id
        cls._id += 1
        return rv
Ejemplo n.º 18
0
class Services(Model):
    name = TextField(primary_key=True)
    _keys = [
        'shell', 's_entry', 's_conf', 'collector', 'c_entry', 'c_conf', 'tasks'
    ]

    collector = TextField()
    c_entry = TextField()
    c_conf = TextField()

    shell = TextField()
    s_entry = TextField()
    s_conf = TextField()

    tasks = PickledField()
Ejemplo n.º 19
0
class Project(Model):
    """User project object."""

    __database__ = BaseCache.model_db

    created_at = DateTimeField()

    project_id = TextField(primary_key=True, index=True)
    user_id = TextField(index=True)

    clone_depth = IntegerField()
    git_url = TextField()

    name = TextField()
    fullname = TextField()
    email = TextField()
    owner = TextField()
    token = TextField()

    @property
    def abs_path(self):
        """Full path of cached project."""
        return CACHE_PROJECTS_PATH / self.user_id / self.owner / self.name
Ejemplo n.º 20
0
class Job(Model):
    """Job cache model."""

    __database__ = BaseCache.model_db

    created_at = DateTimeField()
    updated_at = DateTimeField()

    job_id = TextField(primary_key=True, index=True)
    user_id = TextField(index=True)
    project_id = TextField(index=True)

    renku_op = TextField()
    state = TextField()
    extras = JSONField()
    client_extras = TextField()

    locked = SetField()

    def in_progress(self):
        """Mark job in progress."""
        self.state = USER_JOB_STATE_IN_PROGRESS
        self.save()

    def complete(self):
        """Mark job as completed."""
        self.state = USER_JOB_STATE_COMPLETED
        self.save()

    def fail_job(self, error):
        """Mark job as failed."""
        self.state = USER_JOB_STATE_FAILED

        if not self.extras:
            self.extras = {}

        self.extras["error"] = error
        self.save()

    def update_extras(self, key, value):
        """Update extras field."""
        if not self.extras:
            self.extras = {key: value}
        else:
            self.extras[key] = value
Ejemplo n.º 21
0
class CountdownTracker(Model):
    __database__ = db
    id = TextField(primary_key=True)
    seconds = IntegerField()
    desc = TextField()
    created_at = DateTimeField(default=datetime.now)
Ejemplo n.º 22
0
class Params(Model):
    name = TextField(primary_key=True)
    data = HashField()  # {'key': 'value, 'api_key': KEY}
Ejemplo n.º 23
0
class User(Model):
    __database__ = db
    nickname = TextField(primary_key=True)
Ejemplo n.º 24
0
class File(Model):
    """User file object."""

    __database__ = BaseCache.model_db

    created_at = DateTimeField()

    file_id = TextField(primary_key=True, index=True)
    user_id = TextField(index=True)

    content_type = TextField()
    file_name = TextField()

    file_size = IntegerField()

    relative_path = TextField()
    is_archive = BooleanField()
    is_dir = BooleanField()
    unpack_archive = BooleanField()

    @property
    def abs_path(self):
        """Full path of cached file."""
        return CACHE_UPLOADS_PATH / self.user_id / self.relative_path

    def exists(self):
        """Ensure a file exists on file system."""
        if self.abs_path.exists():
            self.is_dir = self.abs_path.is_dir()
            return True

        return False

    def ttl_expired(self, ttl=None):
        """Check if file time to live has expired."""
        if not self.created_at:
            # If record does not contain created_at,
            # it means its an old record, and
            # we should mark it for deletion.
            return True

        ttl = ttl or int(os.getenv("RENKU_SVC_CLEANUP_TTL_FILES", 1800))

        created_at = (self.created_at -
                      datetime.utcfromtimestamp(0)).total_seconds() * 1e3

        age = ((time.time() * 1e3) - created_at) / 1e3
        return self.exists() and age >= ttl

    def purge(self):
        """Removes file from file system and cache."""
        if self.abs_path.is_file():
            self.abs_path.unlink()

        if self.abs_path.is_dir():
            shutil.rmtree(str(self.abs_path))

        self.delete()

    def is_locked(self, jobs):
        """Check if file locked by given jobs."""
        return bool(
            next((job for job in jobs if self.file_id in job.locked), False))