]> git.parisson.com Git - mezzo.git/commitdiff
Add project demos and related repositories
authorGuillaume Pellerin <guillaume.pellerin@ircam.fr>
Wed, 2 Nov 2016 14:30:46 +0000 (15:30 +0100)
committerGuillaume Pellerin <guillaume.pellerin@ircam.fr>
Wed, 2 Nov 2016 14:30:46 +0000 (15:30 +0100)
app/local_settings.py
app/organization/projects/models.py

index 80e6540b7427f2054d5f1b0f95f22a3c8e4c9bde..e5a9f4c8672d0f45837db86e1338814b9f353ae5 100644 (file)
@@ -220,7 +220,8 @@ JQUERY_UI_FILENAME = 'jquery-ui-1.9.2.min.js'
 SHOP_USE_VARIATIONS = False
 SHOP_USE_RATINGS = False
 
-
 date_now = datetime.now()
 CURRENT_SEASON = int(date_now.year) - 1 if datetime(date_now.year, 1,1) <= date_now and date_now <= datetime(date_now.year, 7, 31) else date_now.year
 CURRENT_SEASON_STYLED = str(CURRENT_SEASON)[-2:]+"."+str(CURRENT_SEASON+1)[-2:]
+
+PROJECT_DEMOS_DIR = '/srv/media/projects/demos/'
index 2b6525e82de2c537e481c7a4f53ae20c302701e6..39961f0acda2dcfb5ca367cb115f6eb9b95efa0f 100644 (file)
@@ -1,8 +1,10 @@
 from __future__ import unicode_literals
 import datetime
+import os
 
 from django.db import models
 from django.utils.translation import ugettext_lazy as _
+from django.contrib.auth.models import User
 
 from mezzanine.core.models import RichText, Displayable, Slugged, Orderable
 
@@ -15,6 +17,13 @@ PROJECT_TYPE_CHOICES = [
     ('external', _('external')),
 ]
 
+ACCESS_CHOICES = [
+    ('public', _('public')),
+    ('shared', _('shared')),
+    ('private', _('private')),
+]
+
+
 class Project(Displayable, Period, RichText):
     """(Project description)"""
 
@@ -30,6 +39,7 @@ class Project(Displayable, Period, RichText):
 
     class Meta:
         verbose_name = _('project')
+        verbose_name_plural = _("projects")
         ordering = ['-date_from', '-date_to']
 
     def __str__(self):
@@ -56,6 +66,7 @@ class ProjectTopic(Named):
 
     class Meta:
         verbose_name = _('project topic')
+        verbose_name_plural = _("project topics")
         ordering = ['name',]
 
     def __str__(self):
@@ -69,6 +80,7 @@ class ProjectProgram(Named):
 
     class Meta:
         verbose_name = _('program')
+        verbose_name_plural = _("programs")
         ordering = ['name',]
 
 
@@ -76,6 +88,7 @@ class ProjectProgramType(Named):
 
     class Meta:
         verbose_name = _('program type')
+        verbose_name_plural = _("program types")
         ordering = ['name',]
 
 
@@ -101,6 +114,7 @@ class ProjectFile(File):
 
 class ProjectBlock(Block):
 
+
     project = models.ForeignKey(Project, verbose_name=_('project'), related_name='blocks', blank=True, null=True, on_delete=models.SET_NULL)
 
 
@@ -110,3 +124,52 @@ class ProjectTopicPage(Page, SubTitled):
 
     class Meta:
         verbose_name = _('project topic page')
+        verbose_name_plural = _("project topic pages")
+
+
+class ProjectDemo(Displayable, RichText):
+
+    project = models.ForeignKey('Project', verbose_name=_('project'), related_name='demos', blank=True, null=True, on_delete=models.SET_NULL)
+    author = models.ForeignKey(User, verbose_name=_('author'), related_name='demos', blank=True, null=True, on_delete=models.SET_NULL)
+    repository = models.ForeignKey('Repository', verbose_name=_('repository'), related_name='demos', blank=True, null=True, on_delete=models.SET_NULL)
+    directory = models.CharField(_('directory'), max_length=256, blank=True, null=True)
+    build_commands = models.TextField(_('build commands'), blank=True)
+
+    class Meta:
+        verbose_name = _('project demo')
+        verbose_name_plural = _("project demos")
+
+    def get_absolute_url(self):
+        return reverse("organization-project-demo-detail", kwargs={"slug": self.slug})
+
+    def build(self):
+        os.chdir(settings.PROJECT_DEMOS_DIR + os.sep + self.directory)
+        for commands in self.build_commands.split('\n'):
+            os.system(command)
+
+
+class Repository(Named, URL):
+
+    system = models.ForeignKey('RepositorySystem', verbose_name=_('system'), related_name='repositories')
+    access = models.CharField(_('access'), max_length=64, choices=ACCESS_CHOICES, default='private')
+    branch = models.CharField(_('branch'), max_length=32, default='master')
+
+    class Meta:
+        verbose_name = _('repository')
+        verbose_name_plural = _("repositories")
+
+    def clone(self):
+        os.system(' '.join((self.system.clone_command, self.url, settings.PROJECT_DEMOS_DIR)))
+
+
+class RepositorySystem(Named):
+
+    type = models.CharField(_('type'), max_length=32)
+    clone_command = models.CharField(_('clone command'), max_length=256)
+    pull_command = models.CharField(_('pull command'), max_length=256)
+    checkout_command = models.CharField(_('checkout command'), max_length=256)
+    branch_command = models.CharField(_('branch command'), max_length=256)
+
+    class Meta:
+        verbose_name = _('repository system')
+        verbose_name_plural = _("repository systems")