mirror of
https://github.com/postgres/pgweb.git
synced 2025-08-13 13:12:42 +00:00

The manifest URL (which is optional) will point to an XML file that describes the command line, option file and environment options that can be passed to an installer, to allow automated or non-interactive deployment tools to figure out what info is required to run an installer and how to pass it to it. Requires SQL: ALTER TABLE downloads_stackbuilderapp ADD COLUMN manifesturl character varying(500); UPDATE downloads_stackbuilderapp SET manifesturl = ''; ALTER TABLE downloads_stackbuilderapp ALTER COLUMN manifesturl SET NOT NULL;
141 lines
5.8 KiB
Python
141 lines
5.8 KiB
Python
from django.db import models
|
|
from django.contrib.auth.models import User
|
|
from pgweb.util.bases import PgModel
|
|
|
|
from pgweb.core.models import Organisation
|
|
|
|
from datetime import datetime
|
|
|
|
class Mirror(models.Model):
|
|
country_name = models.CharField(max_length=50, null=False, blank=False)
|
|
country_code = models.CharField(max_length=2, null=False, blank=False)
|
|
mirror_created = models.DateTimeField(null=False, blank=False, default=datetime.now())
|
|
mirror_last_rsync = models.DateTimeField(null=False, blank=False, default=datetime(1970,1,1))
|
|
mirror_index = models.IntegerField(null=False)
|
|
host_addr = models.IPAddressField(null=True, default='0.0.0.0')
|
|
host_path = models.CharField(max_length=100, null=True)
|
|
host_sponsor = models.CharField(max_length=100, null=True)
|
|
host_contact = models.CharField(max_length=100, null=True)
|
|
host_email = models.CharField(max_length=100, null=True)
|
|
host_notes = models.TextField(null=True)
|
|
rsync_host1 = models.CharField(max_length=100, null=True)
|
|
rsync_host2 = models.CharField(max_length=100, null=True)
|
|
mirror_active = models.BooleanField(null=False, default=True)
|
|
mirror_dns = models.BooleanField(null=False, default=False)
|
|
mirror_private = models.BooleanField(null=False, default=False)
|
|
host_use_cname = models.BooleanField(null=False, default=False)
|
|
host_cname_host = models.CharField(max_length=100, null=True)
|
|
mirror_primary = models.BooleanField(null=False, default=False)
|
|
error_count = models.IntegerField(null=False, default=0)
|
|
alternate_protocol = models.BooleanField(null=False, default=False)
|
|
alternate_at_root = models.BooleanField(null=False, default=False)
|
|
|
|
class Meta:
|
|
db_table='mirrors'
|
|
|
|
def __unicode__(self):
|
|
return "%s.%s" % (self.country_code, self.mirror_index)
|
|
|
|
def get_host_name(self):
|
|
if self.mirror_index == 0:
|
|
return "ftp.%s.postgresql.org" % self.country_code
|
|
else:
|
|
return "ftp%s.%s.postgresql.org" % (self.mirror_index, self.country_code)
|
|
|
|
def get_root_path(self, method):
|
|
if method == 'f' or not self.alternate_at_root:
|
|
# FTP method, or http with same path, build complete one
|
|
return ("%s/%s" % (self.get_host_name(), self.host_path)).replace('//','/').rstrip('/')
|
|
else:
|
|
# http with alternate_at_root - thus, ignore the path element
|
|
return self.get_host_name()
|
|
|
|
def get_all_protocols(self):
|
|
if self.alternate_protocol:
|
|
return ('ftp', 'http', )
|
|
else:
|
|
return ('ftp', )
|
|
|
|
class Category(models.Model):
|
|
catname = models.CharField(max_length=100, null=False, blank=False)
|
|
blurb = models.TextField(null=False, blank=True)
|
|
|
|
def __unicode__(self):
|
|
return self.catname
|
|
|
|
class Meta:
|
|
ordering = ('catname',)
|
|
|
|
class LicenceType(models.Model):
|
|
typename = models.CharField(max_length=100, null=False, blank=False)
|
|
|
|
def __unicode__(self):
|
|
return self.typename
|
|
|
|
class Meta:
|
|
ordering = ('typename',)
|
|
|
|
class Product(PgModel, models.Model):
|
|
name = models.CharField(max_length=100, null=False, blank=False, unique=True)
|
|
approved = models.BooleanField(null=False, default=False)
|
|
org = models.ForeignKey(Organisation, db_column="publisher_id", null=False, verbose_name="Organisation")
|
|
url = models.URLField(null=False, blank=False)
|
|
category = models.ForeignKey(Category, null=False)
|
|
licencetype = models.ForeignKey(LicenceType, null=False, verbose_name="Licence type")
|
|
description = models.TextField(null=False, blank=False)
|
|
price = models.CharField(max_length=200, null=False, blank=True)
|
|
lastconfirmed = models.DateTimeField(null=False, blank=False, default=datetime.now())
|
|
|
|
send_notification = True
|
|
markdown_fields = ('description', )
|
|
|
|
def __unicode__(self):
|
|
return self.name
|
|
|
|
def verify_submitter(self, user):
|
|
return (len(self.org.managers.filter(pk=user.pk)) == 1)
|
|
|
|
class Meta:
|
|
ordering = ('name',)
|
|
|
|
class StackBuilderApp(models.Model):
|
|
textid = models.CharField(max_length=100, null=False, blank=False)
|
|
version = models.CharField(max_length=20, null=False, blank=False)
|
|
platform = models.CharField(max_length=20, null=False, blank=False,
|
|
choices= (('windows', 'Windows (32-bit)'), ('windows-x64', 'Windows (64-bit)'), ('osx', 'Mac OS X'),
|
|
('linux', 'Linux (32-bit)'), ('linux-x64', 'Linux (64-bit)'))
|
|
)
|
|
secondaryplatform = models.CharField(max_length=20, null=False, blank=True,
|
|
choices= (('', 'None'), ('windows', 'Windows (32-bit)'), ('windows-x64', 'Windows (64-bit)'),
|
|
('osx', 'Mac OS X'), ('linux', 'Linux (32-bit)'), ('linux-x64', 'Linux (64-bit)'))
|
|
)
|
|
name = models.CharField(max_length=500, null=False, blank=False)
|
|
active = models.BooleanField(null=False, blank=False, default=True)
|
|
description = models.TextField(null=False, blank=False)
|
|
category = models.CharField(max_length=100, null=False, blank=False)
|
|
pgversion = models.CharField(max_length=5, null=False, blank=True)
|
|
edbversion = models.CharField(max_length=5, null=False, blank=True)
|
|
format = models.CharField(max_length=5, null=False, blank=False,
|
|
choices = (('bin', 'Linux .bin'), ('app', 'Mac .app'),
|
|
('pkg', 'Mac .pkg'), ('mpkg', 'Mac .mpkg'),
|
|
('exe', 'Windows .exe'), ('msi', 'Windows .msi'))
|
|
)
|
|
installoptions = models.CharField(max_length=500, null=False, blank=True)
|
|
upgradeoptions = models.CharField(max_length=500, null=False, blank=True)
|
|
checksum = models.CharField(max_length=32, null=False, blank=False)
|
|
mirrorpath = models.CharField(max_length=500, null=False, blank=True)
|
|
alturl = models.URLField(max_length=500, null=False, blank=True)
|
|
txtdependencies = models.CharField(max_length=1000, null=False, blank=True,
|
|
verbose_name='Dependencies',
|
|
help_text='Comma separated list of text dependencies, no spaces!')
|
|
versionkey = models.CharField(max_length=500, null=False, blank=False)
|
|
manifesturl = models.URLField(max_length=500, null=False, blank=True)
|
|
|
|
def __unicode__(self):
|
|
return "%s %s %s" % (self.textid, self.version, self.platform)
|
|
|
|
class Meta:
|
|
unique_together = ('textid', 'version', 'platform', )
|
|
ordering = ('textid', 'name', 'platform', )
|
|
|