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