115:2311bfce57b4
Anton Shestakov <av6@dwimlabs.net>, Wed, 06 Jul 2016 16:49:16 +0800
viewer: remove Check.get_url() method for not being very useful

next change 117:3fc42355adf8
previous change 109:6cbbab799f3c

candolint/models.py

Permissions: -rw-r--r--

Other formats: Feeds:
from __future__ import absolute_import
import peewee as pw
from candolint import adapters
database = pw.SqliteDatabase(None, journal_mode='WAL')
class BaseModel(pw.Model):
class Meta:
database = database
@classmethod
def create_or_get(cls, **kwargs):
try:
with cls._meta.database.atomic():
return cls.create(**kwargs), True
except pw.IntegrityError:
# a variation on https://github.com/coleifer/peewee/pull/681
query = []
compound_unique = set()
for field_names, unique in cls._meta.indexes:
if unique:
compound_unique.update(field_names)
for field_name, value in kwargs.items():
field = getattr(cls, field_name)
if field.unique or field.primary_key or field_name in compound_unique:
query.append(field == value)
return cls.get(*query), False
class Project(BaseModel):
url = pw.CharField(unique=True)
domain = pw.CharField()
user = pw.CharField(null=True)
name = pw.CharField()
class Meta:
indexes = (
(('domain', 'user', 'name'), True),
)
def get_url(self, request=None):
if request is not None:
base = '{}://{}'.format(request.protocol, request.host)
return base + self.get_url()
else:
user = self.user if self.user is not None else '-'
return '/{}/{}/{}'.format(self.domain, user, self.name)
def get_title(self):
owner = self.user if self.user is not None else self.domain
return '{}/{}'.format(owner, self.name)
def get_adapter(self):
if self.domain == 'bitbucket.org':
return adapters.BitbucketAdapter(self)
else:
return adapters.HostingAdapter(self)
class Change(BaseModel):
rev = pw.IntegerField()
node = pw.CharField()
branch = pw.CharField()
date = pw.DateTimeField()
author = pw.CharField()
message = pw.CharField()
project = pw.ForeignKeyField(Project, related_name='changes')
class Meta:
indexes = (
(('rev', 'node', 'project'), True),
)
class Check(BaseModel):
ordinal = pw.IntegerField()
errors = pw.IntegerField()
warnings = pw.IntegerField()
lines = pw.TextField()
success = pw.BooleanField()
started = pw.DateTimeField()
finished = pw.DateTimeField()
project = pw.ForeignKeyField(Project, related_name='checks')
change = pw.ForeignKeyField(Change, related_name='checks')
class Meta:
order_by = ('-finished', '-ordinal')
indexes = (
(('ordinal', 'project'), True),
)
def get_duration(self):
d = self.finished - self.started
minutes, seconds = divmod(int(d.total_seconds()), 60)
result = []
if minutes:
result.append('{} min'.format(minutes))
if seconds or not minutes:
result.append('{} sec'.format(seconds))
return ' '.join(result)
@classmethod
def get_next_ordinal(cls, project):
count = cls.select(pw.fn.COUNT(cls.id)).where(cls.project == project)
return count + 1