From a468c37ba0d53d8d3d7a3151cbbacbbb67013550 Mon Sep 17 00:00:00 2001 From: Nika Zhenya Date: Tue, 8 Nov 2022 18:59:05 -0800 Subject: [PATCH] =?UTF-8?q?Aplicaci=C3=B3n=20de=20'black'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/main/admin.py | 66 +++--- source/main/api.py | 39 ++-- source/main/apps.py | 2 +- source/main/feeds.py | 14 +- source/main/migrations/0001_initial.py | 220 ++++++++++++++---- .../migrations/0002_auto_20200602_2302.py | 19 +- .../main/migrations/0003_movie_is_digital.py | 8 +- .../migrations/0004_auto_20210807_2207.py | 22 +- source/main/models.py | 22 +- source/main/views.py | 9 +- source/manage.py | 4 +- source/mauflix/apps.py | 2 +- source/mauflix/urls.py | 16 +- source/mauflix/wsgi.py | 2 +- 14 files changed, 287 insertions(+), 158 deletions(-) diff --git a/source/main/admin.py b/source/main/admin.py index 266aca3..d431d47 100644 --- a/source/main/admin.py +++ b/source/main/admin.py @@ -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) - diff --git a/source/main/api.py b/source/main/api.py index 0968667..82d394e 100644 --- a/source/main/api.py +++ b/source/main/api.py @@ -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 diff --git a/source/main/apps.py b/source/main/apps.py index 833bff6..de0edc1 100644 --- a/source/main/apps.py +++ b/source/main/apps.py @@ -2,4 +2,4 @@ from django.apps import AppConfig class MainConfig(AppConfig): - name = 'main' + name = "main" diff --git a/source/main/feeds.py b/source/main/feeds.py index 2f3a1f6..da1005a 100644 --- a/source/main/feeds.py +++ b/source/main/feeds.py @@ -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]) diff --git a/source/main/migrations/0001_initial.py b/source/main/migrations/0001_initial.py index c2f1f96..668cdf9 100644 --- a/source/main/migrations/0001_initial.py +++ b/source/main/migrations/0001_initial.py @@ -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")}, }, ), ] diff --git a/source/main/migrations/0002_auto_20200602_2302.py b/source/main/migrations/0002_auto_20200602_2302.py index b5e5d77..92b38ad 100644 --- a/source/main/migrations/0002_auto_20200602_2302.py +++ b/source/main/migrations/0002_auto_20200602_2302.py @@ -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", + ), ), ] diff --git a/source/main/migrations/0003_movie_is_digital.py b/source/main/migrations/0003_movie_is_digital.py index 3680278..800ffdf 100644 --- a/source/main/migrations/0003_movie_is_digital.py +++ b/source/main/migrations/0003_movie_is_digital.py @@ -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"), ), ] diff --git a/source/main/migrations/0004_auto_20210807_2207.py b/source/main/migrations/0004_auto_20210807_2207.py index a41e3f4..63661b1 100644 --- a/source/main/migrations/0004_auto_20210807_2207.py +++ b/source/main/migrations/0004_auto_20210807_2207.py @@ -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" + ), ), ] diff --git a/source/main/models.py b/source/main/models.py index e9013df..5f777d1 100644 --- a/source/main/models.py +++ b/source/main/models.py @@ -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): diff --git a/source/main/views.py b/source/main/views.py index a542d6b..84b5d25 100644 --- a/source/main/views.py +++ b/source/main/views.py @@ -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) diff --git a/source/manage.py b/source/manage.py index b951efd..8fc648c 100755 --- a/source/manage.py +++ b/source/manage.py @@ -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() diff --git a/source/mauflix/apps.py b/source/mauflix/apps.py index 21d9b79..3464dae 100644 --- a/source/mauflix/apps.py +++ b/source/mauflix/apps.py @@ -2,4 +2,4 @@ # ~ class SuitConfig(DjangoSuitConfig): - # ~ layout = 'horizontal' +# ~ layout = 'horizontal' diff --git a/source/mauflix/urls.py b/source/mauflix/urls.py index 414b1c2..ec8e466 100644 --- a/source/mauflix/urls.py +++ b/source/mauflix/urls.py @@ -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/', 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/', 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) - diff --git a/source/mauflix/wsgi.py b/source/mauflix/wsgi.py index 503c708..4028091 100644 --- a/source/mauflix/wsgi.py +++ b/source/mauflix/wsgi.py @@ -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()