layerindex-web/layerindex/models.py
Paul Eggleton 22b7918bf2 Allow a name to be shown even if parsing recipe failed
If recipe parsing failed the pn field will be blank, but for display
purposes we can take a guess from the filename.

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
2013-02-18 15:40:09 +00:00

129 lines
4.2 KiB
Python

# layerindex-web - model definitions
#
# Copyright (C) 2013 Intel Corporation
#
# Licensed under the MIT license, see COPYING.MIT for details
from django.db import models
from datetime import datetime
from django.contrib.auth.models import User
import os.path
class LayerItem(models.Model):
LAYER_STATUS_CHOICES = (
('N', 'New'),
('P', 'Published'),
)
LAYER_TYPE_CHOICES = (
('A', 'Base'),
('B', 'BSP'),
('S', 'Software'),
('D', 'Distribution'),
('M', 'Miscellaneous'),
)
name = models.CharField(max_length=40, unique=True)
created_date = models.DateTimeField('Created')
status = models.CharField(max_length=1, choices=LAYER_STATUS_CHOICES, default='N')
layer_type = models.CharField(max_length=1, choices=LAYER_TYPE_CHOICES, default='M')
summary = models.CharField(max_length=200)
description = models.TextField()
vcs_last_fetch = models.DateTimeField('Last successful fetch', blank=True, null=True)
vcs_last_rev = models.CharField(max_length=80, blank=True)
vcs_last_commit = models.DateTimeField('Last commit date', blank=True, null=True)
vcs_subdir = models.CharField('Repository subdirectory', max_length=40, blank=True)
vcs_url = models.CharField('Repository URL', max_length=200)
vcs_web_url = models.URLField('Repository web interface URL', blank=True)
vcs_web_tree_base_url = models.CharField('Repository web interface tree start URL', max_length=200, blank=True)
usage_url = models.URLField('Usage web page URL', blank=True)
class Meta:
permissions = (
("publish_layer", "Can publish layers"),
)
def change_status(self, newstatus, username):
self.status = newstatus
def tree_url(self):
if self.vcs_subdir and self.vcs_web_tree_base_url:
return self.vcs_web_tree_base_url + self.vcs_subdir
else:
return self.vcs_web_tree_base_url
def sorted_recipes(self):
return self.recipe_set.order_by('filename')
def active_maintainers(self):
return self.layermaintainer_set.filter(status='A')
def __unicode__(self):
return self.name
class LayerMaintainer(models.Model):
MAINTAINER_STATUS_CHOICES = (
('A', 'Active'),
('I', 'Inactive'),
)
layer = models.ForeignKey(LayerItem)
name = models.CharField(max_length=50)
email = models.CharField(max_length=255)
responsibility = models.CharField(max_length=200, blank=True)
status = models.CharField(max_length=1, choices=MAINTAINER_STATUS_CHOICES, default='A')
def __unicode__(self):
respstr = ""
if self.responsibility:
respstr = " - %s" % self.responsibility
return "%s <%s>%s" % (self.name, self.email, respstr)
class LayerDependency(models.Model):
layer = models.ForeignKey(LayerItem, related_name='dependencies_set')
dependency = models.ForeignKey(LayerItem, related_name='dependents_set')
def __unicode__(self):
return "%s depends on %s" % (self.layer.name, self.dependency.name)
class LayerNote(models.Model):
layer = models.ForeignKey(LayerItem)
text = models.TextField()
def __unicode__(self):
return self.text
class Recipe(models.Model):
layer = models.ForeignKey(LayerItem)
filename = models.CharField(max_length=255)
filepath = models.CharField(max_length=255, blank=True)
pn = models.CharField(max_length=40, blank=True)
pv = models.CharField(max_length=100, blank=True)
summary = models.CharField(max_length=100, blank=True)
description = models.TextField(blank=True)
section = models.CharField(max_length=100, blank=True)
license = models.CharField(max_length=100, blank=True)
homepage = models.URLField(blank=True)
def vcs_web_url(self):
return os.path.join(self.layer.tree_url(), self.filepath, self.filename)
def full_path(self):
return os.path.join(self.filepath, self.filename)
def short_desc(self):
if self.summary:
return self.summary
else:
return self.description
def name(self):
if self.pn:
return self.pn
else:
return self.filename.split('_')[0]
def __unicode__(self):
return os.path.join(self.filepath, self.filename)