Exemplo n.º 1
0
class Notification(models.Model):
    project = models.ForeignKey(Project,
                                related_name='%(class)s_notifications')
    objects = RelatedProjectManager()

    class Meta:
        abstract = True
Exemplo n.º 2
0
class Domain(models.Model):
    project = models.ForeignKey(Project, related_name='domains')
    domain = models.CharField(_('Domain'),
                              unique=True,
                              max_length=255,
                              validators=[validate_domain_name])
    machine = models.BooleanField(default=False,
                                  help_text=_('This Domain was auto-created'))
    cname = models.BooleanField(
        default=False, help_text=_('This Domain is a CNAME for the project'))
    canonical = models.BooleanField(
        default=False,
        help_text=
        _('This Domain is the primary one where the documentation is served from.'
          ))
    count = models.IntegerField(
        default=0, help_text=_('Number of times this domain has been hit.'))

    objects = RelatedProjectManager()

    class Meta:
        ordering = ('-canonical', '-machine', 'domain')

    def __unicode__(self):
        return "{domain} pointed at {project}".format(
            domain=self.domain, project=self.project.name)

    def save(self, *args, **kwargs):
        parsed = urlparse(self.domain)
        if parsed.scheme or parsed.netloc:
            self.domain = parsed.netloc
        else:
            self.domain = parsed.path
        super(Domain, self).save(*args, **kwargs)
Exemplo n.º 3
0
class Build(models.Model):
    project = models.ForeignKey(Project, verbose_name=_('Project'),
                                related_name='builds')
    version = models.ForeignKey(Version, verbose_name=_('Version'), null=True,
                                related_name='builds')
    type = models.CharField(_('Type'), max_length=55, choices=BUILD_TYPES,
                            default='html')
    state = models.CharField(_('State'), max_length=55, choices=BUILD_STATE,
                             default='finished')
    date = models.DateTimeField(_('Date'), auto_now_add=True)
    success = models.BooleanField(_('Success'), default=True)

    setup = models.TextField(_('Setup'), null=True, blank=True)
    setup_error = models.TextField(_('Setup error'), null=True, blank=True)
    output = models.TextField(_('Output'), default='', blank=True)
    error = models.TextField(_('Error'), default='', blank=True)
    exit_code = models.IntegerField(_('Exit code'), null=True, blank=True)
    commit = models.CharField(_('Commit'), max_length=255, null=True, blank=True)

    length = models.IntegerField(_('Build Length'), null=True, blank=True)

    builder = models.CharField(_('Builder'), max_length=255, null=True, blank=True)

    # Manager

    objects = RelatedProjectManager()

    class Meta:
        ordering = ['-date']
        get_latest_by = 'date'
        index_together = [
            ['version', 'state', 'type']
        ]

    def __unicode__(self):
        return ugettext(u"Build %(project)s for %(usernames)s (%(pk)s)" % {
            'project': self.project,
            'usernames': ' '.join(self.project.users.all()
                                  .values_list('username', flat=True)),
            'pk': self.pk,
        })

    @models.permalink
    def get_absolute_url(self):
        return ('builds_detail', [self.project.slug, self.pk])

    @property
    def finished(self):
        '''Return if build has a finished state'''
        return self.state == BUILD_STATE_FINISHED
Exemplo n.º 4
0
class Domain(models.Model):
    """A custom domain name for a project."""

    project = models.ForeignKey(Project, related_name='domains')
    domain = models.CharField(_('Domain'),
                              unique=True,
                              max_length=255,
                              validators=[validate_domain_name])
    machine = models.BooleanField(default=False,
                                  help_text=_('This Domain was auto-created'))
    cname = models.BooleanField(
        default=False, help_text=_('This Domain is a CNAME for the project'))
    canonical = models.BooleanField(
        default=False,
        help_text=
        _('This Domain is the primary one where the documentation is served from.'
          ))
    https = models.BooleanField(_('Use HTTPS'),
                                default=False,
                                help_text=_('SSL is enabled for this domain'))
    count = models.IntegerField(
        default=0, help_text=_('Number of times this domain has been hit.'))

    objects = RelatedProjectManager()

    class Meta:
        ordering = ('-canonical', '-machine', 'domain')

    def __unicode__(self):
        return "{domain} pointed at {project}".format(
            domain=self.domain, project=self.project.name)

    def save(self, *args, **kwargs):
        from readthedocs.projects import tasks
        parsed = urlparse(self.domain)
        if parsed.scheme or parsed.netloc:
            self.domain = parsed.netloc
        else:
            self.domain = parsed.path
        super(Domain, self).save(*args, **kwargs)
        broadcast(type='app',
                  task=tasks.symlink_domain,
                  args=[self.project.pk, self.pk])

    def delete(self, *args, **kwargs):
        from readthedocs.projects import tasks
        broadcast(type='app',
                  task=tasks.symlink_domain,
                  args=[self.project.pk, self.pk, True])
        super(Domain, self).delete(*args, **kwargs)