summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNikolay Zamotaev <nzamotaev@luxoft.com>2019-03-25 17:54:52 +0300
committerNikolay Zamotaev <nzamotaev@luxoft.com>2019-03-26 13:35:34 +0000
commit962bbcbcdab445169952c0a98c911d08ec564529 (patch)
treef8a4431e64e62192f4f677c1267fc4c836d7e7ea
parent75256bfc7a74f781fc5dbf4d15a771c96466f1be (diff)
Django version update. As a prerequisite to category icon implementation
Task-number: AUTOSUITE-759 Change-Id: I2bf1f593c9f5cdeb6d77527945d35446ac23c8a8 Reviewed-by: Dominik Holland <dominik.holland@pelagicore.com>
-rw-r--r--appstore/settings.py22
-rw-r--r--appstore/urls.py33
-rw-r--r--requirements.txt2
-rw-r--r--store/admin.py10
-rw-r--r--store/api.py52
-rw-r--r--store/migrations/0001_initial.py31
-rw-r--r--store/utilities.py6
7 files changed, 88 insertions, 68 deletions
diff --git a/appstore/settings.py b/appstore/settings.py
index a405491..e3edabc 100644
--- a/appstore/settings.py
+++ b/appstore/settings.py
@@ -64,10 +64,28 @@ SECRET_KEY = '4%(o_1zuz@^kjcarw&!5ptvk&#9oa1-83*arn6jcm4idzy1#30'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
-TEMPLATE_DEBUG = True
-
ALLOWED_HOSTS = []
+TEMPLATES = [
+ {
+ 'BACKEND': 'django.template.backends.django.DjangoTemplates',
+ 'DIRS': [],
+ 'APP_DIRS': True,
+ 'OPTIONS': {
+ 'context_processors': (
+ "django.contrib.auth.context_processors.auth",
+ "django.template.context_processors.debug",
+ "django.template.context_processors.i18n",
+ "django.template.context_processors.media",
+ "django.template.context_processors.static",
+ "django.template.context_processors.tz",
+ "django.contrib.messages.context_processors.messages"
+ ),
+ 'debug': True
+ },
+ },
+]
+
# Application definition
diff --git a/appstore/urls.py b/appstore/urls.py
index 4d0467f..7c99a6a 100644
--- a/appstore/urls.py
+++ b/appstore/urls.py
@@ -30,32 +30,33 @@
##
#############################################################################
-from django.conf.urls import patterns, include, url
+from django.conf.urls import include, url
from django.contrib import admin
+from store import api as store_api
import settings
-base_urlpatterns = patterns('',
+base_urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
- url(r'^hello$', 'store.api.hello'),
- url(r'^login$', 'store.api.login'),
- url(r'^logout$', 'store.api.logout'),
- url(r'^app/list$', 'store.api.appList'),
- url(r'^app/icon', 'store.api.appIcon'),
- url(r'^app/description', 'store.api.appDescription'),
- url(r'^app/purchase', 'store.api.appPurchase'),
- url(r'^app/download/(.*)$', 'store.api.appDownload'),
- url(r'^category/list$', 'store.api.categoryList'),
- url(r'^category/icon$', 'store.api.categoryIcon'),
- url(r'^upload$', 'store.api.upload'),
-)
+ url(r'^hello$', store_api.hello),
+ url(r'^login$', store_api.login),
+ url(r'^logout$', store_api.logout),
+ url(r'^app/list$', store_api.appList),
+ url(r'^app/icon', store_api.appIcon),
+ url(r'^app/description', store_api.appDescription),
+ url(r'^app/purchase', store_api.appPurchase),
+ url(r'^app/download/(.*)$', store_api.appDownload),
+ url(r'^category/list$', store_api.categoryList),
+ url(r'^category/icon$', store_api.categoryIcon),
+ url(r'^upload$', store_api.upload),
+]
prefix = '^'
if settings.URL_PREFIX !='':
prefix = prefix + settings.URL_PREFIX + '/'
-urlpatterns = patterns('',
+urlpatterns = [
url(prefix, include(base_urlpatterns)),
-)
+]
diff --git a/requirements.txt b/requirements.txt
index d1eb087..79be93a 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,6 +1,6 @@
pkg-resources==0.0.0
PyYAML
-django==1.7.9
+django==1.11
django-common
pyOpenSSL
M2Crypto
diff --git a/store/admin.py b/store/admin.py
index eff2550..f2adb23 100644
--- a/store/admin.py
+++ b/store/admin.py
@@ -34,7 +34,7 @@ import os
from django import forms
from django.conf import settings
-from django.conf.urls import patterns
+from django.conf.urls import include, url
from django.contrib import admin
from django.core.exceptions import PermissionDenied
from django.shortcuts import redirect, get_object_or_404
@@ -87,10 +87,10 @@ class CategoryAdmin(admin.ModelAdmin):
def get_urls(self):
admin_view = self.admin_site.admin_view
- urls = patterns('',
- (r'^(?P<item_pk>\d+)/move_up/$', admin_view(self.move_up)),
- (r'^(?P<item_pk>\d+)/move_down/$', admin_view(self.move_down)),
- )
+ urls = [
+ url(r'^(?P<item_pk>\d+)/move_up/$', admin_view(self.move_up)),
+ url(r'^(?P<item_pk>\d+)/move_down/$', admin_view(self.move_down)),
+ ]
return urls + super(CategoryAdmin, self).get_urls()
def move_up(self, request, item_pk):
diff --git a/store/api.py b/store/api.py
index 88ceef4..63c3121 100644
--- a/store/api.py
+++ b/store/api.py
@@ -37,13 +37,13 @@ from django.conf import settings
from django.db.models import Q, Count
from django.http import HttpResponse, HttpResponseForbidden, Http404, JsonResponse
from django.contrib import auth
-from django.template import Context, loader
from django.views.decorators.csrf import csrf_exempt
from authdecorators import logged_in_or_basicauth, is_staff_member
from models import App, Category, Vendor, savePackageFile
from utilities import parsePackageMetadata, parseAndValidatePackageMetadata, addSignatureToPackage
from utilities import packagePath, iconPath, downloadPath
+from utilities import getRequestDictionary
from osandarch import normalizeArch
from tags import SoftwareTagList
@@ -53,20 +53,20 @@ def hello(request):
if settings.APPSTORE_MAINTENANCE:
status = 'maintenance'
- elif request.REQUEST.get("platform", "") != str(settings.APPSTORE_PLATFORM_ID):
+ elif getRequestDictionary(request).get("platform", "") != str(settings.APPSTORE_PLATFORM_ID):
status = 'incompatible-platform'
- elif request.REQUEST.get("version", "") != str(settings.APPSTORE_PLATFORM_VERSION):
+ elif getRequestDictionary(request).get("version", "") != str(settings.APPSTORE_PLATFORM_VERSION):
status = 'incompatible-version'
for j in ("require_tag", "conflicts_tag",):
- if j in request.REQUEST: #Tags are coma-separated,
+ if j in getRequestDictionary(request): #Tags are coma-separated,
versionmap = SoftwareTagList()
- if not versionmap.parse(request.REQUEST[j]):
+ if not versionmap.parse(getRequestDictionary(request)[j]):
status = 'malformed-tag'
break
request.session[j] = str(versionmap)
- if 'architecture' in request.REQUEST:
- request.session['architecture'] = normalizeArch(request.REQUEST['architecture'])
+ if 'architecture' in getRequestDictionary(request):
+ request.session['architecture'] = normalizeArch(getRequestDictionary(request)['architecture'])
else:
request.session['architecture'] = ''
return JsonResponse({'status': status})
@@ -74,11 +74,10 @@ def hello(request):
def login(request):
status = 'ok'
-
try:
try:
- username = request.REQUEST["username"]
- password = request.REQUEST["password"]
+ username = getRequestDictionary(request)["username"]
+ password = getRequestDictionary(request)["password"]
except KeyError:
raise Exception('missing-credentials')
@@ -114,19 +113,19 @@ def upload(request):
status = 'ok'
try:
try:
- description = request.REQUEST["description"]
+ description = getRequestDictionary(request)["description"]
except:
raise Exception('no description')
try:
- shortdescription = request.REQUEST["short-description"]
+ shortdescription = getRequestDictionary(request)["short-description"]
except:
raise Exception('no short description')
try:
- category_name = request.REQUEST["category"]
+ category_name = getRequestDictionary(request)["category"]
except:
raise Exception('no category')
try:
- vendor_name = request.REQUEST["vendor"]
+ vendor_name = getRequestDictionary(request)["vendor"]
except:
raise Exception('no vendor')
@@ -159,10 +158,10 @@ def upload(request):
def appList(request):
apps = App.objects.all()
- if 'filter' in request.REQUEST:
- apps = apps.filter(name__contains = request.REQUEST['filter'])
- if 'category_id' in request.REQUEST:
- catId = request.REQUEST['category_id']
+ if 'filter' in getRequestDictionary(request):
+ apps = apps.filter(name__contains = getRequestDictionary(request)['filter'])
+ if 'category_id' in getRequestDictionary(request):
+ catId = getRequestDictionary(request)['category_id']
if catId != -1: # All metacategory
apps = apps.filter(category__exact = catId)
@@ -223,27 +222,29 @@ def appDescription(request):
archlist = ['All', ]
if 'architecture' in request.session:
archlist.append(request.session['architecture'])
+ appId = getRequestDictionary(request)['id']
try:
- app = App.objects.get(appid__exact = request.REQUEST['id'], architecture__in = archlist).order_by('architecture')
+ app = App.objects.get(appid__exact = appId, architecture__in = archlist).order_by('architecture')
app = app.last()
return HttpResponse(app.description)
except:
- raise Http404('no such application: %s' % request.REQUEST['id'])
+ raise Http404('no such application: %s' % appId)
def appIcon(request):
archlist = ['All', ]
if 'architecture' in request.session:
archlist.append(request.session['architecture'])
+ appId = getRequestDictionary(request)['id']
try:
- app = App.objects.filter(appid__exact = request.REQUEST['id'], architecture__in = archlist).order_by('architecture')
+ app = App.objects.filter(appid__exact = appId, architecture__in = archlist).order_by('architecture')
app = app.last()
with open(iconPath(app.appid,app.architecture), 'rb') as iconPng:
response = HttpResponse(content_type = 'image/png')
response.write(iconPng.read())
return response
except:
- raise Http404('no such application: %s' % request.REQUEST['id'])
+ raise Http404('no such application: %s' % appId)
def appPurchase(request):
@@ -253,14 +254,14 @@ def appPurchase(request):
if 'architecture' in request.session:
archlist.append(request.session['architecture'])
try:
- deviceId = str(request.REQUEST.get("device_id", ""))
+ deviceId = str(getRequestDictionary(request).get("device_id", ""))
if settings.APPSTORE_BIND_TO_DEVICE_ID:
if not deviceId:
return JsonResponse({'status': 'failed', 'error': 'device_id required'})
else:
deviceId = ''
- app = App.objects.filter(appid__exact = request.REQUEST['id'], architecture__in=archlist).order_by('architecture')
+ app = App.objects.filter(appid__exact = getRequestDictionary(request)['id'], architecture__in=archlist).order_by('architecture')
app = app.last()
fromFilePath = packagePath(app.appid, app.architecture)
@@ -314,10 +315,11 @@ def categoryList(request):
def categoryIcon(request):
response = HttpResponse(content_type = 'image/png')
+ categoryId = getRequestDictionary(request)['id']
# there are no category icons (yet), so we just return the icon of the first app in this category
try:
- app = App.objects.filter(category__exact = request.REQUEST['id']).order_by('-dateModified')[0] #FIXME - the category icon is unimplemented
+ app = App.objects.filter(category__exact = categoryId).order_by('-dateModified')[0] #FIXME - the category icon is unimplemented
with open(iconPath(app.appid,app.architecture), 'rb') as iconPng:
response.write(iconPng.read())
except:
diff --git a/store/migrations/0001_initial.py b/store/migrations/0001_initial.py
index 51b0677..bde513e 100644
--- a/store/migrations/0001_initial.py
+++ b/store/migrations/0001_initial.py
@@ -31,24 +31,28 @@
##
#############################################################################
+# Generated by Django 1.11 on 2019-03-25 14:51
from __future__ import unicode_literals
-from django.db import models, migrations
from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
import store.models
class Migration(migrations.Migration):
+ initial = True
+
dependencies = [
- ('auth', '0001_initial'),
+ ('auth', '0008_alter_user_username_max_length'),
]
operations = [
migrations.CreateModel(
name='App',
fields=[
- ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('appid', models.CharField(max_length=200)),
('name', models.CharField(max_length=200)),
('file', models.FileField(storage=store.models.OverwriteStorage(), upload_to=store.models.content_file_name)),
@@ -60,43 +64,32 @@ class Migration(migrations.Migration):
('architecture', models.CharField(default=b'All', max_length=20)),
('version', models.CharField(default=b'0.0.0', max_length=20)),
],
- options={
- },
- bases=(models.Model,),
),
migrations.CreateModel(
name='Category',
fields=[
- ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=200)),
- ('rank', models.SmallIntegerField(unique=True, db_index=True)),
+ ('rank', models.SmallIntegerField(db_index=True, unique=True)),
],
- options={
- },
- bases=(models.Model,),
),
migrations.CreateModel(
name='Vendor',
fields=[
- ('user', models.ForeignKey(primary_key=True, serialize=False, to=settings.AUTH_USER_MODEL)),
+ ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, to=settings.AUTH_USER_MODEL)),
('name', models.CharField(max_length=200)),
('certificate', models.TextField(max_length=8000)),
],
- options={
- },
- bases=(models.Model,),
),
migrations.AddField(
model_name='app',
name='category',
- field=models.ForeignKey(to='store.Category'),
- preserve_default=True,
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='store.Category'),
),
migrations.AddField(
model_name='app',
name='vendor',
- field=models.ForeignKey(to='store.Vendor'),
- preserve_default=True,
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='store.Vendor'),
),
migrations.AlterUniqueTogether(
name='app',
diff --git a/store/utilities.py b/store/utilities.py
index 42f78f7..8a72661 100644
--- a/store/utilities.py
+++ b/store/utilities.py
@@ -57,6 +57,12 @@ def makeTagList(pkgdata):
taglist.append(SoftwareTag(i))
return str(taglist)
+def getRequestDictionary(request):
+ if request.method == "POST":
+ return request.POST
+ else:
+ return request.GET
+
def packagePath(appId = None, architecture = None):
path = settings.MEDIA_ROOT + 'packages/'
if (appId is not None) and (architecture is not None):