summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/gentoo_main/settings.py.conf163
-rw-r--r--python/gentoo_main/urls.py10
-rw-r--r--python/gentoo_main/wsgi.py.conf29
-rw-r--r--python/gentoo_www/__pycache__/models.cpython-33.pycbin11144 -> 0 bytes
-rw-r--r--python/gentoo_www/__pycache__/urls.cpython-33.pycbin351 -> 0 bytes
-rw-r--r--python/gentoo_www/__pycache__/views.cpython-33.pycbin6394 -> 0 bytes
-rw-r--r--python/gentoo_www/models.py124
-rw-r--r--python/gentoo_www/urls.py7
-rw-r--r--python/gentoo_www/views.py205
-rw-r--r--python/gosbs/__init__.py (renamed from python/gentoo_main/__init__.py)0
-rw-r--r--python/gosbs/settings.py.conf144
-rw-r--r--python/gosbs/urls.py9
-rw-r--r--python/gosbs/wsgi.py16
-rw-r--r--python/gosbs_auth/__init__.py (renamed from python/gentoo_www/__init__.py)0
-rw-r--r--python/gosbs_auth/admin.py3
-rw-r--r--python/gosbs_auth/apps.py5
-rw-r--r--python/gosbs_auth/migrations/__init__.py (renamed from python/tbc_www/__init__.py)0
-rw-r--r--python/gosbs_auth/models.py3
-rw-r--r--python/gosbs_auth/tests.py3
-rw-r--r--python/gosbs_auth/urls.py11
-rw-r--r--python/gosbs_auth/views.py3
-rw-r--r--[-rwxr-xr-x]python/manage.py2
-rw-r--r--python/packages/__init__.py (renamed from python/tbc_www/utils/__init__.py)0
-rw-r--r--python/packages/admin.py3
-rw-r--r--python/packages/apps.py5
-rw-r--r--python/packages/migrations/__init__.py0
-rw-r--r--python/packages/models.py188
-rw-r--r--python/packages/tests.py3
-rw-r--r--python/packages/urls.py7
-rw-r--r--python/packages/views.py3
-rw-r--r--python/projects/__init__.py0
-rw-r--r--python/projects/admin.py3
-rw-r--r--python/projects/apps.py5
-rw-r--r--python/projects/forms.py7
-rw-r--r--python/projects/migrations/__init__.py0
-rw-r--r--python/projects/models.py53
-rw-r--r--python/projects/tests.py3
-rw-r--r--python/projects/urls.py11
-rw-r--r--python/projects/views.py86
-rw-r--r--python/tbc_www/forms.py33
-rw-r--r--python/tbc_www/models.py319
-rw-r--r--python/tbc_www/router.py30
-rw-r--r--python/tbc_www/urls.py22
-rw-r--r--python/tbc_www/utils/bugzillasubmit.py27
-rw-r--r--python/tbc_www/views.py459
-rw-r--r--python/templates/includes/downloads/alpha.html17
-rw-r--r--python/templates/includes/downloads/amd64.html6
-rw-r--r--python/templates/includes/downloads/arch-default.html33
-rw-r--r--python/templates/includes/downloads/arch-main.html29
-rw-r--r--python/templates/includes/downloads/arm.html17
-rw-r--r--python/templates/includes/downloads/experimental.html12
-rw-r--r--python/templates/includes/downloads/hppa.html18
-rw-r--r--python/templates/includes/downloads/ia64.html25
-rw-r--r--python/templates/includes/downloads/ppc.html12
-rw-r--r--python/templates/includes/downloads/s390.html7
-rw-r--r--python/templates/includes/downloads/sh.html7
-rw-r--r--python/templates/includes/downloads/sparc.html11
-rw-r--r--python/templates/includes/downloads/warnings.html11
-rw-r--r--python/templates/includes/downloads/x86-default.html17
-rw-r--r--python/templates/includes/downloads/x86.html7
-rw-r--r--python/templates/includes/frontpage/new_build_req23
-rw-r--r--python/templates/includes/frontpage/new_logs42
-rw-r--r--python/templates/includes/frontpage/new_packages20
-rw-r--r--python/templates/includes/frontpage/new_qa10
-rw-r--r--python/templates/includes/frontpage/new_repoman10
-rw-r--r--python/templates/includes/frontpage/new_repoman_qa18
-rw-r--r--python/templates/includes/frontpage/news13
-rw-r--r--python/templates/includes/frontpage/updated_packages77
-rw-r--r--python/templates/includes/hero-section/end3
-rw-r--r--python/templates/includes/hero-section/start3
-rw-r--r--python/templates/includes/layout/footer.html23
-rw-r--r--python/templates/includes/layout/footer_db_update.html10
-rw-r--r--python/templates/includes/layout/footer_sitemap.html12
-rw-r--r--python/templates/includes/layout/head.html12
-rw-r--r--python/templates/includes/layout/header.html58
-rw-r--r--python/templates/includes/layout/sponsor.html9
-rw-r--r--python/templates/includes/navigation/primary13
-rw-r--r--python/templates/includes/navigation/secondary11
-rw-r--r--python/templates/includes/navigation/tertiary12
-rw-r--r--python/templates/includes/partials/download-link-raw.html5
-rw-r--r--python/templates/includes/partials/download-link.html4
-rw-r--r--python/templates/includes/partials/irc-channel.html8
-rw-r--r--python/templates/includes/partials/mailinglist.html21
-rw-r--r--python/templates/includes/partials/sponsor.html14
-rw-r--r--python/templates/layout/base.html9
-rw-r--r--python/templates/pages/build_req/index.html16
-rw-r--r--python/templates/pages/categories/index.html61
-rw-r--r--python/templates/pages/categories/packages/index.html63
-rw-r--r--python/templates/pages/categories/packages/versions/index.html233
-rw-r--r--python/templates/pages/home/index.html70
-rw-r--r--python/templates/pages/logs/all/build/index.html103
-rw-r--r--python/templates/pages/logs/build/index.html114
-rw-r--r--python/templates/pages/logs/build/submitbug/index.html8
-rw-r--r--python/templates/pages/logs/index.html42
-rw-r--r--python/templates/pages/packages/category/index.html33
-rw-r--r--python/templates/pages/packages/ebuilds/ebuild/index.html (renamed from python/templates/pages/categories/packages/versions/ebuild/index.html)42
-rw-r--r--python/templates/pages/packages/ebuilds/index.html30
-rw-r--r--python/templates/pages/packages/index.html28
-rw-r--r--python/templates/pages/projects/add/index.html8
-rw-r--r--python/templates/pages/projects/detail/index.html4
-rw-r--r--python/templates/pages/projects/index.html19
-rw-r--r--python/templates/pages/projects/repos/index.html31
-rw-r--r--python/templates/pages/www/index.html49
-rw-r--r--python/templates/registration/password_change_form.html13
-rw-r--r--python/www/__init__.py0
-rw-r--r--python/www/admin.py7
-rw-r--r--python/www/apps.py5
-rw-r--r--python/www/migrations/0001_initial.py64
-rw-r--r--python/www/migrations/__init__.py0
-rw-r--r--python/www/models.py74
-rw-r--r--python/www/router.py31
-rw-r--r--python/www/tests.py3
-rw-r--r--python/www/urls.py7
-rw-r--r--python/www/utils.py34
-rw-r--r--python/www/views.py19
115 files changed, 1195 insertions, 2689 deletions
diff --git a/python/gentoo_main/settings.py.conf b/python/gentoo_main/settings.py.conf
deleted file mode 100644
index 573d178..0000000
--- a/python/gentoo_main/settings.py.conf
+++ /dev/null
@@ -1,163 +0,0 @@
-import os
-ROOT_PATH = os.path.dirname(__file__)
-
-# Django settings for tinderbox-cluster project.
-
-DEBUG = True
-TEMPLATE_DEBUG = DEBUG
-
-ADMINS = (
- # ('Magnus Granberg', 'zorry@gentoo.org'),
-)
-
-MANAGERS = ADMINS
-
-DATABASES = {
- 'default': {
- 'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
- 'NAME': 'gentoo-www', # Or path to database file if using sqlite3.
- 'USER': 'tbc_www', # Not used with sqlite3.
- 'PASSWORD': 'fooo', # Not used with sqlite3.
- 'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
- 'PORT': '', # Set to empty string for default. Not used with sqlite3.
- },
- 'tbc': {
- 'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
- 'NAME': 'tbc', # Or path to database file if using sqlite3.
- 'USER': 'tbc', # Not used with sqlite3.
- 'PASSWORD': 'fooooo.', # Not used with sqlite3.
- 'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
- 'PORT': '', # Set to empty string for default. Not used with sqlite3.
- }
-}
-DATABASE_ROUTERS = ['tbc_www.router.TBCRouter']
-# Local time zone for this installation. Choices can be found here:
-# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
-# although not all choices may be available on all operating systems.
-# In a Windows environment this must be set to your system time zone.
-TIME_ZONE = 'Europe/Stockholm'
-
-# Language code for this installation. All choices can be found here:
-# http://www.i18nguy.com/unicode/language-identifiers.html
-LANGUAGE_CODE = 'en-us'
-
-SITE_ID = 1
-
-# If you set this to False, Django will make some optimizations so as not
-# to load the internationalization machinery.
-USE_I18N = True
-
-# If you set this to False, Django will not format dates, numbers and
-# calendars according to the current locale.
-USE_L10N = True
-
-# If you set this to False, Django will not use timezone-aware datetimes.
-USE_TZ = True
-
-# Absolute filesystem path to the directory that will hold user-uploaded files.
-# Example: "/home/media/media.lawrence.com/media/"
-MEDIA_ROOT = os.path.join(ROOT_PATH, '../media/')
-
-# URL that handles the media served from MEDIA_ROOT. Make sure to use a
-# trailing slash.
-# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
-MEDIA_URL = 'http://127.0.0.1/media/'
-
-# Absolute path to the directory static files should be collected to.
-# Don't put anything in this directory yourself; store your static files
-# in apps' "static/" subdirectories and in STATICFILES_DIRS.
-# Example: "/home/media/media.lawrence.com/static/"
-STATIC_ROOT = os.path.join(ROOT_PATH, '../../static/')
-
-# URL prefix for static files.
-# Example: "http://media.lawrence.com/static/"
-STATIC_URL = '/static/'
-
-# Additional locations of static files
-STATICFILES_DIRS = (
- os.path.join(ROOT_PATH, '../zobcs/static/'),
-)
-
-# List of finder classes that know how to find static files in
-# various locations.
-STATICFILES_FINDERS = (
- 'django.contrib.staticfiles.finders.FileSystemFinder',
- 'django.contrib.staticfiles.finders.AppDirectoriesFinder',
- 'django.contrib.staticfiles.finders.DefaultStorageFinder',
-)
-
-# Make this unique, and don't share it with anybody.
-SECRET_KEY = '(7ssrixz5q_xi^*jscmo4nz2m567893d7#ojh-%@$*4*n0m=km'
-
-# List of callables that know how to import templates from various sources.
-TEMPLATE_LOADERS = (
- 'django.template.loaders.filesystem.Loader',
- 'django.template.loaders.app_directories.Loader',
- 'django.template.loaders.eggs.Loader',
-)
-
-MIDDLEWARE_CLASSES = (
- 'django.middleware.common.CommonMiddleware',
- 'django.contrib.sessions.middleware.SessionMiddleware',
- 'django.middleware.csrf.CsrfViewMiddleware',
- 'django.contrib.auth.middleware.AuthenticationMiddleware',
- 'django.contrib.messages.middleware.MessageMiddleware',
- # Uncomment the next line for simple clickjacking protection:
- 'django.middleware.clickjacking.XFrameOptionsMiddleware',
-)
-
-ROOT_URLCONF = 'tbc_www.urls'
-
-# Python dotted path to the WSGI application used by Django's runserver.
-WSGI_APPLICATION = 'gentoo_main.wsgi.application'
-
-TEMPLATE_DIRS = (
- # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
- # Always use forward slashes, even on Windows.
- # Don't forget to use absolute paths, not relative paths.
- os.path.join(ROOT_PATH, '../templates/'),
-)
-
-INSTALLED_APPS = (
- 'django.contrib.auth',
- 'django.contrib.contenttypes',
- 'django.contrib.sessions',
- 'django.contrib.sites',
- 'django.contrib.messages',
- 'django.contrib.staticfiles',
- # Uncomment the next line to enable the admin:
- # 'django.contrib.admin',
- # Uncomment the next line to enable admin documentation:
- # 'django.contrib.admindocs',
- 'tbc_www',
- 'gentoo_www',
-)
-
-# A sample logging configuration. The only tangible logging
-# performed by this configuration is to send an email to
-# the site admins on every HTTP 500 error when DEBUG=False.
-# See http://docs.djangoproject.com/en/dev/topics/logging for
-# more details on how to customize your logging configuration.
-LOGGING = {
- 'version': 1,
- 'disable_existing_loggers': False,
- 'filters': {
- 'require_debug_false': {
- '()': 'django.utils.log.RequireDebugFalse'
- }
- },
- 'handlers': {
- 'mail_admins': {
- 'level': 'ERROR',
- 'filters': ['require_debug_false'],
- 'class': 'django.utils.log.AdminEmailHandler'
- }
- },
- 'loggers': {
- 'django.request': {
- 'handlers': ['mail_admins'],
- 'level': 'ERROR',
- 'propagate': True,
- },
- }
-}
diff --git a/python/gentoo_main/urls.py b/python/gentoo_main/urls.py
deleted file mode 100644
index ff710c4..0000000
--- a/python/gentoo_main/urls.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright 1998-2015 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-from django.conf.urls import url
-from . import views
-
-urlpatterns = [
- url(r'^home/$', views.home),
- url(r'^packages/$', views.packages),
-]
diff --git a/python/gentoo_main/wsgi.py.conf b/python/gentoo_main/wsgi.py.conf
deleted file mode 100644
index f3b7191..0000000
--- a/python/gentoo_main/wsgi.py.conf
+++ /dev/null
@@ -1,29 +0,0 @@
-"""
-WSGI config for tinderbox project.
-
-This module contains the WSGI application used by Django's development server
-and any production WSGI deployments. It should expose a module-level variable
-named ``application``. Django's ``runserver`` and ``runfcgi`` commands discover
-this application via the ``WSGI_APPLICATION`` setting.
-
-Usually you will have the standard Django WSGI application here, but it also
-might make sense to replace the whole Django WSGI application with a custom one
-that later delegates to the Django one. For example, you could introduce WSGI
-middleware here, or combine a Django application with an application of another
-framework.
-
-"""
-import os
-import sys
-sys.path.append('/home/zorry/zobsc/frontend/python')
-os.environ['DJANGO_SETTINGS_MODULE'] = 'gentoo_main.settings'
-
-# This application object is used by any WSGI server configured to use this
-# file. This includes Django's development server, if the WSGI_APPLICATION
-# setting points here.
-from django.core.wsgi import get_wsgi_application
-application = get_wsgi_application()
-
-# Apply WSGI middleware here.
-# from helloworld.wsgi import HelloWorldApplication
-# application = HelloWorldApplication(application)
diff --git a/python/gentoo_www/__pycache__/models.cpython-33.pyc b/python/gentoo_www/__pycache__/models.cpython-33.pyc
deleted file mode 100644
index 382fe69..0000000
--- a/python/gentoo_www/__pycache__/models.cpython-33.pyc
+++ /dev/null
Binary files differ
diff --git a/python/gentoo_www/__pycache__/urls.cpython-33.pyc b/python/gentoo_www/__pycache__/urls.cpython-33.pyc
deleted file mode 100644
index 1ca5240..0000000
--- a/python/gentoo_www/__pycache__/urls.cpython-33.pyc
+++ /dev/null
Binary files differ
diff --git a/python/gentoo_www/__pycache__/views.cpython-33.pyc b/python/gentoo_www/__pycache__/views.cpython-33.pyc
deleted file mode 100644
index 9d9ac96..0000000
--- a/python/gentoo_www/__pycache__/views.cpython-33.pyc
+++ /dev/null
Binary files differ
diff --git a/python/gentoo_www/models.py b/python/gentoo_www/models.py
deleted file mode 100644
index 2bc345e..0000000
--- a/python/gentoo_www/models.py
+++ /dev/null
@@ -1,124 +0,0 @@
-# Copyright 1998-2016 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-from django.db import models
-
-class SiteSettings(models.Model):
- SiteId = models.IntegerField(primary_key=True, db_column='site_id')
- site = models.CharField(max_length=20)
- title = models.CharField(max_length=50)
- email = models.CharField(max_length=50)
- description = models.CharField(max_length=100)
- url = models.CharField(max_length=50)
- contact = models.CharField(max_length=50)
- cdnurl = models.CharField(max_length=20)
- layout_path = models.CharField(max_length=100)
- download_url = models.CharField(max_length=100)
- class Meta:
- db_table = 'site_settings'
- def __str__(self):
- return '%s %s %s %s %s %s %s %s %s %s' % (self.SiteId, self.site, self.title, self.email, self.description, self.url, self.contact, self.cdnurl, self.layout_path, self.download_url)
-
-class Layout(models.Model):
- LayoutId = models.IntegerField(primary_key=True, db_column='layout_id')
- layout = models.CharField(max_length=20)
- layout_file = models.CharField(max_length=20)
- class Meta:
- db_table = 'layout'
- def __str__(self):
- return '%s %s %s' % (self.LayoutId, self.layout, self.layout_file)
-
-class Pages(models.Model):
- PageId = models.IntegerField(primary_key=True, db_column='page_id')
- nav_title = models.CharField(max_length=200)
- title = models.CharField(max_length=200)
- description = models.CharField(max_length=200)
- nav1 = models.CharField(max_length=100)
- nav1_show = models.BooleanField(default=False)
- nav1_weight = models.IntegerField(default=0)
- meta = models.CharField(max_length=200)
- url = models.CharField(max_length=200)
- inlinejs = models.CharField(max_length=200)
- body_class = models.CharField(max_length=200)
- LayoutId = models.ForeignKey(Layout, db_column='layout_id')
- SubMenu = models.BooleanField(default=False, db_column='sub_menu')
- class Meta:
- db_table = 'pages'
- def __str__(self):
- return '%s %s %s %s %s %s %s %s %s %s %s %s %s' % (self.PageId, self.nav_title, self.title, self.description, self.nav1, self.nav1_show, self.nav1_weight, self.meta, self.url, self.inlinejs, self.body_class, self.LayoutId, self.SubMenu)
-
-class SubPages(models.Model):
- SubPageId = models.IntegerField(primary_key=True, db_column='sub_page_id')
- nav_title = models.CharField(max_length=200)
- title = models.CharField(max_length=200)
- description = models.CharField(max_length=200)
- PageId = models.ForeignKey(Pages, db_column='page_id')
- nav2 = models.CharField(max_length=100)
- nav2_show = models.BooleanField(default=False)
- nav2_weight = models.IntegerField(default=0)
- meta = models.CharField(max_length=200)
- url = models.CharField(max_length=200)
- inlinejs = models.CharField(max_length=200)
- body_class = models.CharField(max_length=200)
- LayoutId = models.ForeignKey(Layout, db_column='layout_id')
- SubMenu = models.BooleanField(default=False, db_column='sub_menu')
- class Meta:
- db_table = 'sub_pages'
- def __str__(self):
- return '%s %s %s %s %s %s %s %s %s %s %s %s %s %s' % (self.SubPageId, self.nav_title, self.title, self.description, self.PageId, self.nav2, self.nav2_show, self.nav2_weight, self.meta, self.url, self.inlinejs, self.body_class, self.LayoutId, self.SubMenu)
-
-class SubSubPages(models.Model):
- SubSubPageId = models.IntegerField(primary_key=True, db_column='subsub_page_id')
- nav_title = models.CharField(max_length=200)
- title = models.CharField(max_length=200)
- description = models.CharField(max_length=200)
- SubPageId = models.ForeignKey(SubPages, db_column='sub_page_id')
- nav3 = models.CharField(max_length=100)
- nav3_show = models.BooleanField(default=False)
- nav3_weight = models.IntegerField(default=0)
- meta = models.CharField(max_length=200)
- url = models.CharField(max_length=200)
- inlinejs = models.CharField(max_length=200)
- body_class = models.CharField(max_length=200)
- LayoutId = models.ForeignKey(Layout, db_column='layout_id')
- class Meta:
- db_table = 'subsub_pages'
- def __str__(self):
- return '%s %s %s %s %s %s %s %s %s %s %s %s %s' % (self.SubSubPageId, self.nav_title, self.title, self.description, self.SubPageId, self.nav3, self.nav3_show, self.nav3_weight, self.meta, self.url, self.inlinejs, self.body_class, self.LayoutId)
-
-class Sponsors(models.Model):
- SponsorsId = models.IntegerField(primary_key=True, db_column='sponsors_id')
- Name = models.CharField(max_length=200, db_column='name')
- AdsName = models.CharField(max_length=200, db_column='ads_name')
- Img = models.CharField(max_length=200, db_column='img')
- AdsImg = models.CharField(max_length=200, db_column='ads_img')
- Link = models.CharField(max_length=200, db_column='link')
- AdsLink = models.CharField(max_length=200, db_column='ads_link')
- Blurb = models.TextField(db_column='blurb')
- AdsAltName = models.CharField(max_length=200, db_column='ads_alt_name')
- Weight = models.IntegerField(default=0, db_column='weight')
- AdsActive = models.BooleanField(default=False, db_column='ads_active')
- Active = models.BooleanField(default=False, db_column='active')
- class Meta:
- db_table = 'sponsors'
- def __str__(self):
- return '%s %s %s %s %s %s %s %s %s %s %s %s' % (self.SponsorsId, self.Name, self.AdsName, self.Img, self.AdsImg, self.Link, self.AdsLink, self.Blurb, self.AdsAltName, self.Weight, self.AdsActive, self.Active)
-
-class Posts(models.Model):
- PostId = models.IntegerField(primary_key=True, db_column='post_id')
- title = models.CharField(max_length=200, db_column='title')
- url = models.CharField(max_length=200, db_column='url')
- text = models.TextField(db_column='text')
- TimeStamp = models.DateTimeField(db_column='time_stamp')
- class Meta:
- db_table='posts'
- def __str__(self):
- return '%s %s %s %s %s' % (self.PostId, self.title, self.url, self.text, self.TimeStamp)
-
-class Bugzilla(models.Model):
- Username = models.CharField(max_length=150,db_column='username')
- Bugzillaname = models.CharField(max_length=150, db_column='bugzillaname')
- class Meta:
- db_table='bugzillauser'
- def __str__(self):
- return '%s %s' % (self.Username, self.Bugzillauser)
diff --git a/python/gentoo_www/urls.py b/python/gentoo_www/urls.py
deleted file mode 100644
index 5cd3d6a..0000000
--- a/python/gentoo_www/urls.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from django.conf.urls import url
-
-from . import views
-
-urlpatterns = [
- url(r'^(?P<pagerequest>\d+)/$', 'views.target'),
-]
diff --git a/python/gentoo_www/views.py b/python/gentoo_www/views.py
deleted file mode 100644
index 9984309..0000000
--- a/python/gentoo_www/views.py
+++ /dev/null
@@ -1,205 +0,0 @@
-# Copyright 1998-2015 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-from django.shortcuts import render, get_object_or_404, HttpResponseRedirect
-from django.conf import settings
-
-from gentoo_www.models import SiteSettings, Layout, Pages, SubPages, Sponsors, Posts
-
-import feedparser
-import urllib3
-import re
-
-# drv_libxml2 have a error with feedparser we work around it for now
-feedparser.PREFERRED_XML_PARSERS.remove('drv_libxml2')
-
-def default_TmpDict(pagerequest):
- site = get_object_or_404(SiteSettings)
- page = get_object_or_404(Pages, nav1 = pagerequest)
- pages = Pages.objects.all()
- if page.SubMenu:
- subpages = SubPages.objects.filter(PageId = page.PageId)
- else:
- subpages = False
- contact = get_object_or_404(SubPages, nav2 = 'contact')
- TmpDict = {'site' : site}
- TmpDict['page'] = page
- TmpDict['pages'] = pages
- TmpDict['subpages'] = subpages
- TmpDict['contact'] = contact
- TmpDict['smappages'] = SubPages.objects.all()
- return TmpDict
-
-def home(request):
- pagerequest = 'home'
- TmpDict = default_TmpDict(pagerequest)
-
- showposts = 5
- posts = Posts.objects.all()
- sponsors = Sponsors.objects.all()
- pp = feedparser.parse('https://planet.gentoo.org/rss20.xml')
- planetposts = []
- i = 0
- for ppost in pp['entries']:
- if i is showposts:
- break
- attr = {}
- attr['author'] = ppost['author']
- attr['url'] = ppost['link']
- attr['title'] = ppost['title']
- attr['published'] = ppost['published']
- planetposts.append(attr)
- i = i + 1
- gp = feedparser.parse('https://security.gentoo.org/glsa/feed.rss')
- glsaposts = []
- i = 0
- for gpost in gp['entries']:
- if i is showposts:
- break
- split_title = re.split(': ', gpost['title'])
- attr = {}
- attr['id'] = split_title[0]
- attr['url'] = gpost['link']
- attr['title'] = split_title[1] + ': ' + split_title[2]
- attr['severity'] = 'normal'
- glsaposts.append(attr)
- i = i + 1
-
- pkp = feedparser.parse('https://packages.gentoo.org/feed/')
- packageposts = []
- i = 0
- for ppost in pkp['entries']:
- if i is showposts:
- break
- split_title = re.split(': ', ppost['title'])
- attr = {}
- attr['url'] = ppost['links'][0]['href']
- attr['atom'] = re.sub('<span class="cpvstr">', '', re.sub('</span>', '', split_title[0]))
- attr['atom_p'] = attr['atom']
- attr['description'] = re.sub('<span class="description">', '', re.sub('</span>', '', split_title[1]))
- packageposts.append(attr)
- i = i + 1
-
- wp = feedparser.parse('https://wiki.gentoo.org/index.php?title=Special:NewPages&feed=rss&hidebots=1&hideredirs=1&limit=50&offset=&namespace=0&username=&tagfilter=')
- wikiposts = []
- i = 0
- for wpost in wp['entries']:
- if i is showposts:
- break
- attr = {}
- attr['author'] = wpost['author']
- attr['url'] = wpost['link']
- attr['title'] = wpost['title']
- wikiposts.append(attr)
- i = i + 1
- TmpDict['posts'] = posts
- TmpDict['sponsors'] = sponsors
- TmpDict['planetposts'] = planetposts
- TmpDict['glsaposts'] = glsaposts
- TmpDict['packageposts'] = packageposts
- TmpDict['wikiposts'] = wikiposts
- return render(request, 'pages/' + pagerequest + '/index.html', TmpDict)
-
-def downloads(request):
- pagerequest = 'downloads'
- http = urllib3.PoolManager()
- archlist = []
- #FIXME get arch list from db
- archlist.append('amd64')
- archlist.append('x86')
- #archlist.append('ia64')
- downloads_dict = {}
- for arch in archlist:
- # Stage3
- r = http.request('GET', 'http://distfiles.gentoo.org/releases/' + arch + '/autobuilds/latest-stage3.txt')
- rlines = re.split('\n', r.data.decode('utf-8'))
- attr2 = {}
- i = 0
- stage3list = []
- for line in rlines:
- if line == '':
- break
- if i >= 2:
- attr = {}
- attr['tag'] = ''
- attr['defaultstage'] = False
- attr['title'] = 'Stage 3'
- split1 = re.split(' ', line)
- attr['size'] = split1[1]
- attr['link'] = split1[0]
- split2 = re.split('/', split1[0], maxsplit=1)
- attr['date'] = split2[0]
- if '/' in split2[1]:
- split3 = re.split('/', split2[1])
- stage3id = re.split('-' + attr['date'] + '.tar.bz2', re.split('stage3-', split3[1])[1])[0]
- else:
- stage3id = re.split('-' + attr['date'] + '.tar.bz2', re.split('stage3-', split2[1])[1])[0]
- if re.search('nomultilib', stage3id):
- attr['tag'] = 'no multilib'
- elif re.search('uclibc', stage3id):
- attr['tag'] = 'uclibc'
- elif re.search('x32', stage3id):
- attr['tag'] = 'X32'
- else:
- if arch == 'x86':
- if re.search('i686', stage3id):
- attr['defaultstage'] = True
- attr['tag'] = 'i686' +'|' + attr['tag']
- if re.search('i486', stage3id):
- attr['tag'] = 'i486' +'|' + attr['tag']
- else:
- attr['tag'] = False
- else:
- attr['tag'] = False
- attr['defaultstage'] = True
- if re.search('hardened', stage3id):
- attr['title'] = 'Hardened ' + attr['title']
- attr['defaultstage'] = False
- attr['id'] = stage3id
- stage3list.append(attr)
- i = i + 1
- attr2['stage3s'] = stage3list
- # cd's
- r = http.request('GET', 'http://distfiles.gentoo.org/releases/' + arch + '/autobuilds/latest-iso.txt')
- rlines = re.split('\n', r.data.decode('utf-8'))
- isolist = []
- i = 0
- for line in rlines:
- if line == '':
- break
- if i >= 2:
- attr = {}
- split1 = re.split(' ', line)
- attr['size'] = split1[1]
- attr['link'] = split1[0]
- split2 = re.split('/', split1[0], maxsplit=1)
- attr['date'] = split2[0]
- if re.search('/', split2[1]):
- split3 = re.split('/', split2[1])
- if re.search('/', split2[1]):
- split3 = re.split('/', split2[1])
- cdid = re.split('-' + attr['date'] + '.iso', split3[1])[0]
- else:
- cdid = re.split('-' + attr['date'] + '.iso', split2[1])[0]
- if re.search('minimal', cdid):
- attr['id'] = 'minimal'
- attr['title'] = 'Minimal Installation CD'
- elif re.search('admincd', cdid):
- attr['id'] = 'admincd'
- attr['title'] = 'Admin CD'
- else:
- attr['id'] = ''
- attr['title'] = ''
- isolist.append(attr)
- i = i +1
- attr2['isos'] = isolist
- attr2['arch'] = arch
- if arch == 'amd64':
- attr2['aka'] = 'x86_64'
- else:
- attr2['aka'] = False
- downloads_dict[arch] = attr2
- TmpDict = default_TmpDict(pagerequest)
- print(downloads_dict)
- TmpDict['downloadsinfo'] = downloads_dict
- return render(request, 'pages/' + pagerequest + '/index.html', TmpDict)
diff --git a/python/gentoo_main/__init__.py b/python/gosbs/__init__.py
index e69de29..e69de29 100644
--- a/python/gentoo_main/__init__.py
+++ b/python/gosbs/__init__.py
diff --git a/python/gosbs/settings.py.conf b/python/gosbs/settings.py.conf
new file mode 100644
index 0000000..a2e4330
--- /dev/null
+++ b/python/gosbs/settings.py.conf
@@ -0,0 +1,144 @@
+"""
+Django settings for gosbs_main project.
+
+Generated by 'django-admin startproject' using Django 2.2.2.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/2.2/topics/settings/
+
+For the full list of settings and their values, see
+https://docs.djangoproject.com/en/2.2/ref/settings/
+"""
+
+import os
+
+# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
+BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+
+
+# Quick-start development settings - unsuitable for production
+# See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/
+
+# SECURITY WARNING: keep the secret key used in production secret!
+SECRET_KEY = 'r*^^p)w%5h+tc#87!4!d@e196lf$a_&rz)^!*pziw!&5#jjb$a'
+
+# SECURITY WARNING: don't run with debug turned on in production!
+DEBUG = True
+
+ALLOWED_HOSTS = []
+
+
+# Application definition
+
+INSTALLED_APPS = [
+ 'django.contrib.admin',
+ 'django.contrib.auth',
+ 'django.contrib.contenttypes',
+ 'django.contrib.sessions',
+ 'django.contrib.messages',
+ 'django.contrib.staticfiles',
+ 'www.apps.WwwConfig',
+ 'gosbs_auth.apps.AuthConfig',
+ 'packages.apps.PackagesConfig',
+ 'projects.apps.ProjectsConfig',
+]
+
+MIDDLEWARE = [
+ 'django.middleware.security.SecurityMiddleware',
+ 'django.contrib.sessions.middleware.SessionMiddleware',
+ 'django.middleware.common.CommonMiddleware',
+ 'django.middleware.csrf.CsrfViewMiddleware',
+ 'django.contrib.auth.middleware.AuthenticationMiddleware',
+ 'django.contrib.messages.middleware.MessageMiddleware',
+ 'django.middleware.clickjacking.XFrameOptionsMiddleware',
+]
+
+ROOT_URLCONF = 'gosbs.urls'
+
+TEMPLATES = [
+ {
+ 'BACKEND': 'django.template.backends.django.DjangoTemplates',
+ 'DIRS': [os.path.join(BASE_DIR, 'templates')],
+ 'APP_DIRS': True,
+ 'OPTIONS': {
+ 'context_processors': [
+ 'django.template.context_processors.debug',
+ 'django.template.context_processors.request',
+ 'django.contrib.auth.context_processors.auth',
+ 'django.contrib.messages.context_processors.messages',
+ ],
+ },
+ },
+]
+
+WSGI_APPLICATION = 'gosbs.wsgi.application'
+
+
+# Database
+# https://docs.djangoproject.com/en/2.2/ref/settings/#databases
+
+DATABASES = {
+ 'default': {
+ 'ENGINE': 'django.db.backends.mysql',
+ 'NAME': 'gosbs-www',
+ 'USER': 'gosbs-www',
+ 'PASSWORD': 'X',
+ 'HOST': '192.168.1.X',
+ 'PORT': '',
+ 'OPTIONS' : {
+ 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
+ 'isolation_level': "read committed",
+ },
+ },
+ 'gosbs': {
+ 'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
+ 'NAME': 'gosbs', # Or path to database file if using sqlite3.
+ 'USER': 'gosbs', # Not used with sqlite3.
+ 'PASSWORD': 'X', # Not used with sqlite3.
+ 'HOST': '192.168.1.X', # Set to empty string for localhost. Not used with sqlite3.
+ 'PORT': '', # Set to empty string for default. Not used with sqlite3.
+ 'OPTIONS' : {
+ 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
+ 'isolation_level': "read committed",
+ },
+ }
+}
+DATABASE_ROUTERS = ['www.router.GosbsRouter']
+
+# Password validation
+# https://docs.djangoproject.com/en/2.2/ref/settings/#auth-password-validators
+
+AUTH_PASSWORD_VALIDATORS = [
+ {
+ 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
+ },
+ {
+ 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
+ },
+ {
+ 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
+ },
+ {
+ 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
+ },
+]
+
+
+# Internationalization
+# https://docs.djangoproject.com/en/2.2/topics/i18n/
+
+LANGUAGE_CODE = 'en-us'
+
+TIME_ZONE = 'Europe/Stockholm'
+
+USE_I18N = True
+
+USE_L10N = True
+
+USE_TZ = True
+
+
+# Static files (CSS, JavaScript, Images)
+# https://docs.djangoproject.com/en/2.2/howto/static-files/
+
+STATIC_URL = '/static/'
diff --git a/python/gosbs/urls.py b/python/gosbs/urls.py
new file mode 100644
index 0000000..f87286f
--- /dev/null
+++ b/python/gosbs/urls.py
@@ -0,0 +1,9 @@
+from django.contrib import admin
+from django.urls import include, path
+
+urlpatterns = [
+ path('www/', include('www.urls')),
+ path('auth/', include('gosbs_auth.urls')),
+ path('projects/', include('projects.urls', namespace="projects")),
+ path('admin/', admin.site.urls),
+]
diff --git a/python/gosbs/wsgi.py b/python/gosbs/wsgi.py
new file mode 100644
index 0000000..4d2fab7
--- /dev/null
+++ b/python/gosbs/wsgi.py
@@ -0,0 +1,16 @@
+"""
+WSGI config for gosbs_main project.
+
+It exposes the WSGI callable as a module-level variable named ``application``.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/2.2/howto/deployment/wsgi/
+"""
+
+import os
+
+from django.core.wsgi import get_wsgi_application
+
+os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'gosbs.settings')
+
+application = get_wsgi_application()
diff --git a/python/gentoo_www/__init__.py b/python/gosbs_auth/__init__.py
index e69de29..e69de29 100644
--- a/python/gentoo_www/__init__.py
+++ b/python/gosbs_auth/__init__.py
diff --git a/python/gosbs_auth/admin.py b/python/gosbs_auth/admin.py
new file mode 100644
index 0000000..8c38f3f
--- /dev/null
+++ b/python/gosbs_auth/admin.py
@@ -0,0 +1,3 @@
+from django.contrib import admin
+
+# Register your models here.
diff --git a/python/gosbs_auth/apps.py b/python/gosbs_auth/apps.py
new file mode 100644
index 0000000..d6b5700
--- /dev/null
+++ b/python/gosbs_auth/apps.py
@@ -0,0 +1,5 @@
+from django.apps import AppConfig
+
+
+class AuthConfig(AppConfig):
+ name = 'gosbs_auth'
diff --git a/python/tbc_www/__init__.py b/python/gosbs_auth/migrations/__init__.py
index e69de29..e69de29 100644
--- a/python/tbc_www/__init__.py
+++ b/python/gosbs_auth/migrations/__init__.py
diff --git a/python/gosbs_auth/models.py b/python/gosbs_auth/models.py
new file mode 100644
index 0000000..71a8362
--- /dev/null
+++ b/python/gosbs_auth/models.py
@@ -0,0 +1,3 @@
+from django.db import models
+
+# Create your models here.
diff --git a/python/gosbs_auth/tests.py b/python/gosbs_auth/tests.py
new file mode 100644
index 0000000..7ce503c
--- /dev/null
+++ b/python/gosbs_auth/tests.py
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/python/gosbs_auth/urls.py b/python/gosbs_auth/urls.py
new file mode 100644
index 0000000..090f9bc
--- /dev/null
+++ b/python/gosbs_auth/urls.py
@@ -0,0 +1,11 @@
+from django.urls import path
+
+from django.contrib.auth import views as auth_views
+
+urlpatterns = [
+ path('login/', auth_views.LoginView.as_view()),
+ path('logout/', auth_views.LogoutView.as_view(next_page = '/www/')),
+ path('password_change/', auth_views.PasswordChangeView.as_view()),
+ path('password_change/done', auth_views.PasswordChangeDoneView.as_view()),
+ #path('password_reset/', auth_views.PasswordResetView.as_()),
+]
diff --git a/python/gosbs_auth/views.py b/python/gosbs_auth/views.py
new file mode 100644
index 0000000..91ea44a
--- /dev/null
+++ b/python/gosbs_auth/views.py
@@ -0,0 +1,3 @@
+from django.shortcuts import render
+
+# Create your views here.
diff --git a/python/manage.py b/python/manage.py
index eba76f2..211c4ab 100755..100644
--- a/python/manage.py
+++ b/python/manage.py
@@ -6,6 +6,6 @@ import os
import sys
if __name__ == "__main__":
- os.environ.setdefault("DJANGO_SETTINGS_MODULE", "gentoo_main.settings")
+ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "gosbs.settings")
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
diff --git a/python/tbc_www/utils/__init__.py b/python/packages/__init__.py
index e69de29..e69de29 100644
--- a/python/tbc_www/utils/__init__.py
+++ b/python/packages/__init__.py
diff --git a/python/packages/admin.py b/python/packages/admin.py
new file mode 100644
index 0000000..8c38f3f
--- /dev/null
+++ b/python/packages/admin.py
@@ -0,0 +1,3 @@
+from django.contrib import admin
+
+# Register your models here.
diff --git a/python/packages/apps.py b/python/packages/apps.py
new file mode 100644
index 0000000..8bc7b4d
--- /dev/null
+++ b/python/packages/apps.py
@@ -0,0 +1,5 @@
+from django.apps import AppConfig
+
+
+class PackagesConfig(AppConfig):
+ name = 'packages'
diff --git a/python/packages/migrations/__init__.py b/python/packages/migrations/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/python/packages/migrations/__init__.py
diff --git a/python/packages/models.py b/python/packages/models.py
new file mode 100644
index 0000000..943ffe5
--- /dev/null
+++ b/python/packages/models.py
@@ -0,0 +1,188 @@
+import uuid
+from django.db import models
+
+StatusEnum = models.TextChoices('StatusEnum', 'failed completed in-progress waiting')
+
+class Repos(models.Model):
+ RepoType = models.TextChoices('RepoType', 'project ebuild')
+ uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, db_column='uuid')
+ name = models.CharField(max_length=255)
+ status = models.CharField(max_length=255, choices=StatusEnum.choices, default='waiting', blank=True)
+ description = models.TextField()
+ src_url = models.URLField()
+ auto = models.BooleanField(default=False)
+ repo_type = models.CharField(max_length=255, choices=RepoType.choices, default='ebuild', blank=True)
+ created_at = models.DateTimeField(auto_now_add=True)
+ updated_at = models.DateTimeField(auto_now=True)
+ deleted_at = models.DateTimeField(auto_now=True)
+ deleted = models.BooleanField(default=False)
+
+ class Meta:
+ db_table = 'repos'
+ def __str__(self):
+ return '%s %s %s %s %s %s %s %s %s %s %s %s %s' % (self.uuid, self.name, self.status, self.mirror_status, self.local_status, self.description, self.src_url, self.auto, self.repo_type, self.created_at, self.updated_at, self.deleted_at, self.deleted)
+
+ def soft_delete(self):
+ self.deleted = True
+ self.save()
+
+class Categories(models.Model):
+ uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
+ name = models.CharField(max_length=255)
+ status = models.CharField(max_length=255, choices=StatusEnum.choices, default='waiting', blank=True)
+ created_at = models.DateTimeField(auto_now_add=True)
+ updated_at = models.DateTimeField(auto_now=True)
+ deleted_at = models.DateTimeField(auto_now=True)
+ deleted = models.BooleanField(default=False)
+ class Meta:
+ db_table = 'categories'
+ def __str__(self):
+ return '%s %s %s %s' % (self.uuid, self.name, self.status, self.deleted)
+
+ def soft_delete(self):
+ self.deleted = True
+ self.save()
+class CategoriesMetadata(models.Model):
+ id = models.IntegerField(primary_key=True)
+ category_uuid = models.ForeignKey(Categories, on_delete=models.CASCADE)
+ description = models.CharField(max_length=200)
+ checksum = models.CharField(max_length=255)
+ class Meta:
+ db_table = 'categories_metadata'
+ def __str__(self):
+ return '%s %s %s %s %s %s %s %s %s %s' % (self.id, self.uuid, self.description, self.checksum)
+
+class Packages(models.Model):
+ uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
+ name = models.CharField(max_length=255)
+ status = models.CharField(max_length=255, choices=StatusEnum.choices, default='waiting', blank=True)
+ category_uuid = models.ForeignKey(Categories, on_delete=models.CASCADE)
+ repo_uuid = models.ForeignKey(Repos, on_delete=models.CASCADE)
+ created_at = models.DateTimeField(auto_now_add=True)
+ updated_at = models.DateTimeField(auto_now=True)
+ deleted_at = models.DateTimeField(auto_now=True)
+ deleted = models.BooleanField(default=False)
+ class Meta:
+ db_table = 'packages'
+ def __str__(self):
+ return '%s %s %s %s %s %s' % (self.uuid, self.name, self.status, self.category_uuid, self.repo_uuid, self.deleted)
+
+ def soft_delete(self):
+ self.deleted = True
+ self.save()
+
+class PackagesMetadata(models.Model):
+ id = models.IntegerField(primary_key=True)
+ package_uuid = models.ForeignKey(Packages, on_delete=models.CASCADE)
+ gitlog = models.TextField()
+ descriptions = models.TextField()
+ checksum = models.CharField(max_length=255)
+ class Meta:
+ db_table = 'packages_metadata'
+ def __str__(self):
+ return '%s %s %s %s' % (self.id, self.package_uuid, self.gitlog, self.descriptions, self.checksum)
+
+class Emails(models.Model):
+ id = models.IntegerField(primary_key=True)
+ email = models.CharField(max_length=150)
+ class Meta:
+ db_table = 'emails'
+ def __str__(self):
+ return '%s %s' % (self.id, self.email)
+
+class PackagesEmails(models.Model):
+ id = models.IntegerField(primary_key=True)
+ package_uuid = models.ForeignKey(Packages, on_delete=models.CASCADE)
+ email_id = models.ForeignKey(Emails, on_delete=models.CASCADE)
+ class Meta:
+ db_table = 'packages_emails'
+ def __str__(self):
+ return '%s %s %s %s' % (self.id, self.package_uuid, self.email_id)
+
+class Ebuilds(models.Model):
+ uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
+ version = models.CharField(max_length=20)
+ package_uuid = models.ForeignKey(Packages, on_delete=models.CASCADE)
+ checksum = models.CharField(max_length=100)
+ status = models.CharField(max_length=255, choices=StatusEnum.choices, default='waiting', blank=True)
+ created_at = models.DateTimeField(auto_now_add=True)
+ updated_at = models.DateTimeField(auto_now=True)
+ deleted_at = models.DateTimeField(auto_now=True)
+ deleted = models.BooleanField(default=False)
+ class Meta:
+ db_table = 'ebuilds'
+ def __str__(self):
+ return '%s %s %s %s %s %s %s' % (self.uuid, self.version, self.package_uuid, self.checksum, self.status self.deleted)
+
+ def soft_delete(self):
+ self.deleted = True
+ self.save()
+
+class EbuildsMetadata(models.Model):
+ id = models.IntegerField(primary_key=True)
+ ebuild_uuid = models.ForeignKey(Ebuilds, on_delete=models.CASCADE)
+ commit = models.CharField(max_length=30)
+ commit_msg = models.CharField(max_length=200)
+ description = models.CharField(max_length=200)
+ slot = models.CharField(max_length=10)
+ homepage = models.CharField(max_length=200)
+ license = models.CharField(max_length=200)
+ class Meta:
+ db_table = 'ebuilds_metadata'
+ def __str__(self):
+ return '%s %s %s %s %s %s %s %s' % (self.id, self.uuid, self.commit, self.commit_msg, self.description, self.slot, self.homepage, self.license)
+
+class Uses(models.Model):
+ id = models.IntegerField(primary_key=True)
+ flag = models.CharField(max_length=150)
+ description = models.CharField(max_length=200)
+ class Meta:
+ db_table = 'uses'
+ def __str__(self):
+ return '%s %s %s' % (self.id, self.flag, self.description)
+
+class Keywords(models.Model):
+ id = models.IntegerField(primary_key=True)
+ keyword = models.CharField(max_length=45)
+ class Meta:
+ db_table = 'keywords'
+ def __str__(self):
+ return '%s %s %s' % (self.id, self.keyword)
+
+class Restrictions(models.Model):
+ id = models.IntegerField(primary_key=True)
+ restriction = models.CharField(max_length=150)
+ class Meta:
+ db_table = 'restrictions'
+ def __str__(self):
+ return '%s %s %s' % (self.id, self.restriction)
+
+class EbuildsKeywords(models.Model):
+ KeywordEnum = models.TextChoices('KeywordEnum', 'stable unstable negative')
+ id = models.IntegerField(primary_key=True)
+ ebuild_uuid = models.ForeignKey(Ebuilds)
+ keyword_id = models.ForeignKey(Keywords)
+ status = models.CharField(max_length=24 blank=True, choices=KeywordEnum.choices)
+ class Meta:
+ db_table = 'ebuilds_keywords'
+ def __str__(self):
+ return '%s %s %s' % (self.ebuild_uuid, self.keyword_id, self.status)
+
+class EbuildsIuse(models.Model):
+ id = models.IntegerField(primary_key=True)
+ ebuild_uuid = models.ForeignKey(Ebuilds)
+ use_id = models.ForeignKey(Uses)
+ status =models.BooleanField(default=False)
+ class Meta:
+ db_table = 'ebuilds_iuse'
+ def __str__(self):
+ return '%s %s %s %s' % (self.id, self.ebuild_uuid, self.use_id, self.status)
+
+class EbuildsRestrictions(models.Model):
+ id = models.IntegerField(primary_key=True)
+ ebuild_uuid = models.ForeignKey(Ebuilds)
+ restriction_id = models.ForeignKey(Restrictions)
+ class Meta:
+ db_table = 'ebuilds_restrictions'
+ def __str__(self):
+ return '%s %s' % (self.ebuild_uuid, self.restriction_id)
diff --git a/python/packages/tests.py b/python/packages/tests.py
new file mode 100644
index 0000000..7ce503c
--- /dev/null
+++ b/python/packages/tests.py
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/python/packages/urls.py b/python/packages/urls.py
new file mode 100644
index 0000000..88a9cac
--- /dev/null
+++ b/python/packages/urls.py
@@ -0,0 +1,7 @@
+from django.urls import path
+
+from . import views
+
+urlpatterns = [
+ path('', views.index, name='index'),
+]
diff --git a/python/packages/views.py b/python/packages/views.py
new file mode 100644
index 0000000..91ea44a
--- /dev/null
+++ b/python/packages/views.py
@@ -0,0 +1,3 @@
+from django.shortcuts import render
+
+# Create your views here.
diff --git a/python/projects/__init__.py b/python/projects/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/python/projects/__init__.py
diff --git a/python/projects/admin.py b/python/projects/admin.py
new file mode 100644
index 0000000..8c38f3f
--- /dev/null
+++ b/python/projects/admin.py
@@ -0,0 +1,3 @@
+from django.contrib import admin
+
+# Register your models here.
diff --git a/python/projects/apps.py b/python/projects/apps.py
new file mode 100644
index 0000000..3ef44de
--- /dev/null
+++ b/python/projects/apps.py
@@ -0,0 +1,5 @@
+from django.apps import AppConfig
+
+
+class ProjectsConfig(AppConfig):
+ name = 'projects'
diff --git a/python/projects/forms.py b/python/projects/forms.py
new file mode 100644
index 0000000..7c96ffe
--- /dev/null
+++ b/python/projects/forms.py
@@ -0,0 +1,7 @@
+from django import forms
+from .models import Projects
+
+class NewProjectForm(forms.ModelForm):
+ class Meta:
+ model = Projects
+ fields = ['name', 'title', 'description', 'text', 'active', 'status', 'public']
diff --git a/python/projects/migrations/__init__.py b/python/projects/migrations/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/python/projects/migrations/__init__.py
diff --git a/python/projects/models.py b/python/projects/models.py
new file mode 100644
index 0000000..5d58109
--- /dev/null
+++ b/python/projects/models.py
@@ -0,0 +1,53 @@
+import uuid
+from django.db import models
+from packages.models import Repos
+
+StatusEnum = models.TextChoices('StatusEnum', 'failed completed in-progress waiting')
+
+class Projects(models.Model):
+ uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
+ name = models.CharField(max_length=255)
+ active = models.BooleanField(default=False)
+ auto = models.BooleanField(default=False)
+ created_at = models.DateTimeField(auto_now_add=True)
+ updated_at = models.DateTimeField(auto_now=True)
+ deleted_at = models.DateTimeField(auto_now=True)
+ deleted = models.BooleanField(default=False)
+
+ class Meta:
+ db_table = 'projects'
+ def __str__(self):
+ return '%s %s %s %s %s' % (self.uuid, self.name, self.active, self.auto, self.deleted)
+
+ def soft_delete(self):
+ self.deleted = True
+ self.save()
+
+class ProjectsMetadata(models.Model):
+ id = models.IntegerField(primary_key=True)
+ title = models.CharField(max_length=255)
+ description = models.TextField()
+ project_uuid = models.ForeignKey(Projects, on_delete=models.CASCADE)
+ project_repos_uuid = models.ForeignKey(Repos, on_delete=models.CASCADE)
+ project_profile = models.CharField(max_length=255)
+ project_profile_repos_uuid = models.ForeignKey(Repos, on_delete=models.CASCADE)
+ class Meta:
+ db_table = 'projects_metadata'
+ def __str__(self):
+ return '%s %s %s %s %s %s %s' % (self.id, self.title, self.description, self.project_uuid, self.project_repos_uuid, self.project_profile, self.project_profile_repos_uuid)
+
+class ProjectsRepos(models.Model):
+ id = models.IntegerField(primary_key=True)
+ project_uuid = models.ForeignKey(Projects, on_delete=models.CASCADE)
+ repo_uuid = models.ForeignKey(Repos, on_delete=models.CASCADE)
+ test = models.BooleanField(default=False)
+ repoman = models.BooleanField(default=False)
+ qa = models.BooleanField(default=False)
+ build = models.BooleanField(default=False)
+ auto = models.BooleanField(default=False)
+ depclean = models.BooleanField(default=False)
+
+ class Meta:
+ db_table = 'projects_repos'
+ def __str__(self):
+ return '%s %s %s %s' % (self.id, self.project_uuid, self.repo_uuid, self.test, self.repoman, self.qa, self.build, self.auto, self.depclean)
diff --git a/python/projects/tests.py b/python/projects/tests.py
new file mode 100644
index 0000000..7ce503c
--- /dev/null
+++ b/python/projects/tests.py
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/python/projects/urls.py b/python/projects/urls.py
new file mode 100644
index 0000000..a6abd09
--- /dev/null
+++ b/python/projects/urls.py
@@ -0,0 +1,11 @@
+from django.urls import path
+
+from . import views
+
+app_name = 'projects'
+urlpatterns = [
+ path('', views.index, name='index'),
+ path('add/', views.add, name='add'),
+ path('<uuid:project_uuid>/detail/', views.detail, name='detail'),
+ path('<uuid:project_uuid>/repos/', views.repos, name='repos'),
+]
diff --git a/python/projects/views.py b/python/projects/views.py
new file mode 100644
index 0000000..522da80
--- /dev/null
+++ b/python/projects/views.py
@@ -0,0 +1,86 @@
+from django.shortcuts import render
+from django.http import HttpResponseRedirect
+
+from www.utils import default_siteinfo
+from .models import Projects
+from .forms import NewProjectForm
+
+def index(request):
+ menyrequest = 'projects'
+ siteinfo = default_siteinfo(request, menyrequest)
+ for meny in siteinfo['submenys']:
+ if meny.title == 'Add':
+ meny.view = True
+ else:
+ meny.view = False
+ siteinfo['subactivemeny'] = False
+ siteinfo['Projects'] = Projects.objects.all()
+ htmlrequest = 'pages/' + menyrequest + '/index.html'
+ return render(request, htmlrequest, siteinfo)
+
+def detail(request, project_uuid):
+ menyrequest = 'projects'
+ submenyrequest = 'detail'
+ siteinfo = default_siteinfo(request, menyrequest)
+ for meny in siteinfo['submenys']:
+ if meny.title == 'Add':
+ meny.view = True
+ if meny.title == 'Edit':
+ meny.view = True
+ siteinfo['subactivemeny'] = submenyrequest
+ siteinfo['Projects'] = Projects.objects.get(uuid = project_uuid)
+ htmlrequest = 'pages/' + menyrequest + '/' + submenyrequest + '/index.html'
+ return render(request, htmlrequest, siteinfo)
+
+def add(request):
+ if request.method == 'POST':
+ # create a form instance and populate it with data from the request:
+ form = NewProjectForm(request.POST)
+ # check whether it's valid:
+ if form.is_valid():
+ # process the data in form.cleaned_data as required
+ # ...
+ # redirect to a new URL:
+ a = form.save()
+ project = Projects.objects.get(name=a.name)
+ print(project)
+ detail(request, project.uuid)
+ else:
+ menyrequest = 'projects'
+ submenyrequest = 'add'
+ siteinfo = default_siteinfo(request, menyrequest)
+ siteinfo['Form'] = NewProjectForm()
+ for meny in siteinfo['submenys']:
+ if meny.title == 'Add':
+ meny.view = True
+ if meny.title == 'Edit':
+ meny.view = False
+ siteinfo['subactivemeny'] = submenyrequest
+ htmlrequest = 'pages/' + menyrequest + '/' + submenyrequest + '/index.html'
+ return render(request, htmlrequest, siteinfo)
+
+def repos(request, project_uuid):
+ menyrequest = 'projects'
+ submenyrequest = 'repos'
+ siteinfo = default_siteinfo(request, menyrequest)
+ for meny in siteinfo['subpages']:
+ if meny.title == 'Add':
+ meny.view = True
+ if meny.title == 'Edit':
+ meny.view = True
+ siteinfo['subactivemeny'] = submenyrequest
+ siteinfo['Project'] = Projects.objects.filter(uuid = project_uuid)
+ siteinfo['Projects_repos_e'] = ProjectsRepos.objects.filter(project__uuid = project_uuid).filter(repo__type ='ebuild')
+ siteinfo['Projects_repos_p'] = ProjectsRepos.objects.filter(project__uuid = project_uuid).filter(repo__type ='project')
+ htmlrequest = 'pages/' + menyrequest + '/' + submenyrequest + '/index.html'
+ return render(request, htmlrequest, siteinfo)
+
+def requests(request, project_uuid):
+ menyrequest = 'projects'
+ submenyrequest = 'requests'
+ siteinfo = default_siteinfo(request, menyrequest)
+
+def users(request, project_uuid):
+ menyrequest = 'projects'
+ submenyrequest = 'users'
+ siteinfo = default_siteinfo(request, menyrequest)
diff --git a/python/tbc_www/forms.py b/python/tbc_www/forms.py
deleted file mode 100644
index 0a91b3b..0000000
--- a/python/tbc_www/forms.py
+++ /dev/null
@@ -1,33 +0,0 @@
-from django import forms
-
-class NameForm(forms.Form):
- packages_search = forms.CharField(label='Find Packages', max_length=100)
-
-class BugForm(forms.Form):
- ChoicesComponent = (('Application', 'Application'),
- ('baselayout', 'baselayout'),
- ('Core system', 'Core system'),
- ('Eclasses and Profiles', 'Eclasses and Profiles'),
- ('Games', 'Games'),
- ('GCC Porting', 'GCC Porting'),
- ('GNOME', 'GNOME'),
- ('Hardened', 'Hardened'),
- ('Java', 'Java'),
- ('KDE', 'KDE'),
- ('SELinux', 'SELinux'),
- ('Server', 'Server'),
- ('Unspecified', 'Unspecified'))
-
- Product = forms.CharField(max_length=100, label='Product')
- Component = forms.ChoiceField(widget=forms.Select, choices=ChoicesComponent, label='Component')
- Version = forms.CharField(label='Version')
- Summary = forms.CharField(label='Summary')
- Description = forms.CharField(widget=forms.Textarea, label='Description')
- EmergeInfo = forms.CharField(widget=forms.Textarea, label='emerge --info')
- AssigendTo = forms.EmailField(label='Assigned To')
- def __unicode__(self):
- return u'Product : %s, Component : %s, Version : %s, Summary : %s, Description : %s, EmergeInfo : %s, AssigendTo : %s' % (self.Product, self.Component, self.Version, self.Summary, self.Description, self.EmergeInfo, self.AssigendTo)
-
-class BugzillaUser(forms.Form):
- BugzillaName = forms.CharField(label='Bugzilla Name', max_length=100)
- BugzillaPassword = forms.CharField(label='Bugzilla Password', max_length=100)
diff --git a/python/tbc_www/models.py b/python/tbc_www/models.py
deleted file mode 100644
index b54c772..0000000
--- a/python/tbc_www/models.py
+++ /dev/null
@@ -1,319 +0,0 @@
-# Copyright 1998-2016 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-from django.db import models
-
-class Categories(models.Model):
- CategoryId = models.IntegerField(primary_key=True, db_column='category_id')
- Category = models.CharField(max_length=150, db_column='category')
- Active = models.BooleanField(db_column='active')
- TimeStamp = models.DateTimeField(db_column='time_stamp')
- class Meta:
- db_table = 'categories'
- def __str__(self):
- return '%s %s %s %s' % (self.CategoryId, self.Category, self.Active, self.TimeStamp)
-
-class CategoriesMetadata(models.Model):
- Id = models.IntegerField(primary_key=True, db_column='id')
- CategoryId = models.ForeignKey(Categories, db_column='category_id')
- Checksum = models.CharField(max_length=100, db_column='checksum')
- Descriptions = models.TextField(db_column='descriptions')
- class Meta:
- db_table = 'categories_metadata'
- def __str__(self):
- return '%s %s %s %s' % (self.Id, self.CategoryId, self.Checksum, self.Descriptions)
-
-class Repos(models.Model):
- RepoId = models.IntegerField(primary_key=True, db_column='repo_id')
- Repo = models.CharField(max_length=100, db_column='repo')
- class Meta:
- db_table = 'repos'
- def __str__(self):
- return '%s %s' % (self.RepoId, self.Repo)
-
-class Packages(models.Model):
- PackageId = models.IntegerField(primary_key=True, db_column='package_id')
- CategoryId = models.ForeignKey(Categories, db_column='category_id')
- Package = models.CharField(max_length=150, db_column='package')
- RepoId = models.ForeignKey(Repos, db_column='repo_id')
- Active = models.BooleanField(db_column='active')
- TimeStamp = models.DateTimeField(db_column='time_stamp')
- class Meta:
- db_table = 'packages'
- def __str__(self):
- return '%s %s %s %s %s %s' % (self.PackageId, self.CategoryId, self.Package, self.RepoId, self.Active, self.TimeStamp)
-
-class PackagesMetadata(models.Model):
- Id = models.IntegerField(primary_key=True, db_column='id')
- PackageId = models.ForeignKey(Packages, db_column='package_id')
- Gitlog = models.TextField(db_column='gitlog')
- Descriptions = models.TextField(db_column='descriptions')
- New = models.BooleanField(db_column='new')
- class Meta:
- db_table = 'packages_metadata'
- def __str__(self):
- return '%s %s %s %s %s' % (self.Id, self.PackageId, self.Gitlog, self.Descriptions, self.New)
-
-class Ebuilds(models.Model):
- EbuildId = models.IntegerField(primary_key=True, db_column='ebuild_id')
- PackageId = models.ForeignKey(Packages, db_column='package_id')
- Version = models.CharField(max_length=150, db_column='version')
- Checksum = models.CharField(max_length=100, db_column='checksum')
- Active = models.BooleanField(db_column='active')
- TimeStamp = models.DateTimeField(db_column='time_stamp')
- class Meta:
- db_table = 'ebuilds'
- def __str__(self):
- return '%s %s %s %s %s %s' % (self.EbuildId, self.PackageId, self.Version, self.Checksum, self.Active, self.TimeStamp)
-
-class EbuildsMetadata(models.Model):
- Id = models.IntegerField(primary_key=True, db_column='id')
- EbuildId = models.ForeignKey(Ebuilds, db_column='ebuild_id')
- Commit = models.CharField(max_length=30, db_column='git_commit')
- CommitMsg = models.CharField(max_length=100, db_column='git_commit_msg')
- New = models.BooleanField(db_column='new')
- Updated = models.BooleanField(db_column='updated')
- Descriptions = models.CharField(max_length=200, db_column='descriptions')
- Slot = models.CharField(max_length=10, db_column='slot')
- Homepage = models.CharField(max_length=200, db_column='homepage')
- License = models.CharField(max_length=200, db_column='license')
- class Meta:
- db_table = 'ebuilds_metadata'
- def __str__(self):
- return '%s %s %s %s %s %s %s %s %s %s' % (self.Id, self.EbuildId, self.Commit, self.CommitMsg, self.New, self.Updated, self.Descriptions, self.Slot, self.Homepage, self.License)
-
-class BuildLogs(models.Model):
- BuildLogId = models.IntegerField(primary_key=True, db_column='build_log_id')
- EbuildId = models.ForeignKey(Ebuilds, db_column='ebuild_id')
- Fail = models.BooleanField(db_column='fail')
- SummeryText = models.TextField(db_column='summery_text')
- LogHash = models.CharField(max_length=100, db_column='log_hash')
- BugId = models.IntegerField( db_column='bug_id')
- New = models.BooleanField(db_column='new')
- TimeStamp = models.DateTimeField(db_column='time_stamp')
- class Meta:
- db_table = 'build_logs'
- def __str__(self):
- return '%s %s %s %s %s %s %s %s' % (self.BuildLogId, self.EbuildId, self.Fail, self.SummeryText, self.LogHash, self.BugId, self.New, self.TimeStamp)
-
-class BuildLogsRepoman(models.Model):
- Id = models.IntegerField(primary_key=True, db_column='id')
- BuildLogId = models.ForeignKey(BuildLogs, db_column='build_log_id')
- SummeryText = models.TextField(db_column='summery_text')
- class Meta:
- db_table = 'build_logs_repoman'
- def __str__(self):
- return '%s %s %s' % (self.Id, self.BuildLogId, self.SummeryText)
-
-class BuildLogsQa(models.Model):
- Id = models.IntegerField(primary_key=True, db_column='id')
- BuildLogId = models.ForeignKey(BuildLogs, db_column='build_log_id')
- SummeryText = models.TextField(db_column='summery_text')
- class Meta:
- db_table = 'build_logs_qa'
- def __str__(self):
- return '%s %s %s' % (self.Id, self.BuildLogId, self.SummeryText)
-
-class PackagesRepoman(models.Model):
- Id = models.IntegerField(primary_key=True, db_column='id')
- PackageId = models.ForeignKey(Packages, db_column='package_id')
- RepomanText = models.TextField(db_column='repoman_text')
- RepomanHash = models.CharField(max_length=100, db_column='repoman_hash')
- TimeStamp = models.DateTimeField(db_column='time_stamp')
- class Meta:
- db_table = 'packages_repoman'
- def __str__(self):
- return '%s %s %s %s %s' % (self.Id, self.PackageId, self.RepomanText, self.RepomanHash, self.TimeStamp)
-
-class ErrorsInfo(models.Model):
- ErrorId = models.IntegerField(primary_key=True, db_column='error_id')
- ErrorName = models.CharField(max_length=20, db_column='error_name')
- ErrorSearch = models.CharField(max_length=30, db_column='error_search')
- class Meta:
- db_table = 'errors_info'
- def __str__(self):
- return '%s %s %s' % (self.ErrorId, self.ErrorName, self.ErrorSearch)
-
-class BuildLogsErrors(models.Model):
- Id = models.IntegerField(primary_key=True, db_column='id')
- BuildLogId = models.ForeignKey(BuildLogs, db_column='build_log_id')
- ErrorId = models.ForeignKey(ErrorsInfo, db_column='error_id')
- class Meta:
- db_table = 'build_logs_errors'
- def __str__(self):
- return '%s %s %s' % (self.Id, self.BuildLogId, self.ErrorId)
-
-class EmergeInfo(models.Model):
- EInfoId = models.IntegerField(primary_key=True, db_column='einfo_id')
- EmergeInfoText = models.TextField(db_column='emerge_info_text')
- class Meta:
- db_table = 'emerge_info'
- def __str__(self):
- return '%s %s %s' % (self.EInfoId, self.Checksum, self.EmergeInfoText)
-
-class Setups(models.Model):
- SetupId = models.AutoField(primary_key=True, db_column='setup_id')
- Setup = models.CharField(max_length=100, db_column='setup')
- Profile = models.CharField(max_length=150, db_column='profile')
- class Meta:
- db_table = 'setups'
- def __str__(self):
- return '%s %s %s' % (self.SetupId, self.Setup, self.Profile)
-
-class Configs(models.Model):
- ConfigId = models.AutoField(primary_key=True, db_column='config_id')
- HostName = models.CharField(max_length=150, db_column='hostname')
- SetupId = models.ForeignKey(Setups, db_column='setup_id')
- DefaultConfig = models.BooleanField(db_column='default_config')
- class Meta:
- db_table = 'configs'
- def __str__(self):
- return '%s %s %s %s' % (self.ConfigId, self.HostName, self.SetupId, self.DefaultConfig)
-
-class BuildLogsConfig(models.Model):
- LogId = models.IntegerField(primary_key=True, db_column='log_id')
- BuildLogId = models.ForeignKey(BuildLogs, db_column='build_log_id')
- ConfigId = models.ForeignKey(Configs, db_column='config_id')
- EInfoId = models.ForeignKey(EmergeInfo, db_column='einfo_id')
- LogName = models.CharField(max_length=450, db_column='logname')
- TimeStamp = models.DateTimeField(db_column='time_stamp')
- class Meta:
- db_table = 'build_logs_config'
- def __str__(self):
- return '%s %s %s %s %s %s' % (self.LogId, self.BuildLogId, self.ConfigId, self.EInfoId, self.LogName, self.TimeStamp)
-
-class EmergeOptions(models.Model):
- EmergeOptionId = models.IntegerField(primary_key=True, db_column='eoption_id')
- EOption = models.CharField(max_length=45, db_column='eoption')
- class Meta:
- db_table = 'emerge_options'
- def __str__(self):
- return '%s %s' % (self.EmergeOptionId, self.EOption)
-
-class BuildLogsEmergeOptions(models.Model):
- Id = models.IntegerField(primary_key=True, db_column='id')
- BuildLogId = models.ForeignKey(BuildLogs, db_column='build_log_id')
- EmergeOptionId = models.ForeignKey(EmergeOptions, db_column='eoption_id')
- class Meta:
- db_table = 'build_logs_emerge_options'
- def __str__(self):
- return '%s %s %s' % (self.Id, self.BuildLogId, self.EmergeOptionId)
-
-class Uses(models.Model):
- UseId = models.IntegerField(primary_key=True, db_column='use_id')
- Flag = models.CharField(max_length=150, db_column='flag')
- class Meta:
- db_table = 'uses'
- def __str__(self):
- return '%s %s' % (self.UseId, self.Flag)
-
-class BuildLogsUse(models.Model):
- Id = models.IntegerField(primary_key=True, db_column='id')
- BuildLogId = models.ForeignKey(BuildLogs, db_column='build_log_id')
- UseId = models.ForeignKey(Uses, db_column='use_id')
- Status = models.BooleanField(max_length=15, db_column='status')
- class Meta:
- db_table = 'build_logs_use'
- def __str__(self):
- return '%s %s %s' % (self.BuildLogId, self.UseId, self.Status)
-
-class BuildJobs(models.Model):
- BuildJobId = models.AutoField(primary_key=True, db_column='build_job_id')
- EbuildId = models.ForeignKey(Ebuilds, db_column='ebuild_id')
- SetupId = models.ForeignKey(Setups, db_column='setup_id')
- ConfigId = models.ForeignKey(Configs, db_column='config_id')
- Status = models.CharField(max_length=21, db_column='status')
- BuildNow = models.BooleanField(db_column='build_now')
- RemoveBin = models.BooleanField(db_column='removebin')
- New = models.BooleanField(db_column='new')
- TimeStamp = models.DateTimeField(db_column='time_stamp')
- class Meta:
- db_table = 'build_jobs'
- def __str__(self):
- return '%s %s %s %s %s %s %s %s %s' % (self.BuildJobId, self.EbuildId, self.SetupId, self.ConfigId, self.Status, self.BuildNow, self.RemoveBin, self.New, self.TimeStamp)
-
-class BuildJobsUse(models.Model):
- Id = models.IntegerField(primary_key=True, db_column='id')
- BuildJobId = models.ForeignKey(BuildJobs, db_column='build_job_id')
- UseId = models.ForeignKey(Uses, db_column='use_id')
- Status = models.BooleanField(db_column='status')
- class Meta:
- db_table = 'build_jobs_use'
- def __str__(self):
- return '%s %s %s %s' % (self.Id, self.BuildJobId, self.UseId, self.Status)
-
-class Keywords(models.Model):
- KeywordId = models.IntegerField(primary_key=True, db_column='keyword_id')
- Keyword = models.CharField(max_length=45, db_column='keyword')
- class Meta:
- db_table = 'keywords'
- def __str__(self):
- return '%s %s' % (self.KeywordId, self.Keyword)
-
-class Restrictions(models.Model):
- RestrictionId = models.IntegerField(primary_key=True, db_column='restriction_id')
- Restriction = models.CharField(max_length=150, db_column='restriction')
- class Meta:
- db_table = 'restrictions'
- def __str__(self):
- return '%s %s' % (self.RestrictionId, self.Restriction)
-
-class EbuildsKeywords(models.Model):
- Id = models.IntegerField(primary_key=True, db_column='id')
- EbuildId = models.ForeignKey(Ebuilds, db_column='ebuild_id')
- KeywordId = models.ForeignKey(Keywords, db_column='keyword_id')
- Status = models.CharField(max_length=24, db_column='status')
- class Meta:
- db_table = 'ebuilds_keywords'
- def __str__(self):
- return '%s %s %s' % (self.EbuildId, self.KeywordId, self.Status)
-
-class EbuildsIuse(models.Model):
- Id = models.IntegerField(primary_key=True, db_column='id')
- EbuildId = models.ForeignKey(Ebuilds, db_column='ebuild_id')
- UseId = models.ForeignKey(Uses, db_column='use_id')
- Status =models.BooleanField(db_column='status')
- class Meta:
- db_table = 'ebuilds_iuse'
- def __str__(self):
- return '%s %s %s %s' % (self.Id, self.EbuildId, self.UseId, self.Status)
-
-class EbuildsRestrictions(models.Model):
- Id = models.IntegerField(primary_key=True, db_column='id')
- EbuildId = models.ForeignKey(Ebuilds, db_column='ebuild_id')
- RestrictionId = models.ForeignKey(Restrictions, db_column='restriction_id')
- class Meta:
- db_table = 'ebuilds_restrictions'
- def __str__(self):
- return '%s %s' % (self.EbuildId, self.RestrictionId)
-
-class Emails(models.Model):
- EmailId = models.IntegerField(primary_key=True, db_column='email_id')
- Email = models.CharField(max_length=160, db_column='email')
- class Meta:
- db_table = 'emails'
- def __str__(self):
- return '%s %s' % (self.EmailId, self.Email)
-
-class PackagesEmails(models.Model):
- Id = models.IntegerField(primary_key=True, db_column='id')
- PackageId = models.ForeignKey(Packages, db_column='package_id')
- EmailId = models.ForeignKey(Emails, db_column='email_id')
- class Meta:
- db_table = 'packages_emails'
- def __str__(self):
- return '%s %s' % (self.PackageId, self.EmailId)
-
-class Jobs(models.Model):
- JobId = models.IntegerField(primary_key=True, db_column='job_id')
- JobType = models.CharField(max_length=60, db_column='job_type')
- Status = models.CharField(max_length=60, db_column='status')
- User = models.CharField(max_length=60, db_column='user')
- ConfigId = models.ForeignKey(Configs, db_column='config_id')
- RunConfigId = models.ForeignKey(Configs, to_field='ConfigId', related_name='RunConfigId', db_column='run_config_id')
- TimeStamp = models.DateTimeField(db_column='time_stamp')
- class Meta:
- db_table = 'jobs'
- def __str__(self):
- return '%s %s %s %s %s %s %s' % (self.JobId, self.JobType, self.Status, self.User, self.ConfigId, self.RunConfigId, self.TimeStamp)
-
diff --git a/python/tbc_www/router.py b/python/tbc_www/router.py
deleted file mode 100644
index bac2a30..0000000
--- a/python/tbc_www/router.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# Copyright 1998-2015 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-class TBCRouter(object):
- def db_for_read(self, model, **hints):
- "Point all operations on tbc models to 'tbc'"
- if model._meta.app_label == 'tbc_www':
- return 'tbc'
- return 'default'
-
- def db_for_write(self, model, **hints):
- "Point all operations on tbc models to 'tbc'"
- if model._meta.app_label == 'tbc_www':
- return 'tbc'
- return 'default'
-
- def allow_relation(self, obj1, obj2, **hints):
- "Allow any relation if a both models in tbc app"
- if obj1._meta.app_label == 'tbc_www' and obj2._meta.app_label == 'tbc_www':
- return True
- # Allow if neither is tbc app
- elif 'tbc_www' not in [obj1._meta.app_label, obj2._meta.app_label]:
- return True
- return False
-
- def allow_migrate(self, db, app_label, model_name=None, **hints):
- if db == 'tbc' or app_label == "tbc_www":
- return False # we're not using syncdb on our legacy database
- else: # but all other models/databases are fine
- return True
diff --git a/python/tbc_www/urls.py b/python/tbc_www/urls.py
deleted file mode 100644
index dfea3a7..0000000
--- a/python/tbc_www/urls.py
+++ /dev/null
@@ -1,22 +0,0 @@
-from django.conf.urls import url
-from . import views
-from django.contrib.auth import views as auth_views
-
-urlpatterns = [
- url(r'^home/$', views.home),
- url(r'^categories/$', views.categories),
- url(r'^categories/packages/(?P<category_id>\d+)/$', views.packages),
- url(r'^categories/packages/versions/(?P<package_id>\d+)/$', views.versions),
- url(r'^build_req/$', views.new_build_req),
- url(r'^logs/build/(?P<buildlog_id>\d+)/$', views.new_logs_build, name='new_logs_build'),
- url(r'^logs/build/submitlog/(?P<buildlog_id>\d+)/$', views.buildinfo_bugzilla),
- url(r'^logs/$', views.new_logs),
- url(r'^logs/all/build/$', views.new_build_logs_all),
- url(r'^logs/all/repoman/$', views.new_repoman),
- url(r'^user/login/$', auth_views.login, name='login'),
- url(r'^user/logout/$', auth_views.logout, {'next_page': '/home/'}, name='logout'),
- url(r'^user/password_change/$', auth_views.password_change, name='password_change'),
- url(r'^user/password_change/done/$', auth_views.password_change_done, name='password_change_done'),
- url(r'^user/password_reset/$', auth_views.password_reset, name='password_reset'),
- url(r'^user/bugzillalogin/$', views.set_bugzilla_user),
-]
diff --git a/python/tbc_www/utils/bugzillasubmit.py b/python/tbc_www/utils/bugzillasubmit.py
deleted file mode 100644
index d8160dc..0000000
--- a/python/tbc_www/utils/bugzillasubmit.py
+++ /dev/null
@@ -1,27 +0,0 @@
-from __future__ import print_function
-
-import bugzilla
-
-URL = "https://bugs.gentoo.org/xmlrpc.cgi"
-def addnewbug(args):
- bzapi = bugzilla.Bugzilla(URL)
- print(args['username'])
- print(args['password'])
- bzapi.login(user=args['username'], password=args['password'])
- createinfo = bzapi.build_createbug(
- product=args['product'],
- version=args['version'],
- component=args['component'],
- summary=args['summary'],
- description=args['description'],
- assigned_to=args['assigned_to'])
- newbug = bzapi.createbug(createinfo)
- print("Created new bug id=%s url=%s" % (newbug.id, newbug.weburl))
- update = bzapi.build_update(comment=args['comment'])
- bzapi.update_bugs(newbug.id, update)
- kwards = {
- 'contenttype': args['content_type'],
- }
- attchment_id = bzapi.attachfile(newbug.id, args['filename'], args['comment_attach'], **kwards)
- bzapi.logout()
- return newbug
diff --git a/python/tbc_www/views.py b/python/tbc_www/views.py
deleted file mode 100644
index c272c50..0000000
--- a/python/tbc_www/views.py
+++ /dev/null
@@ -1,459 +0,0 @@
-# Copyright 1998-2017 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-from django.shortcuts import render, get_object_or_404, HttpResponseRedirect, redirect
-from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
-from django.conf import settings
-from django.urls import reverse
-from tbc_www.forms import BugForm, BugzillaUser
-from tbc_www.utils.bugzillasubmit import addnewbug
-from gentoo_www.models import SiteSettings, Layout, Pages, SubPages, Sponsors, Posts, Bugzilla
-from tbc_www.models import EbuildsMetadata, BuildLogs, BuildJobs, BuildLogsQa, \
- BuildJobsUse, Categories, CategoriesMetadata, Packages, PackagesMetadata, Ebuilds, \
- Repos, EbuildsKeywords, BuildLogsErrors, EbuildsRestrictions, EbuildsIuse, PackagesRepoman, \
- BuildLogsConfig, BuildLogsUse, BuildLogsRepoman, PackagesEmails, Jobs
-import re
-import gzip
-import os
-
-def default_TmpDict(pagerequest):
- site = get_object_or_404(SiteSettings)
- page = get_object_or_404(Pages, nav1 = pagerequest)
- jobs = get_object_or_404(Jobs, JobType = 'esync')
- pages = Pages.objects.all()
- if page.SubMenu:
- subpages = SubPages.objects.filter(PageId = page.PageId)
- else:
- subpages = False
- TmpDict = {'site' : site}
- TmpDict['page'] = page
- TmpDict['pages'] = pages
- TmpDict['subpages'] = subpages
- TmpDict['smappages'] = SubPages.objects.all()
- TmpDict['jobs'] = jobs
- return TmpDict
-
-def fail_status(buildlog_id):
- BU_tmp = BuildLogsUse.objects.filter(BuildLogId = buildlog_id)
- Test = False
- if BU_tmp != []:
- for BU in BU_tmp:
- if BU.Status:
- if BU.UseId.Flag == 'test':
- Test = True
- adict = {}
- adict['repoman'] = False
- adict['qa'] = False
- adict['others'] = False
- adict['build'] = False
- adict['TestRun'] = Test
- BE_tmp = BuildLogsErrors.objects.filter(BuildLogId__BuildLogId = buildlog_id)
- for BE in BE_tmp:
- if BE.ErrorId.ErrorId == 1:
- adict['repoman'] = True
- if BE.ErrorId.ErrorId == 2:
- adict['qa'] = True
- if BE.ErrorId.ErrorId == 3:
- adict['others'] = True
- if BE.ErrorId.ErrorId == 4:
- adict['test'] = True
- if BE.ErrorId.ErrorId >= 5:
- adict['build'] = True
- adict['builderror'] = BE.ErrorId.ErrorName
- if BE.ErrorId.ErrorName != 'install':
- adict['TestRun'] = False
- return adict
-
-def home(request):
- pagerequest = 'home'
- Lines = 10
- TmpDict = default_TmpDict(pagerequest)
- TmpDict['PM'] = PackagesMetadata.objects.filter(New = True)
- alist = []
- for EM in EbuildsMetadata.objects.filter(Updated = True):
- adict = {}
- adict['EbuildId'] = EM.EbuildId.EbuildId
- adict['C'] = EM.EbuildId.PackageId.CategoryId.Category
- adict['P'] = EM.EbuildId.PackageId.Package
- adict['CId'] = EM.EbuildId.PackageId.CategoryId.CategoryId
- adict['PId'] = EM.EbuildId.PackageId.PackageId
- adict['V'] = EM.EbuildId.Version
- adict['R'] = EM.EbuildId.PackageId.RepoId.Repo
- adict['TimeStamp'] = EM.EbuildId.TimeStamp
- adict['CommitId'] = EM.Commit
- adict['CommitMsg'] = EM.CommitMsg
- adict['Descriptions'] = EM.Descriptions
- adict['EK_tmp'] = EbuildsKeywords.objects.filter(EbuildId__EbuildId = EM.EbuildId.EbuildId)
- alist.append(adict)
- TmpDict['EM_list'] = alist
- alist = []
- for BL in BuildLogs.objects.filter(New = True):
- adict2 = {}
- adict2['BuildLogId'] = BL.BuildLogId
- adict2['C'] = BL.EbuildId.PackageId.CategoryId.Category
- adict2['P'] = BL.EbuildId.PackageId.Package
- adict2['V'] = BL.EbuildId.Version
- adict2['R'] = BL.EbuildId.PackageId.RepoId.Repo
- adict2['SummeryText'] = BL.SummeryText
- adict2['Fail'] = BL.Fail
- if BL.Fail:
- adict2['BE_tmp'] = BuildLogsErrors.objects.filter(BuildLogId = BL.BuildLogId)
- alist.append(adict2)
- TmpDict['BL_tmp'] = alist
- adict = {}
- BJ_Tmp = BuildJobs.objects.filter(New = True)
- for BJ in BJ_Tmp:
- adict2 = {}
- adict2['EbuildId'] = BJ.EbuildId.EbuildId
- adict2['C'] = BJ.EbuildId.PackageId.CategoryId.Category
- adict2['P'] = BJ.EbuildId.PackageId.Package
- adict2['V'] = BJ.EbuildId.Version
- adict2['R'] = BJ.EbuildId.PackageId.RepoId.Repo
- adict2['Status'] = BJ.Status
- adict2['title'] = "Setup: " + BJ.SetupId.Setup + "\n" + "Profile: " + BJ.SetupId.Profile + "\n"
- BJU = BuildJobsUse.objects.filter(BuildJobId = BJ.BuildJobId)
- if not BJU == []:
- use_enable = []
- use_disable = []
- for BU in BJU:
- if BU.Status:
- use_enable.append(BU.UseId.Flag)
- else:
- use_disable.append(BU.UseId.Flag)
- if not use_enable == []:
- adict2['title'] = adict2['title'] + "Enable: "
- for use in use_enable:
- adict2['title'] = adict2['title'] + use + " "
- adict2['title'] = adict2['title'] + "\n"
- if not use_disable == []:
- adict2['title'] = adict2['title'] + "Disable: "
- for use in use_disable:
- adict2['title'] = adict2['title'] + use + " "
- adict2['title'] = adict2['title'] + "\n"
- adict[BJ.BuildJobId] = adict2
- TmpDict['BJ'] = adict
- TmpDict['PR_tmp'] = PackagesRepoman.objects.order_by('-Id')[:Lines]
- return render(request, 'pages/' + pagerequest + '/index.html', TmpDict)
-
-def categories(request):
- pagerequest = 'packages'
- TmpDict = default_TmpDict(pagerequest)
- alphabet_list = map(chr, range(97, 123))
- CM_tmp = CategoriesMetadata.objects.filter(CategoryId__Active = True).order_by('CategoryId__Category')
- list2 = []
- for a in alphabet_list:
- alist = []
- for CM in CM_tmp:
- if a == CM.CategoryId.Category[:1]:
- adict = {}
- adict['CategoryId'] = CM.CategoryId.CategoryId
- adict['Category'] = CM.CategoryId.Category
- adict['Descriptions'] = CM.Descriptions
- alist.append(adict)
- adict2 = {}
- adict2['letter'] = a
- adict2['CM_list'] = alist
- if alist != []:
- list2.append(adict2)
- TmpDict['CM_tmp'] = list2
- return render(request, 'pages/categories/index.html', TmpDict)
-
-def packages(request, category_id):
- pagerequest = 'packages'
- TmpDict = default_TmpDict(pagerequest)
- alist = []
- TmpDict['PM_tmp'] = PackagesMetadata.objects.filter(PackageId__CategoryId_id = category_id).filter(PackageId__Active = True)
- TmpDict['C'] = get_object_or_404(CategoriesMetadata, CategoryId__CategoryId = category_id)
- return render(request, 'pages/categories/packages/index.html', TmpDict)
-
-def versions(request, package_id):
- pagerequest = 'packages'
- TmpDict = default_TmpDict(pagerequest)
- P = get_object_or_404(PackagesMetadata, PackageId__PackageId = package_id)
- TmpDict['P'] = P
- alist =[]
- EM_tmp = EbuildsMetadata.objects.filter(EbuildId__Active = True).filter(EbuildId__PackageId__PackageId = P.PackageId.PackageId)
- for EM in EM_tmp:
- adict = {}
- ebuild_id = EM.EbuildId.EbuildId
- adict['EbuildId'] = ebuild_id
- adict['Slot'] = EM.Slot
- adict['Version'] = EM.EbuildId.Version
- adict['TimeStamp'] = EM.EbuildId.TimeStamp
- adict['EK_tmp'] = EbuildsKeywords.objects.filter(EbuildId__EbuildId = ebuild_id)
- adict['EU_tmp'] = EbuildsIuse.objects.filter(EbuildId__EbuildId = ebuild_id)
- adict['ER_tmp'] = EbuildsRestrictions.objects.filter(EbuildId__EbuildId = ebuild_id)
- BL_tmp = BuildLogs.objects.filter(EbuildId__EbuildId = ebuild_id)
- adict['BL_tmp'] = BL_tmp
- alist2 = []
- for BL in BL_tmp:
- adict2 = {}
- adict2['BuildLogId'] = BL.BuildLogId
- adict2['repoman'] = False
- adict2['qa'] = False
- adict2['Blo'] = False
- adict2['Blb'] = False
- if BL.Fail:
- adict2['fail'] = True
- BE_tmp = BuildLogsErrors.objects.filter(BuildLogId__BuildLogId = BL.BuildLogId)
- for BE in BE_tmp:
- if BE.ErrorId.ErrorId == 1:
- adict2['repoman'] = True
- if BE.ErrorId.ErrorId == 2:
- adict2['qa'] = True
- if BE.ErrorId.ErrorId == 3:
- adict2['Blo'] = True
- if BE.ErrorId.ErrorId >= 4:
- adict2['Blb'] = True
- adict2['Ble'] = BE.ErrorId.ErrorName
- alist2.append(adict2)
- adict['fi_tmp'] = alist2
- alist.append(adict)
- TmpDict['EM_info'] = alist
- return render(request, 'pages/categories/packages/versions/index.html', TmpDict)
-
-def new_build_req(request):
- pagerequest = 'build_req'
- TmpDict = default_TmpDict(pagerequest)
- adict = {}
- BJ_Tmp = BuildJobs.objects.order_by('-TimeStamp')
- for BJ in BJ_Tmp:
- adict2 = {}
- adict2['EbuildId'] = BJ.EbuildId.EbuildId
- adict2['C'] = BJ.EbuildId.PackageId.CategoryId.Category
- adict2['P'] = BJ.EbuildId.PackageId.Package
- adict2['V'] = BJ.EbuildId.Version
- adict2['R'] = BJ.EbuildId.PackageId.RepoId.Repo
- adict2['Status'] = BJ.Status
- adict2['title'] = "Setup: " + BJ.SetupId.Setup + "\n" + "Profile: " + BJ.SetupId.Profile + "\n"
- BJU = BuildJobsUse.objects.filter(BuildJobId = BJ.BuildJobId)
- if not BJU == []:
- use_enable = []
- use_disable = []
- for BU in BJU:
- if BU.Status:
- use_enable.append(BU.UseId.Flag)
- else:
- use_disable.append(BU.UseId.Flag)
- if not use_enable == []:
- adict2['title'] = adict2['title'] + "Enable: "
- for use in use_enable:
- adict2['title'] = adict2['title'] + use + " "
- adict2['title'] = adict2['title'] + "\n"
- if not use_disable == []:
- adict2['title'] = adict2['title'] + "Disable: "
- for use in use_disable:
- adict2['title'] = adict2['title'] + use + " "
- adict2['title'] = adict2['title'] + "\n"
- adict[BJ.BuildJobId] = adict2
- TmpDict['BJ'] = adict
- return render(request, 'pages/build_req/index.html', TmpDict)
-
-def new_repoman(request):
- pagerequest = 'new'
- Lines = 30
- TmpDict = default_TmpDict(pagerequest)
- TmpDict['PR_tmp'] = PackagesRepoman.objects.order_by('-Id')[:Lines]
- return render(request, 'pages/' + pagerequest + '/repoman/index.html', TmpDict)
-
-def new_logs(request):
- pagerequest = 'logs'
- TmpDict = default_TmpDict(pagerequest)
- alist = []
- for BL in BuildLogs.objects.order_by('-TimeStamp').filter(New = True):
- adict2 = {}
- adict2['BuildLogId'] = BL.BuildLogId
- adict2['C'] = BL.EbuildId.PackageId.CategoryId.Category
- adict2['P'] = BL.EbuildId.PackageId.Package
- adict2['V'] = BL.EbuildId.Version
- adict2['R'] = BL.EbuildId.PackageId.RepoId.Repo
- adict2['Fail'] = BL.Fail
- adict2['SummeryText'] = BL.SummeryText
- if BL.Fail:
- adict2['FI'] = fail_status(BL.BuildLogId)
- alist.append(adict2)
- TmpDict['BL_tmp'] = alist
- TmpDict['QA_tmp'] = BuildLogsQa.objects.filter(BuildLogId__New = True)
- TmpDict['RM_tmp'] = BuildLogsRepoman.objects.filter(BuildLogId__New = True)
- return render(request, 'pages/logs/index.html', TmpDict)
-
-def new_build_logs_all(request):
- pagerequest = 'logs'
- object_on_page = 50
- TmpDict = default_TmpDict(pagerequest)
- BL_tmp = BuildLogs.objects.order_by('-TimeStamp').filter(Fail = True)
- alist = []
- for BL in BL_tmp:
- adict = {}
- adict['BuildLogId'] = BL.BuildLogId
- adict['C'] = BL.EbuildId.PackageId.CategoryId.Category
- adict['P'] = BL.EbuildId.PackageId.Package
- adict['V'] = BL.EbuildId.Version
- adict['R'] = BL.EbuildId.PackageId.RepoId.Repo
- adict['Fail'] = BL.Fail
- adict['SummeryText'] = BL.SummeryText
- if BL.Fail:
- adict['FI'] = fail_status(BL.BuildLogId)
- alist.append(adict)
- paginator = Paginator(alist, object_on_page)
- page = request.GET.get('page')
- try:
- BL_tmp = paginator.page(page)
- except PageNotAnInteger:
- # If page is not an integer, deliver first page.
- BL_tmp = paginator.page(1)
- except EmptyPage:
- # If page is out of range (e.g. 9999), deliver last page of results.
- BL_tmp = paginator.page(paginator.num_pages)
- TmpDict['BL_tmp'] = BL_tmp
- return render(request, 'pages/logs/all/build/index.html', TmpDict)
-
-def new_logs_build(request, buildlog_id):
- pagerequest = 'logs'
- TmpDict = default_TmpDict(pagerequest)
- TmpDict['Bugzillalogin'] = False
- B = BuildLogs.objects.get(BuildLogId = buildlog_id)
- EM = EbuildsMetadata.objects.get(EbuildId = B.EbuildId.EbuildId)
- PM = PackagesMetadata.objects.get(PackageId__PackageId = B.EbuildId.PackageId.PackageId)
- BLI = {}
- BLI['BuildLogId'] = buildlog_id
- BLI['EbuildId'] = B.EbuildId.EbuildId
- BLI['C'] = B.EbuildId.PackageId.CategoryId.Category
- BLI['P'] = B.EbuildId.PackageId.Package
- BLI['V'] = B.EbuildId.Version
- BLI['R'] = B.EbuildId.PackageId.RepoId.Repo
- BLI['EC'] = EM.Commit
- BLI['PD'] = EM.Descriptions
- BLI['PC'] = PM.Gitlog
- BLI['Fail'] = B.Fail
- BLI['Summery_text'] = B.SummeryText
- if B.BugId == "0":
- BLI['BugId'] = False
- else:
- BLI['BugId'] = B.BugId
- BC = BuildLogsConfig.objects.get(BuildLogId = buildlog_id)
- #CEO_tmp = ConfigsEmergeOptions.objects.filter(ConfigId = BC.ConfigId.ConfigId)
- BU_tmp = BuildLogsUse.objects.filter(BuildLogId = buildlog_id)
- config_eoption = []
- BLI['configid'] = BC.ConfigId.ConfigId
- BLI['hostname'] = BC.ConfigId.HostName
- BLI['config'] = BC.ConfigId.SetupId.Setup
- BLI['profile'] = BC.ConfigId.SetupId.Profile
- BLI['logid'] = BC.LogId
- BLI['logname'] = BC.LogName[1:]
- BLI['emerge_info_text'] = BC.EInfoId.EmergeInfoText
- #for CEO in CEO_tmp:
- # config_eoption.append(CEO.EmergeOptionId.EOption)
- #BLI['emerge_option'] = config_eoption
- if not BU_tmp == []:
- use_enable = []
- use_disable = []
- for BU in BU_tmp:
- if BU.Status:
- use_enable.append(BU.UseId.Flag)
- else:
- use_disable.append(BU.UseId.Flag)
- if not use_enable == []:
- BLI['use_enable'] = use_enable
- if not use_disable == []:
- BLI['use_disable'] = use_disable
- TmpDict['FI'] = fail_status(buildlog_id)
- try:
- BRQ = BuildLogsQa.objects.get(BuildLogId = B.BuildLogId)
- BLI['QA'] = BRQ.SummeryText
- except BuildLogsQa.DoesNotExist as e:
- BLI['QA'] = False
- try:
- BRR = BuildLogsRepoman.objects.get(BuildLogId = B.BuildLogId)
- BLI['Repoman'] = BRR.SummeryText
- except BuildLogsRepoman.DoesNotExist as e:
- BLI['Repoman'] = False
- TmpDict['BLI'] = BLI
- return render(request, 'pages/logs/build/index.html', TmpDict)
-
-def submit_to_bugzilla(request, form, buildlog_id):
- BC = BuildLogsConfig.objects.get(BuildLogId = buildlog_id)
- b = Bugzilla.objects.get(Username=request.user.username)
- args = {}
- args['product'] = form.cleaned_data['Product']
- args['component'] = form.cleaned_data['Component']
- args['version'] = form.cleaned_data['Version']
- args['summary'] = form.cleaned_data['Summary']
- args['description'] = form.cleaned_data['Description']
- args['comment'] = form.cleaned_data['EmergeInfo']
- args['assigned_to'] = form.cleaned_data['AssigendTo']
- args['password'] = request.session['bugzillapassword']
- args['username'] = b.Bugzillaname
- LogFile = BC.ConfigId.HostName + '/' + BC.ConfigId.SetupId.Setup + BC.LogName
- LogDir = settings.STATIC_ROOT + '/logs/'
- Filesize = os.path.getsize(LogDir + LogFile)/1024
- if Filesize > 900:
- #FIXME UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte
- with open(LogDir + LogFile, 'rb') as orig_file:
- with gzip.open('/tmp' + BC.LogName + '.gz', 'wb') as zipped_file:
- zipped_file.writelines(orig_file)
- args['filename'] = '/tmp' + BC.LogName + '.gz'
- args['content_type'] = 'application/gzip'
- else:
- args['filename'] = LogDir + LogFile
- args['content_type'] = 'text/plain'
- args['comment_attach'] = 'Build log'
- newbug = addnewbug(args)
- return newbug
-
-def buildinfo_bugzilla(request, buildlog_id):
- pagerequest = 'logs'
- TmpDict = default_TmpDict(pagerequest)
- B = get_object_or_404(BuildLogs, BuildLogId = buildlog_id)
- C = B.EbuildId.PackageId.CategoryId.Category
- P = B.EbuildId.PackageId.Package
- V = B.EbuildId.Version
- R = B.EbuildId.PackageId.RepoId.Repo
- if request.method == 'POST':
- form = BugForm(request.POST)
- if form.is_valid():
- newbug = submit_to_bugzilla(request, form, buildlog_id)
- B.BugId = newbug.id
- B.save()
- return redirect('new_logs_build', buildlog_id=buildlog_id)
- else:
- if B.Fail == 'True':
- F = get_object_or_404(BuildLogsErrors, BuildLogId = buildlog_id)
- FailText = " : " + F.ErrorId.ErrorName
- else:
- FailText = ""
- E = get_object_or_404(BuildLogsConfig, BuildLogId = buildlog_id)
- PE = get_object_or_404(PackagesEmails, PackageId__PackageId = B.EbuildId.PackageId.PackageId)
- form = BugForm()
- form.fields['Product'].initial = 'Gentoo Linux'
- form.fields['Version'].initial = 'unspecified'
- form.fields['Summary'].initial = '[TEST][Tinderbox-cluster]=' + C + '/' + P + '-' + V + '::' + R + FailText
- form.fields['Description'].initial = B.SummeryText
- form.fields['EmergeInfo'].initial = E.EInfoId.EmergeInfoText
- form.fields['AssigendTo'].initial = PE.EmailId.Email
-
- TmpDict['form'] = form
- TmpDict['B'] = B
- return render(request, 'pages/logs/build/submitbug/index.html', TmpDict)
-
-def set_bugzilla_user(request):
- pagerequest = 'home'
- TmpDict = default_TmpDict(pagerequest)
- if request.method == 'POST':
- form = BugzillaUser(request.POST)
- if form.is_valid():
- b = Bugzilla.objects.get(Username=request.user.username)
- if b == []:
- b = Bugzilla(Bugzillaname = form.cleaned_data['BugzillaName'], Username = request.user.username)
- b.save()
- else:
- if b.Bugzillaname != form.cleaned_data['BugzillaName']:
- b.Bugzillaname = form.cleaned_data['BugzillaName']
- b.save()
- request.session['bugzillapassword'] = form.cleaned_data['BugzillaPassword']
- return HttpResponseRedirect('/home/')
-
- else:
- form = BugzillaUser()
- TmpDict['form'] = form
- return render(request, 'registration/bugzillauser.html', TmpDict)
diff --git a/python/templates/includes/downloads/alpha.html b/python/templates/includes/downloads/alpha.html
deleted file mode 100644
index 15d2d27..0000000
--- a/python/templates/includes/downloads/alpha.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<div class="col-xs-12 col-md-6">
- <h4>Boot Media</h4>
- <div class="list-group">
- {% include partials/download-link.html type="iso" arch="alpha" id="minimal" title="Minimal Installation CD" %}
- </div>
- <h4>Stage Archives</h4>
- <div class="list-group">
- {% include partials/download-link.html type="stage3" arch="alpha" id="alpha" title="Stage 3" %}
- </div>
-</div>
-<div class="col-xs-12 col-md-6">
- <h4>Details (Contents, Hashes, and Signatures)</h4>
- <ul>
- <li><a href="http://distfiles.gentoo.org/releases/alpha/autobuilds/current-install-alpha-minimal/">Minimal Installation CD</a></li>
- <li><a href="http://distfiles.gentoo.org/releases/alpha/autobuilds/current-stage3-alpha/">Stage 3</a></li>
- </ul>
-</div> \ No newline at end of file
diff --git a/python/templates/includes/downloads/amd64.html b/python/templates/includes/downloads/amd64.html
deleted file mode 100644
index 556519f..0000000
--- a/python/templates/includes/downloads/amd64.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<div class="alert alert-info">
- <strong><span class="fa fa-fw fa-info-circle"></span> Processor Compatibility</strong>
- <p>
- The <em>amd64</em> architecture is intended for use on AMD 64-bit CPUs as well as 64-bit <strong>Intel Pentium/Core/Xeon</strong> processors.
- </p>
-</div>
diff --git a/python/templates/includes/downloads/arch-default.html b/python/templates/includes/downloads/arch-default.html
deleted file mode 100644
index 529abbf..0000000
--- a/python/templates/includes/downloads/arch-default.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<h4>Boot Media</h4>
-<div class="list-group">
- {% for iso in download.isos %}
- {% if iso.id == 'minimal' %}
- {% include "includes/partials/download-link-raw.html" with arch=download.arch id=iso.id title=iso.title tag=iso.tag link=iso.link date=iso.date size=iso.size urlprefix=site.download_url %}
- {% endif %}
- {% endfor %}
- {% if download.arch == 'amd64' %}
- {% include "includes/partials/download-link-raw.html" with urlprefix='http://bouncer.gentoo.org/fetch/gentoo-20140826-livedvd/' link='amd64/' title='Hybrid ISO (LiveDVD)' size='2800000000' date='2014-08-26' %}
- {% elif download.arch == 'x86' %}
- {% include "includes/partials/download-link-raw.html" with urlprefix='http://bouncer.gentoo.org/fetch/gentoo-20140826-livedvd/' link='x86/' title='Hybrid ISO (LiveDVD)' size='2800000000' date='2014-08-26' %}
- {% endif %}
-</div>
-
-<h4>Stage Archives</h4>
-<div class="list-group">
- {% for stage3 in download.stage3s %}
- {% if stage3.defaultstage %}
- {% include "includes/partials/download-link-raw.html" with arch=download.arch id=stage3.id title=stage3.title tag=stage3.tag link=stage3.link date=stage3.date size=stage3.size urlprefix=site.download_url %}
- {% endif %}
- {% endfor %}
-</div>
-
-<h4>Details (Contents, Hashes, and Signatures)</h4>
-<p>
- <a href="{{site.download_url }}/{{ download.arch }}/autobuilds/current-install-{{ download.arch }}-minimal/">Minimal Installation CD</a>,
- <a href="http://bouncer.gentoo.org/fetch/gentoo-20140826-livedvd/{{ download.arch }}/">Hybrid ISO</a>,
- {% for stage3 in download.stage3s %}
- {% if stage3.defaultstage %}
- <a href="{{site.download_url }}/{{ download.arch }}/autobuilds/current-stage3-{% if stage3.tag %}{{ stage3.tag }}{% else %}{{ download.arch }}{% endif %}/">Stage 3</a>
- {% endif %}
- {% endfor %}
-</p> \ No newline at end of file
diff --git a/python/templates/includes/downloads/arch-main.html b/python/templates/includes/downloads/arch-main.html
deleted file mode 100644
index f4cecd0..0000000
--- a/python/templates/includes/downloads/arch-main.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<div class="col-xs-12 col-md-6">
- <h4>Boot Media</h4>
- <div class="list-group">
- {% for iso in download.isos %}
- {% include "includes/partials/download-link-raw.html" with arch=key id=iso.id title=iso.title urlprefix=site.download_url tag=iso.tag link=iso.link date=iso.date size=iso.size %}
- {% endfor %}
- </div>
-
-
- <h4>Stage Archives</h4>
- <div class="list-group">
- {% for stage3 in download.stage3s %}
- {% include "includes/partials/download-link-raw.html" with arch=key id=stage3.id title=stage3.title urlprefix=site.download_url tag=stage3.tag link=stage3.link date=stage3.date size=stage3.size %}
- {% endfor %}
- </div>
-</div>
-<div class="col-xs-12 col-md-6">
- <h4>Details (Contents, Hashes, and Signatures)</h4>
- <ul>
- <li><a href="{{site.download_url }}{{ key }}/autobuilds/current-install-{{ key }}-minimal/">Minimal Installation CD</a></li>
- {% for stage3 in download.stage3s %}
- {% if stage3.defaultstage %}
- <li><a href="{{site.download_url }}{{ key }}/autobuilds/current-stage3-{% if stage3.tag %}{{ stage3.tag }}{% else %}{{ key }}{% endif %}/">Stage 3</a></li>
- {% endif %}
- {% endfor %}
- <li><a href="{{site.download_url }}{{ key }}/autobuilds/">All Stages</a></li>
- </ul>
- {% include "includes/downloads/warnings.html" with key=key %}
-</div> \ No newline at end of file
diff --git a/python/templates/includes/downloads/arm.html b/python/templates/includes/downloads/arm.html
deleted file mode 100644
index a2bf23e..0000000
--- a/python/templates/includes/downloads/arm.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<div class="col-xs-12 col-md-6">
- <h4>Stage Archives</h4>
- <div class="list-group">
- {% include partials/download-link.html type="stage3" arch="arm" id="armv4tl" title="Stage 3" tag="ARMv4tl" %}
- {% include partials/download-link.html type="stage3" arch="arm" id="armv5tel" title="Stage 3" tag="ARMv5tel" %}
- {% include partials/download-link.html type="stage3" arch="arm" id="armv6j" title="Stage 3" tag="ARMv6j" %}
- {% include partials/download-link.html type="stage3" arch="arm" id="armv6j_hardfp" title="Stage 3" tag="ARMv6j | HardFP" %}
- {% include partials/download-link.html type="stage3" arch="arm" id="armv7a" title="Stage 3" tag="ARMv7a" %}
- {% include partials/download-link.html type="stage3" arch="arm" id="armv7a_hardfp" title="Stage 3" tag="ARMv7a | HardFP" %}
- </div>
-</div>
-<div class="col-xs-12 col-md-6">
- <h4>Details (Contents, Hashes, and Signatures)</h4>
- <ul>
- <li><a href="http://distfiles.gentoo.org/releases/arm/autobuilds/">Stage 3</a></li>
- </ul>
-</div> \ No newline at end of file
diff --git a/python/templates/includes/downloads/experimental.html b/python/templates/includes/downloads/experimental.html
deleted file mode 100644
index e6fc030..0000000
--- a/python/templates/includes/downloads/experimental.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<div class="col-xs-12 col-md-6">
- <h4>mips</h4>
- <div class="list-group">
- <a href="http://distfiles.gentoo.org/experimental/mips/stages/" data-relurl="../experimental/mips/stages/" class="list-group-item download-link download-link-mirrorable">
- <span class="fa fa-download fa-fw"></span>
- <strong>MIPS stages</strong>
- </a>
- </div>
-</div>
-<div class="col-xs-12 col-md-6">
-
-</div> \ No newline at end of file
diff --git a/python/templates/includes/downloads/hppa.html b/python/templates/includes/downloads/hppa.html
deleted file mode 100644
index 908eb7a..0000000
--- a/python/templates/includes/downloads/hppa.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<div class="col-xs-12 col-md-6">
- <h4>Boot Media</h4>
- <div class="list-group">
- {% include partials/download-link.html type="iso" arch="hppa" id="minimal" title="Minimal Installation CD" %}
- </div>
- <h4>Stage Archives</h4>
- <div class="list-group">
- {% include partials/download-link.html type="stage3" arch="hppa" id="hppa1.1" title="Stage 3" tag="HPPA 1.1" %}
- {% include partials/download-link.html type="stage3" arch="hppa" id="hppa2.0" title="Stage 3" tag="HPPA 2.0" %}
- </div>
-</div>
-<div class="col-xs-12 col-md-6">
- <h4>Details (Contents, Hashes, and Signatures)</h4>
- <ul>
- <li><a href="http://distfiles.gentoo.org/releases/hppa/autobuilds/current-install-hppa-minimal/">Minimal Installation CD</a></li>
- <li><a href="http://distfiles.gentoo.org/releases/hppa/autobuilds/">Stage 3</a></li>
- </ul>
-</div> \ No newline at end of file
diff --git a/python/templates/includes/downloads/ia64.html b/python/templates/includes/downloads/ia64.html
deleted file mode 100644
index 46aee26..0000000
--- a/python/templates/includes/downloads/ia64.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<div class="col-xs-12 col-md-6">
- <h4>Boot Media</h4>
- <div class="list-group">
- {% include partials/download-link.html type="iso" arch="ia64" id="minimal" title="Minimal Installation CD" %}
- </div>
- <h4>Stage Archives</h4>
- <div class="list-group">
- {% include partials/download-link.html type="stage3" arch="ia64" id="ia64" title="Stage 3" %}
- </div>
-</div>
-<div class="col-xs-12 col-md-6">
- <h4>Details (Contents, Hashes, and Signatures)</h4>
- <ul>
- <li><a href="http://distfiles.gentoo.org/releases/ia64/autobuilds/current-iso/">Minimal Installation CD</a></li>
- <li><a href="http://distfiles.gentoo.org/releases/ia64/autobuilds/current-stage3/">Stage 3</a></li>
- </ul>
-
- <div class="alert alert-warning">
- <strong><i class="fa fa-fw fa-warning"></i> Confirm Processor Compatibility</strong>
- <p>
- The <em>ia64</em> architecture is intended for use on <strong>Intel Itanium</strong> processors only.<br />
- If you have a 64-bit <strong>Intel Pentium/Core/Xeon</strong> processor, you need to use the <a href="#amd64" class="alert-link"><em>amd64</em></a> architecture.
- </p>
- </div>
-</div> \ No newline at end of file
diff --git a/python/templates/includes/downloads/ppc.html b/python/templates/includes/downloads/ppc.html
deleted file mode 100644
index 1880dde..0000000
--- a/python/templates/includes/downloads/ppc.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<div class="col-xs-12 col-md-6">
- <h4>Boot Media</h4>
- <div class="list-group">
- {% include partials/download-link.html type="iso" arch="ppc" id="minimal" title="Minimal Installation CD" %}
- </div>
- <h4>Stage Archives</h4>
- <div class="list-group">
- {% include partials/download-link.html type="stage3" arch="ppc" id="ppc" title="PPC Stage 3" %}
- {% include partials/download-link.html type="stage3" arch="ppc" id="ppc64-32ul" title="PPC64 Stage 3" tag="32ul" %}
- {% include partials/download-link.html type="stage3" arch="ppc" id="ppc64-64ul" title="PPC64 Stage 3" tag="64ul" %}
- </div>
-</div> \ No newline at end of file
diff --git a/python/templates/includes/downloads/s390.html b/python/templates/includes/downloads/s390.html
deleted file mode 100644
index a93064b..0000000
--- a/python/templates/includes/downloads/s390.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<div class="col-xs-12 col-md-6">
- <h4>Stage Archives</h4>
- <div class="list-group">
- {% include partials/download-link.html type="stage3" arch="s390" id="s390" title="Stage 3" tag="S390" %}
- {% include partials/download-link.html type="stage3" arch="s390" id="s390x" title="Stage 3" tag="S390X" %}
- </div>
-</div> \ No newline at end of file
diff --git a/python/templates/includes/downloads/sh.html b/python/templates/includes/downloads/sh.html
deleted file mode 100644
index 8bd2b03..0000000
--- a/python/templates/includes/downloads/sh.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<div class="col-xs-12 col-md-6">
- <h4>Stage Archives</h4>
- <div class="list-group">
- {% include partials/download-link.html type="stage3" arch="sh" id="sh4" title="Stage 3" tag="SH4" %}
- {% include partials/download-link.html type="stage3" arch="sh" id="sh4a" title="Stage 3" tag="SH4A" %}
- </div>
-</div> \ No newline at end of file
diff --git a/python/templates/includes/downloads/sparc.html b/python/templates/includes/downloads/sparc.html
deleted file mode 100644
index 7e91ad3..0000000
--- a/python/templates/includes/downloads/sparc.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<div class="col-xs-12 col-md-6">
- <h4>Boot Media</h4>
- <div class="list-group">
- {% include partials/download-link.html type="iso" arch="sparc" id="minimal" title="Minimal Installation CD" %}
- </div>
- <h4>Stage Archives</h4>
- <div class="list-group">
- {% include partials/download-link.html type="stage3" arch="sparc" id="sparc64" title="Stage 3" %}
- {% include partials/download-link.html type="stage3" arch="sparc" id="sparc64-multilib" title="Stage 3" tag="multilib" %}
- </div>
-</div> \ No newline at end of file
diff --git a/python/templates/includes/downloads/warnings.html b/python/templates/includes/downloads/warnings.html
deleted file mode 100644
index 38a1eb5..0000000
--- a/python/templates/includes/downloads/warnings.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<div class="alert alert-info">
- <strong><span class="fa fa-fw fa-info-circle"></span> Processor Compatibility</strong>
- <p>
- {% if key == 'amd64' %}
- The <em>amd64</em> architecture is intended for use on AMD 64-bit CPUs as well as 64-bit <strong>Intel Pentium/Core/Xeon</strong> processors.
- {% elif key == 'x86' %}
- There are two builds of the <em>x86</em> architecture: <em>i486</em> and <em>i686</em>.<br />
- Processors prior to the <strong>Intel Pentium Pro</strong> or <strong>Pentium II</strong> require the <em>i486</em> variant to be used.
- {% endif %}
- </p>
-</div> \ No newline at end of file
diff --git a/python/templates/includes/downloads/x86-default.html b/python/templates/includes/downloads/x86-default.html
deleted file mode 100644
index 03fc9b5..0000000
--- a/python/templates/includes/downloads/x86-default.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<h4>Boot Media</h4>
-<div class="list-group">
- {% include partials/download-link.html type="iso" arch="x86" id="minimal" title="Minimal Installation CD" %}
- {% include partials/download-link-raw.html url='http://bouncer.gentoo.org/fetch/gentoo-20140826-livedvd/x86/' title='Hybrid ISO (LiveDVD)' size='2800000000' date='2014-08-26' %}
-</div>
-
-<h4>Stage Archives</h4>
-<div class="list-group">
- {% include partials/download-link.html type="stage3" arch="x86" id="i686" title="Stage 3" tag="i686" %}
-</div>
-
-<h4>Details (Contents, Hashes, and Signatures)</h4>
-<p>
- <a href="http://distfiles.gentoo.org/releases/x86/autobuilds/current-install-x86-minimal/">Minimal Installation CD</a>,
- <a href="http://bouncer.gentoo.org/fetch/gentoo-20140826-livedvd/x86/">Hybrid ISO</a>,
- <a href="http://distfiles.gentoo.org/releases/x86/autobuilds/current-stage3-i686/">Stage 3</a>
-</p> \ No newline at end of file
diff --git a/python/templates/includes/downloads/x86.html b/python/templates/includes/downloads/x86.html
deleted file mode 100644
index f1a04c9..0000000
--- a/python/templates/includes/downloads/x86.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<div class="alert alert-warning">
- <strong><i class="fa fa-fw fa-warning"></i> Confirm Processor Compatibility</strong>
- <p>
- There are two builds of the <em>x86</em> architecture: <em>i486</em> and <em>i686</em>.<br />
- Processors prior to the <strong>Intel Pentium Pro</strong> or <strong>Pentium II</strong> require the <em>i486</em> variant to be used.
- </p>
-</div>
diff --git a/python/templates/includes/frontpage/new_build_req b/python/templates/includes/frontpage/new_build_req
index 52a41fe..3a47530 100644
--- a/python/templates/includes/frontpage/new_build_req
+++ b/python/templates/includes/frontpage/new_build_req
@@ -1,16 +1,15 @@
-{% for k, v in BJ.items %}
-<tr>
- <td>
- <a href="/new_build_req/{{ k }}">
- <span class="text-muted">{{ v.C }}/</span>/<strong>{{ v.P }}-{{ v.V }}::{{ v.R }}</strong>
- </a>
- </td>
- <td>
- {% if v.Status == 'Building' %}
+<table class="table table-striped frontpage-table">
+ {% for k, v in BJ.items %}
+ <tr>
+ <td class="frontpage-table-package-atom"><a href="/new_build_req/{{ k }}" title="{{ v.C }}/{{ v.P }}-{{ v.V }}::{{ v.R }}">{{ v.C }}/{{ v.P }}-{{ v.V }}::{{ v.R }}</a></td>
+ <td><p title="{{ v.title }}">{{ v.title|truncatewords:2}}</p>
+ <td class="text-right">
+ {% if v.Status == 'Building' %}
<span class="label label-primary">{{ v.Status }}</span>
{% else %}
<span class="label label-default">{{ v.Status }}</span>
{% endif %}
- </td>
-</tr>
-{% endfor %}
+ </td></td>
+ </tr>
+ {% endfor %}
+</table> \ No newline at end of file
diff --git a/python/templates/includes/frontpage/new_logs b/python/templates/includes/frontpage/new_logs
index 49db4c3..3074c4d 100644
--- a/python/templates/includes/frontpage/new_logs
+++ b/python/templates/includes/frontpage/new_logs
@@ -1,31 +1,27 @@
-{% for BL in BL_tmp %}
-<tr>
- <td>
- <a href="/logs/build/{{ BL.BuildLogId }}/">
- <span class="text-muted">{{ BL.C }}/</span>/<strong>{{ BL.P }}-{{ BL.V }}::{{ BL.R }}</strong>
- </a>
- </td>
- <td>
- <p title="{{ BL.SummeryText }}">{{ BL.SummeryText|truncatewords:5 }}</p>
- {% if BL.Fail %}
+<table class="table table-striped frontpage-table">
+ {% for B in BL%}
+ <tr>
+ <td class="frontpage-table-package-atom"><a href="/new_logs/{{ B.BuildLogId }}/" title="{{ B.C }}/{{ B.P }}-{{ B.V }}::{{ B.R }}">
+ {{ B.C }}/{{ B.P }}-{{ B.V }}::{{ B.R }}</a></td>
+ <td><p title="{{ B.SummeryText }}">{{ B.SummeryText|truncatewords:3 }}</p>
+ <td class="text-right">
+ {% if B.Fail %}
{% for BE in B.BE_tmp %}
{% if BE.BuildLogId.BuildLogId == B.BuildLogId %}
{% if BE.ErrorId.ErrorId == 1 or BE.ErrorId.ErrorId == 2 %}
<span class="label label-warning">{{ BE.ErrorId.ErrorName|upper }}</span>
- {% endif %}
- {% if BE.ErrorId.ErrorId == 3 %}
- <span class="label label-info">{{ BE.ErrorId.ErrorName|upper }}</span>
- {% elif BE.ErrorId.ErrorId > 3 %}
+ {% elif BE.ErrorId.ErrorId == 3 %}
+ <span class="label label-info">OTHERS</span>
+ {% else %}
<span class="label label-danger">{{ BE.ErrorId.ErrorName|upper }}</span>
{% endif %}
{% endif %}
{% endfor %}
- {% if not B.FailB %}
- <span class="label label-success">BUILD</span>
- {% endif %}
- {% else %}
- <span class="label label-success">Ok</span>
- {% endif %}
- </td>
-</tr>
-{% endfor %}
+ {% else %}
+ <span class="label label-success">OK</span>
+ {% endif %}
+ </td>
+ </td>
+ </tr>
+ {% endfor %}
+</table> \ No newline at end of file
diff --git a/python/templates/includes/frontpage/new_packages b/python/templates/includes/frontpage/new_packages
index 297ca8b..6c845b7 100644
--- a/python/templates/includes/frontpage/new_packages
+++ b/python/templates/includes/frontpage/new_packages
@@ -1,10 +1,10 @@
-{% for P in PM %}
-<tr>
- <td>
- <a href="/packages/{{ P.PackageId.PackageId }}">
- <span class="text-muted">{{ P.PackageId.CategoryId.Category }}</span>/<strong>{{ P.PackageId.Package }}</strong>
- </a>
- </td>
- <td>{{ P.Descriptions }}</td>
-</tr>
-{% endfor %}
+<table class="table table-striped frontpage-table">
+ {% for E in EM %}
+ <tr>
+ <td class="frontpage-table-package-atom">
+ <a href="/packages/{{ E.EbuildId.PackageId.PackageId }}/" title="{{ E.EbuildId.PackageId.CategoryId.Category }}/{{ E.EbuildId.PackageId.Package }}-{{ E.EbuildId.Version }}::{{ E.EbuildId.PackageId.RepoId.Repo }}">
+ {{ E.EbuildId.PackageId.CategoryId.Category }}/{{ E.EbuildId.PackageId.Package }}-{{ E.EbuildId.Version }}::{{ E.EbuildId.PackageId.RepoId.Repo }}</a></td>
+ <td><p title="{{ E.Descriptions }}">{{ E.Descriptions }}</p></td>
+ </tr>
+ {% endfor %}
+</table> \ No newline at end of file
diff --git a/python/templates/includes/frontpage/new_qa b/python/templates/includes/frontpage/new_qa
deleted file mode 100644
index 5b3607b..0000000
--- a/python/templates/includes/frontpage/new_qa
+++ /dev/null
@@ -1,10 +0,0 @@
-<table class="table table-striped frontpage-table">
- {% for QA in QA_tmp %}
- <tr>
- <td class="frontpage-table-package-atom"><a href="/logs/build/{{ QA.BuildLogId.BuildLogId }}">
- {{ QA.BuildLogId.EbuildId.PackageId.CategoryId.Category }}/{{ QA.BuildLogId.EbuildId.PackageId.Package }}::{{ QA.BuildLogId.EbuildId.PackageId.RepoId.Repo }}</a>
- </td>
- <td><p title="{{ QA.SummeryText }}">{{ QA.SummeryText|truncatewords:3 }}</p></td>
- </tr>
- {% endfor %}
-</table>
diff --git a/python/templates/includes/frontpage/new_repoman b/python/templates/includes/frontpage/new_repoman
deleted file mode 100644
index e03b095..0000000
--- a/python/templates/includes/frontpage/new_repoman
+++ /dev/null
@@ -1,10 +0,0 @@
-<table class="table table-striped frontpage-table">
- {% for RM in RM_tmp %}
- <tr>
- <td class="frontpage-table-package-atom"><a href="/logs/build/{{ RM.BuildLogId.BuildLogId }}">
- {{ RM.BuildLogId.EbuildId.PackageId.CategoryId.Category }}/{{ RM.BuildLogId.EbuildId.PackageId.Package }}::{{ RM.BuildLogId.EbuildId.PackageId.RepoId.Repo }}</a>
- </td>
- <td><p title="{{ RM.SummeryText }}">{{ RM.SummeryText|truncatewords:3 }}</p></td>
- </tr>
- {% endfor %}
-</table>
diff --git a/python/templates/includes/frontpage/new_repoman_qa b/python/templates/includes/frontpage/new_repoman_qa
new file mode 100644
index 0000000..61ac691
--- /dev/null
+++ b/python/templates/includes/frontpage/new_repoman_qa
@@ -0,0 +1,18 @@
+<table class="table table-striped frontpage-table">
+ {% for QA in QA_tmp %}
+ <tr>
+ <td class="frontpage-table-package-atom"><a href="/repoman_qa/{{ QA.BuildLogId.BuildLogId }}/" title="{{ QA.BuildLogId.EbuildId.PackageId.CategoryId.Category }}/{{ QA.BuildLogId.EbuildId.PackageId.Package }}-{{ QA.BuildLogId.EbuildId.Version }}::{{ QA.BuildLogId.EbuildId.PackageId.RepoId.Repo }}">
+ {{ QA.BuildLogId.EbuildId.PackageId.CategoryId.Category }}/{{ QA.BuildLogId.EbuildId.PackageId.Package }}-{{ QA.BuildLogId.EbuildId.Version }}::{{ QA.BuildLogId.EbuildId.PackageId.RepoId.Repo }}</a>
+ </td>
+ <td><p title="{{ QA.SummeryText }}">{{ QA.SummeryText|truncatewords:3 }}</p></td>
+ </tr>
+ {% endfor %}
+ {% for PR in PR_tmp %}
+ <tr>
+ <td class="frontpage-table-package-atom"><a href="/repoman/{{ PR.PackageId.PackageId }}/" title="{{ PR.PackageId.CategoryId.Category }}/{{ PR.PackageId.Package }}::{{ PR.PackageId.RepoId.Repo }}">
+ {{ PR.PackageId.CategoryId.Category }}/{{ PR.PackageId.Package }}::{{ PR.PackageId.RepoId.Repo }}</a>
+ </td>
+ <td><p title="{{ PR.RepomanText }}">{{ PR.RepomanText|truncatewords:3 }}</p></td>
+ </tr>
+ {% endfor %}
+</table> \ No newline at end of file
diff --git a/python/templates/includes/frontpage/news b/python/templates/includes/frontpage/news
index 27d9dc4..1f1a7d3 100644
--- a/python/templates/includes/frontpage/news
+++ b/python/templates/includes/frontpage/news
@@ -1,6 +1,13 @@
{% for post in posts %}
<article>
- <h2><a href="{{ post.url }}">{{ post.title }}</a> <small>({{ post.TimeStamp }})</small></h2>
- {{ post.text|safe|escape }}
+<h2 class="stick-top newsitem-bullet">
+ <span class="fa fa-fw fa-chevron-circle-right" title="News item"> </span>
+ </h2>
+ <h2 class="stick-top newsitem-headline">
+ <a href="{{ post.url }}">{{ post.title }}</a> <small>{{ post.created_at }}</small>
+ </h2>
+ <div class="newsitem-content">
+ <p>{{ post.text|safe|escape }}</p>
+ </div>
</article>
-{% endfor %} \ No newline at end of file
+{% endfor %}
diff --git a/python/templates/includes/frontpage/updated_packages b/python/templates/includes/frontpage/updated_packages
deleted file mode 100644
index 78dc027..0000000
--- a/python/templates/includes/frontpage/updated_packages
+++ /dev/null
@@ -1,77 +0,0 @@
-{% for E in EM_list %}
-<li class="list-group-item kk-package-detailed">
- <div class="row">
- <div class="col-xs-12 col-md-6">
- <h4 class="stick-top"><a href="/packages/{{ E.CId }}/{{ E.PId }}">{{ E.C }}/{{ E.P }}::{{ E.R }}</a></h4>
- <div class="kk-package-detailed-toolbox">
- <div class="btn-group">
- <button type="button" class="btn btn-default btn-xs dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
- <span class="fa fa-fw fa-navicon"></span>
- </button>
- <ul class="dropdown-menu dropdown-menu-right">
- <li><a href="https://bugs.gentoo.org/buglist.cgi?quicksearch={{ E.C }}/{{ E.P }}" target="_blank">
- <span class="fa fa-fw fa-bug"></span>
- Related bugs
- </a></li>
- <li><a href="https://wiki.gentoo.org/index.php?title=Special%3ASearch&fulltext=Search&search={{ E.P }}" target="_blank">
- <span class="fa fa-fw fa-book"></span>
- Documentation
- </a></li>
- <li><a href="https://forums.gentoo.org/search.php?search_terms=all&show_results=topics&search_keywords={{ E.P }}&mode=results" target="_blank">
- <span class="fa fa-fw fa-comments-o"></span>
- Forums posts
- </a></li>
- <li role="separator" class="divider"></li>
- <li><a href="https://gitweb.gentoo.org/repo/{{ E.R }}.git/tree/{{ E.C }}/{{ E.P }}" target="_blank">
- <span class="fa fa-fw fa-code-fork"></span>
- Git repository browser
- </a></li>
- <li><a href="https://gitweb.gentoo.org/repo/{{ E.R }}.git/log/{{ E.C }}/{{ E.P }}?showmsg=1" target="_blank">
- <span class="fa fa-fw fa-history"></span>
- Git log
- </a></li>
- <li><a href="https://gitweb.gentoo.org/repo/{{ E.R }}.git/atom/{{ E.C }}/{{ E.P }}?h=master" target="_blank">
- <span class="fa fa-fw fa-rss"></span>
- Changes feed
- </a></li>
- <li role="separator" class="divider"></li>
- <li><a href="http://www.portagefilelist.de/site/query/listPackageVersions/?category={{ E.C }}&package={{ E.P }}&do#result" target="_blank">
- <span class="fa fa-fw fa-files-o"></span>
- Installed files <small>(via PFL<span class="fa fa-fw fa-external-link-square"></span>)</small>
- </a></li>
- </ul>
- </div>
- </div>
- {{ E.Descriptions }}
- <br>
- <small class="text-muted">
- </small>
- <div class="kk-inline-changelog-entry">
- <a href="https://gitweb.gentoo.org/repo/{{ E.R }}.git/commit/?id={{ E.CommitId }}" title="Git commit">
- <span class="octicon octicon-git-pull-request"></span>
- <span class="kk-commit-message">
- {{ E.CommitMsg}}
- </span>
- </a>
- </div>
- </div>
- <div class="col-xs-12 col-md-6">
- <small class="text-muted pull-right">
- <span>{{ E.TimeStamp|date:"D d b Y G i" }}</span>
- </small>
- <div class="kk-version-card">
- <p><strong>{{ E.V }}</strong><span class="kk-slot"> : {{ E.Slot }} 0</span></p>
- <p>
- {% for K in E.EK_tmp %}
- {% if K.EbuildId.EbuildId == E.EbuildId and K.KeywordId.Keyword != '*' and '-' not in K.KeywordId.Keyword %}
- {% if K.Status == 'Stable' %}<span class="label kk-keyword-stable" title="{{ E.V }} is stable on {{ K.KeywordId.Keyword }}">{{ K.KeywordId.Keyword }}</span>{% endif %}
- {% if K.Status == 'Unstable' %}<span class="label kk-keyword-testing" title="{{ E.V }} is testing on {{ K.KeywordId.Keyword }}">~{{ K.KeywordId.Keyword }}</span>{% endif %}
- {% if K.Status == 'Negative' %}<span class="label kk-keyword-negative" title="{{ E.V }} is negative on {{ K.KeywordId.Keyword }}">-{{ K.KeywordId.Keyword }}{% endif %}
- {% endif %}
- {% endfor %}
- </p>
- </div>
- </div>
- </div>
-</li>
-{% endfor %}
diff --git a/python/templates/includes/hero-section/end b/python/templates/includes/hero-section/end
deleted file mode 100644
index 492b151..0000000
--- a/python/templates/includes/hero-section/end
+++ /dev/null
@@ -1,3 +0,0 @@
- </div>
-</div>
-<div class="container"><div class="row"><div class="col-md-12"> \ No newline at end of file
diff --git a/python/templates/includes/hero-section/start b/python/templates/includes/hero-section/start
deleted file mode 100644
index 8e9d73c..0000000
--- a/python/templates/includes/hero-section/start
+++ /dev/null
@@ -1,3 +0,0 @@
-</div></div></div>
-<div class="hero-section {{ class_include }}">
- <div class="container"> \ No newline at end of file
diff --git a/python/templates/includes/layout/footer.html b/python/templates/includes/layout/footer.html
index 6767871..a6860e6 100644
--- a/python/templates/includes/layout/footer.html
+++ b/python/templates/includes/layout/footer.html
@@ -2,30 +2,37 @@
<div class="container">
<div class="row">
<div class="col-xs-12 col-md-offset-2 col-md-7">
- {% include "includes/layout/footer_db_update.html" %}
+ {% if page.footer %}{{ page.footer }}{% endif %}
</div>
<div class="col-xs-12 col-md-3">
<h3 class="footerhead">Questions or comments?</h3>
- Please feel free to <a href="{{ site.contact }}">contact us</a>.
+ Please feel free to <a href="{{ contact.PageId.nav1 }}/{{ contact.nav2}}/">contact us</a>.
</div>
</div>
+ </div>
+ <div class="container-sitemap">
+ <div class="container">
+ {% include "includes/layout/footer_sitemap.html" %}
+ </div>
+ </div>
+ <div class="container">
<div class="row">
- <div class="col-xs-2 col-sm-3 col-md-2">
+ <div class="col-xs-3 col-md-2">
<ul class="footerlinks three-icons">
- <li><a href="https://twitter.com/gentoo" title="@Gentoo on Twitter"><span class="fa fa-twitter fa-fw"></span></a></li>
+ <li><a href="http://twitter.com/gentoo" title="@Gentoo on Twitter"><span class="fa fa-twitter fa-fw"></span></a></li>
<li><a href="https://plus.google.com/+Gentoo" title="+Gentoo on Google+"><span class="fa fa-google-plus fa-fw"></span></a></li>
<li><a href="https://www.facebook.com/gentoo.org" title="Gentoo on Facebook"><span class="fa fa-facebook fa-fw"></span></a></li>
</ul>
</div>
- <div class="col-xs-10 col-sm-9 col-md-10">
+ <div class="col-xs-9 col-md-9">
<strong>&copy; 2001-{% now "Y" %} Gentoo Foundation, Inc.</strong><br>
<small>
Gentoo is a trademark of the Gentoo Foundation, Inc.
The contents of this document, unless otherwise expressly stated, are licensed under the
- <a href="https://creativecommons.org/licenses/by-sa/3.0/" rel="license">CC-BY-SA-3.0</a> license.
- The <a href="https://www.gentoo.org/inside-gentoo/foundation/name-logo-guidelines.html">Gentoo Name and Logo Usage Guidelines</a> apply.
+ <a href="http://creativecommons.org/licenses/by-sa/3.0/" rel="license">CC-BY-SA-3.0</a> license.
+ The <a href="/inside-gentoo/foundation/name-logo-guidelines.html">Gentoo Name and Logo Usage Guidelines</a> apply.
</small>
</div>
</div>
</div>
-</footer>
+</footer> \ No newline at end of file
diff --git a/python/templates/includes/layout/footer_db_update.html b/python/templates/includes/layout/footer_db_update.html
deleted file mode 100644
index 60284a5..0000000
--- a/python/templates/includes/layout/footer_db_update.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<h3 class="footerhead">Gentoo Packages Database</h3>
- <div class="row">
- <div class="col-xs-12 col-md-4">
- <span class="kk-group-header">Data currrent as of</span><br><span>{{ jobs.TimeStamp|date:"D d b Y G i" }}</span>
- </div>
- <div class="col-xs-12 col-md-4">
- </div>
- <div class="col-xs-12 col-md-4">
- </div>
-</div>
diff --git a/python/templates/includes/layout/footer_sitemap.html b/python/templates/includes/layout/footer_sitemap.html
new file mode 100644
index 0000000..3923ce3
--- /dev/null
+++ b/python/templates/includes/layout/footer_sitemap.html
@@ -0,0 +1,12 @@
+<div class="row row-sitemap hidden-xs">
+ {% for page in pages %}
+ {% if page.nav1 != 'donate' %}
+ <div class="col-xs-12 col-sm-4 col-md-2">
+ <h3 class="footerhead"><a href="{{ page.url }}">{{ page.nav_title }}</a></h3>
+ <ul class="sitemap">
+ {% include "includes/navigation/sitemap_secondary" %}
+ </ul>
+ {% endif %}
+ </div>
+ {% endfor %}
+</div> \ No newline at end of file
diff --git a/python/templates/includes/layout/head.html b/python/templates/includes/layout/head.html
index 8e403ee..7f17fd8 100644
--- a/python/templates/includes/layout/head.html
+++ b/python/templates/includes/layout/head.html
@@ -13,17 +13,13 @@
<link rel="icon" sizes="192x192" href="https://www.gentoo.org/assets/img/logo/icon-192.png">
<link href="https://assets.gentoo.org/tyrian/bootstrap.min.css" rel="stylesheet" media="screen">
<link href="https://assets.gentoo.org/tyrian/tyrian.min.css" rel="stylesheet" media="screen">
- <link href="https://www.gentoo.org/assets/css/screen.css" rel="stylesheet" media="screen">
- <link rel="stylesheet" media="all" href="https://packages.gentoo.org/assets/application-7fdbe7860b8aec801e4bc160268077e26a710facc864c06d9ad875d9251ee6e9.css" data-turbolinks-track="true" />
- <script src="https://packages.gentoo.org/assets/application-8c602231766f320e4b09bdeed673d188f3719a0c4a277dd54e95992ea8e7a689.js" data-turbolinks-track="true"></script>
- <script src="https://assets.gentoo.org/tyrian/jquery.min.js"></script>
- <script src="https://assets.gentoo.org/tyrian/bootstrap.min.js"></script>
- {% if page.extracss %}{% for css in page.extracss %}<link href="https://www.gentoo.org/assets/css/{{ css }}" rel="stylesheet" media="screen">{% endfor %}{% endif %}
- <link rel="icon" href="/favicon.ico" type="image/x-icon">
+ <link href="https://assets/css/screen.css" rel="stylesheet" media="screen">
+
+ <link rel="icon" href="https://www.gentoo.org/favicon.ico" type="image/x-icon">
<link rel="search" type="application/opensearchdescription+xml" href="https://www.gentoo.org/search/www-gentoo-org.xml" title="Gentoo Website">
<link rel="search" type="application/opensearchdescription+xml" href="https://www.gentoo.org/search/forums-gentoo-org.xml" title="Gentoo Forums">
<link rel="search" type="application/opensearchdescription+xml" href="https://www.gentoo.org/search/bugs-gentoo-org.xml" title="Gentoo Bugzilla">
<link rel="search" type="application/opensearchdescription+xml" href="https://www.gentoo.org/search/packages-gentoo-org.xml" title="Gentoo Packages">
<link rel="search" type="application/opensearchdescription+xml" href="https://www.gentoo.org/search/archives-gentoo-org.xml" title="Gentoo List Archives">
- {% if page.meta %}{{ page.meta|safe|escape }}{% endif %}
+ <link rel="alternate" type="application/atom+xml" title="Gentoo Linux news" href="https://www.gentoo.org/feeds/news.xml">
</head>
diff --git a/python/templates/includes/layout/header.html b/python/templates/includes/layout/header.html
index 4968f1f..63cba60 100644
--- a/python/templates/includes/layout/header.html
+++ b/python/templates/includes/layout/header.html
@@ -4,24 +4,24 @@
<div class="row">
<div class="site-title-buttons">
<div class="btn-group btn-group-sm">
- <a href="http://get.gentoo.org/" role="button" class="btn get-gentoo"><span class="fa fa-download"></span> <strong>Get Gentoo!</strong></a>
+ <a href="https://get.gentoo.org/" role="button" class="btn get-gentoo"><span class="fa fa-fw fa-download"></span> <strong>Get Gentoo!</strong></a>
<div class="btn-group btn-group-sm">
- <button type="button" class="btn gentoo-org-sites dropdown-toggle" data-toggle="dropdown">
- <span class="glyphicon glyphicon-globe"></span> gentoo.org sites <span class="caret"></span>
- </button>
- <ul class="dropdown-menu">
- <li><a href="http://www.gentoo.org/" title="Main Gentoo website"><span class="fa fa-home fa-fw"></span> gentoo.org</a></li>
- <li><a href="http://wiki.gentoo.org/" title="Find and contribute documentation"><span class="fa fa-file-text fa-fw"></span> Wiki</a></li>
+ <a class="btn gentoo-org-sites dropdown-toggle" data-toggle="dropdown" data-target="#" href="#">
+ <span class="fa fa-fw fa-map-o"></span> <span class="hidden-xs">gentoo.org sites</span> <span class="caret"></span>
+ </a>
+ <ul class="dropdown-menu dropdown-menu-right">
+ <li><a href="https://www.gentoo.org/" title="Main Gentoo website"><span class="fa fa-home fa-fw"></span> gentoo.org</a></li>
+ <li><a href="https://wiki.gentoo.org/" title="Find and contribute documentation"><span class="fa fa-file-text-o fa-fw"></span> Wiki</a></li>
<li><a href="https://bugs.gentoo.org/" title="Report issues and find common issues"><span class="fa fa-bug fa-fw"></span> Bugs</a></li>
- <li><a href="http://forums.gentoo.org/" title="Discuss with the community"><span class="fa fa-comments-o fa-fw"></span> Forums</a></li>
- <li><a href="http://packages.gentoo.org/" title="Find software for your Gentoo"><span class="fa fa-hdd-o fa-fw"></span> Packages</a></li>
+ <li><a href="https://forums.gentoo.org/" title="Discuss with the community"><span class="fa fa-comments-o fa-fw"></span> Forums</a></li>
+ <li><a href="https://packages.gentoo.org/" title="Find software for your Gentoo"><span class="fa fa-hdd-o fa-fw"></span> Packages</a></li>
<li class="divider"></li>
- <li><a href="http://overlays.gentoo.org/" title="Collaborate on maintaining packages"><span class="fa fa-code-fork fa-fw"></span> Overlays</a></li>
- <li><a href="http://planet.gentoo.org/" title="Find out what's going on in the developer community"><span class="fa fa-rss fa-fw"></span> Planet</a></li>
- <li><a href="http://archives.gentoo.org/" title="Read up on past discussions"><span class="fa fa-archive fa-fw"></span> Archives</a></li>
- <li><a href="http://sources.gentoo.org/" title="Browse our source code"><span class="fa fa-code fa-fw"></span> Sources</a></li>
+ <li><a href="https://planet.gentoo.org/" title="Find out what's going on in the developer community"><span class="fa fa-rss fa-fw"></span> Planet</a></li>
+ <li><a href="https://archives.gentoo.org/" title="Read up on past discussions"><span class="fa fa-archive fa-fw"></span> Archives</a></li>
+ <li><a href="https://gitweb.gentoo.org/" title="Browse our source code in Gitweb"><span class="fa fa-code fa-fw"></span> Gitweb</a></li>
+ <li><a href="https://sources.gentoo.org/" title="Browse our source code in CVS"><span class="fa fa-code fa-fw"></span> CVS sources</a></li>
<li class="divider"></li>
- <li><a href="http://infra-status.gentoo.org/" title="Get updates on the services provided by Gentoo"><span class="fa fa-tasks fa-fw"></span> Infra Status</a></li>
+ <li><a href="https://infra-status.gentoo.org/" title="Get updates on the services provided by Gentoo"><span class="fa fa-server fa-fw"></span> Infra status</a></li>
</ul>
</div>
</div>
@@ -29,10 +29,10 @@
<div class="logo">
<a href="/" title="Back to the homepage" class="site-logo">
<object data="https://assets.gentoo.org/tyrian/site-logo.svg" type="image/svg+xml">
- <img src="https://assets.gentoo.org/tyrian/site-logo.png" alt="Gentoo Linux Logo">
+ <img src="https://assets.gentoo.org/tyrian/site-logo.png" alt="Gentoo Linux logo">
</object>
</a>
- <span class="site-label">Tinderbox-cluster</span>
+
</div>
</div>
</div>
@@ -52,22 +52,16 @@
<ul class="nav navbar-nav">
{% include "includes/navigation/primary" %}
</ul>
- <div class="btn-group btn-group-sm">
- <button type="button" class="btn dropdown-toggle" data-toggle="dropdown">
- User <span class="caret"></span>
- </button>
- <ul class="dropdown-menu">
- {% if user.is_authenticated %}
- <li><a href="/user/password_change/"><span class="fa fa-file-text fa-fw"></span> Change password</a></li>
- <li class="divider"></li>
- <li><a href="/user/bugzillalogin/"><span class="fa fa-file-text fa-fw"></span> Bugzilla Login</a></li>
- <li class="divider"></li>
- <li><a href="/user/logout/"><span class="fa fa-home fa-fw"></span> Log out</a></li>
- {% else %}
- <li><a href="/user/login/"><span class="fa fa-tasks fa-fw"></span> Log in</a></li>
- {% endif %}
- </ul>
- </div>
+ <ul class="nav navbar-nav navbar-right">
+ <li class=""><a href="http://www.gentoo.org/donate/"><span class="fa fa-heart" style="color:#d9534f;"></span> Donate</a></li>
+ </ul>
+ <ul class="nav navbar-nav navbar-right">
+ <li class=""><span class="" style="color:#d9534f;"></span>
+ {% if user.is_authenticated %}
+ Welcome, {{ user.username }}. Thanks for logging in.
+ {% endif %}
+ </li>
+ </ul>
</div>
</div>
</div>
diff --git a/python/templates/includes/layout/sponsor.html b/python/templates/includes/layout/sponsor.html
new file mode 100644
index 0000000..9ebd19a
--- /dev/null
+++ b/python/templates/includes/layout/sponsor.html
@@ -0,0 +1,9 @@
+<div class="row sponsor">
+{% for sponsor in sponsors %}
+<div class="col-xs-12 col-md-2 col-md-offset-2 sponsorlogo">
+<!-- sponsor{name:{{ sponsor.name }},weight:{{ sponsor.weight }}} -->
+<a href="{{ sponsor.link }}" title="{{ sponsor.title }}">
+<img src="https://www.gentoo.org/assets/img/sponsors/ads/{{ sponsor.img }}" alt="{{ sponsor.alt }}">
+</a></div>
+{% endfor %}
+</div>
diff --git a/python/templates/includes/navigation/primary b/python/templates/includes/navigation/primary
index 76fa273..9db245d 100644
--- a/python/templates/includes/navigation/primary
+++ b/python/templates/includes/navigation/primary
@@ -1,9 +1,10 @@
-{% for node in pages %}
- {% if node.nav1_show %}{% if node.nav1 != 'login' %}
- {% if page.nav1 == node.nav1 %}
- <li class="active"><a href="/{{ node.url }}/" class="active">{% if node.nav_title %}{{ node.nav_title }}{% else %}{{node.title}}{% endif %}</a></li>
+{% for meny in menys %}
+ {% if meny.view %}
+ {% if activemeny.name == meny.name %}
+ <li class="active">
{% else %}
- <li><a href="/{{ node.url }}/">{% if node.nav_title %}{{ node.nav_title }}{% else %}{{node.title}}{% endif %}</a></li>
+ <li class="">
{% endif %}
- {% endif %}{% endif %}
+ <a href="/{{ meny.url }}/">{{meny.title}}</a></li>
+ {% endif %}
{% endfor %}
diff --git a/python/templates/includes/navigation/secondary b/python/templates/includes/navigation/secondary
index 60898ab..ad11ad5 100644
--- a/python/templates/includes/navigation/secondary
+++ b/python/templates/includes/navigation/secondary
@@ -1,5 +1,10 @@
-{% for node in subpages %}
- {% if page.PageId == node.PageId.PageId %}
- <li><a href="{{node.url }}">{% if node.navtitle %}{{ node.navtitle }}{% else %}{{node.title}}{% endif %}</a></li>
+{% for meny in submenys %}
+ {% if meny.view %}
+ {% if subactivemeny == meny.name %}
+ <li class="active">
+ {% else %}
+ <li class="">
{% endif %}
+ <a href="{% url meny.url %}">{{meny.title}}</a></li>
+ {% endif %}
{% endfor %}
diff --git a/python/templates/includes/navigation/tertiary b/python/templates/includes/navigation/tertiary
deleted file mode 100644
index 500c358..0000000
--- a/python/templates/includes/navigation/tertiary
+++ /dev/null
@@ -1,12 +0,0 @@
-{% assign pages_list2 = pages_list | sort:"nav3-weight" %}
-{% for node in pages_list2 %}
- {% if page.nav1 == node.nav1 and page.nav2 == node.nav2 and node.nav3-show == true %}
- {% if page.nav3 == node.nav3 %}
- <li class="active"><a href="{{node.url | replace:'index.html',''}}" class="active">{% if node.navtitle %}{{ node.navtitle }}{% else %}{{node.title}}{% endif %}</a></li>
- {% else %}
- <li><a href="{{node.url | replace:'index.html',''}}">{% if node.navtitle %}{{ node.navtitle }}{% else %}{{node.title}}{% endif %}</a></li>
- {% endif %}
- {% endif %}
-{% endfor %}
-{% assign pages_list = nil %}
-{% assign pages_list2 = nil %} \ No newline at end of file
diff --git a/python/templates/includes/partials/download-link-raw.html b/python/templates/includes/partials/download-link-raw.html
deleted file mode 100644
index 0de2157..0000000
--- a/python/templates/includes/partials/download-link-raw.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<a href="{{ urlprefix }}{{ link }}" data-relurl="{{ link }}" class="list-group-item download-link {% if urlprefix %} download-link-mirrorable{% endif %}">
- <span class="fa fa-download fa-fw"></span>
- <strong>{{ title }}</strong>{%if tag %}<span class="label label-primary download-tag"> {{ tag }}</span>{% endif %}
- <span class="pull-right"><small class="download-date">{{ date }}</small> <span class="label label-default download-size hidden-xs">{{ size }}</span></span>
-</a> \ No newline at end of file
diff --git a/python/templates/includes/partials/download-link.html b/python/templates/includes/partials/download-link.html
deleted file mode 100644
index 14a2939..0000000
--- a/python/templates/includes/partials/download-link.html
+++ /dev/null
@@ -1,4 +0,0 @@
-{% capture url %}{{ include.arch }}/autobuilds/{{ site.data.downloads[include.arch][include.type][include.id].filename }}{% endcapture %}
-{% assign date = site.data.downloads[include.arch][include.type][include.id].date %}
-{% assign size = site.data.downloads[include.arch][include.type][include.id].size %}
-{% include partials/download-link-raw.html title=include.title tag=include.tag url=url urlprefix='http://distfiles.gentoo.org/releases/' date=date size=size %} \ No newline at end of file
diff --git a/python/templates/includes/partials/irc-channel.html b/python/templates/includes/partials/irc-channel.html
deleted file mode 100644
index b7e6dba..0000000
--- a/python/templates/includes/partials/irc-channel.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<tr>
- <th>
- <a href="irc://irc.gentoo.org/{{ channel.name }}"><tt>#{{ channel.name }}</tt></a>
- </th>
- <td>
- {{ channel.description }}
- </td>
-</tr> \ No newline at end of file
diff --git a/python/templates/includes/partials/mailinglist.html b/python/templates/includes/partials/mailinglist.html
deleted file mode 100644
index 39a9af1..0000000
--- a/python/templates/includes/partials/mailinglist.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<tr>
- <th>
- {{ list.name }}
- {% if list.moderated %}
- <span class="label label-warning pull-right" title="This list is moderated"><span class="fa fa-fw fa-lock"></span></span>
- {% endif %}
- </th>
- <td>
- {{ list.description }}
- {% if list.moderators %}
- <br><small>Moderators: {{ list.moderators | join:', '}}</small>
- {% endif %}
- </td>
- <td class="ml-actions hidden-xs">
- <div class="btn-group btn-group-xs" role="group" aria-label="Mailing list actions for {{ list.name }}@lists.gentoo.org">
- <a href="mailto:{{ list.name }}@lists.gentoo.org" title="Post to this list" class="btn btn-default"><span class="fa fa-fw fa-send"></span></a>
- <a href="mailto:{{ list.name }}+subscribe@lists.gentoo.org" title="Subscribe to this list" class="btn btn-default"><span class="fa fa-fw fa-plus-square"></span></a>
- <a href="http://archives.gentoo.org/{{ list.name }}/" title="Archives of this list" class="btn btn-default"><span class="fa fa-fw fa-archive"></span></a>
- </div>
- </td>
-</tr> \ No newline at end of file
diff --git a/python/templates/includes/partials/sponsor.html b/python/templates/includes/partials/sponsor.html
deleted file mode 100644
index 056d14e..0000000
--- a/python/templates/includes/partials/sponsor.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<div class="row sponsor">
- <div class="col-xs-12 col-md-3 sponsorlogo">
- {% if sponsor.img and sponsor.link %}
- <a href="{{ sponsor.link }}"><img src="/assets/img/sponsors/{{ sponsor.img }}" alt="{{ sponsor.name }}" /></a>
- {% elsif sponsor.img %}
- <img src="/assets/img/sponsors/{{ sponsor.img }}" alt="{{ sponsor.name }}" />
- {% endif %}
- </div>
- <div class="col-xs-12 col-md-9 sponsortext text-justify">
- <h3>{{ sponsor.name }}</h3>
- {{ sponsor.blurb | markdownify }}
- </div>
-</div>
-<hr /> \ No newline at end of file
diff --git a/python/templates/layout/base.html b/python/templates/layout/base.html
index 8f10f6e..bc31ee4 100644
--- a/python/templates/layout/base.html
+++ b/python/templates/layout/base.html
@@ -1,21 +1,20 @@
<!DOCTYPE html>
<html>
{% include "includes/layout/head.html" %}
- <body class="{{ page.body_class }}">
+ <body class="">
{% include "includes/layout/header.html" %}
<div class="container">
<div class="row">
- <div id="content" class="col-xs-12">
+ <div id="content" class="col-md-12">
{% block content %}{% endblock %}
+ {% include "includes/layout/sponsor.html" %}
</div>
</div>
</div>
{% include "includes/layout/footer.html" %}
- {% if page.extrajs %}{% for js in page.extrajs %}<script src="{{ STATIC_ROOT }}/js/{{ js }}"></script>{% endfor %}{% endif %}
- {% if page.inlinejs %}<script>{{ page.inlinejs }}</script>{% endif %}
<script type="text/javascript">
var _paq = _paq || [];
_paq.push(["disableCookies"]);
@@ -29,5 +28,7 @@
})();
</script>
<noscript><p><img src="//piwik.gentoo.org/piwik.php?idsite=7" style="border:0;" alt="" /></p></noscript>
+ <script src="https://assets.gentoo.org/tyrian/jquery.min.js"></script>
+ <script src="https://assets.gentoo.org/tyrian/bootstrap.min.js"></script>
</body>
</html>
diff --git a/python/templates/pages/build_req/index.html b/python/templates/pages/build_req/index.html
deleted file mode 100644
index 979921c..0000000
--- a/python/templates/pages/build_req/index.html
+++ /dev/null
@@ -1,16 +0,0 @@
-{% extends "layout/base.html" %}
-{% block content %}
-<div class="panel panel-default">
- <div class="panel-heading">
- <h3 class="panel-title">
- <span class="fa fa-fw fa-history"></span>
- <a href="/packages/added">New Build Requst On Packages</a>
- </h3>
- </div>
- <div class="table-responsive">
- <table class="table table-striped">
- {% include "includes/frontpage/new_build_req" %}
- </table>
- </div>
-</div>
-{% endblock %}
diff --git a/python/templates/pages/categories/index.html b/python/templates/pages/categories/index.html
deleted file mode 100644
index f9463e9..0000000
--- a/python/templates/pages/categories/index.html
+++ /dev/null
@@ -1,61 +0,0 @@
-{% extends "layout/base.html" %}
-{% block content %}
-<div class="container">
- <div class="row">
- <div class="col-xs-12">
- <ol class="breadcrumb">
- <li><a href="/home/">Home</a></li>
- <li class="active">Packages</li>
-</ol>
-
-<h1>Packages</h1>
-
-<div class="row">
- <div class="col-md-9">
- <div class="panel panel-default">
- <div class="panel-heading">
- <h3 class="panel-title">Browse Categories</h3>
- </div>
- <div class="panel-body">
- <ul class="kk-col-list kk-4col-list kk-category-listing">
- {% for C_list in CM_tmp %}
- <li class="kk-col-list-header"><span class="kk-group-header">{{ C_list.letter }}</span></li>
- {% for CM in C_list.CM_list %}
- <li><a title="{{ CM.Descriptions }}" data-toggle="tooltip" data-placement="right" href="/categories/packages/{{ CM.CategoryId }}/">{{CM.Category }}</a></li>
- {% endfor %}
- {% endfor %}
- </ul>
- </div>
- </div>
- </div>
- <div class="col-md-3">
- <div class="panel panel-default">
- <div class="panel-heading">
- <h3 class="panel-title">Update Feeds</h3>
- </div>
- <div class="list-group">
- <a href="/packages/added" class="list-group-item">
- <span class="fa fa-fw fa-history"></span>
- Added Packages
- </a>
- <a href="/packages/updated" class="list-group-item">
- <span class="fa fa-fw fa-asterisk"></span>
- Updated Packages
- </a>
- <a href="/packages/stable" class="list-group-item">
- <span class="fa fa-fw fa-check-circle-o"></span>
- Newly Stable Packages
- </a>
- <a href="/packages/keyworded" class="list-group-item">
- <span class="fa fa-fw fa-circle-o"></span>
- <span class="translation_missing" title="translation missing: en.keyworded_packages">Keyworded Packages</span>
- </a>
- </div>
- </div>
- </div>
-</div>
-
- </div>
- </div>
-</div>
-{% endblock %}
diff --git a/python/templates/pages/categories/packages/index.html b/python/templates/pages/categories/packages/index.html
deleted file mode 100644
index 0e5678d..0000000
--- a/python/templates/pages/categories/packages/index.html
+++ /dev/null
@@ -1,63 +0,0 @@
-{% extends "layout/base.html" %}
-{% block content %}
-<div class="container">
- <div class="row">
- <div class="col-xs-12">
- <ol class="breadcrumb">
- <li><a href="/home/">Home</a></li>
- <li><a href="/categories">Packages</a></li>
- <li class="active">{{ C.CategoryId.Category }}</li>
-</ol>
-
-<div class="row">
- <div class="col-md-4">
- <h1 class="stick-top">
- <span class="fa fa-fw fa-cubes"></span>
- {{ C.CategoryId.Category }}
- </h1>
- </div>
- <div class="col-md-8">
- <p class="lead" style="margin: 0;">
- {{ C.Descriptions }}
- </p>
- </div>
-</div>
-<hr>
-
-<div class="row">
- <div class="col-md-9">
- <!--<p>
- <input type="text" class="form-control form-control-xl" placeholder="Search packages in app-accessibility">
- </p>-->
-
- <div class="panel panel-default">
- <div class="panel-heading">
- <h3 class="panel-title">All packages</h3>
- </div>
- <table class="table">
-{% for PM in PM_tmp %}
- <tr>
- <th class="kk-nobreak-cell"><a href="/categories/packages/versions/{{ PM.PackageId.PackageId }}">{{ PM.PackageId.Package }}</a></th>
- <td>{{ PM.Descriptions }}</td>
- </tr>
-{% endfor %}
-
- </table>
- </div>
- </div>
- <div class="col-md-3">
- <div class="panel panel-default">
- <div class="panel-heading">
- <h3 class="panel-title">Statistics</h3>
- </div>
- <div class="panel-body">
- {{ PM_tmp|length }} Packages
- </div>
- </div>
- </div>
-</div>
-
- </div>
- </div>
-</div>
-{% endblock %}
diff --git a/python/templates/pages/categories/packages/versions/index.html b/python/templates/pages/categories/packages/versions/index.html
deleted file mode 100644
index 7300f07..0000000
--- a/python/templates/pages/categories/packages/versions/index.html
+++ /dev/null
@@ -1,233 +0,0 @@
-{% extends "layout/base.html" %}
-{% block content %}
-<div class="kk-header-container">
- <div class="container">
- <div class="row">
- <div class="col-xs-12">
- <ol class="breadcrumb">
- <li><a href="/">Home</a></li>
- <li><a href="/categories">Packages</a></li>
- <li><a href="/categories/packages/P.PackageId.PackageId">{{ P.PackageId.CategoryId.Category }}</a></li>
- <li class="active">{{ P.PackageId.Package }}</li>
- </ol>
-
- <div class="row">
- <div class="col-md-4">
- <h1 class="stick-top kk-package-title" id="package-title" data-atom="{{ P.PackageId.CategoryId.Category }}/{{ P.PackageId.Package }}" data-category="{{ P.PackageId.CategoryId.Category }}" data-name="{{ P.PackageId.Package }}">
- <small class="kk-package-cat">{{ P.PackageId.Package }}/</small>
- <div>
- <svg height="32" class="octicon octicon-package right left kk-package-icon" aria-label="Package icon" viewBox="0 0 16 16" version="1.1" width="32" role="img"><path d="M1 4.27v7.47c0 .45.3.84.75.97l6.5 1.73c.16.05.34.05.5 0l6.5-1.73c.45-.13.75-.52.75-.97V4.27c0-.45-.3-.84-.75-.97l-6.5-1.74a1.4 1.4 0 0 0-.5 0L1.75 3.3c-.45.13-.75.52-.75.97zm7 9.09l-6-1.59V5l6 1.61v6.75zM2 4l2.5-.67L11 5.06l-2.5.67L2 4zm13 7.77l-6 1.59V6.61l2-.55V8.5l2-.53V5.53L15 5v6.77zm-2-7.24L6.5 2.8l2-.53L15 4l-2 .53z"></path></svg>
- <div class="kk-package-name">{{ P.PackageId.Package }}</div>
- </div>
- </h1>
- </div>
- <div class="col-md-8">
- <p class="lead kk-package-maindesc">
- {{ P.Descriptions }}
- </p>
-
- <p class="kk-package-homepage">
- <a href="https://wiki.gnome.org/Accessibility" rel="nofollow">https://wiki.gnome.org/Accessibility</a>
- </p>
- </div>
- </div>
- </div>
- </div>
- </div>
-</div>
-
-
-<div class="container">
- <div class="row">
- <div class="col-xs-12">
-
-<div class="row">
- <div class="col-md-9">
- <div class="panel panel-default">
- <div class="panel-heading">
- <h3 class="panel-title">
- Available Versions
- </h3>
- </div>
- {% for E in EM_info %}
- <table class="table table-bordered kk-versions-table">
-<tr>
- <td>
- <strong>{{ E.Version }}</strong><span class="kk-slot"> :{{ E.Slot }}:</span>{{ P.PackageId.RepoId.Repo }}
- {% for R in E.ER_tmp %}
- <span class="label label-danger kk-restrict-label" titel="The following feature are restricted: {{ R.RestrictionId.Restriction}}">{{ R.RestrictionId.Restriction|first|upper }}</span>
- {% endfor %}
- <small class="text-muted pull-right">
- <span>{{ E.TimeStamp|date:"D d b Y G i" }}</span>
- </small>
- </td>
-</tr>
-<tr>
- <td>
- {% for K in E.EK_tmp %}
- {% if K.EbuildId.EbuildId == E.EbuildId and K.KeywordId.Keyword != '*' and '-' not in K.KeywordId.Keyword %}
- {% if K.Status == 'Stable' %}<span class="label kk-keyword-stable" title="{{ E.V }} is stable on {{ K.KeywordId.Keyword }}">{{ K.KeywordId.Keyword }}</span>{% endif %}
- {% if K.Status == 'Unstable' %}<span class="label kk-keyword-testing" title="{{ E.V }} is testing on {{ K.KeywordId.Keyword }}">~{{ K.KeywordId.Keyword }}</span>{% endif %}
- {% if K.Status == 'Negative' %}<span class="label kk-keyword-negative" title="{{ E.V }} is negative on {{ K.KeywordId.Keyword }}">-{{ K.KeywordId.Keyword }}{% endif %}
- {% endif %}
- {% endfor %}
- </td>
-</tr>
-<tr>
- <td>
- {% for U in E.EU_tmp %}
- {% if U.Status %}
- <span class="label label-info">{{ U.UseId.Flag }}</span>
- {% endif %}
- {% endfor %}
- </td>
-</tr>
-<tr>
- <td>
- {% for BL in E.BL_tmp %}
- {% for FI in E.fi_tmp %}
- {% if FI.BuildLogId == BL.BuildLogId %}
- {% if FI.Blo %}
- <span class="label label-info">Others</span>
- {% else %}
- {% if FI.qa %}
- <span class="label label-warning">Qa</span>
- {% else %}
- <span class="label label-success">Qa</span>
- {% endif %}
- {% if FI.repoman %}
- <span class="label label-warning">Repoman</span>
- {% else %}
- <span class="label label-success">Repoman</span>
- {% endif %}
-
- {% if FI.Blb %}
- <span class="label label-danger">Build</span>
- {% else %}
- <span class="label label-success">Build</span>
- {% endif %}
- {% endif %}
- {% endif %}
- {% endfor %}
- <a class="btn btn-default btn-xs" href="/new/logs/build/{{ BL.BuildLogId }}/">More info</a>
- {% endfor %}
- </td>
-</tr>
-</table>
-{% endfor %}
-</div>
-
-
-
-
- <div class="panel panel-default">
- <div class="panel-heading">
- <h3 class="panel-title">Package Metadata</h3>
- </div>
- <ul class="list-group kk-metadata-list">
- <li class="kk-metadata-item list-group-item">
- <div class="row">
- <div class="col-xs-12 col-md-3 kk-metadata-key">
- <span class="fa fa-fw fa-sliders"></span>
- USE flags
- </div>
- <div class="col-xs-12 col-md-9">
-
-
-
- </div>
- </div>
- </li>
- <li class="kk-metadata-item list-group-item">
- <div class="row">
- <div class="col-xs-12 col-md-3 kk-metadata-key">
- <span class="fa fa-fw fa-legal"></span>
- License
- </div>
- <div class="col-xs-12 col-md-9">
- <a href="https://gitweb.gentoo.org/repo/gentoo.git/plain/licenses/LGPL-2+">LGPL-2+</a>
- </div>
- </div>
- </li>
- <li class="kk-metadata-item list-group-item">
- <div class="row">
- <div class="col-xs-12 col-md-3 kk-metadata-key">
- <span class="fa fa-fw fa-user"></span>
- Maintainer(s)
- </div>
- <div class="col-xs-12 col-md-9">
- <a title="gnome@gentoo.org" href="mailto:gnome@gentoo.org">Gentoo GNOME Desktop</a>
- </div>
- </div>
- </li>
- </ul>
-</div>
-
- <div class="panel panel-default">
- <div class="panel-heading">
- <h3 class="panel-title">Changelog</h3>
- </div>
- <ul class="list-group" id="changelog-container">
- <li class="list-group-item kk-panel-content-sorry">
- <span class="fa fa-refresh fa-spin fa-3x"></span>
- <noscript>
- <br><br>
- Inline Changelog cannot be displayed.
- <br><br>
- <a href="https://gitweb.gentoo.org/repo/gentoo.git/log/{{ P.PackageId.CategoryId.Category }}/{{ P.PackageId.Package }}?showmsg=1" class="btn btn-default">
- <span class="fa fa-fw fa-history"></span>
- View Git Changelog
- </a>
- </noscript>
- </li>
- </ul>
-</div>
-
- </div>
- <div class="col-md-3">
- <div class="panel panel-default">
- <div class="panel-heading">
- <h3 class="panel-title">Resources</h3>
- </div>
- <div class="list-group">
- <a href="https://bugs.gentoo.org/buglist.cgi?quicksearch={{ P.PackageId.CategoryId.Category }}%2{{ P.PackageId.Package }}" class="list-group-item" target="_blank">
- <span class="fa fa-fw fa-bug"></span>
- Related bugs
- </a>
- <a href="https://wiki.gentoo.org/index.php?title=Special%3ASearch&fulltext=Search&search={{ P.PackageId.Package }}" class="list-group-item" target="_blank">
- <span class="fa fa-fw fa-book"></span>
- Documentation
- </a>
- <a href="https://forums.gentoo.org/search.php?search_terms=all&show_results=topics&search_keywords={{ P.PackageId.Package }}&mode=results" class="list-group-item" target="_blank">
- <span class="fa fa-fw fa-comments-o"></span>
- Forums posts
- </a>
- <a href="https://gitweb.gentoo.org/repo/gentoo.git/tree/{{ P.PackageId.CategoryId.Category }}/{{ P.PackageId.Package }}" class="list-group-item" target="_blank">
- <span class="fa fa-fw fa-code-fork"></span>
- Git repository browser
- </a>
- <a href="https://gitweb.gentoo.org/repo/gentoo.git/log/{{ P.PackageId.CategoryId.Category }}/{{ P.PackageId.Package }}?showmsg=1" class="list-group-item" target="_blank">
- <span class="fa fa-fw fa-history"></span>
- Git log
- </a>
- <a href="https://gitweb.gentoo.org/repo/gentoo.git/atom/{{ P.PackageId.CategoryId.Category }}/{{ P.PackageId.Package }}?h=master" class="list-group-item" target="_blank">
- <span class="fa fa-fw fa-rss"></span>
- Changes feed
- </a>
- <a href="http://www.portagefilelist.de/site/query/listPackageVersions/?category={{ P.PackageId.CategoryId.Category }}&package={{ P.PackageId.Package }}&do#result" class="list-group-item" target="_blank">
- <span class="fa fa-fw fa-files-o"></span>
- Installed files <small>(via PFL<span class="fa fa-fw fa-external-link-square"></span>)</small>
- </a>
- </div>
-</div>
-
- </div>
-</div>
-
-<script src="https://packages.gentoo.org/assets/packages/show-c78475ea4f81a974351958c07ed5c4892c04b77054506dec44f177cd8cb9271d.js"></script>
-
- </div>
- </div>
-</div>
-
-{% endblock %}
diff --git a/python/templates/pages/home/index.html b/python/templates/pages/home/index.html
deleted file mode 100644
index 2d91149..0000000
--- a/python/templates/pages/home/index.html
+++ /dev/null
@@ -1,70 +0,0 @@
-{% extends "layout/base.html" %}
-{% block content %}
-<div class="jumbotron">
- <h2 class="site-welcome stick-top">Welcome to the Home of <span class="text-primary">19,363</span> Gentoo Packages</h2>
- <form action="/packages/search" method="get">
- <div class="typeahead-container">
- <div class="typeahead-field">
- <span class="typeahead-query">
- <input id="q" name="q" type="search" autocomplete="off" placeholder="Find Packages" aria-label="Find Packages" autofocus>
- </span>
- <span class="typeahead-button">
- <button type="submit" title="Find" aria-label="Find">
- <span class="typeahead-search-icon"></span><span class="sr-only">Find</span>
- </button>
- </span>
- </div>
- </div>
- </form>
-</div>
-<div class="panel panel-default">
- <div class="panel-heading">
- <h3 class="panel-title">
- <span class="fa fa-fw fa-history"></span>
- <a href="/packages/added">Added Packages</a>
- </h3>
- </div>
- <div class="table-responsive">
- <table class="table table-striped">
- {% include "includes/frontpage/new_packages" %}
- </table>
- </div>
-</div>
-<div class="panel panel-default">
- <div class="panel-heading">
- <h3 class="panel-title">
- <span class="fa fa-fw fa-asterisk"></span>
- <a href="/packages/updated">Updated Packages</a>
- </h3>
- </div>
- <ul class="list-group">
- {% include "includes/frontpage/updated_packages" %}
- </ul>
-</div>
-<div class="panel panel-default">
- <div class="panel-heading">
- <h3 class="panel-title">
- <span class="fa fa-fw fa-history"></span>
- <a href="/packages/added">New Build Requst On Packages</a>
- </h3>
- </div>
- <div class="table-responsive">
- <table class="table table-striped">
- {% include "includes/frontpage/new_build_req" %}
- </table>
- </div>
-</div>
-<div class="panel panel-default">
- <div class="panel-heading">
- <h3 class="panel-title">
- <span class="fa fa-fw fa-history"></span>
- <a href="/packages/added">New Build Logs On Packages</a>
- </h3>
- </div>
- <div class="table-responsive">
- <table class="table table-striped">
- {% include "includes/frontpage/new_logs" %}
- </table>
- </div>
-</div>
-{% endblock %}
diff --git a/python/templates/pages/logs/all/build/index.html b/python/templates/pages/logs/all/build/index.html
deleted file mode 100644
index efac3b3..0000000
--- a/python/templates/pages/logs/all/build/index.html
+++ /dev/null
@@ -1,103 +0,0 @@
-{% extends "layout/base.html" %}
-{% block content %}
-<div class="panel panel-default">
- <div class="panel-heading">
- <h3 class="panel-title">
- <span class="fa fa-fw fa-history"></span>
- Build Logs On Packages
- </h3>
- {% if BL_tmp.has_other_pages %}
- <ul class="pagination">
- {% if BL_tmp.has_previous %}
- <li><a href="?page={{ BL_tmp.previous_page_number }}">&laquo;</a></li>
- {% else %}
- <li class="disabled"><span>&laquo;</span></li>
- {% endif %}
- {% for i in BL_tmp.paginator.page_range %}
- {% if BL_tmp.number == i %}
- <li class="active"><span>{{ i }} <span class="sr-only">(current)</span></span></li>
- {% else %}
- <li><a href="?page={{ i }}">{{ i }}</a></li>
- {% endif %}
- {% endfor %}
- {% if BL_tmp.has_next %}
- <li><a href="?page={{ BL_tmp.next_page_number }}">&raquo;</a></li>
- {% else %}
- <li class="disabled"><span>&raquo;</span></li>
- {% endif %}
- </ul>
-{% endif %}
- </div>
- <div class="table-responsive">
- <table class="table table-striped">
- {% for BL in BL_tmp %}
-<tr>
- <td>
- <a href="/logs/build/{{ BL.BuildLogId }}/">
- <span class="text-muted">{{ BL.C }}/</span>/<strong>{{ BL.P }}-{{ BL.V }}::{{ BL.R }}</strong>
- </a>
- </td>
- <td>
- <p title="{{ BL.SummeryText }}">{{ BL.SummeryText|truncatewords:5 }}</p>
- {% if BL.Fail %}
- {% if BL.FI.others %}
- <span class="label label-info">Others</span>
- {% else %}
- {% if BL.FI.qa %}
- <span class="label label-warning">
- {% else %}
- <span class="label label-success">
- {% endif %}
- Qa</span>
- {% if BL.FI.repoman %}
- <span class="label label-warning">
- {% else %}
- <span class="label label-success">
- {% endif %}
- Repoman</span>
- {% if BL.FI.TestRun %}
- {% if BL.FI.test %}
- <span class="label label-danger">
- {% else %}
- <span class="label label-success">
- {% endif %}
- Test</span>
- {% endif %}
- {% if BL.FI.build %}
- <span class="label label-danger">{{ BL.FI.builderror }}
- {% else %}
- <span class="label label-success">Build
- {% endif %}
- </span>
- {% endif %}
- {% else %}
- <span class="label label-success">Ok</span>
- {% endif %}
- </td>
-</tr>
-{% endfor %}
- </table>
- </div>
-</div>
-{% if BL_tmp.has_other_pages %}
- <ul class="pagination">
- {% if BL_tmp.has_previous %}
- <li><a href="?page={{ BL_tmp.previous_page_number }}">&laquo;</a></li>
- {% else %}
- <li class="disabled"><span>&laquo;</span></li>
- {% endif %}
- {% for i in BL_tmp.paginator.page_range %}
- {% if BL_tmp.number == i %}
- <li class="active"><span>{{ i }} <span class="sr-only">(current)</span></span></li>
- {% else %}
- <li><a href="?page={{ i }}">{{ i }}</a></li>
- {% endif %}
- {% endfor %}
- {% if BL_tmp.has_next %}
- <li><a href="?page={{ BL_tmp.next_page_number }}">&raquo;</a></li>
- {% else %}
- <li class="disabled"><span>&raquo;</span></li>
- {% endif %}
- </ul>
-{% endif %}
-{% endblock %}
diff --git a/python/templates/pages/logs/build/index.html b/python/templates/pages/logs/build/index.html
deleted file mode 100644
index 0bbc96b..0000000
--- a/python/templates/pages/logs/build/index.html
+++ /dev/null
@@ -1,114 +0,0 @@
-{% extends "layout/base.html" %}
-{% block content %}
-<div class="row">
- <h2>{{ BLI.C }}/{{ BLI.P }}-{{ BLI.V }}::{{ BLI.R }}
- {% if FI.others %}
- <span class="label label-info">Others</span>
- {% else %}
- {% if FI.qa %}
- <span class="label label-warning">
- {% else %}
- <span class="label label-success">
- {% endif %}
- Qa</span>
- {% if FI.repoman %}
- <span class="label label-warning">
- {% else %}
- <span class="label label-success">
- {% endif %}
- Repoman</span>
- {% if FI.TestRun %}
- {% if FI.test %}
- <span class="label label-danger">
- {% else %}
- <span class="label label-success">
- {% endif %}
- Test</span>
- {% endif %}
- {% if FI.build %}
- <span class="label label-danger">{{ FI.builderror }}
- {% else %}
- <span class="label label-success">Build
- {% endif %}
- </span>
- {% endif %}
- </h2>
- {% if BLI.BugId %}
- <span class="label label-info">
- <a href="https://bugs.gentoo.org/show_bug.cgi?id={{ BLI.BugId}}" target=_blank>Bug Gentoo {{ BLI.BugId }}</a>
- </span>
- {% endif %}
-</div>
-<div class="row-fluid">
- <div class=span3>
- <p class="lead">Host information</p>
- Host: {{ BLI.hostname }}<br />
- Config: {{BLI.config }}<br />
- Profile: {{BLI.profile }}<br/>
- Emerge options :
- </div>
- {% if BLI.use_enable %}
- <div class="span3 ">
- <p class="lead">Enabled useflags</p>
- {% for use in BLI.use_enable %}
- {{ use }}
- {% endfor %}
- </div>
- {% endif %}
- {% if BLI.use_disable %}
- <div class=span3>
- <p class="lead">Disabled useflags</p>
- {% for use in BLI.use_disable %}
- {{ use }}
- {% endfor %}
- </div>
-{% endif %}
- </div>
- <div class="row-fluid">
- <div class=span12>
- {% if BLI.Summery_text %}
- <p class="lead">Summery: </p>
- {{ BLI.Summery_text|linebreaks }}
- {% endif %}
- </div>
- </div>
- <div class="row-fluid">
- <div class=span12>
- {% if BLI.Repoman %}
- <p class="lead">Repoman Summery: </p>
- {{ BLI.Repoman|linebreaks }}
- {% endif %}
- </div>
- </div>
- <div class="row-fluid">
- <div class=span12>
- {% if BLI.QA %}
- <p class="lead">QA Summery: </p>
- {{ BLI.QA|linebreaks }}
- {% endif %}
- </div>
- </div>
- <div class="row-fluid">
- <div class=span12>
- <p class="lead">Emerge Info: </p>
- {{ BLI.emerge_info_text|linebreaks }}
- </div>
- </div>
- <div class="row-fluid">
- <div class="span12">
- {% if BLI.logname %}
- <br />
- Log file name:{{ BLI.logname }}<br />
- <a href="{{ STATIC_URL }}/logs/{{BLI.hostname}}/{{BLI.config}}/{{ BLI.logname }}">Raw log<a/><br />
- {% if user.is_authenticated %}
- {% if bugzillalogin %}
- <a href="/logs/build/submitlog/{{BLI.BuildLogId}}/">
- {% else %}
- <a href="/user/bugzillalogin/">
- {% endif %}
- Summit log to Gentoo's bugzilla</a>
- {% endif %}
- {% endif %}
- </div>
- </div>
-{% endblock %}
diff --git a/python/templates/pages/logs/build/submitbug/index.html b/python/templates/pages/logs/build/submitbug/index.html
deleted file mode 100644
index 4f1458f..0000000
--- a/python/templates/pages/logs/build/submitbug/index.html
+++ /dev/null
@@ -1,8 +0,0 @@
-{% extends "layout/base.html" %}
-{% block content %}
-<form action="/logs/build/submitlog/{{B.BuildLogId}}/" method="post">
-{% csrf_token %}
-{{ form.as_p }}
-<input type="submit" value="Submit" />
-</form>
-{% endblock %}
diff --git a/python/templates/pages/logs/index.html b/python/templates/pages/logs/index.html
deleted file mode 100644
index ff5f354..0000000
--- a/python/templates/pages/logs/index.html
+++ /dev/null
@@ -1,42 +0,0 @@
-{% extends "layout/base.html" %}
-{% block content %}
-<div class="panel panel-default">
- <div class="panel-heading">
- <h3 class="panel-title">
- <span class="fa fa-fw fa-history"></span>
- <a href="/packages/added">New Build Logs On Packages</a>
- </h3>
- </div>
- <div class="table-responsive">
- <table class="table table-striped">
- {% include "includes/frontpage/new_logs" %}
- </table>
- </div>
-</div>
-<div class="panel panel-default">
- <div class="panel-heading">
- <h3 class="panel-title">
- <span class="fa fa-fw fa-history"></span>
- <a href="/packages/added">New Repoman Logs On Packages</a>
- </h3>
- </div>
- <div class="table-responsive">
- <table class="table table-striped">
- {% include "includes/frontpage/new_repoman" %}
- </table>
- </div>
-</div>
-<div class="panel panel-default">
- <div class="panel-heading">
- <h3 class="panel-title">
- <span class="fa fa-fw fa-history"></span>
- <a href="/packages/added">New Qa Logs On Packages</a>
- </h3>
- </div>
- <div class="table-responsive">
- <table class="table table-striped">
- {% include "includes/frontpage/new_qa" %}
- </table>
- </div>
-</div>
-{% endblock %}
diff --git a/python/templates/pages/packages/category/index.html b/python/templates/pages/packages/category/index.html
new file mode 100644
index 0000000..2538f88
--- /dev/null
+++ b/python/templates/pages/packages/category/index.html
@@ -0,0 +1,33 @@
+{% extends "layout/base.html" %}
+{% block content %}
+<div class="row">
+ <h2>Packages in {{ C.Category }}</h2>
+ <div class="col-xs-12 col-md-5">
+ {% for PM in PM_tmp %}
+ <table class="table table-striped frontpage-table">
+ <tr>
+ <td class="frontpage-table-package-atom">
+ <a href="/package/{{ PM.PackageId }}/" title="{{ C.Category }}/{{ PM.Package }}">{{ C.Category }}/{{ PM.Package }}</a>
+ <p title="{{ PM.Commitlog }}">Commit Log</p>
+ </td>
+ <td>
+ <p title="{{ PM.Descriptions }}">{{ PM.Descriptions }}</p>
+ <p title="{% for P in PM.Ebuilds %}{{ PM.Package }}/{{ P }}{% endfor %}">Versions
+ {% if PM.Repoman %}
+ <a class="btn btn-warning btn-xs" href="/repoman/{{PM.PackageId }}/">Repoman</a>
+ {% endif %}
+ </p>
+ </td>
+ </tr>
+ </table>
+ {% if forloop.last %}
+ </div>
+ {% else %}
+ {% if forloop.counter|divisibleby:"2" %}
+ </div><div class="col-xs-12 col-md-5">
+ {% endif %}
+ {% endif %}
+ {% endfor %}
+</div>
+
+{% endblock %} \ No newline at end of file
diff --git a/python/templates/pages/categories/packages/versions/ebuild/index.html b/python/templates/pages/packages/ebuilds/ebuild/index.html
index 49ad3e5..e000a53 100644
--- a/python/templates/pages/categories/packages/versions/ebuild/index.html
+++ b/python/templates/pages/packages/ebuilds/ebuild/index.html
@@ -9,6 +9,13 @@
<td class="frontpage-table-package-atom">
<p" title="{{ E.PackageId.CategoryId.Category }}/{{ E.PackageId.Package }}-{{ E.EbuildId.Version }}::{{ E.PackageId.RepoId.Repo }}">{{ E.PackageId.Package }}-{{ E.Version }}::{{ E.PackageId.RepoId.Repo }}</p>
<a class="btn btn-default btn-xs" href="/buildpackage/{{ E.EbuildId.EbuildId }}/">Build</a>
+ {% for BL in BL_tmp %}
+ {% if BL.Fail %}
+ <a class="btn btn-danger btn-xs" href="/buildlog/{{ BL.BuildLogId }}/">Fail</a>
+ {% else %}
+ <a class="btn btn-success btn-xs" href="/buildlog/{{ BL.BuildLogId }}/">Success</a>
+ {% endif %}
+ {% endfor %}
</td>
<td>
{% for K in EK_tmp %}
@@ -36,40 +43,5 @@
{% endfor %}
</table>
</div>
- <div class="col-xs-12 col-md-9">
- <table class="table table-striped frontpage-table">
- {% for BL in BL_tmp %}
- <tr>
- <td class="frontpage-table-package-atom">
- {% for FI in fi_tmp %}
- {% if FI.BuildLogId == BL.BuildLogId %}
- {% if FI.Blo %}
- <span class="label label-info">Others</span>
- {% else %}
- {% if FI.qa %}
- <span class="label label-warning">Qa</span>
- {% else %}
- <span class="label label-success">Qa</span>
- {% endif %}
- {% if FI.repoman %}
- <span class="label label-warning">Repoman</span>
- {% else %}
- <span class="label label-success">Repoman</span>
- {% endif %}
-
- {% if FI.Blb %}
- <span class="label label-danger">Build</span>
- {% else %}
- <span class="label label-success">Build</span>
- {% endif %}
- {% endif %}
- {% endif %}
- {% endfor %}
- <a class="btn btn-default btn-xs" href="/new/logs/build/{{ BL.BuildLogId }}/">More info</a>
- </td>
- </tr>
- {% endfor %}
- </table>
- </div>
</div>
{% endblock %} \ No newline at end of file
diff --git a/python/templates/pages/packages/ebuilds/index.html b/python/templates/pages/packages/ebuilds/index.html
new file mode 100644
index 0000000..630b524
--- /dev/null
+++ b/python/templates/pages/packages/ebuilds/index.html
@@ -0,0 +1,30 @@
+{% extends "layout/base.html" %}
+{% block content %}
+<div class="row">
+ <div class="col-xs-12 col-md-9">
+ <h2>{{ P.PackageId.CategoryId.Category }}/{{ P.PackageId.Package }}</h2>
+ <p>Commit log</p>
+ <p>{{ P.Gitlog|linebreaksbr }}</p>
+ <table class="table table-striped frontpage-table">
+ {% for E in EM_tmp %}
+ <tr>
+ <td class="frontpage-table-package-atom">
+ <a href="/ebuild/{{ E.EbuildId.EbuildId }}/" title="{{ P.PackageId.CategoryId.Category }}/{{ P.PackageId.Package }}-{{ E.EbuildId.Version }}::{{ E.EbuildId.PackageId.RepoId.Repo }}">{{ P.PackageId.Package }}-{{ E.EbuildId.Version }}::{{ E.EbuildId.PackageId.RepoId.Repo }}</a></td>
+ <td>
+ {% for K in EK_tmp %}
+ {% if K.EbuildId.EbuildId == E.EbuildId.EbuildId and K.KeywordId.Keyword != '*' %}
+ {% if K.Status == 'Stable' %}<span class="label label-success">{{ K.KeywordId.Keyword }}</span>{% endif %}
+ {% if K.Status == 'Unstable' %}<span class="label label-warning">{{ K.KeywordId.Keyword }}</span>{% endif %}
+ {% if K.Status == 'Negative' %}{{ K.KeywordId.Keyword }}{% endif %}
+ {% endif %}
+ {% endfor %}
+ </td>
+ </tr>
+ {% endfor %}
+ </table>
+ </div>
+ {% if PR %}
+ <a class="btn btn-warning btn-xs" href="/repoman/{{P.PackageId.PackageId }}/">Repoman</a>
+ {% endif %}
+</div>
+{% endblock %} \ No newline at end of file
diff --git a/python/templates/pages/packages/index.html b/python/templates/pages/packages/index.html
new file mode 100644
index 0000000..7139c87
--- /dev/null
+++ b/python/templates/pages/packages/index.html
@@ -0,0 +1,28 @@
+{% extends "layout/base.html" %}
+{% block content %}
+<div class="row">
+<h2>Categories</h2>
+ <div class="col-xs-8 col-md-4">
+ {% for CM in CM_tmp %}
+ <table class="table table-striped frontpage-table">
+ <tr>
+ <td class="frontpage-table-package-atom">
+ <a href="/categories/{{ CM.CategoryId }}/" title="{{ CM.Category }}">{{CM.Category }}</a>
+ </td>
+ <td>
+ <p title="{{ CM.Descriptions }}">{{ CM.Descriptions }}</p>
+ <p title="{% for P in CM.Packages %}{{ CM.Category}}/{{ P }}{% endfor %}">Packages</p>
+ </td>
+ </tr>
+ </table>
+ {% if forloop.last %}
+ </div>
+ {% else %}
+ {% if forloop.counter|divisibleby:"2" %}
+ </div><div class="col-xs-8 col-md-4">
+ {% endif %}
+ {% endif %}
+ {% endfor %}
+</div>
+
+{% endblock %} \ No newline at end of file
diff --git a/python/templates/pages/projects/add/index.html b/python/templates/pages/projects/add/index.html
new file mode 100644
index 0000000..ec46b8d
--- /dev/null
+++ b/python/templates/pages/projects/add/index.html
@@ -0,0 +1,8 @@
+{% extends "layout/base.html" %}
+{% block content %}
+<form action="{{ Project.uuid }}" method="post">
+ {% csrf_token %}
+ {{ Form }}
+ <input type="submit" value="Submit">
+</form>
+{% endblock %}
diff --git a/python/templates/pages/projects/detail/index.html b/python/templates/pages/projects/detail/index.html
new file mode 100644
index 0000000..afee9d5
--- /dev/null
+++ b/python/templates/pages/projects/detail/index.html
@@ -0,0 +1,4 @@
+{% extends "layout/base.html" %}
+{% block content %}
+<p>Hej</p>
+{% endblock %}
diff --git a/python/templates/pages/projects/index.html b/python/templates/pages/projects/index.html
new file mode 100644
index 0000000..2edf849
--- /dev/null
+++ b/python/templates/pages/projects/index.html
@@ -0,0 +1,19 @@
+{% extends "layout/base.html" %}
+{% block content %}
+<div class="panel panel-default">
+ <div class="table-responsive">
+ <table class="table table-striped">
+ <table class="table table-striped frontpage-table">
+ {% for project in Projects %}
+ <tr>
+ <td class="frontpage-table-project-atom"><a href="{% url 'projects:detail' project.uuid %}" title="{{ project.title }}">{{ project.title }}</a></td>
+ <td><p title="{{ project.description }}">{{ project.description }}</p>
+ <td class="text-right">
+ </td></td>
+ </tr>
+ {% endfor %}
+</table>
+ </table>
+ </div>
+</div>
+{% endblock %}
diff --git a/python/templates/pages/projects/repos/index.html b/python/templates/pages/projects/repos/index.html
new file mode 100644
index 0000000..bc349da
--- /dev/null
+++ b/python/templates/pages/projects/repos/index.html
@@ -0,0 +1,31 @@
+{% extends "layout/base.html" %}
+{% block content %}
+<div class="panel panel-default">
+ <div class="table-responsive">
+ <table class="table table-striped">
+ <table class="table table-striped frontpage-table">
+ {% for project in Projects %}
+ <tr>
+ <td class="frontpage-table-project-atom"><a href="{% url 'projects:detail' project.uuid %}" title="{{ project.title }}">{{ project.title }}</a></td>
+ <td><p title="{{ project.description }}">{{ project.description }}</p>
+ <td class="text-right">
+ </td></td>
+ </tr>
+ {% endfor %}
+</table>
+ </table>
+<table class="table table-striped">
+ <table class="table table-striped frontpage-table">
+ {% for project in Projects %}
+ <tr>
+ <td class="frontpage-table-project-atom"><a href="{% url 'projects:detail' project.uuid %}" title="{{ project.title }}">{{ project.title }}</a></td>
+ <td><p title="{{ project.description }}">{{ project.description }}</p>
+ <td class="text-right">
+ </td></td>
+ </tr>
+ {% endfor %}
+</table>
+ </table>
+ </div>
+</div>
+{% endblock %}
diff --git a/python/templates/pages/www/index.html b/python/templates/pages/www/index.html
new file mode 100644
index 0000000..a8fdf61
--- /dev/null
+++ b/python/templates/pages/www/index.html
@@ -0,0 +1,49 @@
+{% extends "layout/base.html" %}
+{% block content %}
+{% include "includes/container/start" %}
+<div class="row">
+ <div class="col-xs-12 col-sm-8 col-md-9">
+ <p>
+ Welcome to Gentoo .
+ </p>
+ </div>
+ <div class="col-xs-12 col-sm-4 col-md-3 buttons">
+ <a href="/get-started/about/" class="btn btn-default btn-block">Learn more</a>
+ <a href="/get-started/" class="btn btn-primary btn-block"><i class="fa fa-fw fa-rocket"></i> Get started now</a>
+ </div>
+</div>
+{% include "includes/container/end" %}
+<section id="news">
+{% include "includes/frontpage/news" %}
+</section>
+
+<div class="news-more">
+ <a href="/news" class="btn btn-xs">All news items <span class="fa fa-fw fa-chevron-right"></span></a>
+<hr>
+</div>
+
+<div class="row">
+ <div class="col-xs-12 col-md-6">
+ <h2>New Packages <small>more at the <a href="/new_packages/">New Packages</a></small></h2>
+ {% include "includes/frontpage/new_packages" %}
+ </div>
+ <div class="col-xs-12 col-md-6">
+ <h2>New Logs <small>more at the <a href="/new_logs/">New Logs</a></small></h2>
+ {% include "includes/frontpage/new_logs" %}
+ </div>
+</div>
+
+<div class="row">
+ <div class="col-xs-12 col-md-6">
+ <h2>New Build Requests <small>more at the <a href="/new_build_req">New Build Requests</a></small></h2>
+ {% include "includes/frontpage/new_build_req" %}
+ </div>
+ <div class="col-xs-12 col-md-6">
+ <h2>New Repoman or QA's <small>on the <a href="/new/repomanqa/">New Repoman or QA's</a></small></h2>
+ {% include "includes/frontpage/new_repoman_qa" %}
+ </div>
+</div>
+
+<hr>
+
+{% endblock %}
diff --git a/python/templates/registration/password_change_form.html b/python/templates/registration/password_change_form.html
new file mode 100644
index 0000000..7761fe4
--- /dev/null
+++ b/python/templates/registration/password_change_form.html
@@ -0,0 +1,13 @@
+{% extends 'layout/base.html' %}
+
+{% block title %}Change you password{% endblock %}
+
+{% block content %}
+ <h1>Change you password</h1>
+ <p>Use the form below to change your password.</p>
+ <form action="." method="post">
+ {{ form.as_p }}
+ <p><input type="submit" value="Change"></p>
+ {% csrf_token %}
+ </form>
+{% endblock %}
diff --git a/python/www/__init__.py b/python/www/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/python/www/__init__.py
diff --git a/python/www/admin.py b/python/www/admin.py
new file mode 100644
index 0000000..168b0b2
--- /dev/null
+++ b/python/www/admin.py
@@ -0,0 +1,7 @@
+from django.contrib import admin
+
+from .models import SiteSettings, Menys, SubMenys
+
+admin.site.register(SiteSettings)
+admin.site.register(Menys)
+admin.site.register(SubMenys)
diff --git a/python/www/apps.py b/python/www/apps.py
new file mode 100644
index 0000000..872e206
--- /dev/null
+++ b/python/www/apps.py
@@ -0,0 +1,5 @@
+from django.apps import AppConfig
+
+
+class WwwConfig(AppConfig):
+ name = 'www'
diff --git a/python/www/migrations/0001_initial.py b/python/www/migrations/0001_initial.py
new file mode 100644
index 0000000..14da8b2
--- /dev/null
+++ b/python/www/migrations/0001_initial.py
@@ -0,0 +1,64 @@
+# Generated by Django 2.2.2 on 2019-07-12 22:17
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ initial = True
+
+ dependencies = [
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='Pages',
+ fields=[
+ ('PageId', models.IntegerField(db_column='page_id', primary_key=True, serialize=False)),
+ ('nav_title', models.CharField(max_length=200)),
+ ('title', models.CharField(max_length=200)),
+ ('description', models.CharField(max_length=200)),
+ ('nav1', models.CharField(max_length=100)),
+ ('nav1_show', models.BooleanField(default=False)),
+ ('nav1_weight', models.IntegerField(default=0)),
+ ('url', models.CharField(max_length=200)),
+ ('SubMenu', models.BooleanField(db_column='sub_menu', default=False)),
+ ],
+ options={
+ 'db_table': 'pages',
+ },
+ ),
+ migrations.CreateModel(
+ name='SiteSettings',
+ fields=[
+ ('SiteId', models.IntegerField(db_column='site_id', primary_key=True, serialize=False)),
+ ('site', models.CharField(max_length=20)),
+ ('title', models.CharField(max_length=50)),
+ ('email', models.CharField(max_length=50)),
+ ('description', models.CharField(max_length=100)),
+ ('url', models.CharField(max_length=50)),
+ ('contact', models.CharField(max_length=50)),
+ ],
+ options={
+ 'db_table': 'site_settings',
+ },
+ ),
+ migrations.CreateModel(
+ name='SubPages',
+ fields=[
+ ('SubPageId', models.IntegerField(db_column='sub_page_id', primary_key=True, serialize=False)),
+ ('nav_title', models.CharField(max_length=200)),
+ ('title', models.CharField(max_length=200)),
+ ('description', models.CharField(max_length=200)),
+ ('nav2', models.CharField(max_length=100)),
+ ('nav2_show', models.BooleanField(default=False)),
+ ('nav2_weight', models.IntegerField(default=0)),
+ ('url', models.CharField(max_length=200)),
+ ('PageId', models.ForeignKey(db_column='page_id', on_delete=django.db.models.deletion.CASCADE, to='www.Pages')),
+ ],
+ options={
+ 'db_table': 'sub_pages',
+ },
+ ),
+ ]
diff --git a/python/www/migrations/__init__.py b/python/www/migrations/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/python/www/migrations/__init__.py
diff --git a/python/www/models.py b/python/www/models.py
new file mode 100644
index 0000000..85dbc35
--- /dev/null
+++ b/python/www/models.py
@@ -0,0 +1,74 @@
+# Copyright 1998-2019 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+from django.db import models
+
+class SiteSettings(models.Model):
+ id = models.IntegerField(primary_key=True)
+ site = models.CharField(max_length=20)
+ title = models.CharField(max_length=50)
+ email = models.CharField(max_length=50)
+ description = models.CharField(max_length=100)
+ url = models.CharField(max_length=50)
+ contact = models.CharField(max_length=50)
+ class Meta:
+ db_table = 'site_settings'
+ def __str__(self):
+ return '%s %s %s %s %s %s %s' % (self.id, self.site, self.title, self.email, self.description, self.url, self.contact)
+
+class Menys(models.Model):
+ id = models.IntegerField(primary_key=True)
+ title = models.CharField(max_length=200)
+ description = models.CharField(max_length=200)
+ name = models.CharField(max_length=100)
+ view = models.BooleanField(default=False)
+ sort = models.IntegerField(default=0)
+ url = models.CharField(max_length=200)
+ arg = models.CharField(max_length=50, blank=True)
+ access = models.BooleanField(default=False)
+ sub = models.BooleanField(default=False)
+ class Meta:
+ db_table = 'menys'
+ def __str__(self):
+ return '%s %s %s %s %s %s %s %s %s %s' % (self.id, self.title, self.description, self.name, self.view, self.sort, self.url, self.arg, self.access, self.sub)
+
+class SubMenys(models.Model):
+ id = models.IntegerField(primary_key=True)
+ title = models.CharField(max_length=200)
+ description = models.CharField(max_length=200)
+ MenyId = models.ForeignKey(Menys, on_delete=models.CASCADE, db_column='meny_id')
+ name = models.CharField(max_length=100)
+ view = models.BooleanField(default=False)
+ sort = models.IntegerField(default=0)
+ url = models.CharField(max_length=200)
+ arg = models.CharField(max_length=50, blank=True)
+ access = models.BooleanField(default=False)
+ class Meta:
+ db_table = 'sub_menys'
+ def __str__(self):
+ return '%s %s %s %s %s %s %s %s %s %s' % (self.id, self.title, self.description, self.MenyId, self.name, self.view, self.sort, self.url, self.arg, self.access)
+
+class Posts(models.Model):
+ id = models.IntegerField(primary_key=True)
+ title = models.CharField(max_length=200)
+ url = models.CharField(max_length=200)
+ text = models.TextField()
+ created_at = models.DateTimeField(auto_now_add=True)
+ class Meta:
+ db_table='posts'
+ def __str__(self):
+ return '%s %s %s %s %s' % (self.id, self.title, self.url, self.text, self.created_at)
+
+class Sponsors(models.Model):
+ id = models.IntegerField(primary_key=True)
+ name = models.CharField(max_length=200)
+ img = models.CharField(max_length=200)
+ link = models.CharField(max_length=200)
+ title = models.CharField(max_length=200)
+ alt = models.CharField(max_length=200)
+ weight = models.IntegerField(default=0)
+ active = models.BooleanField(default=False)
+ class Meta:
+ db_table = 'sponsors'
+ def __str__(self):
+ return '%s %s %s %s %s %s %s' % (self.id, self.name, self.img, self.link, self.alt, self.weight, self.active)
diff --git a/python/www/router.py b/python/www/router.py
new file mode 100644
index 0000000..aab4cf9
--- /dev/null
+++ b/python/www/router.py
@@ -0,0 +1,31 @@
+# Copyright 1998-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+class GosbsRouter(object):
+ def db_for_read(self, model, **hints):
+ "Point all operations on zobcs models to 'zobcs'"
+ if model._meta.app_label == 'www':
+ return 'default'
+ return 'gosbs'
+
+ def db_for_write(self, model, **hints):
+ "Point all operations on zobcs models to 'zobcs'"
+ if model._meta.app_label == 'www':
+ return 'default'
+ return 'gosbs'
+
+ def allow_relation(self, obj1, obj2, **hints):
+ "Allow any relation if a both models in zobcs app"
+ if obj1._meta.app_label == 'www' and obj2._meta.app_label == 'www':
+ return True
+ # Allow if neither is zobcs app
+ elif 'www' not in [obj1._meta.app_label, obj2._meta.app_label]:
+ return True
+ return False
+
+ def allow_migrate(self, db, app_label, model_name=None, **hints):
+ if db == 'gosbs':
+ return app_label == 'gosbs'
+ elif app_label == 'gosbs':
+ return False
+ return True
diff --git a/python/www/tests.py b/python/www/tests.py
new file mode 100644
index 0000000..7ce503c
--- /dev/null
+++ b/python/www/tests.py
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/python/www/urls.py b/python/www/urls.py
new file mode 100644
index 0000000..88a9cac
--- /dev/null
+++ b/python/www/urls.py
@@ -0,0 +1,7 @@
+from django.urls import path
+
+from . import views
+
+urlpatterns = [
+ path('', views.index, name='index'),
+]
diff --git a/python/www/utils.py b/python/www/utils.py
new file mode 100644
index 0000000..6bc36f3
--- /dev/null
+++ b/python/www/utils.py
@@ -0,0 +1,34 @@
+# Copyright 1998-2019 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+from django.shortcuts import get_object_or_404
+from www.models import SiteSettings, Menys, SubMenys, Sponsors
+
+def default_siteinfo(request, menyrequest):
+ siteinfo = {}
+ siteinfo['site'] = get_object_or_404(SiteSettings)
+ activemeny = get_object_or_404(Menys, name = menyrequest)
+ menys = Menys.objects.all().order_by('sort')
+ #contact = get_object_or_404(SubPages, nav2 = 'contact')
+ for meny in menys:
+ if meny.title == 'Login' and request.user.is_authenticated:
+ meny.show = False
+ if meny.title == 'User' and request.user.is_authenticated:
+ meny.show = True
+ if meny.arg == '':
+ meny.arg = False
+ siteinfo['activemeny'] = activemeny
+ siteinfo['menys'] = menys
+ #siteinfo['contact'] = contact
+ siteinfo['sponsors'] = Sponsors.objects.all()
+ if activemeny.sub:
+ submenys = SubMenys.objects.filter(MenyId = activemeny.id).order_by('sort')
+ for submeny in submenys:
+ if submeny.arg == '':
+ submeny.arg = False
+ siteinfo['submenys'] = submenys
+ siteinfo['subactivemeny'] = False
+ else:
+ siteinfo['submenys'] = []
+ siteinfo['subactivemeny'] = False
+ return siteinfo
diff --git a/python/www/views.py b/python/www/views.py
new file mode 100644
index 0000000..9a1ace4
--- /dev/null
+++ b/python/www/views.py
@@ -0,0 +1,19 @@
+# Copyright 1998-2019 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+from django.http import HttpResponse
+from django.shortcuts import render
+from django.conf import settings
+
+from .utils import default_siteinfo
+from .models import Posts, Sponsors
+
+def index(request):
+ menyrequest = 'www'
+ siteinfo = default_siteinfo(request, menyrequest)
+ siteinfo['posts'] = Posts.objects.all()[:2]
+ siteinfo['class_include'] = 'hero-section emergehdr'
+ #siteinfo['EM'] = EbuildsMetadata.objects.filter(uuid__deleted = False).order_by('-uuid__created_at')[:10]
+ #siteinfo['BL'] = BuildLogs.objects.order_by('-created_at')[:10]
+ htmlrequest = 'pages/' + menyrequest + '/index.html'
+ return render(request, htmlrequest, siteinfo)