update django

This commit is contained in:
j 2024-09-18 14:24:01 +01:00
parent 5ad5fc0798
commit 9a731560a6
12 changed files with 102 additions and 60 deletions

View file

@ -4,15 +4,15 @@ django based api server
## setup ## setup
apt-get install virtualenv git ipython3 apt-get install git ipython3 python3-venv
apt-get install python3-pil python3-psycopg2 \ apt-get install python3-pil python3-psycopg2 \
python3-lxml python3-requests python3-six python3-lxml python3-requests python3-six python3-anyjson
git clone https://git.0x2620.org/oxdata.git git clone https://git.0x2620.org/oxdata.git
cd oxdata cd oxdata
virtualenv -p /usr/bin/python3 --system-site-packages . python3 -m venv --system-site-packages venv
./bin/pip install -r requirements.txt ./venv/bin/pip install -r requirements.txt
Install rabbitmq and carrot: Install rabbitmq and carrot:
@ -26,4 +26,3 @@ django based api server
## deploy: ## deploy:
adduser --disabled-password --disabled-login --home /srv/oxdata/ oxdata adduser --disabled-password --disabled-login --home /srv/oxdata/ oxdata

View file

@ -99,6 +99,6 @@ class Cover(models.Model):
created = models.DateTimeField(auto_now_add=True) created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True) modified = models.DateTimeField(auto_now=True)
isbn = models.ForeignKey(MovieId, related_name='cover') isbn = models.ForeignKey(MovieId, related_name='cover', on_delete=models.CASCADE)
cover = models.ImageField(max_length=255, upload_to=cover_image_path) cover = models.ImageField(max_length=255, upload_to=cover_image_path)

View file

@ -1,9 +1,8 @@
from __future__ import division, print_function, absolute_import from django.urls import path, re_path
from django.conf.urls import url
from . import views from . import views
urlpatterns = [ urlpatterns = [
url(r'^$', views.cover), re_path(r'^$', views.cover),
] ]

View file

@ -1,10 +1,20 @@
from __future__ import division, print_function, absolute_import from django.urls import path, re_path
from django.conf.urls import url
from . import views from . import views
urlpatterns = [ urls = [
url(r'^$', views.ids), [
url(r'^urls$', views.urls), path(r'', views.ids),
path(r'urls', views.urls),
],
'lookup',
'lookup'
]
urls2 = [
[
path(r'', views.ids),
path(r'urls', views.urls),
],
'lookup2',
'lookup2'
] ]

View file

@ -1,19 +1,46 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import os import os
import sys import sys
import argparse
def activate_venv(base):
if os.path.exists(base):
old_os_path = os.environ.get("PATH", "")
os.environ["PATH"] = os.path.join(base, "bin") + os.pathsep + old_os_path
version = "%s.%s" % (sys.version_info.major, sys.version_info.minor)
site_packages = os.path.join(base, "lib", "python%s" % version, "site-packages")
prev_sys_path = list(sys.path)
import site
site.addsitedir(site_packages)
sys.real_prefix = sys.prefix
sys.prefix = base
# Move the added items to the front of the path:
new_sys_path = []
for item in list(sys.path):
if item not in prev_sys_path:
new_sys_path.append(item)
sys.path.remove(item)
sys.path[:0] = new_sys_path
def main():
"""Run administrative tasks."""
root_dir = os.path.normpath(os.path.abspath(os.path.dirname(__file__))) root_dir = os.path.normpath(os.path.abspath(os.path.dirname(__file__)))
os.chdir(root_dir) activate_venv(os.path.normpath(os.path.join(root_dir, "..", "venv")))
# using virtualenv's activate_this.py to reorder sys.path os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
activate_this = os.path.join(root_dir, '..', 'bin', 'activate_this.py') try:
with open(activate_this) as f: from django.core.management import execute_from_command_line
code = compile(f.read(), activate_this, 'exec') except ImportError as exc:
exec(code, dict(__file__=activate_this)) raise ImportError(
# execfile(activate_this, dict(__file__=activate_this)) "Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == "__main__": if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings") main()
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)

View file

@ -13,7 +13,6 @@ import json
from django.db import models from django.db import models
from django.conf import settings from django.conf import settings
import ox import ox
from oxdjango.fields import DictField
from lookup.models import get_movie_id from lookup.models import get_movie_id
from poster.models import getPosters from poster.models import getPosters
@ -102,7 +101,7 @@ class Imdb(models.Model):
seriesTitle = models.CharField(max_length=1000, blank=True, default='') seriesTitle = models.CharField(max_length=1000, blank=True, default='')
invalid = models.BooleanField(default=False) invalid = models.BooleanField(default=False)
patch = DictField(default=None, blank=True, null=True) patch = models.JSONField(default=None, blank=True, null=True)
def __str__(self): def __str__(self):
return "[%s] %s%s" % (self.imdb, self.title, self.year and ' (%s)' % self.year or '') return "[%s] %s%s" % (self.imdb, self.title, self.year and ' (%s)' % self.year or '')
@ -185,6 +184,7 @@ class Imdb(models.Model):
if 'votes' in data: if 'votes' in data:
max_votes = ox.web.imdb.max_votes() max_votes = ox.web.imdb.max_votes()
if max_votes:
data['votes'] = 100 * float(data['votes']) / max_votes data['votes'] = 100 * float(data['votes']) / max_votes
else: else:
data['votes'] = 0 data['votes'] = 0
@ -299,7 +299,7 @@ class Match(models.Model):
] ]
key = models.CharField(max_length=28, db_index=True) key = models.CharField(max_length=28, db_index=True)
item = models.ForeignKey(Imdb, related_name='matches') item = models.ForeignKey(Imdb, related_name='matches', on_delete=models.CASCADE)
def __str__(self): def __str__(self):
return '%s(%s)' % (self.hexdigest(), self.item.imdb) return '%s(%s)' % (self.hexdigest(), self.item.imdb)

View file

@ -1,13 +1,17 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import from __future__ import absolute_import
from django.conf.urls import url from django.urls import path, re_path
from . import views from . import views
from . import actions from . import actions
actions.autodiscover() actions.autodiscover()
urlpatterns = [ urls = [
url(r'^$', views.api), [
path(r'', views.api),
],
'api',
'api'
] ]

View file

@ -69,7 +69,7 @@ class PosterCache(models.Model):
created = models.DateTimeField(auto_now_add=True) created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True) modified = models.DateTimeField(auto_now=True)
movie_id = models.ForeignKey(MovieId, related_name='postercache') movie_id = models.ForeignKey(MovieId, related_name='postercache', on_delete=models.CASCADE)
url = models.CharField(max_length=1024) url = models.CharField(max_length=1024)
site = models.CharField(max_length=255) site = models.CharField(max_length=255)
site_id = models.CharField(max_length=1024) site_id = models.CharField(max_length=1024)
@ -144,10 +144,12 @@ def get_poster_urls(m):
#for poster in ox.web.movieposterdb.get_data(m.imdb_id)['posters']: #for poster in ox.web.movieposterdb.get_data(m.imdb_id)['posters']:
# addPoster(poster, 'movieposterdb.com', m.imdb_id) # addPoster(poster, 'movieposterdb.com', m.imdb_id)
'''
poster = ox.web.piratecinema.get_poster_url(m.imdb_id) poster = ox.web.piratecinema.get_poster_url(m.imdb_id)
if poster: if poster:
m.postercache.filter(url__contains='piratecinema.org', failed=True).delete() m.postercache.filter(url__contains='piratecinema.org', failed=True).delete()
addPoster(poster, 'piratecinema.org', m.imdb_id) addPoster(poster, 'piratecinema.org', m.imdb_id)
'''
if m.criterion_id: if m.criterion_id:
#if settings.DEBUG: #if settings.DEBUG:

View file

@ -1,10 +1,12 @@
from __future__ import division, print_function, absolute_import from django.urls import path, re_path
from django.conf.urls import url
from . import views from . import views
urlpatterns = [ urls = [
url(r'^$', views.poster), [
path(r'', views.poster),
],
'poster',
'poster'
] ]

View file

@ -2,8 +2,6 @@
# Django settings for oxdata project. # Django settings for oxdata project.
import os import os
from os.path import join, normpath, dirname from os.path import join, normpath, dirname
import djcelery
djcelery.setup_loader()
SITENAME = 'oxdata' SITENAME = 'oxdata'
@ -26,6 +24,8 @@ DATABASES = {
} }
} }
DEFAULT_AUTO_FIELD="django.db.models.BigAutoField"
# Local time zone for this installation. Choices can be found here: # Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems. # although not all choices may be available on all operating systems.
@ -107,7 +107,7 @@ TEMPLATES = [
}, },
] ]
MIDDLEWARE_CLASSES = ( MIDDLEWARE = (
'django.middleware.common.CommonMiddleware', 'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware',
@ -126,7 +126,6 @@ INSTALLED_APPS = (
'django.contrib.admin', 'django.contrib.admin',
'django.contrib.humanize', 'django.contrib.humanize',
'django_extensions', 'django_extensions',
'djcelery',
'lookup', 'lookup',
'movie', 'movie',

View file

@ -1,7 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import os import os
from django.conf.urls import url, include from django.urls import path, re_path
from oxdjango.http import HttpFileResponse from oxdjango.http import HttpFileResponse
from django.conf import settings from django.conf import settings
import django.views.static import django.views.static
@ -21,28 +21,28 @@ def serve_static_file(path, location, content_type):
urlpatterns = [ urlpatterns = [
url(r'^$', views.index), re_path(r'^$', views.index),
url(r'^api/?', include(oxdjango.api.urls)), re_path(r'api/?', oxdjango.api.urls.urls),
url(r'^poster/', include(poster.urls)), path(r'poster/', poster.urls.urls),
url(r'^still/$', poster.views.still), re_path(r'still/', poster.views.still),
url(r'^id/', include(lookup.urls)), path(r'id/', lookup.urls.urls2),
url(r'^get/', include(lookup.urls)), path(r'get/', lookup.urls.urls),
url(r'^robots.txt$', serve_static_file, { path(r'robots.txt', serve_static_file, {
'location': os.path.join(settings.STATIC_ROOT, 'robots.txt'), 'location': os.path.join(settings.STATIC_ROOT, 'robots.txt'),
'content_type': 'text/plain' 'content_type': 'text/plain'
}), }),
url(r'^favicon.ico$', serve_static_file, { path(r'favicon.ico', serve_static_file, {
'location': os.path.join(settings.STATIC_ROOT, 'favicon.ico'), 'location': os.path.join(settings.STATIC_ROOT, 'favicon.ico'),
'content_type': 'image/x-icon'}), 'content_type': 'image/x-icon'}),
url(r'^admin/', include(admin.site.urls)), path(r'admin/', admin.site.urls),
] ]
if settings.DEBUG: if settings.DEBUG:
urlpatterns += [ urlpatterns += [
url(r'^media/(?P<path>.*)$', django.views.static.serve, re_path(r'^media/(?P<path>.*)$', django.views.static.serve,
{'document_root': settings.MEDIA_ROOT}), {'document_root': settings.MEDIA_ROOT}),
url(r'^static/(?P<path>.*)$', django.views.static.serve, re_path(r'^static/(?P<path>.*)$', django.views.static.serve,
{'document_root': settings.STATIC_ROOT}), {'document_root': settings.STATIC_ROOT}),
] ]

View file

@ -1,6 +1,6 @@
Django<2 Django==4.2.7
celery==3.1.23 celery==5.3.5
django-celery==3.1.17 django-celery-results==2.5.1
django-extensions==1.7.4 django-extensions==3.2.3
gunicorn gunicorn
-e git+http://git.0x2620.org/python-ox.git#egg=python-ox ox