Author: patrys
Date: Mon Jun 16 16:55:40 2008
New Revision: 9805

Added:
   packages-ng/
   packages-ng/README
   packages-ng/__init__.py
   packages-ng/manage.py   (contents, props changed)
   packages-ng/packages/
   packages-ng/packages/__init__.py
   packages-ng/packages/models.py
   packages-ng/packages/templates/
   packages-ng/packages/templates/details.html
   packages-ng/packages/templates/group.html
   packages-ng/packages/templates/index.html
   packages-ng/packages/templates/provides.html
   packages-ng/packages/templates/search.html
   packages-ng/packages/templates/source.html
   packages-ng/packages/urls.py
   packages-ng/packages/views.py
   packages-ng/settings.py
   packages-ng/svn-commit.tmp
   packages-ng/urls.py
Log:
- new code for package.pld-linux.org


Added: packages-ng/README
==============================================================================
--- (empty file)
+++ packages-ng/README  Mon Jun 16 16:55:40 2008
@@ -0,0 +1,9 @@
+This is a Django application designed to mimick Debian's packages.debian.org.
+
+It works by loading primary.sqlite generated by createrepo.
+
+Before running, make sure you run createrepo -d and uncompress the resulting 
primary.sqlite.bz2 file.
+
+The app itself requires a trunk checkout of Django itself available in the 
python path. It was designed to run as a FastCGI server but you can test it 
locally by running ./manage runserver and pointing your browser to 
localhost:8000.
+
+Make sure settings.py has the correct path to the sqlite file.

Added: packages-ng/__init__.py
==============================================================================

Added: packages-ng/manage.py
==============================================================================
--- (empty file)
+++ packages-ng/manage.py       Mon Jun 16 16:55:40 2008
@@ -0,0 +1,11 @@
+#!/usr/bin/env python
+from django.core.management import execute_manager
+try:
+    import settings # Assumed to be in the same directory.
+except ImportError:
+    import sys
+    sys.stderr.write("Error: Can't find the file 'settings.py' in the 
directory containing %r. It appears you've customized things.\nYou'll have to 
run django-admin.py, passing it your settings module.\n(If the file settings.py 
does indeed exist, it's causing an ImportError somehow.)\n" % __file__)
+    sys.exit(1)
+
+if __name__ == "__main__":
+    execute_manager(settings)

Added: packages-ng/packages/__init__.py
==============================================================================

Added: packages-ng/packages/models.py
==============================================================================
--- (empty file)
+++ packages-ng/packages/models.py      Mon Jun 16 16:55:40 2008
@@ -0,0 +1,142 @@
+# This is an auto-generated Django model module.
+# You'll have to do the following manually to clean this up:
+#       * Rearrange models' order
+#       * Make sure each model has one field with primary_key=True
+# Feel free to rename the models, but don't rename db_table values or field 
names.
+#
+# Also note: You'll have to insert the output of 'django-admin.py sqlcustom 
[appname]'
+# into your database.
+
+from django.db import models
+
+def flags_format(self):
+       if self.flags == 'EQ':
+               return '='
+       elif self.flags == 'LT':
+               return '<'
+       elif self.flags == 'LE':
+               return '<='
+       elif self.flags == 'GT':
+               return '>'
+       elif self.flags == 'GE':
+               return '>='
+       return self.flags
+
+def version_format(self):
+       res = u''
+       if self.flags:
+               res += '%s ' % self.flags_format()
+               if self.epoch:
+                       res += '%s:' % self.epoch
+               res += self.version
+               if self.release:
+                       res += '-%s' % self.release
+       return res
+
+def header_format(self):
+       res = self.name + u' ' + self.version_format()
+       return res
+
+class Package(models.Model):
+       pkgkey = models.IntegerField(primary_key = True)
+       pkgid = models.TextField(blank=True)
+       name = models.TextField(blank=True)
+       arch = models.TextField(blank=True)
+       version = models.TextField(blank=True)
+       epoch = models.TextField(blank=True)
+       release = models.TextField(blank=True)
+       summary = models.TextField(blank=True)
+       description = models.TextField(blank=True)
+       url = models.TextField(blank=True)
+       time_file = models.IntegerField(null=True, blank=True)
+       time_build = models.IntegerField(null=True, blank=True)
+       rpm_license = models.TextField(blank=True)
+       rpm_vendor = models.TextField(blank=True)
+       rpm_group = models.TextField(blank=True)
+       rpm_buildhost = models.TextField(blank=True)
+       rpm_sourcerpm = models.TextField(blank=True)
+       rpm_header_start = models.IntegerField(null=True, blank=True)
+       rpm_header_end = models.IntegerField(null=True, blank=True)
+       rpm_packager = models.TextField(blank=True)
+       size_package = models.IntegerField(null=True, blank=True)
+       size_installed = models.IntegerField(null=True, blank=True)
+       size_archive = models.IntegerField(null=True, blank=True)
+       location_href = models.TextField(blank=True)
+       location_base = models.TextField(blank=True)
+       checksum_type = models.TextField(blank=True)
+       class Meta:
+               db_table = u'packages'
+               ordering = ['name', '-epoch', '-version', '-release', 'arch']
+       def __unicode__(self):
+               return u'%s-%s:%s-%s.%s' % (self.name, self.epoch, 
self.version, self.release, self.arch)
+
+class Conflict(models.Model):
+       name = models.CharField(blank=True, max_length = 255, primary_key = 
True)
+       flags = models.TextField(blank=True)
+       epoch = models.TextField(blank=True)
+       version = models.TextField(blank=True)
+       release = models.TextField(blank=True)
+       package = models.ForeignKey(Package, db_column = 'pkgkey')
+       class Meta:
+               db_table = u'conflicts'
+               ordering = ['name', ]
+               unique_together = ['name', 'flags', 'epoch', 'version', 
'release', 'package']
+       flags_format = flags_format
+       version_format = version_format
+       __unicode__ = header_format
+
+class File(models.Model):
+       name = models.TextField(blank=True)
+       type = models.TextField(blank=True)
+       package = models.ForeignKey(Package, db_column = 'pkgkey')
+       class Meta:
+               db_table = u'files'
+       def __unicode__(self):
+               return u'%s %s' % (self.name, self.type)
+
+class Obsolete(models.Model):
+       name = models.CharField(blank=True, max_length = 255, primary_key = 
True)
+       flags = models.TextField(blank=True)
+       epoch = models.TextField(blank=True)
+       version = models.TextField(blank=True)
+       release = models.TextField(blank=True)
+       package = models.ForeignKey(Package, db_column = 'pkgkey')
+       class Meta:
+               db_table = u'obsoletes'
+               ordering = ['name', ]
+               unique_together = ['name', 'flags', 'epoch', 'version', 
'release', 'package']
+       flags_format = flags_format
+       version_format = version_format
+       __unicode__ = header_format
+
+class Provide(models.Model):
+       name = models.CharField(blank=True, max_length = 255, primary_key = 
True)
+       flags = models.CharField(blank=True, max_length = 32)
+       epoch = models.CharField(blank=True, max_length = 255)
+       version = models.CharField(blank=True, max_length = 255)
+       release = models.CharField(blank=True, max_length = 255)
+       package = models.ForeignKey(Package, db_column = 'pkgkey')
+       class Meta:
+               db_table = u'provides'
+               ordering = ['name', ]
+               unique_together = ['name', 'flags', 'epoch', 'version', 
'release', 'package']
+       flags_format = flags_format
+       version_format = version_format
+       __unicode__ = header_format
+
+class Require(models.Model):
+       name = models.CharField(blank=True, max_length = 255, primary_key = 
True)
+       flags = models.TextField(blank=True)
+       epoch = models.TextField(blank=True)
+       version = models.TextField(blank=True)
+       release = models.TextField(blank=True)
+       package = models.ForeignKey(Package, db_column = 'pkgkey')
+       pre = models.BooleanField(null=True, blank=True)
+       class Meta:
+               db_table = u'requires'
+               ordering = ['name', ]
+               unique_together = ['name', 'flags', 'epoch', 'version', 
'release', 'package']
+       flags_format = flags_format
+       version_format = version_format
+       __unicode__ = header_format
+

Added: packages-ng/packages/templates/details.html
==============================================================================
--- (empty file)
+++ packages-ng/packages/templates/details.html Mon Jun 16 16:55:40 2008
@@ -0,0 +1,41 @@
+<h2>Package: {{ package.name }} ({{ package.epoch }}:{{ package.version }}-{{ 
package.release }}.{{ package.arch }})</h2>
+
+<h3>{{ package.summary }}</h3>
+<p>{{ package.description }}</p>
+
+<p>Source package: <a href="{% url packages.views.browse_source 
package.rpm_sourcerpm %}">{{ package.rpm_sourcerpm }}</a></p>
+
+<p>Group: <a href="{% url packages.views.browse_group package.rpm_group %}">{{ 
package.rpm_group }}</a></p>
+
+<h3>Provides:</h3>
+
+<ul>
+{% for provide in package.provide_set.all %}
+       <li>{{ provide.name }}{% if provide.version_format %} ({{ 
provide.version_format }}){% endif %}</li>
+{% endfor %}
+</ul>
+
+<h3>Dependencies:</h3>
+
+<ul>
+{% for require in package.require_set.all %}
+       <li><a href="{% url packages.views.browse_provides require.name %}">{{ 
require.name }}</a>{% if require.version_format %} ({{ require.version_format 
}}){% endif %}</li>
+{% endfor %}
+</ul>
+
+<h3>Conflicts:</h3>
+
+<ul>
+{% for conflict in package.conflict_set.all %}
+       <li>{{ conflict.name }}{% if conflict.version_format %} ({{ 
conflict.version_format }}){% endif %}</li>
+{% endfor %}
+</ul>
+
+<h3>Obsoletes:</h3>
+
+<ul>
+{% for obsolete in package.obsolete_set.all %}
+       <li>{{ obsolete.name }}{% if obsolete.version_format %} ({{ 
obsolete.version_format }}){% endif %}</li>
+{% endfor %}
+</ul>
+

Added: packages-ng/packages/templates/group.html
==============================================================================
--- (empty file)
+++ packages-ng/packages/templates/group.html   Mon Jun 16 16:55:40 2008
@@ -0,0 +1,8 @@
+<h2>Packages in {{ group }}:</h2>
+
+<dl>
+{% for package in packages %}
+       <dt><a href="{% url packages.views.details 
package.arch,package.name,package.epoch,package.version,package.release %}">{{ 
package }}</a></dt>
+       <dd>{{ package.summary }}</dd>
+{% endfor %}
+</dl>

Added: packages-ng/packages/templates/index.html
==============================================================================
--- (empty file)
+++ packages-ng/packages/templates/index.html   Mon Jun 16 16:55:40 2008
@@ -0,0 +1,15 @@
+<h2>Search for packages:</h2>
+
+<form action="{% url packages.views.search %}" method="get">
+       {{ form.as_p }}
+       <p><input type="submit" value="search" /></p>
+</form>
+
+<h2>Browse by group:</h2>
+
+<ul>
+{% for group in groups %}
+       <li><a href="{% url packages.views.browse_group group %}">{{ group 
}}</a></li>
+{% endfor %}
+</ul>
+

Added: packages-ng/packages/templates/provides.html
==============================================================================
--- (empty file)
+++ packages-ng/packages/templates/provides.html        Mon Jun 16 16:55:40 2008
@@ -0,0 +1,8 @@
+<h2>Packages providing {{ provide }}:</h2>
+
+<dl>
+{% for package in packages %}
+       <dt><a href="{% url packages.views.details 
package.arch,package.name,package.epoch,package.version,package.release %}">{{ 
package }}</a></dt>
+       <dd>{{ package.summary }}</dd>
+{% endfor %}
+</dl>

Added: packages-ng/packages/templates/search.html
==============================================================================
--- (empty file)
+++ packages-ng/packages/templates/search.html  Mon Jun 16 16:55:40 2008
@@ -0,0 +1,15 @@
+<h2>Search for packages:</h2>
+
+<form action="{% url packages.views.search %}" method="get">
+       {{ form.as_p }}
+       <p><input type="submit" value="search" /></p>
+</form>
+
+{% if packages %}
+<dl>
+{% for package in packages %}
+       <dt><a href="{% url packages.views.details 
package.arch,package.name,package.epoch,package.version,package.release %}">{{ 
package }}</a></dt>
+       <dd>{{ package.summary }}</dd>
+{% endfor %}
+</dl>
+{% endif %}

Added: packages-ng/packages/templates/source.html
==============================================================================
--- (empty file)
+++ packages-ng/packages/templates/source.html  Mon Jun 16 16:55:40 2008
@@ -0,0 +1,8 @@
+<h2>Packages built from {{ source }}:</h2>
+
+<dl>
+{% for package in packages %}
+       <dt><a href="{% url packages.views.details 
package.arch,package.name,package.epoch,package.version,package.release %}">{{ 
package }}</a></dt>
+       <dd>{{ package.summary }}</dd>
+{% endfor %}
+</dl>

Added: packages-ng/packages/urls.py
==============================================================================
--- (empty file)
+++ packages-ng/packages/urls.py        Mon Jun 16 16:55:40 2008
@@ -0,0 +1,10 @@
+from django.conf.urls.defaults import *
+
+urlpatterns = patterns('',
+       (r'^$', 'packages.views.index'),
+       (r'^by-group/(?P<group>.+)/$', 'packages.views.browse_group'),
+       (r'^by-provide/(?P<provide>.+)/$', 'packages.views.browse_provides'),
+       
(r'^by-package/(?P<arch>.+)/(?P<name>.+)/(?P<epoch>.+)/(?P<version>.+)/(?P<release>.+)/$',
 'packages.views.details'),
+       (r'^by-source/(?P<source>.+)/$', 'packages.views.browse_source'),
+       (r'^search/$', 'packages.views.search'),
+)

Added: packages-ng/packages/views.py
==============================================================================
--- (empty file)
+++ packages-ng/packages/views.py       Mon Jun 16 16:55:40 2008
@@ -0,0 +1,36 @@
+from django.shortcuts import get_list_or_404, get_object_or_404
+from django.views.generic.simple import direct_to_template
+import django.newforms as forms
+from models import Package
+
+class PkSearchForm(forms.Form):
+       query = forms.CharField(u'Query')
+
+def index(request):
+       form = PkSearchForm()
+       groups = [x['rpm_group'] for x in 
Package.objects.order_by('rpm_group').values('rpm_group').distinct()]
+       return direct_to_template(request, 'index.html', {'form': form, 
'groups': groups})
+
+def search(request):
+       form = PkSearchForm(request.GET)
+       if form.is_valid():
+               packages = Package.objects.filter(name__icontains = 
form.cleaned_data['query'])
+               return direct_to_template(request, 'search.html', {'form': 
form, 'packages': packages})
+       else:
+               return direct_to_template(request, 'search.html', {'form': 
form})
+
+def browse_group(request, group):
+       packages = get_list_or_404(Package.objects, rpm_group = group)
+       return direct_to_template(request, 'group.html', {'packages': packages, 
'group': group})
+
+def browse_provides(request, provide):
+       packages = get_list_or_404(Package.objects, provide__name = provide)
+       return direct_to_template(request, 'provides.html', {'packages': 
packages, 'provide': provide})
+
+def browse_source(request, source):
+       packages = get_list_or_404(Package.objects, rpm_sourcerpm = source)
+       return direct_to_template(request, 'source.html', {'packages': 
packages, 'source': source})
+
+def details(request, arch, name, epoch, version, release):
+       package = get_object_or_404(Package.objects, name = name, epoch = 
epoch, version = version, release = release, arch = arch)
+       return direct_to_template(request, 'details.html', {'package': package})

Added: packages-ng/settings.py
==============================================================================
--- (empty file)
+++ packages-ng/settings.py     Mon Jun 16 16:55:40 2008
@@ -0,0 +1,86 @@
+import os.path
+
+DEBUG = True
+TEMPLATE_DEBUG = DEBUG
+
+ADMINS = (
+     ('Patryk Zawadzki', '[EMAIL PROTECTED]'),
+)
+
+MANAGERS = ADMINS
+
+DATABASE_ENGINE = 'sqlite3'           # 'postgresql_psycopg2', 'postgresql', 
'mysql', 'sqlite3' or 'oracle'.
+DATABASE_NAME = 'primary.sqlite'             # Or path to database file if 
using sqlite3.
+DATABASE_USER = ''             # Not used with sqlite3.
+DATABASE_PASSWORD = ''         # Not used with sqlite3.
+DATABASE_HOST = ''             # Set to empty string for localhost. Not used 
with sqlite3.
+DATABASE_PORT = ''             # Set to empty string for default. Not used 
with sqlite3.
+
+# 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 avilable on all operating systems.
+# If running in a Windows environment this must be set to the same as your
+# system time zone.
+TIME_ZONE = 'Europe/Warsaw'
+
+# 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
+
+SITE_ROOT = os.path.abspath(os.path.split(__file__)[0])
+
+# Absolute path to the directory that holds media.
+# Example: "/home/media/media.lawrence.com/"
+MEDIA_ROOT = os.path.join(SITE_ROOT, 'webroot/')
+
+# URL that handles the media served from MEDIA_ROOT. Make sure to use a
+# trailing slash if there is a path component (optional in other cases).
+# Examples: "http://media.lawrence.com";, "http://example.com/media/";
+MEDIA_URL = '/media/'
+
+# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a
+# trailing slash.
+# Examples: "http://foo.com/media/";, "/media/".
+ADMIN_MEDIA_PREFIX = '/admin_media/'
+
+# Make this unique, and don't share it with anybody.
+SECRET_KEY = ''
+
+# List of callables that know how to import templates from various sources.
+TEMPLATE_LOADERS = (
+    'django.template.loaders.filesystem.load_template_source',
+    'django.template.loaders.app_directories.load_template_source',
+)
+
+MIDDLEWARE_CLASSES = (
+    'django.middleware.common.CommonMiddleware',
+    'django.contrib.sessions.middleware.SessionMiddleware',
+    'django.contrib.auth.middleware.AuthenticationMiddleware',
+    'django.middleware.doc.XViewMiddleware',
+)
+
+ROOT_URLCONF = 'urls'
+
+TEMPLATE_DIRS = (
+)
+
+INSTALLED_APPS = (
+    'django.contrib.auth',
+    'django.contrib.contenttypes',
+    'django.contrib.sessions',
+    'packages',
+)
+
+TEMPLATE_CONTEXT_PROCESSORS = (
+    "django.core.context_processors.auth",
+    "django.core.context_processors.debug",
+    "django.core.context_processors.i18n",
+    "django.core.context_processors.media",
+)
+

Added: packages-ng/svn-commit.tmp
==============================================================================
--- (empty file)
+++ packages-ng/svn-commit.tmp  Mon Jun 16 16:55:40 2008
@@ -0,0 +1,4 @@
+- initial import
+--Ta linia i następne zostaną zignorowane--
+
+A    .

Added: packages-ng/urls.py
==============================================================================
--- (empty file)
+++ packages-ng/urls.py Mon Jun 16 16:55:40 2008
@@ -0,0 +1,10 @@
+from django.conf.urls.defaults import *
+
+urlpatterns = patterns('',
+    # Example:
+    # (r'^pldpackages/', include('pldpackages.foo.urls')),
+
+    # Uncomment this for admin:
+#     (r'^admin/', include('django.contrib.admin.urls')),
+       (r'^', include('packages.urls')),
+)
_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to