spicycms/spicy.core

View on GitHub
src/spicy/core/admin/models.py

Summary

Maintainability
A
0 mins
Test Coverage
from django.contrib.sites.managers import CurrentSiteManager
from django.contrib.sites.models import Site
from django.db import models
from django.utils.translation import ugettext_lazy as _
from . import conf
from spicy.core.admin import abs


class AdminApp(models.Model):
    """
    Register all Spicy apps from INSTALLED_APPS and
    """
    order_lv = models.PositiveSmallIntegerField(_('Order lv.'), default=100)
    name = models.CharField(_('Store key or URL'), max_length=255)
    description = models.TextField(_('Admins emails'), blank=True)
    homepage = models.CharField(_('Homepage'), max_length=255)
    version = models.CharField(_('Version'), max_length=30)
    enable_dashboard = models.BooleanField(
        _('Enable dashboard'), default=False)
    enable_quick_add = models.BooleanField(
        _('Enable quick create'), default=False)
    # get `store` param to check new updates throught marketplace.spicycms.com
    # API
    license_pub_key = models.CharField(
        _('User license public key'), max_length=255)
    download_url = models.CharField(_('Download URL'), max_length=255)
    last_update = models.DateTimeField(_('Last Update'), auto_now=True)

    site = models.ForeignKey(Site)

    def label(self):
        return conf.admin_apps_register[self.name]

    def get_version(self):
        raise NotImplemented

    def already_updated(self):
        # TODO api call
        return False

    def update_url(self):
        # {{ app.download_url }}/{{ app.license_pub_key }}
        # Api call
        return None

    def update(self):
        raise NotImplemented

    class Meta:
        permissions = (
            ('admin_apps', 'Can edit site settings'),
        )
        db_table = 'spicy_apps'


class Settings(abs.BaseRedmineSettings):
    @staticmethod
    def get_robots_default():
        site = Site.objects.get_current()
        return (
            "# robots.txt for http://" + site.domain + "\n"
            "User-agent: *\n"
            "Host: " + site.domain + "\n"
            "Sitemap: http://" + site.domain + "/sitemap.xml")

    robots = models.TextField(
        max_length=3000, blank=True, verbose_name=_('robots.txt'),
        default=lambda: Settings.get_robots_default())
    license_pub_key = models.CharField(
        _('User license public key'), max_length=255, blank=True)
    sentry_key = models.CharField(
        _('Sentry key'), max_length=255, blank=True)
    redmine_key = models.CharField(
        _('Redmine key'), max_length=255, blank=True)
    ga_key = models.CharField(
        _('Google Analytics API key'), max_length=15, blank=True)

    # developer mode
    # get developer settings from main server using API call and
    # licence_pub_key
    # ftp access data
    # manager_link

    enable_debug_toolbar = models.BooleanField(
        _('Enable DEBUG toolbar'), default=False)
    debug_mode = models.BooleanField(_('DEBUG mode'), default=False)
    admins_emails = models.TextField(_('Admins emails'), blank=True)
    managers_emails = models.TextField(_('Managers emails'), blank=True)

    #notify_50x
    #notify_404

    site = models.ForeignKey(
        Site, verbose_name=_('Site'), default=Site.objects.get_current,
        unique=True)

    objects = models.Manager()
    on_site = CurrentSiteManager()

    def __unicode__(self):
        return unicode(_(u'Settings for {0}')).format(self.site.name)

    class Meta:
        permissions = (
            ('change_managers_settings', _('Can change managers settings')),
            ('view_apps', _('View applications'))
        )
        db_table = 'spicy_settings'
        abstract = False

"""
TODO or not TODO ???
is it dublication of simple content block functionality?

class CustomVariable(models.Model):
    name =  models.CharField(
        _('Custom variable name'),
        max_length=100)

    sentry_key = models.CharField(_('Sentry key'), max_length=255)
    redmine_key = models.CharField(_('Redmine key'), max_length=255)
    redmine_project = models.CharField(_('Redmine project URL'), max_length=255)

    admins_emails = models.TextField(_('Admins emails'), blank=True)
    managers_emails = models.TextField(_('Managers emails'), blank=True)

    site = models.ForeignKey(Site)

    class Meta:
        permissions = (
            ('edit_settings', 'Can edit site settings'),
        )
        db_table = 'spicy_settings'
        abstract = True
"""