Merge pull request 'poster integration' (#48) from testing into main
Dockerfile runner / Explore-Gitea-Actions (push) Successful in 2m0s
Dockerfile runner / Explore-Gitea-Actions (push) Successful in 2m0s
Reviewed-on: http://gitea.geeraert.eu/pi-ux-ce/Django_kube/pulls/48
This commit was merged in pull request #48.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -3,12 +3,10 @@ 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'
|
||||
|
||||
|
||||
@admin.action(description="scale up")
|
||||
def scale_up_deploy(modeladmin, request, queryset):
|
||||
@@ -68,25 +66,8 @@ 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(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 +85,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 +94,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 +108,7 @@ class ScheduleWeekAdmin(ImportExportModelAdmin,ExtraButtonsMixin,MultiDBModelAdm
|
||||
|
||||
|
||||
@admin.register(Namespace_Data)
|
||||
class NamespaceAdmin(ImportExportModelAdmin,ExtraButtonsMixin, MultiDBModelAdmin):
|
||||
class NamespaceAdmin(UniversalModelAdmin):
|
||||
list_display = ('namespace',)
|
||||
|
||||
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
||||
@@ -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('<h1>Start bookstack!</h1>')
|
||||
|
||||
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)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
from django.db import models
|
||||
|
||||
# Create your models here.
|
||||
@@ -1,3 +0,0 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
@@ -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('<h1>Hello Django!</h1>')
|
||||
@@ -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]
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
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('<a href="{}">{}</a>', obj.podcast_url,obj.podcast_url)
|
||||
|
||||
link_field = 'podcast_url'
|
||||
|
||||
@@ -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('<a href="{}">{}</a>', 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')
|
||||
|
||||
|
||||
|
||||
@@ -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)),
|
||||
),
|
||||
]
|
||||
@@ -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('<a href="{}">{}</a>', obj.url,obj.url)
|
||||
|
||||
def result_colored(self, obj):
|
||||
colors = {
|
||||
'REACHABLE': 'green',
|
||||
@@ -60,9 +57,10 @@ class streamingAdmin(ImportExportModelAdmin):
|
||||
#return obj.status
|
||||
|
||||
|
||||
|
||||
@admin.register(StreamingRedirectData)
|
||||
class StreamingRedirectAdmin(ImportExportModelAdmin):
|
||||
list_display = ['name','season','episode','randomViewing','clickable_links','addedDate','alias']
|
||||
class StreamingRedirectAdmin(UniversalModelAdmin):
|
||||
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 = (
|
||||
(
|
||||
@@ -77,8 +75,10 @@ class StreamingRedirectAdmin(ImportExportModelAdmin):
|
||||
(
|
||||
'Information', {
|
||||
"classes": ["collapse"],
|
||||
'fields': ('seasonInformation','alias','betaserieShowId','maximumNumberSeason')
|
||||
'fields': ('seasonInformation','alias','betaserieShowId','maximumNumberSeason','poster_url')
|
||||
}),
|
||||
)
|
||||
def clickable_links(self, obj):
|
||||
return format_html('<a href="{}">{}</a>', obj.url_display,obj.url_display)
|
||||
link_field = 'url_display'
|
||||
|
||||
def image_tag(self,obj):
|
||||
return format_html('<img src="{0}" style="width: 150px; height:100px;" />'.format(obj.poster_url))
|
||||
|
||||
@@ -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),
|
||||
),
|
||||
]
|
||||
@@ -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:
|
||||
|
||||
@@ -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]
|
||||
|
||||
|
||||
@@ -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('<a href="{}">{}</a>', 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']
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
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
|
||||
# example:
|
||||
# search_fields = ['season', 'episode', 'url', 'seen']
|
||||
|
||||
link_field = 'url'
|
||||
|
||||
|
||||
def clickable_links(self, obj):
|
||||
url = getattr(obj, self.link_field, None)
|
||||
return format_html('<a href="{}">{}</a>', url,url)
|
||||
|
||||
@@ -252,3 +252,4 @@ PROXIES = {
|
||||
"http" : PROXY_URL,
|
||||
"https" : PROXY_URL
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user