Convert remaining space indentings to tabs
This commit is contained in:
34
manage.py
34
manage.py
@@ -3,20 +3,20 @@ import os
|
||||
import sys
|
||||
|
||||
if __name__ == "__main__":
|
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "videodinges.settings")
|
||||
try:
|
||||
from django.core.management import execute_from_command_line
|
||||
except ImportError:
|
||||
# The above import may fail for some other reason. Ensure that the
|
||||
# issue is really that Django is missing to avoid masking other
|
||||
# exceptions on Python 2.
|
||||
try:
|
||||
import django
|
||||
except ImportError:
|
||||
raise ImportError(
|
||||
"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?"
|
||||
)
|
||||
raise
|
||||
execute_from_command_line(sys.argv)
|
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "videodinges.settings")
|
||||
try:
|
||||
from django.core.management import execute_from_command_line
|
||||
except ImportError:
|
||||
# The above import may fail for some other reason. Ensure that the
|
||||
# issue is really that Django is missing to avoid masking other
|
||||
# exceptions on Python 2.
|
||||
try:
|
||||
import django
|
||||
except ImportError:
|
||||
raise ImportError(
|
||||
"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?"
|
||||
)
|
||||
raise
|
||||
execute_from_command_line(sys.argv)
|
||||
|
||||
@@ -20,10 +20,10 @@ class TranscodingType(NamedTuple):
|
||||
return self.name
|
||||
|
||||
qualities = (
|
||||
Quality(name='360p', width=640, height=360, priority=1),
|
||||
Quality(name='480p', width=853, height=480, priority=2),
|
||||
Quality(name='720p', width=1280, height=720, priority=2),
|
||||
Quality(name='1080p', width=1920, height=1080, priority=1),
|
||||
Quality(name='360p', width=640, height=360, priority=1),
|
||||
Quality(name='480p', width=853, height=480, priority=2),
|
||||
Quality(name='720p', width=1280, height=720, priority=2),
|
||||
Quality(name='1080p', width=1920, height=1080, priority=1),
|
||||
)
|
||||
|
||||
transcoding_types = (
|
||||
@@ -45,51 +45,60 @@ class Upload(models.Model):
|
||||
db_table = 'uploads'
|
||||
|
||||
class Video(models.Model):
|
||||
id = models.AutoField(primary_key=True)
|
||||
title = models.CharField(max_length=256)
|
||||
slug = models.CharField(max_length=256, unique=True)
|
||||
description = models.TextField()
|
||||
poster = models.OneToOneField(Upload, on_delete=models.PROTECT, blank=True, null=True, related_name='video_poster')
|
||||
og_image = models.OneToOneField(Upload, on_delete=models.PROTECT, blank=True, null=True, related_name='video_og_image')
|
||||
default_quality = models.CharField(choices=((quality.name, quality.name) for quality in qualities),
|
||||
max_length=128, blank=True, null=True)
|
||||
created_at = models.DateTimeField(default=datetime.now)
|
||||
updated_at = models.DateTimeField(default=datetime.now)
|
||||
id = models.AutoField(primary_key=True)
|
||||
title = models.CharField(max_length=256)
|
||||
slug = models.CharField(max_length=256, unique=True)
|
||||
description = models.TextField()
|
||||
poster = models.OneToOneField(Upload, on_delete=models.PROTECT, blank=True, null=True, related_name='video_poster')
|
||||
og_image = models.OneToOneField(Upload, on_delete=models.PROTECT, blank=True, null=True, related_name='video_og_image')
|
||||
default_quality = models.CharField(
|
||||
choices=((quality.name, quality.name) for quality in qualities),
|
||||
max_length=128,
|
||||
blank=True,
|
||||
null=True
|
||||
)
|
||||
created_at = models.DateTimeField(default=datetime.now)
|
||||
updated_at = models.DateTimeField(default=datetime.now)
|
||||
|
||||
def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
|
||||
self.updated_at = datetime.now()
|
||||
super().save(force_insert, force_update, using, update_fields)
|
||||
def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
|
||||
self.updated_at = datetime.now()
|
||||
super().save(force_insert, force_update, using, update_fields)
|
||||
|
||||
def __str__(self):
|
||||
return self.title
|
||||
def __str__(self):
|
||||
return self.title
|
||||
|
||||
class Meta:
|
||||
indexes = [models.Index(fields=['slug']), models.Index(fields=['created_at'])]
|
||||
db_table = 'videos'
|
||||
class Meta:
|
||||
indexes = [models.Index(fields=['slug']), models.Index(fields=['created_at'])]
|
||||
db_table = 'videos'
|
||||
|
||||
class Transcoding(models.Model):
|
||||
id = models.AutoField(primary_key=True)
|
||||
video = models.ForeignKey(Video, on_delete=models.CASCADE, related_name='transcodings')
|
||||
quality = models.CharField(choices=((quality.name, quality.name) for quality in qualities), max_length=128)
|
||||
type = models.CharField(choices=((str(type_), str(type_)) for type_ in transcoding_types), max_length=128)
|
||||
upload = models.OneToOneField(Upload, on_delete=models.PROTECT, blank=True, null=True)
|
||||
url = models.CharField(max_length=256, null=True, blank=True, unique=True)
|
||||
id = models.AutoField(primary_key=True)
|
||||
video = models.ForeignKey(Video, on_delete=models.CASCADE, related_name='transcodings')
|
||||
quality = models.CharField(choices=((quality.name, quality.name) for quality in qualities), max_length=128)
|
||||
type = models.CharField(choices=((str(type_), str(type_)) for type_ in transcoding_types), max_length=128)
|
||||
upload = models.OneToOneField(Upload, on_delete=models.PROTECT, blank=True, null=True)
|
||||
url = models.CharField(max_length=256, null=True, blank=True, unique=True)
|
||||
|
||||
def __str__(self):
|
||||
return self.quality
|
||||
def __str__(self):
|
||||
return self.quality
|
||||
|
||||
@property
|
||||
def quality_obj(self):
|
||||
return get_quality_by_name(self.quality)
|
||||
@property
|
||||
def quality_obj(self):
|
||||
return get_quality_by_name(self.quality)
|
||||
|
||||
class Meta:
|
||||
unique_together = ('video', 'quality', 'type')
|
||||
constraints = [constraints.CheckConstraint(check=Q(upload__isnull=False) | Q(url__isnull=False),
|
||||
name='upload_or_url_is_filled'),
|
||||
constraints.CheckConstraint(check=~(Q(upload__isnull=False) & Q(url__isnull=False)),
|
||||
name='upload_and_url_cannot_both_be_filled'),
|
||||
]
|
||||
db_table = 'transcodings'
|
||||
class Meta:
|
||||
unique_together = ('video', 'quality', 'type')
|
||||
constraints = [
|
||||
constraints.CheckConstraint(
|
||||
check=Q(upload__isnull=False) | Q(url__isnull=False),
|
||||
name='upload_or_url_is_filled'
|
||||
),
|
||||
constraints.CheckConstraint(
|
||||
check=~(Q(upload__isnull=False) & Q(url__isnull=False)),
|
||||
name='upload_and_url_cannot_both_be_filled'
|
||||
),
|
||||
]
|
||||
db_table = 'transcodings'
|
||||
|
||||
def get_quality_by_name(name: str) -> Optional[Quality]:
|
||||
for quality in qualities:
|
||||
|
||||
@@ -31,47 +31,47 @@ ALLOWED_HOSTS = []
|
||||
# Application definition
|
||||
|
||||
INSTALLED_APPS = [
|
||||
'django.contrib.admin',
|
||||
'django.contrib.auth',
|
||||
'django.contrib.contenttypes',
|
||||
'django.contrib.sessions',
|
||||
'django.contrib.messages',
|
||||
'django.contrib.staticfiles',
|
||||
'videodinges',
|
||||
'django.contrib.admin',
|
||||
'django.contrib.auth',
|
||||
'django.contrib.contenttypes',
|
||||
'django.contrib.sessions',
|
||||
'django.contrib.messages',
|
||||
'django.contrib.staticfiles',
|
||||
'videodinges',
|
||||
]
|
||||
|
||||
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',
|
||||
'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 = 'videodinges.urls'
|
||||
|
||||
TEMPLATES = [
|
||||
{
|
||||
'BACKEND': 'django.template.backends.django.DjangoTemplates',
|
||||
'DIRS': [],
|
||||
'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',
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
'BACKEND': 'django.template.backends.jinja2.Jinja2',
|
||||
'DIRS': [os.path.join(BASE_DIR, 'videodinges', 'templates')],
|
||||
'APP_DIRS': False,
|
||||
'OPTIONS': {},
|
||||
},
|
||||
{
|
||||
'BACKEND': 'django.template.backends.django.DjangoTemplates',
|
||||
'DIRS': [],
|
||||
'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',
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
'BACKEND': 'django.template.backends.jinja2.Jinja2',
|
||||
'DIRS': [os.path.join(BASE_DIR, 'videodinges', 'templates')],
|
||||
'APP_DIRS': False,
|
||||
'OPTIONS': {},
|
||||
},
|
||||
]
|
||||
|
||||
WSGI_APPLICATION = 'videodinges.wsgi.application'
|
||||
@@ -81,10 +81,10 @@ WSGI_APPLICATION = 'videodinges.wsgi.application'
|
||||
# https://docs.djangoproject.com/en/1.11/ref/settings/#databases
|
||||
|
||||
DATABASES = {
|
||||
'default': {
|
||||
'ENGINE': 'django.db.backends.sqlite3',
|
||||
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
|
||||
}
|
||||
'default': {
|
||||
'ENGINE': 'django.db.backends.sqlite3',
|
||||
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -92,18 +92,18 @@ DATABASES = {
|
||||
# https://docs.djangoproject.com/en/1.11/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',
|
||||
},
|
||||
{
|
||||
'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',
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
"""videodinges URL Configuration
|
||||
|
||||
The `urlpatterns` list routes URLs to views. For more information please see:
|
||||
https://docs.djangoproject.com/en/1.11/topics/http/urls/
|
||||
https://docs.djangoproject.com/en/1.11/topics/http/urls/
|
||||
Examples:
|
||||
Function views
|
||||
1. Add an import: from my_app import views
|
||||
2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')
|
||||
1. Add an import: from my_app import views
|
||||
2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')
|
||||
Class-based views
|
||||
1. Add an import: from other_app.views import Home
|
||||
2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')
|
||||
1. Add an import: from other_app.views import Home
|
||||
2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')
|
||||
Including another URLconf
|
||||
1. Import the include() function: from django.conf.urls import url, include
|
||||
2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
|
||||
1. Import the include() function: from django.conf.urls import url, include
|
||||
2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
|
||||
"""
|
||||
from django.conf import settings
|
||||
from django.conf.urls.static import static
|
||||
@@ -22,9 +22,9 @@ from django.urls import include
|
||||
from . import views
|
||||
|
||||
_urlpatterns = [
|
||||
url(r'^admin/', admin.site.urls),
|
||||
url(r'^$', views.index),
|
||||
url(r'^(?P<slug>[\w-]+).html', views.video)
|
||||
url(r'^admin/', admin.site.urls),
|
||||
url(r'^$', views.index),
|
||||
url(r'^(?P<slug>[\w-]+).html', views.video)
|
||||
]
|
||||
|
||||
_urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
|
||||
|
||||
Reference in New Issue
Block a user