From 3b6eccba80953dd7a154122fdfbefa3e87128650 Mon Sep 17 00:00:00 2001 From: "pierre.geeraert" Date: Tue, 15 Sep 2026 18:22:03 +0100 Subject: [PATCH 1/6] create universal admin class --- django_code/apps/cloudmanager/admin.py | 13 ++++++------- django_code/apps/job_dashboard/admin.py | 4 ++-- django_code/apps/podcast_aggregator/admin.py | 7 ++++--- django_code/apps/random_simpsons/admin.py | 16 +++++----------- django_code/apps/streaming/admin.py | 9 +++------ django_code/apps/telegram_communication/admin.py | 6 +++--- django_code/apps/website_redirection/admin.py | 13 ++++--------- django_code/apps/website_redirection/models.py | 1 - django_code/core/admin.py | 15 +++++++++++++++ django_code/core/settings.py | 1 + 10 files changed, 43 insertions(+), 42 deletions(-) create mode 100644 django_code/core/admin.py diff --git a/django_code/apps/cloudmanager/admin.py b/django_code/apps/cloudmanager/admin.py index 8b08610..8881a0b 100644 --- a/django_code/apps/cloudmanager/admin.py +++ b/django_code/apps/cloudmanager/admin.py @@ -3,9 +3,8 @@ from django.utils.translation import ngettext from .models import Deployment_Data,Schedule_Day_Data,Schedule_Week_Data,Namespace_Data from .utils import import_namespace,import_deployment,generate_default_day_schedule,generate_default_week_schedule,Check_server_supposed_XXX,retrieve_and_apply from apps.kubernetes_connection.utils import scale_up,scale_down -from admin_extra_buttons.api import ExtraButtonsMixin, button -from import_export.admin import ImportExportModelAdmin - +from admin_extra_buttons.api import button +from core.admin import UniversalModelAdmin DB = 'cloudmanager_db' @@ -86,7 +85,7 @@ class MultiDBModelAdmin(admin.ModelAdmin): @admin.register(Deployment_Data) -class DeploymentDataAdmin(ImportExportModelAdmin,ExtraButtonsMixin, MultiDBModelAdmin): +class DeploymentDataAdmin(UniversalModelAdmin): list_display = ('name', 'namespace', 'schedule_week', 'schedule_day', 'replicas') list_filter = (ActiveAtHourFilter,) actions = [Check_server_supposed_False,Check_server_supposed_true,scale_up_deploy,scale_down_deploy] @@ -104,7 +103,7 @@ class DeploymentDataAdmin(ImportExportModelAdmin,ExtraButtonsMixin, MultiDBModel self.message_user(request, 'Deployments imported') @admin.register(Schedule_Day_Data) -class ScheduleDayAdmin(ImportExportModelAdmin,ExtraButtonsMixin,MultiDBModelAdmin): +class ScheduleDayAdmin(UniversalModelAdmin): list_display = ['name_schedule'] + [f'state_at_{h}' for h in range(24)] @button() def generate_default_day_schedule_admin(self, request): @@ -113,7 +112,7 @@ class ScheduleDayAdmin(ImportExportModelAdmin,ExtraButtonsMixin,MultiDBModelAdmi self.message_user(request, 'Created default schedules') @admin.register(Schedule_Week_Data) -class ScheduleWeekAdmin(ImportExportModelAdmin,ExtraButtonsMixin,MultiDBModelAdmin): +class ScheduleWeekAdmin(UniversalModelAdmin): list_display = ( 'name_schedule', 'state_Monday', 'state_Tuesday', 'state_Wednesday', @@ -127,7 +126,7 @@ class ScheduleWeekAdmin(ImportExportModelAdmin,ExtraButtonsMixin,MultiDBModelAdm @admin.register(Namespace_Data) -class NamespaceAdmin(ImportExportModelAdmin,ExtraButtonsMixin, MultiDBModelAdmin): +class NamespaceAdmin(UniversalModelAdmin): list_display = ('namespace',) diff --git a/django_code/apps/job_dashboard/admin.py b/django_code/apps/job_dashboard/admin.py index 454157d..f1b85c1 100644 --- a/django_code/apps/job_dashboard/admin.py +++ b/django_code/apps/job_dashboard/admin.py @@ -1,9 +1,9 @@ from django.contrib import admin -from import_export.admin import ImportExportModelAdmin from import_export import resources from import_export.fields import Field from .models import JobData from django.utils.text import Truncator +from core.admin import UniversalModelAdmin # Register your models here. @@ -31,7 +31,7 @@ class JobResource(resources.ModelResource): @admin.register(JobData) -class JobAdmin(ImportExportModelAdmin): +class JobAdmin(UniversalModelAdmin): list_display = ('job_position','company','URL','status','date_saved','date_applied','type','resume','location','short_description','salary','contact','source') #fields = ['job_position','company','URL','status','date_saved','date_applied','type','resume','cover_letter','location','job_description','salary ','contact','source'] resource_classes = [JobResource] diff --git a/django_code/apps/podcast_aggregator/admin.py b/django_code/apps/podcast_aggregator/admin.py index 932142f..01799ae 100644 --- a/django_code/apps/podcast_aggregator/admin.py +++ b/django_code/apps/podcast_aggregator/admin.py @@ -1,13 +1,14 @@ from django.contrib import admin -from import_export.admin import ImportExportModelAdmin from import_export import resources from django.utils.html import format_html from .models import podcastData +from core.admin import UniversalModelAdmin # Register your models here. @admin.register(podcastData) -class JobAdmin(ImportExportModelAdmin): +class PodcastAdmin(UniversalModelAdmin): list_display = ('podcast_name','clickable_links','enabled') - + + def clickable_links(self, obj): return format_html('{}', obj.podcast_url,obj.podcast_url) diff --git a/django_code/apps/random_simpsons/admin.py b/django_code/apps/random_simpsons/admin.py index 1a4bf36..179abd4 100644 --- a/django_code/apps/random_simpsons/admin.py +++ b/django_code/apps/random_simpsons/admin.py @@ -1,13 +1,11 @@ from django.contrib import admin,messages from django.utils.translation import ngettext -from django.utils.html import format_html from django.utils import timezone -from djangoql.admin import DjangoQLSearchMixin from prompt_toolkit.shortcuts import print_container -from import_export.admin import ImportExportModelAdmin from import_export import resources -from .models import SimpsonsData,simpsons_data_object,urlData +from .models import SimpsonsData,urlData from .utils import mark_episode_watched,unwatch_all_episodes,generate_new_urls_for_episode +from core.admin import UniversalModelAdmin # Register your models here. @@ -65,19 +63,15 @@ def generate_new_urls(modeladmin, request, queryset): @admin.register(SimpsonsData) -class EpisodeAdmin(DjangoQLSearchMixin,ImportExportModelAdmin): +class EpisodeAdmin(UniversalModelAdmin): list_display = [field.name for field in SimpsonsData._meta.fields if field.name != 'id'] + list_display += ['clickable_links'] list_filter = ['seen','modified_at'] #list_filter = ['seen'] fields = ['season', 'episode', 'url', 'seen'] actions = [make_seen,make_unseen,unseen_betaserie,generate_new_urls] search_fields = ['season', 'episode', 'url', 'seen'] - djangoql_completion_enabled_by_default = False - - def clickable_links(self, obj): - return format_html('{}', obj.url,obj.url) - def get_queryset(self, request): return super().get_queryset(request).using(DB) @@ -91,7 +85,7 @@ class EpisodeAdmin(DjangoQLSearchMixin,ImportExportModelAdmin): queryset.using(DB).delete() @admin.register(urlData) -class urldataAdmin(ImportExportModelAdmin): +class urldataAdmin(UniversalModelAdmin): list_display = ('url_example', 'prefix', 'infix', 'suffix','addedDate') diff --git a/django_code/apps/streaming/admin.py b/django_code/apps/streaming/admin.py index c81595f..fa1530d 100644 --- a/django_code/apps/streaming/admin.py +++ b/django_code/apps/streaming/admin.py @@ -1,9 +1,9 @@ from django.contrib import admin from django.utils.html import format_html -from import_export.admin import ImportExportModelAdmin from .models import StreamingSiteTestingData,StreamingRedirectData from .utils import full_testing from urllib.parse import urlsplit, urlunsplit +from core.admin import UniversalModelAdmin @@ -34,14 +34,11 @@ def urlcleaning(modeladmin, request, queryset): return 0 @admin.register(StreamingSiteTestingData) -class streamingAdmin(ImportExportModelAdmin): +class streamingAdmin(UniversalModelAdmin): list_display = ['clickable_links','result_colored','newstatus'] fields = ['url'] actions = [check,urlcleaning] - def clickable_links(self, obj): - return format_html('{}', obj.url,obj.url) - def result_colored(self, obj): colors = { 'REACHABLE': 'green', @@ -61,7 +58,7 @@ class streamingAdmin(ImportExportModelAdmin): @admin.register(StreamingRedirectData) -class StreamingRedirectAdmin(ImportExportModelAdmin): +class StreamingRedirectAdmin(UniversalModelAdmin): list_display = ['name','season','episode','randomViewing','clickable_links','addedDate','alias'] #fields = ['name','season','episode','url_example','prefix','infix','suffix','alias','randomViewing','seasonInformation'] fieldsets = ( diff --git a/django_code/apps/telegram_communication/admin.py b/django_code/apps/telegram_communication/admin.py index be65569..96cb682 100644 --- a/django_code/apps/telegram_communication/admin.py +++ b/django_code/apps/telegram_communication/admin.py @@ -1,7 +1,7 @@ from django.contrib import admin -from import_export.admin import ImportExportModelAdmin from .models import TelegramData -from .utils import telegramUtils +from .utils import telegramUtils +from core.admin import UniversalModelAdmin @admin.action(description="Clear all expired messages") def messages_cleaning(modeladmin, request, queryset): @@ -10,7 +10,7 @@ def messages_cleaning(modeladmin, request, queryset): # Register your models here. @admin.register(TelegramData) -class JobAdmin(ImportExportModelAdmin): +class JobAdmin(UniversalModelAdmin): list_display = ('message_id','chat_id','description','creation_date','expiration_date') actions = [messages_cleaning] diff --git a/django_code/apps/website_redirection/admin.py b/django_code/apps/website_redirection/admin.py index 92aebb7..4510f18 100644 --- a/django_code/apps/website_redirection/admin.py +++ b/django_code/apps/website_redirection/admin.py @@ -1,9 +1,7 @@ from django.contrib import admin from .models import historicalData,redirectData from .utils import redirect_method -from import_export.admin import ImportExportModelAdmin -from django.utils.html import format_html - +from core.admin import UniversalModelAdmin # Register your models here. @@ -21,16 +19,13 @@ def re_redirect(modeladmin, request, queryset): output_generated ) @admin.register(historicalData) -class historicalAdmin(ImportExportModelAdmin): +class historicalAdmin(UniversalModelAdmin): list_input = (field.name for field in historicalData._meta.fields if field.name != 'id' or field.name != 'url') list_display = ["clickable_links"] list_display.extend(list_input) actions = [re_redirect] - - def clickable_links(self, obj): - return format_html('{}', obj.url,obj.url) - @admin.register(redirectData) -class redirectAdmin(ImportExportModelAdmin): +class redirectAdmin(UniversalModelAdmin): list_display = [field.name for field in redirectData._meta.fields if field.name != 'id'] + list_display += ['clickable_links'] diff --git a/django_code/apps/website_redirection/models.py b/django_code/apps/website_redirection/models.py index e31c8bc..a34d4c9 100644 --- a/django_code/apps/website_redirection/models.py +++ b/django_code/apps/website_redirection/models.py @@ -1,6 +1,5 @@ from django.db import models from django.contrib import admin -from django.utils.html import format_html class historicalData(models.Model): url = models.CharField(max_length=1000) diff --git a/django_code/core/admin.py b/django_code/core/admin.py new file mode 100644 index 0000000..7106f44 --- /dev/null +++ b/django_code/core/admin.py @@ -0,0 +1,15 @@ +from import_export.admin import ImportExportModelAdmin +from admin_extra_buttons.api import ExtraButtonsMixin +from django.contrib import admin +from djangoql.admin import DjangoQLSearchMixin +from django.utils.html import format_html + +class UniversalModelAdmin(DjangoQLSearchMixin,ImportExportModelAdmin,ExtraButtonsMixin,admin.ModelAdmin): + djangoql_completion_enabled_by_default = True + + #Add search fields if you want to have the toggle on/off + object = "obj.url" + + def clickable_links(self, obj): + return format_html('{}', obj.url,obj.url) + diff --git a/django_code/core/settings.py b/django_code/core/settings.py index 4d1c904..2759104 100644 --- a/django_code/core/settings.py +++ b/django_code/core/settings.py @@ -252,3 +252,4 @@ PROXIES = { "http" : PROXY_URL, "https" : PROXY_URL } + -- 2.54.0 From aaad6b2b7ebc9410b576bd9c3787a37aa9c35ce6 Mon Sep 17 00:00:00 2001 From: "pierre.geeraert" Date: Tue, 15 Sep 2026 18:23:16 +0100 Subject: [PATCH 2/6] add exmaple --- django_code/core/admin.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/django_code/core/admin.py b/django_code/core/admin.py index 7106f44..3f6afc0 100644 --- a/django_code/core/admin.py +++ b/django_code/core/admin.py @@ -8,8 +8,10 @@ class UniversalModelAdmin(DjangoQLSearchMixin,ImportExportModelAdmin,ExtraButton djangoql_completion_enabled_by_default = True #Add search fields if you want to have the toggle on/off - object = "obj.url" + # example: + # search_fields = ['season', 'episode', 'url', 'seen'] + def clickable_links(self, obj): - return format_html('{}', obj.url,obj.url) + return format_html('{}', obj.url,obj.url) -- 2.54.0 From 015edcd63da9175d2ad52ef5b7960284f2dd36b5 Mon Sep 17 00:00:00 2001 From: "pierre.geeraert" Date: Wed, 16 Sep 2026 11:25:36 +0100 Subject: [PATCH 3/6] universal method --- django_code/apps/podcast_aggregator/admin.py | 4 +--- django_code/apps/streaming/admin.py | 3 +-- django_code/core/admin.py | 5 ++++- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/django_code/apps/podcast_aggregator/admin.py b/django_code/apps/podcast_aggregator/admin.py index 01799ae..77f09d6 100644 --- a/django_code/apps/podcast_aggregator/admin.py +++ b/django_code/apps/podcast_aggregator/admin.py @@ -9,6 +9,4 @@ from core.admin import UniversalModelAdmin class PodcastAdmin(UniversalModelAdmin): list_display = ('podcast_name','clickable_links','enabled') - - def clickable_links(self, obj): - return format_html('{}', obj.podcast_url,obj.podcast_url) + link_field = 'podcast_url' diff --git a/django_code/apps/streaming/admin.py b/django_code/apps/streaming/admin.py index fa1530d..a224e42 100644 --- a/django_code/apps/streaming/admin.py +++ b/django_code/apps/streaming/admin.py @@ -77,5 +77,4 @@ class StreamingRedirectAdmin(UniversalModelAdmin): 'fields': ('seasonInformation','alias','betaserieShowId','maximumNumberSeason') }), ) - def clickable_links(self, obj): - return format_html('{}', obj.url_display,obj.url_display) + link_field = 'url_display' diff --git a/django_code/core/admin.py b/django_code/core/admin.py index 3f6afc0..5daf13b 100644 --- a/django_code/core/admin.py +++ b/django_code/core/admin.py @@ -11,7 +11,10 @@ class UniversalModelAdmin(DjangoQLSearchMixin,ImportExportModelAdmin,ExtraButton # example: # search_fields = ['season', 'episode', 'url', 'seen'] + link_field = 'url' + def clickable_links(self, obj): - return format_html('{}', obj.url,obj.url) + url = getattr(obj, self.link_field, None) + return format_html('{}', url,url) -- 2.54.0 From 4492db4185c2b53c056a3899be60bc0ea7a1c6c6 Mon Sep 17 00:00:00 2001 From: "pierre.geeraert" Date: Wed, 16 Sep 2026 13:23:41 +0100 Subject: [PATCH 4/6] cleanup --- django_code/apps/cloudmanager/admin.py | 18 -------- .../apps/docker_connection/__init__.py | 0 django_code/apps/docker_connection/admin.py | 3 -- django_code/apps/docker_connection/apps.py | 46 ------------------- django_code/apps/docker_connection/models.py | 3 -- django_code/apps/docker_connection/tests.py | 3 -- django_code/apps/docker_connection/views.py | 8 ---- 7 files changed, 81 deletions(-) delete mode 100644 django_code/apps/docker_connection/__init__.py delete mode 100644 django_code/apps/docker_connection/admin.py delete mode 100644 django_code/apps/docker_connection/apps.py delete mode 100644 django_code/apps/docker_connection/models.py delete mode 100644 django_code/apps/docker_connection/tests.py delete mode 100644 django_code/apps/docker_connection/views.py diff --git a/django_code/apps/cloudmanager/admin.py b/django_code/apps/cloudmanager/admin.py index 8881a0b..6bfc2bb 100644 --- a/django_code/apps/cloudmanager/admin.py +++ b/django_code/apps/cloudmanager/admin.py @@ -6,7 +6,6 @@ from apps.kubernetes_connection.utils import scale_up,scale_down from admin_extra_buttons.api import button from core.admin import UniversalModelAdmin -DB = 'cloudmanager_db' @admin.action(description="scale up") @@ -67,23 +66,6 @@ class ActiveAtHourFilter(admin.SimpleListFilter): return queryset -class MultiDBModelAdmin(admin.ModelAdmin): - """Base class that pins all admin operations to DB.""" - db = DB - - def get_queryset(self, request): - return super().get_queryset(request).using(self.db) - - def save_model(self, request, obj, form, change): - obj.save(using=self.db) - - def delete_model(self, request, obj): - obj.delete(using=self.db) - - def delete_queryset(self, request, queryset): - queryset.using(self.db).delete() - - @admin.register(Deployment_Data) class DeploymentDataAdmin(UniversalModelAdmin): list_display = ('name', 'namespace', 'schedule_week', 'schedule_day', 'replicas') diff --git a/django_code/apps/docker_connection/__init__.py b/django_code/apps/docker_connection/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/django_code/apps/docker_connection/admin.py b/django_code/apps/docker_connection/admin.py deleted file mode 100644 index 8c38f3f..0000000 --- a/django_code/apps/docker_connection/admin.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.contrib import admin - -# Register your models here. diff --git a/django_code/apps/docker_connection/apps.py b/django_code/apps/docker_connection/apps.py deleted file mode 100644 index 82601dd..0000000 --- a/django_code/apps/docker_connection/apps.py +++ /dev/null @@ -1,46 +0,0 @@ -from django.apps import AppConfig -from django.http import HttpResponse -from django.shortcuts import render -import requests -from proxmoxer import ProxmoxAPI -import docker - -class BackofficeConfig(AppConfig): - default_auto_field = 'django.db.models.BigAutoField' - name = 'backoffice' - -def hello(request): - return HttpResponse('

Start bookstack!

') - -def http_call_test(request): - url = 'http://portainer.zeus.geeraert.eu/api/auth/' - myobj = {'Username': 'admin','Password':'Xtm78*CX3mJ54g'} - - x = requests.post(url, json = myobj) - - print(x.text) - return HttpResponse(x.text) - -def proxmox(request): - proxmox = ProxmoxAPI("proxmox.zeus.geeraert.eu", user="root@pam", password="dinner_sl@v3", verify_ssl=False) - return HttpResponse(proxmox) - -def docker_call(request,action,id_docker): - print(action) - print(id_docker) - client = docker.from_env() - if action == "start": - print("nous allons start") - client.containers.get(id_docker).start() - if action == "stop": - print("nous allons stop") - client.containers.get(id_docker).stop() - - return HttpResponse(client.containers.get(id_docker).status) - - - - - - - diff --git a/django_code/apps/docker_connection/models.py b/django_code/apps/docker_connection/models.py deleted file mode 100644 index 71a8362..0000000 --- a/django_code/apps/docker_connection/models.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.db import models - -# Create your models here. diff --git a/django_code/apps/docker_connection/tests.py b/django_code/apps/docker_connection/tests.py deleted file mode 100644 index 7ce503c..0000000 --- a/django_code/apps/docker_connection/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/django_code/apps/docker_connection/views.py b/django_code/apps/docker_connection/views.py deleted file mode 100644 index dcf84f6..0000000 --- a/django_code/apps/docker_connection/views.py +++ /dev/null @@ -1,8 +0,0 @@ -from django.shortcuts import render - -# Create your views here. -from django.http import HttpResponse -from django.shortcuts import render - -def hello(request): - return HttpResponse('

Hello Django!

') -- 2.54.0 From d4a72ebf5d5944abf86799c35e0b5d16ec7c65de Mon Sep 17 00:00:00 2001 From: "pierre.geeraert" Date: Wed, 16 Sep 2026 14:38:11 +0100 Subject: [PATCH 5/6] we can have logos --- django_code/apps/streaming/admin.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/django_code/apps/streaming/admin.py b/django_code/apps/streaming/admin.py index a224e42..e63a22e 100644 --- a/django_code/apps/streaming/admin.py +++ b/django_code/apps/streaming/admin.py @@ -57,9 +57,10 @@ class streamingAdmin(UniversalModelAdmin): #return obj.status + @admin.register(StreamingRedirectData) class StreamingRedirectAdmin(UniversalModelAdmin): - list_display = ['name','season','episode','randomViewing','clickable_links','addedDate','alias'] + list_display = ['name','season','episode','randomViewing','clickable_links','addedDate','alias', 'image_tag'] #fields = ['name','season','episode','url_example','prefix','infix','suffix','alias','randomViewing','seasonInformation'] fieldsets = ( ( @@ -78,3 +79,6 @@ class StreamingRedirectAdmin(UniversalModelAdmin): }), ) link_field = 'url_display' + + def image_tag(self,obj): + return format_html(''.format("https://api.thumbalizr.com/static/images/error_api_key.png?url=http://google.com&width=125")) -- 2.54.0 From f188e25453fbfb3b0dc381edda5b2257e73bebfd Mon Sep 17 00:00:00 2001 From: pierre geeraert Date: Thu, 17 Sep 2026 22:33:06 +0100 Subject: [PATCH 6/6] add poster function --- django_code/apps/betaserie/utils.py | 20 ++++++++++++++++++- .../0009_alter_simpsonsdata_modified_at.py | 19 ++++++++++++++++++ django_code/apps/streaming/admin.py | 6 +++--- .../0015_streamingredirectdata_poster_url.py | 18 +++++++++++++++++ django_code/apps/streaming/models.py | 13 ++++++------ 5 files changed, 66 insertions(+), 10 deletions(-) create mode 100644 django_code/apps/random_simpsons/migrations/0009_alter_simpsonsdata_modified_at.py create mode 100644 django_code/apps/streaming/migrations/0015_streamingredirectdata_poster_url.py diff --git a/django_code/apps/betaserie/utils.py b/django_code/apps/betaserie/utils.py index e4a6ad7..8043f80 100644 --- a/django_code/apps/betaserie/utils.py +++ b/django_code/apps/betaserie/utils.py @@ -59,7 +59,25 @@ class betaserieUtils(): show_id = response.json()['shows'][0]['id'] return show_id - + + def poster_serie(self,serie_name,verbose=False): + # + # Usage + # poster_url = beta.poster_serie("The simpsons") + # poster_url = beta.poster_serie("The simpsons",verbose=True) + # + url = "https://api.betaseries.com/shows/search?title="+serie_name + + response = requests.request("GET", url, headers=self.headers, data=self.payload) + if verbose: + print("Url request: "+str(url)) + print(response.text) + + poster_url = response.json()['shows'][0]['images']['show'] + + return poster_url + + def identify_episode(self,show_id,episode_number,verbose=False): # # Usage diff --git a/django_code/apps/random_simpsons/migrations/0009_alter_simpsonsdata_modified_at.py b/django_code/apps/random_simpsons/migrations/0009_alter_simpsonsdata_modified_at.py new file mode 100644 index 0000000..92d863f --- /dev/null +++ b/django_code/apps/random_simpsons/migrations/0009_alter_simpsonsdata_modified_at.py @@ -0,0 +1,19 @@ +# Generated by Django 4.2.30 on 2026-09-17 21:26 + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('simpsons', '0008_alter_simpsonsdata_modified_at_alter_urldata_infix_and_more'), + ] + + operations = [ + migrations.AlterField( + model_name='simpsonsdata', + name='modified_at', + field=models.DateTimeField(default=datetime.datetime(1969, 12, 31, 23, 0, tzinfo=datetime.timezone.utc)), + ), + ] diff --git a/django_code/apps/streaming/admin.py b/django_code/apps/streaming/admin.py index e63a22e..f822d01 100644 --- a/django_code/apps/streaming/admin.py +++ b/django_code/apps/streaming/admin.py @@ -60,7 +60,7 @@ class streamingAdmin(UniversalModelAdmin): @admin.register(StreamingRedirectData) class StreamingRedirectAdmin(UniversalModelAdmin): - list_display = ['name','season','episode','randomViewing','clickable_links','addedDate','alias', 'image_tag'] + list_display = ['name','image_tag','season','episode','randomViewing','clickable_links','addedDate','alias'] #fields = ['name','season','episode','url_example','prefix','infix','suffix','alias','randomViewing','seasonInformation'] fieldsets = ( ( @@ -75,10 +75,10 @@ class StreamingRedirectAdmin(UniversalModelAdmin): ( 'Information', { "classes": ["collapse"], - 'fields': ('seasonInformation','alias','betaserieShowId','maximumNumberSeason') + 'fields': ('seasonInformation','alias','betaserieShowId','maximumNumberSeason','poster_url') }), ) link_field = 'url_display' def image_tag(self,obj): - return format_html(''.format("https://api.thumbalizr.com/static/images/error_api_key.png?url=http://google.com&width=125")) + return format_html(''.format(obj.poster_url)) diff --git a/django_code/apps/streaming/migrations/0015_streamingredirectdata_poster_url.py b/django_code/apps/streaming/migrations/0015_streamingredirectdata_poster_url.py new file mode 100644 index 0000000..ba34a96 --- /dev/null +++ b/django_code/apps/streaming/migrations/0015_streamingredirectdata_poster_url.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.30 on 2026-09-17 21:26 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('streaming', '0014_remove_streamingredirectdata_url_example_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='streamingredirectdata', + name='poster_url', + field=models.CharField(blank=True, help_text='poster URL', max_length=1000, null=True), + ), + ] diff --git a/django_code/apps/streaming/models.py b/django_code/apps/streaming/models.py index 0d36f13..1edddd1 100644 --- a/django_code/apps/streaming/models.py +++ b/django_code/apps/streaming/models.py @@ -31,28 +31,27 @@ class StreamingRedirectData(models.Model): betaserieShowId = models.IntegerField(null=True,blank=True) maximumNumberSeason = models.IntegerField(null=True,blank=True) randomViewing = models.BooleanField(default=False) + poster_url = models.CharField(max_length=1000, help_text="poster URL",blank=True, null=True) def sanitize(self, name): return name.replace(" ", "") def season_information(self, serie_name): betaserie = betaserieUtils() - print(serie_name) - print(betaserie.identify_serie(serie_name,True)) return betaserie.series_information(betaserie.identify_serie(serie_name))[0] def maximum_Number_Season(self, serie_name): betaserie = betaserieUtils() - print(serie_name) - print(betaserie.identify_serie(serie_name)) return betaserie.series_information(betaserie.identify_serie(serie_name))[1] def betaserie_show_id(self,serie_name): betaserie = betaserieUtils() - print(serie_name) - print(betaserie.identify_serie(serie_name)) return betaserie.identify_serie(serie_name) + def betaserie_poster_url(self,serie_name): + betaserie = betaserieUtils() + return betaserie.poster_serie(serie_name) + def url_display_set(self,alias): if ENVIRONMENT == "PRODUCTION": url = "https://streaming.geeraert.eu/" @@ -73,6 +72,8 @@ class StreamingRedirectData(models.Model): self.maximumNumberSeason = self.maximum_Number_Season(self.name) if not self.url_display: self.url_display = self.url_display_set(self.alias) + if not self.poster_url: + self.poster_url = self.betaserie_poster_url(self.name) super().save(*args, **kwargs) class Meta: -- 2.54.0