Aplicación de 'black'

This commit is contained in:
perro tuerto 2022-11-08 18:59:05 -08:00
parent fb230145f3
commit a468c37ba0
14 changed files with 287 additions and 158 deletions

View File

@ -18,6 +18,7 @@ def run_in_thread(fn):
t = threading.Thread(target=fn, args=k, kwargs=kw)
t.start()
return t
return run
@ -25,35 +26,30 @@ def run_in_thread(fn):
class AdminPerson(admin.ModelAdmin):
list_per_page = 50
list_display = (
'name',
'country',
'is_actor',
'is_director',
'is_woman',
"name",
"country",
"is_actor",
"is_director",
"is_woman",
)
search_fields = ('name',)
list_filter = ('is_woman', 'is_actor', 'is_director', 'country')
search_fields = ("name",)
list_filter = ("is_woman", "is_actor", "is_director", "country")
@admin.register(models.Movie)
class AdminMovie(admin.ModelAdmin):
list_per_page = 50
list_display = (
'name',
'original_name',
'year',
'duration',
'count')
search_fields = ('name', 'original_name')
filter_horizontal = ('directors',)
list_display = ("name", "original_name", "year", "duration", "count")
search_fields = ("name", "original_name")
filter_horizontal = ("directors",)
list_filter = (
'is_digital',
('directors__name', DropdownFilter),
('countries__name', DropdownFilter),
('year', DropdownFilter),
)
"is_digital",
("directors__name", DropdownFilter),
("countries__name", DropdownFilter),
("year", DropdownFilter),
)
_is_new = False
actions = ['published']
actions = ["published"]
def save_model(self, request, obj, form, change):
self._is_new = obj.pk is None
@ -68,30 +64,31 @@ class AdminMovie(admin.ModelAdmin):
return
def formfield_for_manytomany(self, db_field, request, **kwargs):
if db_field.name == 'directors':
kwargs['queryset'] = models.Person.objects.filter(is_director=True)
if db_field.name == 'actors':
kwargs['queryset'] = models.Person.objects.filter(is_actor=True)
if db_field.name == "directors":
kwargs["queryset"] = models.Person.objects.filter(is_director=True)
if db_field.name == "actors":
kwargs["queryset"] = models.Person.objects.filter(is_actor=True)
return super().formfield_for_manytomany(db_field, request, **kwargs)
def published(self, request, queryset):
obj = queryset[0]
self._public(obj)
self.message_user(request, 'Publicado correctamente', messages.SUCCESS)
published.short_description = 'Republicar en redes'
self.message_user(request, "Publicado correctamente", messages.SUCCESS)
published.short_description = "Republicar en redes"
def _public_mastodon(self, message, cartel):
MT = {
'jpg': 'image/jpeg',
'png': 'image/png',
"jpg": "image/jpeg",
"png": "image/png",
}
message += '\n\n#mauflix'
message += "\n\n#mauflix"
media_type = MT[cartel.url[-3:]]
try:
server = Mastodon(
access_token=settings.TOKEN_MASTODON,
api_base_url=settings.URL_MASTODON)
access_token=settings.TOKEN_MASTODON, api_base_url=settings.URL_MASTODON
)
media = server.media_post(cartel.read(), media_type)
server.status_post(message, media_ids=media)
@ -100,9 +97,9 @@ class AdminMovie(admin.ModelAdmin):
return
def _public_telegram(self, message, cartel):
url = f'https://api.telegram.org/bot{settings.TOKEN_TELEGRAM}/sendPhoto'
url = f"https://api.telegram.org/bot{settings.TOKEN_TELEGRAM}/sendPhoto"
url_cartel = settings.URL_CDN.format(cartel)
data = {'chat_id': settings.CHAT_ID, 'photo': url_cartel, 'caption': message}
data = {"chat_id": settings.CHAT_ID, "photo": url_cartel, "caption": message}
result = httpx.post(url, data=data).json()
return
@ -121,4 +118,3 @@ Año: {obj.year}
admin.site.register(models.Gender)
admin.site.register(models.Country)

View File

@ -16,64 +16,61 @@ from django.conf import settings
class CustomAuthentication(Authentication):
def is_authenticated(self, request, **kwargs):
if not 'ApiToken' in request.headers:
if not "ApiToken" in request.headers:
return False
if request.headers['ApiToken'] != settings.API_TOKEN:
if request.headers["ApiToken"] != settings.API_TOKEN:
return False
return True
class ResourceDirectors(ModelResource):
class Meta:
queryset = Person.objects.all().filter(is_director=True)
resource_name = 'directors'
resource_name = "directors"
class ResourceCountries(ModelResource):
class Meta:
queryset = Country.objects.all()
resource_name = 'countries'
resource_name = "countries"
class ResourceMovies(ModelResource):
directors = fields.ToManyField(ResourceDirectors, 'directors', full=True)
countries = fields.ToManyField(ResourceCountries, 'countries', full=True)
directors = fields.ToManyField(ResourceDirectors, "directors", full=True)
countries = fields.ToManyField(ResourceCountries, "countries", full=True)
class Meta:
queryset = Movie.objects.all().order_by('-id')
resource_name = 'movies'
excludes = ['count', 'duration', 'published', 'stars']
queryset = Movie.objects.all().order_by("-id")
resource_name = "movies"
excludes = ["count", "duration", "published", "stars"]
throttle = BaseThrottle(throttle_at=50)
allowed_methods = ['get']
allowed_methods = ["get"]
authentication = CustomAuthentication()
limit = 10
max_limit = 10
filtering = {
'name': ALL,
'original_name': ALL,
"name": ALL,
"original_name": ALL,
}
def dehydrate_directors(self, bundle):
names = ', '.join([d.obj.name for d in bundle.data['directors']])
names = ", ".join([d.obj.name for d in bundle.data["directors"]])
return names
def dehydrate_countries(self, bundle):
names = ', '.join([c.obj.name for c in bundle.data['countries']])
names = ", ".join([c.obj.name for c in bundle.data["countries"]])
return names
# ~ def build_filters(self, filters=None, **kwargs):
# ~ orm_filters = super().build_filters(filters or {}, **kwargs)
# ~ return orm_filters
# ~ orm_filters = super().build_filters(filters or {}, **kwargs)
# ~ return orm_filters
def apply_filters(self, request, applicable_filters):
objects = self.get_object_list(request)
query = applicable_filters['name__icontains']
qset = (Q(name__icontains=query) | Q(original_name__icontains=query))
query = applicable_filters["name__icontains"]
qset = Q(name__icontains=query) | Q(original_name__icontains=query)
objects = objects.filter(qset)
return objects

View File

@ -2,4 +2,4 @@ from django.apps import AppConfig
class MainConfig(AppConfig):
name = 'main'
name = "main"

View File

@ -6,19 +6,21 @@ from .models import Movie
class LatestMoviesFeed(Feed):
title = 'Lo ultimo en MauFlix'
link = ''
description = 'Ultimas diez películas disponibles en MauFlix'
title = "Lo ultimo en MauFlix"
link = ""
description = "Ultimas diez películas disponibles en MauFlix"
def items(self):
return Movie.objects.order_by('-id')[:10]
return Movie.objects.order_by("-id")[:10]
def item_title(self, item):
return item.name
def item_description(self, item):
message = f"{item.name}, Dirigida por: {item.directors.all()[0]}, Año: {item.year}"
message = (
f"{item.name}, Dirigida por: {item.directors.all()[0]}, Año: {item.year}"
)
return message
def item_link(self, item):
return reverse('movies', args=[item.pk])
return reverse("movies", args=[item.pk])

View File

@ -8,76 +8,204 @@ class Migration(migrations.Migration):
initial = True
dependencies = [
]
dependencies = []
operations = [
migrations.CreateModel(
name='Country',
name="Country",
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=250)),
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.CharField(max_length=250)),
],
options={
'verbose_name': 'País',
'verbose_name_plural': 'Paises',
'ordering': ['name'],
'unique_together': {('name',)},
"verbose_name": "País",
"verbose_name_plural": "Paises",
"ordering": ["name"],
"unique_together": {("name",)},
},
),
migrations.CreateModel(
name='Gender',
name="Gender",
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=250)),
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.CharField(max_length=250)),
],
options={
'verbose_name': 'Género',
'verbose_name_plural': 'Generos',
'ordering': ['name'],
'unique_together': {('name',)},
"verbose_name": "Género",
"verbose_name_plural": "Generos",
"ordering": ["name"],
"unique_together": {("name",)},
},
),
migrations.CreateModel(
name='Person',
name="Person",
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=500, verbose_name='Nombre')),
('date_born', models.DateField(blank=True, null=True, verbose_name='Fecha de nacimiento')),
('is_actor', models.BooleanField(default=False, verbose_name='Es Actor')),
('is_director', models.BooleanField(default=False, verbose_name='Es Director')),
('photo', models.ImageField(blank=True, null=True, upload_to='%Y/%m/%d/', verbose_name='Fotografía')),
('country', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='country', to='main.Country')),
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.CharField(max_length=500, verbose_name="Nombre")),
(
"date_born",
models.DateField(
blank=True, null=True, verbose_name="Fecha de nacimiento"
),
),
(
"is_actor",
models.BooleanField(default=False, verbose_name="Es Actor"),
),
(
"is_director",
models.BooleanField(default=False, verbose_name="Es Director"),
),
(
"photo",
models.ImageField(
blank=True,
null=True,
upload_to="%Y/%m/%d/",
verbose_name="Fotografía",
),
),
(
"country",
models.ForeignKey(
on_delete=django.db.models.deletion.PROTECT,
related_name="country",
to="main.Country",
),
),
],
options={
'verbose_name': 'Persona',
'verbose_name_plural': 'Personas',
'ordering': ['name'],
'unique_together': {('name',)},
"verbose_name": "Persona",
"verbose_name_plural": "Personas",
"ordering": ["name"],
"unique_together": {("name",)},
},
),
migrations.CreateModel(
name='Movie',
name="Movie",
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=1000, verbose_name='Nombre')),
('original_name', models.CharField(blank=True, default='', max_length=1000, verbose_name='Nombre original')),
('file_name', models.CharField(blank=True, default='', max_length=1000, verbose_name='Nombre archivo')),
('year', models.PositiveSmallIntegerField(default=1900, verbose_name='Año')),
('duration', models.PositiveSmallIntegerField(default=0, verbose_name='Duración')),
('cartel', models.ImageField(blank=True, null=True, upload_to='%Y/%m/%d/', verbose_name='Cartel')),
('count', models.PositiveIntegerField(default=0, verbose_name='Descargas')),
('stars', models.PositiveSmallIntegerField(default=0, verbose_name='Estrellas')),
('actors', models.ManyToManyField(blank=True, related_name='actors', to='main.Person', verbose_name='Reparto')),
('countries', models.ManyToManyField(blank=True, related_name='countries', to='main.Country', verbose_name='País')),
('directors', models.ManyToManyField(related_name='directors', to='main.Person', verbose_name='Director')),
('genders', models.ManyToManyField(blank=True, related_name='genders', to='main.Gender', verbose_name='Género')),
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.CharField(max_length=1000, verbose_name="Nombre")),
(
"original_name",
models.CharField(
blank=True,
default="",
max_length=1000,
verbose_name="Nombre original",
),
),
(
"file_name",
models.CharField(
blank=True,
default="",
max_length=1000,
verbose_name="Nombre archivo",
),
),
(
"year",
models.PositiveSmallIntegerField(default=1900, verbose_name="Año"),
),
(
"duration",
models.PositiveSmallIntegerField(
default=0, verbose_name="Duración"
),
),
(
"cartel",
models.ImageField(
blank=True,
null=True,
upload_to="%Y/%m/%d/",
verbose_name="Cartel",
),
),
(
"count",
models.PositiveIntegerField(default=0, verbose_name="Descargas"),
),
(
"stars",
models.PositiveSmallIntegerField(
default=0, verbose_name="Estrellas"
),
),
(
"actors",
models.ManyToManyField(
blank=True,
related_name="actors",
to="main.Person",
verbose_name="Reparto",
),
),
(
"countries",
models.ManyToManyField(
blank=True,
related_name="countries",
to="main.Country",
verbose_name="País",
),
),
(
"directors",
models.ManyToManyField(
related_name="directors",
to="main.Person",
verbose_name="Director",
),
),
(
"genders",
models.ManyToManyField(
blank=True,
related_name="genders",
to="main.Gender",
verbose_name="Género",
),
),
],
options={
'verbose_name': 'Película',
'verbose_name_plural': 'Películas',
'ordering': ['name'],
'unique_together': {('name', 'original_name')},
"verbose_name": "Película",
"verbose_name_plural": "Películas",
"ordering": ["name"],
"unique_together": {("name", "original_name")},
},
),
]

View File

@ -7,18 +7,23 @@ import main.models
class Migration(migrations.Migration):
dependencies = [
('main', '0001_initial'),
("main", "0001_initial"),
]
operations = [
migrations.AddField(
model_name='movie',
name='published',
field=models.BooleanField(default=True, verbose_name='¿Publicar?'),
model_name="movie",
name="published",
field=models.BooleanField(default=True, verbose_name="¿Publicar?"),
),
migrations.AlterField(
model_name='movie',
name='cartel',
field=models.ImageField(blank=True, null=True, upload_to=main.models.upload_cartel, verbose_name='Cartel'),
model_name="movie",
name="cartel",
field=models.ImageField(
blank=True,
null=True,
upload_to=main.models.upload_cartel,
verbose_name="Cartel",
),
),
]

View File

@ -6,13 +6,13 @@ from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('main', '0002_auto_20200602_2302'),
("main", "0002_auto_20200602_2302"),
]
operations = [
migrations.AddField(
model_name='movie',
name='is_digital',
field=models.BooleanField(default=False, verbose_name='Es digital'),
model_name="movie",
name="is_digital",
field=models.BooleanField(default=False, verbose_name="Es digital"),
),
]

View File

@ -6,23 +6,25 @@ from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('main', '0003_movie_is_digital'),
("main", "0003_movie_is_digital"),
]
operations = [
migrations.AddField(
model_name='person',
name='is_woman',
field=models.BooleanField(default=False, verbose_name='Es mujer'),
model_name="person",
name="is_woman",
field=models.BooleanField(default=False, verbose_name="Es mujer"),
),
migrations.AlterField(
model_name='country',
name='name',
field=models.CharField(max_length=250, verbose_name='País'),
model_name="country",
name="name",
field=models.CharField(max_length=250, verbose_name="País"),
),
migrations.AlterField(
model_name='movie',
name='actors',
field=models.ManyToManyField(blank=True, related_name='actors', to='main.Person'),
model_name="movie",
name="actors",
field=models.ManyToManyField(
blank=True, related_name="actors", to="main.Person"
),
),
]

View File

@ -97,19 +97,19 @@ class MovieQuerySet(models.QuerySet):
url = "../../"
return url + img.url
def random_pick (self, random_max = 5, **kwargs):
def random_pick(self, random_max=5, **kwargs):
all = list(Movie.objects.filter(**kwargs).values())
if len(all) > random_max:
return random.sample(all, random_max)
else:
return all
def top_pick (self, key, top_max = 5):
all = list(Movie.objects.order_by(f'-{key}').values())
def top_pick(self, key, top_max=5):
all = list(Movie.objects.order_by(f"-{key}").values())
return all[:top_max]
def top_random_pick(self, key, top_max = 5):
all = list(Movie.objects.order_by(f'-{key}').values())
def top_random_pick(self, key, top_max=5):
all = list(Movie.objects.order_by(f"-{key}").values())
top = []
for movie in all:
if movie[key] == all[0][key]:
@ -122,16 +122,16 @@ class MovieQuerySet(models.QuerySet):
return top
def home_pick(self):
genders = list(Gender.objects.values_list('id', flat = True))
genders = list(Gender.objects.values_list("id", flat=True))
sections = {
'Novedades': self.top_pick('id'),
'Mejor valorados': self.top_random_pick('stars'),
'Más descargados': self.top_pick('count'),
'genders': {},
"Novedades": self.top_pick("id"),
"Mejor valorados": self.top_random_pick("stars"),
"Más descargados": self.top_pick("count"),
"genders": {},
}
for gender in genders:
key = Gender.objects.get(pk=gender).name
sections['genders'][key] = self.random_pick(genders=gender)
sections["genders"][key] = self.random_pick(genders=gender)
return sections
def get_directors(self):

View File

@ -7,9 +7,10 @@ from .models import Movie, Person
def home(request):
context = {'sections': Movie.objects.home_pick()}
return render(request, 'home.html', context)
context = {"sections": Movie.objects.home_pick()}
return render(request, "home.html", context)
def search (request):
def search(request):
context = {}
return render(request, 'search.html', context)
return render(request, "search.html", context)

View File

@ -5,7 +5,7 @@ import sys
def main():
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mauflix.settings')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mauflix.settings")
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
@ -17,5 +17,5 @@ def main():
execute_from_command_line(sys.argv)
if __name__ == '__main__':
if __name__ == "__main__":
main()

View File

@ -2,4 +2,4 @@
# ~ class SuitConfig(DjangoSuitConfig):
# ~ layout = 'horizontal'
# ~ layout = 'horizontal'

View File

@ -1,4 +1,3 @@
from django.contrib import admin
from django.urls import path
from django.conf import settings
@ -12,16 +11,15 @@ from main.feeds import LatestMoviesFeed
from main.api import ResourceMovies
v1_api = Api(api_name='v1')
v1_api = Api(api_name="v1")
v1_api.register(ResourceMovies())
urlpatterns = [
path('', views.home, name='home'),
path('search/', views.search, name='search'),
#path('movies/<str:args>', views.movies, name='movies'),
path('ultimas/rss/', LatestMoviesFeed()),
path('admin/', admin.site.urls),
#path('api/', include(v1_api.urls)),
path("", views.home, name="home"),
path("search/", views.search, name="search"),
# path('movies/<str:args>', views.movies, name='movies'),
path("ultimas/rss/", LatestMoviesFeed()),
path("admin/", admin.site.urls),
# path('api/', include(v1_api.urls)),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

View File

@ -11,6 +11,6 @@ import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mauflix.settings')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mauflix.settings")
application = get_wsgi_application()