82 Commits
Author SHA1 Message Date
pi-ux-ce f6506aeeca Update dockerfile
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 4m53s
2025-12-02 11:13:21 +00:00
pi-ux-ce 795720dcd2 changing redis hostname
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3m48s
2025-12-02 11:06:00 +00:00
pi-ux-ce 85962b11a6 adding some cache for PIP
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 5m45s
2025-12-02 10:47:20 +00:00
pi-ux-ce c1229b348e Update django_code/stash_management/apps.py
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 8m49s
2025-12-02 10:33:13 +00:00
pi-ux-ce 06358c4c07 Update django_code/django_code/wsgi.py
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-12-02 10:29:12 +00:00
pi-ux-ce fffde38fed Update .gitea/workflows/dockerfile_runner.yaml
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6m39s
2025-12-02 10:01:47 +00:00
pi-ux-ce 13bfc40c6a Update .gitea/workflows/dockerfile_runner.yaml
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 46s
2025-12-02 09:57:19 +00:00
pi-ux-ce 9024a1eab6 Update .gitea/workflows/dockerfile_runner.yaml
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 46s
2025-12-02 09:55:09 +00:00
pierre geeraert aa851a7779 fix mistake
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 8m18s
2025-12-02 00:54:20 +00:00
pierre geeraert ac3d20d072 work on the versionning
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 56s
2025-12-02 00:52:08 +00:00
pierre geeraert 02f16516f1 work on the versionning
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 59s
2025-12-02 00:47:42 +00:00
pierre geeraert c8301113e5 work on the versionning
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-12-02 00:47:13 +00:00
pierre geeraert 73fd35ad40 caching python3 image
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 11m24s
2025-12-02 00:31:05 +00:00
pi-ux-ce 996ed3d776 Update dockerfile
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-12-02 00:27:30 +00:00
pierre geeraert 05feced28f make things faster
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 4m37s
2025-12-02 00:20:37 +00:00
pi-ux-ce fe844437fb Update dockerfile
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 2m32s
2025-12-02 00:13:53 +00:00
pi-ux-ce 3de05c08bc Update dockerfile
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 2m6s
2025-12-02 00:07:44 +00:00
pi-ux-ce e6509e0932 try new git action
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 2m9s
2025-12-02 00:02:28 +00:00
pi-ux-ce ce95ed4854 try new dockerfile
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-12-02 00:00:40 +00:00
pierre geeraert 3bf2d553c8 fix improt
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 7m51s
2025-12-01 23:49:03 +00:00
pierre geeraert b3fb490c16 rename celery file
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 8m37s
2025-12-01 23:38:31 +00:00
pierre geeraert 5e8c2c73fd try new proxy
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 7m40s
2025-12-01 23:26:11 +00:00
pierre geeraert a75aabbec6 enable celery
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-12-01 23:16:55 +00:00
pierre geeraert 583522a422 breakthrough with the increment
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 17m20s
2025-11-27 23:25:42 +00:00
pierre geeraert a9b4a95e0c try
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 9m59s
2025-07-31 22:23:32 +01:00
pierre geeraert 8b68d52be0 try
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 9m24s
2025-07-31 22:00:56 +01:00
pierre geeraert 8f52aca2b4 try the unbuffered 2025-07-31 21:47:13 +01:00
pierre geeraert 744f920854 wrong copy/paste
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 7m49s
2025-07-31 21:09:41 +01:00
pierre geeraert fe43d274cb change process
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 6m56s
2025-07-31 20:56:46 +01:00
pierre geeraert 53f4c17a08 fix ident
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 8m14s
2025-07-31 20:13:22 +01:00
pierre geeraert f728cdafb4 try to integrate extra URLs
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 6m21s
2025-07-31 20:02:46 +01:00
pi-ux-ce 21b4b9b7fb Merge pull request 'use_external_url' (#5) from use_external_url into main
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6m46s
Reviewed-on: #5
2025-07-31 18:27:38 +00:00
pi-ux-ce 87a5e40e3e Update django_code/stash_management/apps.py
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-07-31 18:26:34 +00:00
pi-ux-ce bf7f831c42 Update django_code/dashboard/templates/stash_form.html
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-07-31 18:23:51 +00:00
pi-ux-ce f74a1a7076 🎨 cleanup useless variables
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 4m42s
2025-07-30 12:48:34 +00:00
pi-ux-ce 6c9c0ffad2 fixing mistake
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 5m8s
2025-07-29 23:18:28 +00:00
pi-ux-ce 4b1d75b1ba working change
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 4m57s
2025-07-29 23:08:30 +00:00
pi-ux-ce 6f06f7d657 working but work in progress for templating
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 5m25s
2025-07-29 22:36:50 +00:00
Pierre Geeraert 91c4928ec7 add namespace and purge
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 4m55s
2025-07-29 11:27:47 +01:00
pi-ux-ce 9ce785014d Merge pull request 'adding new form' (#4) from stash_from into main
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 5m7s
Reviewed-on: #4
2025-07-29 08:57:36 +00:00
Pierre Geeraert e139dcea35 remove useless files
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 5m48s
2025-07-29 09:54:07 +01:00
Pierre Geeraert adb18644ee change .gitignore
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6m20s
2025-07-29 09:46:47 +01:00
Pierre Geeraert bccd344aa7 adding new form
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-07-29 09:39:41 +01:00
pierre geeraert 3315fbdb4f change the DB settings and change the policy to restart after build
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 5m27s
2025-06-22 19:24:22 +01:00
pierre geeraert 5bbe4c5c61 work on the simpsons generator using the DB
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6m57s
2025-06-22 19:14:36 +01:00
Pierre Geeraert 2366d0c2a8 Revert "try without the cache git actions"
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3m41s
This reverts commit a4d9f63568.
2025-06-03 11:48:12 +01:00
Pierre Geeraert a4d9f63568 try without the cache git actions
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-06-03 11:46:04 +01:00
Pierre Geeraert 496f2b3bfb modify cache directory
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3m56s
2025-06-03 11:39:40 +01:00
Pierre Geeraert cb7a010fb6 modify cache directory
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-06-03 11:20:14 +01:00
Pierre Geeraert 5b5093708d modify cache directory
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-06-03 11:12:46 +01:00
Pierre Geeraert 975252656f modify cache directory
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3m23s
2025-06-03 11:07:43 +01:00
Pierre Geeraert 0b7da7a5c9 cache works but I want local
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 4m30s
2025-06-03 10:57:01 +01:00
Pierre Geeraert 4e70e2d28d change key for git action cache
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 5m19s
2025-06-03 10:48:40 +01:00
Pierre Geeraert 705db14521 commenting ,from=pip_cache 2025-06-03 10:47:34 +01:00
Pierre Geeraert 5b5d62e4fa commenting build-contexts
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 57s
2025-06-03 10:45:53 +01:00
Pierre Geeraert 9afe770202 try to use cache
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 1m40s
2025-06-03 10:43:15 +01:00
Pierre Geeraert 6a52ed2f66 try to use cache
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3m20s
2025-06-03 10:28:43 +01:00
pierre geeraert 279d59e376 change the action
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3m14s
2025-06-02 23:54:34 +01:00
pierre geeraert a6d9f29f1a change the action 2025-06-02 23:52:20 +01:00
pierre geeraert bb36edfca5 change the action 2025-06-02 23:51:27 +01:00
pierre geeraert f451b8ff3b change the action 2025-06-02 23:50:30 +01:00
pierre geeraert b837e1a952 change the action
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3m3s
2025-06-02 23:41:01 +01:00
pierre geeraert aa1501214d update the number of replicas 2025-06-02 23:37:56 +01:00
pierre geeraert 246eff86a6 test the action
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 44s
2025-06-02 23:13:12 +01:00
pierre geeraert e2ea76c6c9 change the action 2025-06-02 23:12:21 +01:00
pierre geeraert ad4fe6df26 change the action 2025-06-02 23:10:30 +01:00
pierre geeraert 43a000a9c1 fixing the wrong redirect
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 32s
2025-06-02 23:04:03 +01:00
pierre geeraert 32a0e65a68 forgot to remove the baseurl var
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 26s
2025-06-02 22:54:14 +01:00
pierre geeraert b80be01a52 change the config file
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 24s
2025-06-02 22:47:01 +01:00
pi-ux-ce daa935bbef update the secret for kubeconfig
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 26s
2025-06-02 22:39:49 +01:00
pierre geeraert cb49bfba58 change the config file
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 27s
2025-06-02 22:38:26 +01:00
pierre geeraert 60af5e87ce adding views for kubernetes connection
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 26s
2025-06-02 22:19:02 +01:00
Pierre Geeraert aad687f630 enable more view effects
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 26s
2025-06-02 17:38:48 +01:00
pi-ux-ce 6b30f381df Merge branch 'main' of https://gitea.tryton.geeraert.eu/pi-ux-ce/Django_kube
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 35s
2025-06-02 14:40:48 +01:00
Pierre Geeraert 5b03dc35b4 add urls for view
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 25s
2025-06-02 14:01:34 +01:00
pi-ux-ce f9732160f0 try to use only the code from the docker image
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 24s
2025-06-02 13:59:10 +01:00
Pierre Geeraert 8a84a8d42f works on the view
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 27s
2025-06-02 13:52:01 +01:00
Pierre Geeraert 39e6a69a08 fix the syntax error
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 27s
2025-06-02 10:58:21 +01:00
pi-ux-ce c9d6d77931 dependencies for bootstrap
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 26s
2025-06-02 09:39:05 +00:00
pi-ux-ce 2f30234edd Update requirements.txt
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 34s
2025-06-02 09:01:05 +00:00
pi-ux-ce cdd1dd0245 Update .gitea/workflows/dockerfile_runner.yaml
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 28s
2025-06-02 08:40:36 +00:00
pi-ux-ce df9d6c93cc Merge pull request 'working on views' (#1) from view into main
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 30s
Reviewed-on: #1
2025-06-02 08:36:25 +00:00
57 changed files with 1323 additions and 52 deletions
+43 -8
View File
@@ -2,12 +2,8 @@ name: Gitea Actions Demo
run-name: ${{ gitea.actor }} is testing out Gitea Actions 🚀
on:
push:
branches:
- "*"
paths:
- 'dockerfile'
tags-ignore:
- '*'
issue_comment:
types: [created]
jobs:
Explore-Gitea-Actions:
@@ -20,6 +16,29 @@ jobs:
- name: List files in the repository
run: |
ls ${{ gitea.workspace }}
- name: Compute next version
id: versioning
run: |
latest="${{ vars.VERSION }}"
next_version=$(echo "$latest" | awk -F. -v OFS=. '{$NF += 1 ; print}')
echo "next_version=$next_version" >> $GITHUB_ENV
echo "Variables used :"
echo "------------------------------------------------"
echo "Next version: $next_version"
- name: Cache pip
uses: actions/cache@v3
with:
path: /root/.cache/pip
key: pip
restore-keys: pip
- name: inject cache into docker
uses: reproducible-containers/buildkit-cache-dance@v3.1.0
with:
cache-source: /root/.cache/pip
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
@@ -34,7 +53,23 @@ jobs:
uses: docker/build-push-action@v6
with:
push: true
tags: gitea.tryton.geeraert.eu/pi-ux-ce/django-python:latest
tags: |
gitea.tryton.geeraert.eu/pi-ux-ce/django-python:latest
gitea.tryton.geeraert.eu/pi-ux-ce/django-python:${{ env.next_version }}
cache-from: type=registry,ref=gitea.tryton.geeraert.eu/pi-ux-ce/django-python:buildcache
cache-to: type=registry,ref=gitea.tryton.geeraert.eu/pi-ux-ce/django-python:buildcache,mode=max
- name: drop the pod to force pulling the new image
uses: actions-hub/kubectl@master
env:
KUBE_CONFIG: ${{ secrets.KUBE_CONFIG }}
with:
args: rollout restart deployment django -n django
- run: echo "🍏 This job's status is ${{ job.status }}."
- name: update version in the variable
run: |
curl -X PUT -H "Content-Type: application/json" \
--user ${{ secrets.USERNAME_GITEA }}:${{ secrets.PASSWORD_GITEA }} \
https://gitea.tryton.geeraert.eu/api/v1/repos/pi-ux-ce/${{ github.event.repository.name }}/actions/variables/VERSION \
-d "{\"Value\":\"$next_version\"}"
+8 -1
View File
@@ -1,6 +1,13 @@
name: Gitea Actions Demo
run-name: ${{ gitea.actor }} is testing out Gitea Actions 🚀
on: [push]
on:
push:
branches:
- "*"
paths:
- '*.yaml'
tags-ignore:
- '*'
jobs:
Explore-Gitea-Actions:
+3
View File
@@ -1 +1,4 @@
*/__pycache__/*
*/.idea
venv/*
*__pycache__*
+9 -2
View File
@@ -26,11 +26,14 @@ spec:
- containerPort: 8000
name: webserver-port
volumeMounts:
- name: django-python-code
mountPath: /code
## - name: django-python-code
# mountPath: /code
- name: servarr-data
mountPath: /data
readOnly: true
- name: secret-kubeconfig
mountPath: /kubeconfig
resources:
limits:
@@ -43,6 +46,10 @@ spec:
- name: servarr-data
hostPath:
path: /data
- name: secret-kubeconfig
secret:
defaultMode: 420
secretName: kubeconfig
---
@@ -0,0 +1,299 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Stash form</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto|Varela+Round">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<style>
@charset "UTF-8";
.m-b-xs {
margin-bottom: 2%;
}
.m-b-md {
margin-bottom: 10%;
}
.m-t-xs {
margin-top: 2%;
}
.m-t-sm {
margin-top: 5%;
}
* {
outline: 0 !important;
}
body {
padding: 2% 0;
background-color: #37404a;
}
h1 {
font-family: "Roboto", sans-serif;
font-size: 2.2em;
font-weight: 300;
color: #85ffc7;
text-transform: uppercase;
}
p {
font-family: "Roboto", sans-serif;
font-size: 1.1em;
font-weight: 300;
color: #fff;
}
a {
color: #fff;
}
a:hover {
text-decoration: none;
color: #fff;
}
#survey-form label,
#survey-form .labels {
display: block;
margin-bottom: 2%;
font-family: "Roboto", sans-serif;
font-size: 1.1em;
font-weight: 300;
color: #fff;
letter-spacing: 0.5px;
}
#survey-form input::-webkit-input-placeholder {
color: transparent !important;
}
#survey-form input::-moz-placeholder {
color: transparent !important;
}
#survey-form input:-ms-input-placeholder {
color: transparent !important;
}
#survey-form input:-moz-placeholder {
color: transparent !important;
}
#survey-form input,
#survey-form select {
display: block;
width: 100%;
overflow: hidden;
outline: none;
border: 2px solid #333;
}
#survey-form input {
margin-top: 1.5%;
padding: 0 0 5px 0;
background: transparent;
border: none;
outline: none;
border-bottom: 2px solid #fff;
font-size: 1.1em;
font-weight: 300;
color: #85ffc7;
}
#survey-form input:focus {
border-color: #85ffc7;
}
#survey-form [type=checkbox],
#survey-form [type=radio] {
display: inline-block;
width: auto;
margin: 0px 10px 0 0;
}
#survey-form [type=checkbox],
#survey-form [type=radio] {
display: inline-block;
margin: 0 10px 0 0 !important;
position: relative;
top: 5px;
right: 0;
bottom: 0;
left: 0;
-webkit-appearance: none;
-moz-appearance: none;
-o-appearance: none;
appearance: none;
height: 23px;
width: 23px;
transition: all 0.15s ease-out 0s;
background: #37404a;
color: #fff;
cursor: pointer;
outline: none;
z-index: 1000;
border: 1px solid #fff;
}
#survey-form [type=checkbox]:hover,
#survey-form [type=radio]:hover {
border-color: #85ffc7;
}
#survey-form [type=checkbox]:checked:before,
#survey-form [type=radio]:checked:before {
display: inline-block;
height: 21px;
width: 21px;
position: relative;
left: 0;
bottom: 0;
content: "";
text-align: center;
font-family: "Glyphicons Halflings";
line-height: 20px;
font-size: 15px;
color: #85ffc7;
}
#survey-form [type=checkbox]:focus,
#survey-form [type=radio]:focus {
outline: none;
border-color: #fff;
}
#survey-form [type=radio] {
border-radius: 50%;
}
#survey-form [type=radio]:after {
border-radius: 50%;
}
#survey-form [type=number] {
width: 45px;
}
#survey-form [type=number]::-webkit-inner-spin-button, #survey-form [type=number]::-webkit-outer-spin-button {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
margin: 0;
}
#survey-form select {
height: 40px;
padding-left: 5px;
background-color: #37404a;
border: 2px solid #fff;
color: #85ffc7;
}
#survey-form select option {
padding: 5px 10px;
font-weight: 300;
cursor: pointer;
}
#survey-form select option:hover {
background-color: #85ffc7;
}
#survey-form textarea {
resize: none;
margin-top: 2%;
padding: 10px 10px 0px 20px;
width: 100%;
height: 90px;
color: #85ffc7;
background-color: #37404a;
border: 2px solid #fff;
}
#survey-form .btn {
display: inline-block;
position: relative;
width: 100%;
margin: 3% 0 0 0;
height: 45px;
text-transform: uppercase;
text-decoration: none;
cursor: pointer;
border: 3px solid #85ffc7;
border-radius: 0;
font-weight: 500;
font-size: 1.2em;
color: #85ffc7;
text-align: center;
background: none;
transition: color 0.25s ease;
}
#survey-form .btn:after {
position: absolute;
content: "";
top: 0;
left: 0;
width: 0;
height: 100%;
background-color: #85ffc7;
transform-origin: left;
transition: width 0.5s ease;
z-index: -1;
}
#survey-form .btn:hover {
color: #37404a;
}
#survey-form .btn:hover:after {
width: 100%;
}
#survey-form fieldset {
margin: 5% 0 0 0;
}
.copyright {
text-align: center;
font-size: 10px;
color: #fff;
}
.copyright i {
color: #ef5350;
}
@media only screen and (max-width: 600px) {
body {
padding: 8% 0;
}
}
</style>
</head>
<main id="main" class="container">
<div class="row">
<div class="col-xs-12 col-lg-offset-3 col-lg-6">
<div class="m-b-md text-center">
<h1 id="title">fapello Form</h1>
<p id="description" class="description" class="text-center">Download form</p>
</div>
<form method="GET" action="/stash/fapello-form/" id="survey-form" name="survey-form">
<fieldset>
<label for="name" id="name-label">
Name *
<input class="" type="text" id="name" name="name" placeholder="Enter your name (required)" required />
</label>
</fieldset>
<fieldset>
<label for="url" id="url-label">
URL of one image before the increment *
<input class="" type="url" id="url" name="url" placeholder="Enter the URL before the increment(required)" required />
</label>
</fieldset>
<fieldset>
<label for="url_suffix" id="url_suffix-label">
suffix URL of one image after the increment *
<input class="" type="string" id="url_suffix" name="url_suffix" placeholder="Enter the URL suffix (Example .png)(required)" required />
</label>
</fieldset>
<fieldset>
<label for="maximum_increment" id="maximum_increment_label">
Maximum increment value *
<input class="" type="text" id="maximum_increment" name="maximum_increment" placeholder="Enter the maximum increment(required)" required />
</label>
</fieldset>
<fieldset>
<label for="Minimum_increment" id="Minimum_increment_label">
Minimum increment value
<input class="" type="text" id="Minimum_increment" name="Minimum_increment" placeholder="Enter the minimum increment (default 1)" />
</label>
</fieldset>
<button id="submit" type="submit" class="btn">Submit the form</button>
</form>
</div>
</div>
</main>
</html>
@@ -0,0 +1,134 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Scaled down</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto|Varela+Round">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script>
<style>
body {
font-family: 'Varela Round', sans-serif;
}
.modal-confirm {
color: #636363;
width: 325px;
font-size: 14px;
}
.modal-confirm .modal-content {
padding: 20px;
border-radius: 5px;
border: none;
}
.modal-confirm .modal-header {
border-bottom: none;
position: relative;
}
.modal-confirm h4 {
text-align: center;
font-size: 26px;
margin: 30px 0 -15px;
}
.modal-confirm .form-control, .modal-confirm .btn {
min-height: 40px;
border-radius: 3px;
}
.modal-confirm .close {
position: absolute;
top: -5px;
right: -5px;
}
.modal-confirm .modal-footer {
border: none;
text-align: center;
border-radius: 5px;
font-size: 13px;
}
.modal-confirm .icon-box {
color: #fff;
position: absolute;
margin: 0 auto;
left: 0;
right: 0;
top: -70px;
width: 105px;
height: 105px;
border-radius: 50%;
z-index: 9;
/*background: #82ce34;*/
background: #a80505;
padding: 15px;
text-align: center;
box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.1);
}
.modal-confirm .icon-box i {
font-size: 58px;
position: relative;
top: 0px;
}
.modal-confirm .icon-box:hover,.modal-confirm .icon-box:focus {
background: #6fb32b;
/*background: #a80505;*/
outline: none;
}
.modal-confirm.modal-dialog {
margin-top: 80px;
}
.modal-confirm .btn {
color: #fff;
border-radius: 4px;
/*background: #82ce34;*/
background: #a80505;
text-decoration: none;
transition: all 0.4s;
line-height: normal;
border: none;
}
.modal-confirm .btn:hover, .modal-confirm .btn:focus {
background: #800404;
/*background: #a80505;*/
outline: none;
}
.trigger-btn {
display: inline-block;
margin: 100px auto;
}
</style>
</head>
<body>
<div class="text-center">
<!-- Button HTML (to Trigger Modal) -->
<!--<a href="#myModal" class="trigger-btn" data-toggle="modal">Click to Open Confirm Modal</a> -->
<!-- Modal HTML -->
<!--<div id="myModal" class="modal fade">-->
<div class="modal-dialog modal-confirm">
<div class="modal-content">
<div class="modal-header">
<div class="icon-box" onclick="window.location='/kubernetes_connection/scale_up/{{namespace}}/{{deployment}}';">
<!--<i class="material-icons">&#xE876;</i>-->
<i class="material-icons">&#xd7;</i>
</div>
<h4 class="modal-title w-100">Too bad!</h4>
</div>
<div class="modal-body">
<p class="text-center">{{ deployment }} deployment from namespace {{ namespace }} is now scaled down.</p>
<p class="text-center">Current URL {{ url }}.</p>
<p class="text-center">base URL {{ baseurl }}.</p>
</div>
<div href={{ url }} class="modal-footer">
<!--<button href={{ url }} class="btn btn-success btn-block" data-dismiss="modal">Redirect</button>-->
<a href="https://google.fr" class="btn btn-success btn-block" data-dismiss="modal">Redirect</a>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
+133
View File
@@ -0,0 +1,133 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Scaled up</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto|Varela+Round">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script>
<style>
body {
font-family: 'Varela Round', sans-serif;
}
.modal-confirm {
color: #636363;
width: 325px;
font-size: 14px;
}
.modal-confirm .modal-content {
padding: 20px;
border-radius: 5px;
border: none;
}
.modal-confirm .modal-header {
border-bottom: none;
position: relative;
}
.modal-confirm h4 {
text-align: center;
font-size: 26px;
margin: 30px 0 -15px;
}
.modal-confirm .form-control, .modal-confirm .btn {
min-height: 40px;
border-radius: 3px;
}
.modal-confirm .close {
position: absolute;
top: -5px;
right: -5px;
}
.modal-confirm .modal-footer {
border: none;
text-align: center;
border-radius: 5px;
font-size: 13px;
}
.modal-confirm .icon-box {
color: #fff;
position: absolute;
margin: 0 auto;
left: 0;
right: 0;
top: -70px;
width: 95px;
height: 95px;
border-radius: 50%;
z-index: 9;
background: #82ce34;
padding: 15px;
text-align: center;
box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.1);
}
.modal-confirm .icon-box i {
font-size: 58px;
position: relative;
top: 3px;
}
.modal-confirm .icon-box:hover,.modal-confirm .icon-box:focus {
/*background: #6fb32b;*/
background: #a80505;
outline: none;
}
.modal-confirm.modal-dialog {
margin-top: 80px;
}
.modal-confirm .btn {
color: #fff;
border-radius: 4px;
background: #82ce34;
text-decoration: none;
transition: all 0.4s;
line-height: normal;
border: none;
}
.modal-confirm .btn:hover, .modal-confirm .btn:focus {
background: #6fb32b;
/*background: #a80505;*/
outline: none;
}
.trigger-btn {
display: inline-block;
margin: 100px auto;
}
</style>
</head>
<body>
<div class="text-center">
<!-- Button HTML (to Trigger Modal) -->
<!--<a href="#myModal" class="trigger-btn" data-toggle="modal">Click to Open Confirm Modal</a> -->
<!-- Modal HTML -->
<!--<div id="myModal" class="modal fade">-->
<div class="modal-dialog modal-confirm">
<div class="modal-content">
<div class="modal-header">
<div class="icon-box" onclick="window.location='/kubernetes_connection/scale_down/{{namespace}}/{{deployment}}';">
<!--<i class="material-icons">&#xE876;</i>-->
<i class="material-icons">&#xE876;</i>
</div>
<h4 class="modal-title w-100">Awesome!</h4>
</div>
<div class="modal-body">
<p class="text-center">{{ deployment }} deployment from namespace {{ namespace }} is now scaled up.</p>
<p class="text-center">Current URL {{ url }}.</p>
<p class="text-center">base URL {{ baseurl }}.</p>
</div>
<div href={{ url }} class="modal-footer">
<!--<button href={{ url }} class="btn btn-success btn-block" data-dismiss="modal">Redirect</button>-->
<a href="https://google.fr" class="btn btn-success btn-block" data-dismiss="modal">Redirect</a>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
@@ -0,0 +1,288 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Stash form</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto|Varela+Round">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<style>
@charset "UTF-8";
.m-b-xs {
margin-bottom: 2%;
}
.m-b-md {
margin-bottom: 10%;
}
.m-t-xs {
margin-top: 2%;
}
.m-t-sm {
margin-top: 5%;
}
* {
outline: 0 !important;
}
body {
padding: 2% 0;
background-color: #37404a;
}
h1 {
font-family: "Roboto", sans-serif;
font-size: 2.2em;
font-weight: 300;
color: #85ffc7;
text-transform: uppercase;
}
p {
font-family: "Roboto", sans-serif;
font-size: 1.1em;
font-weight: 300;
color: #fff;
}
a {
color: #fff;
}
a:hover {
text-decoration: none;
color: #fff;
}
#survey-form label,
#survey-form .labels {
display: block;
margin-bottom: 2%;
font-family: "Roboto", sans-serif;
font-size: 1.1em;
font-weight: 300;
color: #fff;
letter-spacing: 0.5px;
}
#survey-form input::-webkit-input-placeholder {
color: transparent !important;
}
#survey-form input::-moz-placeholder {
color: transparent !important;
}
#survey-form input:-ms-input-placeholder {
color: transparent !important;
}
#survey-form input:-moz-placeholder {
color: transparent !important;
}
#survey-form input,
#survey-form select {
display: block;
width: 100%;
overflow: hidden;
outline: none;
border: 2px solid #333;
}
#survey-form input {
margin-top: 1.5%;
padding: 0 0 5px 0;
background: transparent;
border: none;
outline: none;
border-bottom: 2px solid #fff;
font-size: 1.1em;
font-weight: 300;
color: #85ffc7;
}
#survey-form input:focus {
border-color: #85ffc7;
}
#survey-form [type=checkbox],
#survey-form [type=radio] {
display: inline-block;
width: auto;
margin: 0px 10px 0 0;
}
#survey-form [type=checkbox],
#survey-form [type=radio] {
display: inline-block;
margin: 0 10px 0 0 !important;
position: relative;
top: 5px;
right: 0;
bottom: 0;
left: 0;
-webkit-appearance: none;
-moz-appearance: none;
-o-appearance: none;
appearance: none;
height: 23px;
width: 23px;
transition: all 0.15s ease-out 0s;
background: #37404a;
color: #fff;
cursor: pointer;
outline: none;
z-index: 1000;
border: 1px solid #fff;
}
#survey-form [type=checkbox]:hover,
#survey-form [type=radio]:hover {
border-color: #85ffc7;
}
#survey-form [type=checkbox]:checked:before,
#survey-form [type=radio]:checked:before {
display: inline-block;
height: 21px;
width: 21px;
position: relative;
left: 0;
bottom: 0;
content: "";
text-align: center;
font-family: "Glyphicons Halflings";
line-height: 20px;
font-size: 15px;
color: #85ffc7;
}
#survey-form [type=checkbox]:focus,
#survey-form [type=radio]:focus {
outline: none;
border-color: #fff;
}
#survey-form [type=radio] {
border-radius: 50%;
}
#survey-form [type=radio]:after {
border-radius: 50%;
}
#survey-form [type=number] {
width: 45px;
}
#survey-form [type=number]::-webkit-inner-spin-button, #survey-form [type=number]::-webkit-outer-spin-button {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
margin: 0;
}
#survey-form select {
height: 40px;
padding-left: 5px;
background-color: #37404a;
border: 2px solid #fff;
color: #85ffc7;
}
#survey-form select option {
padding: 5px 10px;
font-weight: 300;
cursor: pointer;
}
#survey-form select option:hover {
background-color: #85ffc7;
}
#survey-form textarea {
resize: none;
margin-top: 2%;
padding: 10px 10px 0px 20px;
width: 100%;
height: 90px;
color: #85ffc7;
background-color: #37404a;
border: 2px solid #fff;
}
#survey-form .btn {
display: inline-block;
position: relative;
width: 100%;
margin: 3% 0 0 0;
height: 45px;
text-transform: uppercase;
text-decoration: none;
cursor: pointer;
border: 3px solid #85ffc7;
border-radius: 0;
font-weight: 500;
font-size: 1.2em;
color: #85ffc7;
text-align: center;
background: none;
transition: color 0.25s ease;
}
#survey-form .btn:after {
position: absolute;
content: "";
top: 0;
left: 0;
width: 0;
height: 100%;
background-color: #85ffc7;
transform-origin: left;
transition: width 0.5s ease;
z-index: -1;
}
#survey-form .btn:hover {
color: #37404a;
}
#survey-form .btn:hover:after {
width: 100%;
}
#survey-form fieldset {
margin: 5% 0 0 0;
}
.copyright {
text-align: center;
font-size: 10px;
color: #fff;
}
.copyright i {
color: #ef5350;
}
@media only screen and (max-width: 600px) {
body {
padding: 8% 0;
}
}
</style>
</head>
<main id="main" class="container">
<div class="row">
<div class="col-xs-12 col-lg-offset-3 col-lg-6">
<div class="m-b-md text-center">
<h1 id="title">Stash Form</h1>
<p id="description" class="description" class="text-center">Download form</p>
</div>
<form method="GET" action="/stash/submit-form/" id="survey-form" name="survey-form">
<fieldset>
<label for="name" id="name-label">
Name *
<input class="" type="text" id="name" name="name" placeholder="Enter your name (required)" required />
</label>
</fieldset>
<fieldset>
<label for="url" id="url-label">
URL *
<input class="" type="url" id="url" name="url" placeholder="Enter the URL (required)" required />
</label>
</fieldset>
<fieldset>
<label for="external_galleries">
Any external galleries ?
<textarea id="external_galleries" name="external_galleries" ></textarea>
</label>
</fieldset>
<button id="submit" type="submit" class="btn">Submit the form</button>
</form>
</div>
</div>
</main>
</html>
+12
View File
@@ -1,5 +1,6 @@
from django.shortcuts import render
def home(request):
thislist = ["apple", "banana", "cherry"]
return render(request, 'home.html',{'thislist': thislist})
@@ -7,3 +8,14 @@ def home(request):
def about(request):
thislist = ["apple", "banana", "cherry"]
return render(request, 'about.html',{'thislist': thislist})
def success(request):
return render(request, 'start.html',{'deployment': 'django','url':'https://google.com'})
def scale_up(request,namespace_name,deploy_name):
baseurl = "{0}://{1}{2}".format(request.scheme, request.get_host(), request.path)
return render(request, 'start.html', {'namespace':namespace_name,'deployment': deploy_name, 'url': 'https://namespace.com','baseurl': baseurl})
def scale_down(request,namespace_name,deploy_name):
baseurl = "{0}://{1}{2}".format(request.scheme, request.get_host(), request.path)
return render(request, 'shutdown.html', {'namespace':namespace_name,'deployment': deploy_name, 'url': 'https://namespace.com','baseurl': baseurl})
+3
View File
@@ -0,0 +1,3 @@
from .celery_settings import app as celery_app
__all__ = ("celery_app",)
@@ -0,0 +1,8 @@
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_code.settings')
app = Celery("django_code")
app.config_from_object("django.conf:settings", namespace="CELERY")
app.autodiscover_tasks()
+3
View File
@@ -124,3 +124,6 @@ STATIC_URL = 'static/'
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
#
# Celery settings
CELERY_BROKER_URL = "redis://django-redis-svc:6379"
CELERY_RESULT_BACKEND = "redis://django-redis-svc:6379"
+13
View File
@@ -23,6 +23,7 @@ from onenote import apps as onenote
from dashboard import apps as dashboardapp
from dashboard import views as dashboardview
from kubernetes_connection import apps as kubernetes_connection
from stash_management import apps as stashapp
urlpatterns = [
# path('admin/', admin.site.urls),
@@ -43,6 +44,10 @@ urlpatterns = [
path('dashboard/hello/', dashboardapp.hello),
path('dashboard/view/about', dashboardview.about),
path('dashboard/view/home', dashboardview.home),
path('dashboard/view/success', dashboardview.success),
path('dashboard/scale_up/<str:namespace_name>/<str:deploy_name>', dashboardview.scale_up),
path('dashboard/scale_down/<str:namespace_name>/<str:deploy_name>', dashboardview.scale_down),
################## kubernetes_connection#####
@@ -53,6 +58,14 @@ urlpatterns = [
path('kubernetes_connection/scale_up/<str:namespace_name>/<str:deploy_name>', kubernetes_connection.scale_up),
path('kubernetes_connection/scale_down/<str:namespace_name>/<str:deploy_name>', kubernetes_connection.scale_down),
################## kubernetes_connection#####
path('stash/hello/', stashapp.hello),
path('stash/form/', stashapp.form),
path('stash/fapello/', stashapp.fapello),
path('stash/submit-form/', stashapp.handle_survey_form, name='submit_form'),
path('stash/fapello-form/', stashapp.fapello_form, name='submit_form'),
# path('bookstack/', docker_connection.apps.hello),
# path('test/', docker_connection.apps.http_call_test),
# path('proxmox/', docker_connection.apps.proxmox),
+7
View File
@@ -14,3 +14,10 @@ from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_code.settings')
application = get_wsgi_application()
https_proxy = "gluetun-svc.gluetun.svc:8888"
proxyDict = {
"https" : https_proxy,
}
#os.environ["PROXIES"] = proxyDict
+17 -13
View File
@@ -18,23 +18,26 @@ def hello(request):
return HttpResponse('<h1>Hello k8s!</h1>')
def scale_up(request,namespace_name,deploy_name):
config.load_kube_config(config_file='/code/kubeconfig')
config.load_kube_config(config_file='/kubeconfig/config')
api = client.AppsV1Api()
deployment = api.read_namespaced_deployment(name=deploy_name, namespace=namespace_name)
deployment.spec.replicas = 2
deployment.spec.replicas = 1
resp = api.patch_namespaced_deployment(
name=deploy_name, namespace=namespace_name, body=deployment);
return HttpResponse('<h1>Scaled up !</h1>')
#return HttpResponse('<h1>Scaled up !</h1>')
return render(request, 'start.html', {'namespace':namespace_name,'deployment': deploy_name, 'url': 'https://namespace.com'})
def scale_down(request,namespace_name,deploy_name):
config.load_kube_config(config_file='/code/kubeconfig')
config.load_kube_config(config_file='/kubeconfig/config')
api = client.AppsV1Api()
deployment = api.read_namespaced_deployment(name=deploy_name, namespace=namespace_name)
deployment.spec.replicas = 0
resp = api.patch_namespaced_deployment(
name=deploy_name, namespace=namespace_name, body=deployment);
return HttpResponse('<h1>Scaled down !</h1>')
#return HttpResponse('<h1>Scaled down !</h1>')
return render(request, 'shutdown.html',
{'namespace': namespace_name, 'deployment': deploy_name, 'url': 'https://namespace.com'})
def nodes(request):
config.load_kube_config(config_file='/code/kubeconfig')
@@ -111,15 +114,16 @@ def backup_job(request):
#help with yaml import
#https://github.com/kubernetes-client/python/issues/589
def backup_job_yaml(request):
def backup_job_yaml(request,sync_target):
config.load_kube_config(config_file='/code/kubeconfig')
v1 = client.BatchV1Api()
with urllib.request.urlopen(https://gitea.tryton.geeraert.eu/pi-ux-ce/Backup_kube/raw/branch/main/Infrequent_access/pod.yaml") as manifest_url:
yaml_location = {
"synology" : "https://gitea.tryton.geeraert.eu/pi-ux-ce/Backup_kube/raw/branch/main/Infrequent_access/synology_pod.yaml",
"openmediavault":"https://gitea.tryton.geeraert.eu/pi-ux-ce/Backup_kube/raw/branch/main/Infrequent_access/openmediavault_pod.yaml"
}
print(yaml_location[sync_target])
url_to_select=yaml_location[sync_target]
api_response = v1.create_namespaced_job(body=pod_manifest_job)
# with open('/code/pod.yaml') as :
job = yaml.safe_load(manifest_url)
v1.create_namespaced_job(
job['metadata']['namespace'], job, pretty=True
)
return HttpResponse(job['metadata']['namespace'])
return HttpResponse(api_response)
Binary file not shown.
Binary file not shown.
+59 -15
View File
@@ -7,9 +7,34 @@ from django.core.files import File
#from django.template.loader import render_to_string
import time
import psycopg2
import random
import mimetypes
def DB_generation(host_in,port_in,user_in,password_in,db_in):
#db = pymysql.connect(host=host_in, port=port_in, user=user_in, passwd=password_in,db=db_in)
db = psycopg2.connect(host=host_in, port=port_in, user=user_in, password=password_in,database=db_in)
return db
def Launch_sql_query(sql,db):
#sql query with 1 object returned
cursor = db.cursor()
try:
# Execute the SQL command
cursor.execute(sql)
# Fetch all the rows in a list of lists.
results = cursor.fetchall()
for row in results:
return row[0]
except:
print ("Error: unable to fetch data from the query:")
print (sql)
print("---")
cursor.close()
def hello(request):
return HttpResponse('<h1>Hello Simpsons!</h1>')
#<h1>href="{{ STATIC_URL }}/files/somefile</h1>)
@@ -42,27 +67,46 @@ def download_mo(request,file):
#return HttpResponse('<h1>Hello !</h1>')
def simpsons(request):
# simpsons_url = "https://www1.kisscartoon.online/episode/the-simpsons-season-";
simpsons_url = "https://kisscartoon.top/episode/the-simpsons-season-";
number_of_seasons = 35
seasons_maximum_number = [13,22,24,22,22,25,25,25,25,23,22,21,22,22,22,21,22,22,20,21,23,22,22,22,22,22,22,22,21,23,22,22,22,22,18]
#dev settings
#generated_db = DB_generation("192.168.88.50",32345, "django_username", "Suffrage-Moneybags-Illusion7","django")
#production settings
generated_db = DB_generation("django-db-svc",5432, "django_username", "Suffrage-Moneybags-Illusion7","django")
#print(simpsons_url)
cursor = generated_db.cursor()
random_seasons = random.randint(1, number_of_seasons)
print("random seasons: "+ str(random_seasons))
#get max number of season
maximum_number_of_seasons = Launch_sql_query("SELECT COUNT(DISTINCT season) as result FROM episodes;",generated_db)
#random_seasons-1 because list start at index 0
print("maximum of episode for this season: "+str(seasons_maximum_number[random_seasons-1]))
boolean_restart = True;
while (boolean_restart):
random_episode = random.randint(1, seasons_maximum_number[random_seasons-1])
random_seasons = random.randint(1, maximum_number_of_seasons)
print("random season: " + str(random_seasons))
#get max number of epiosde for this season
maximum_number_of_episodes_query = "SELECT COUNT(url) as result FROM episodes WHERE season = " + str(random_seasons) + ";"
maximum_number_of_episodes = Launch_sql_query(maximum_number_of_episodes_query,generated_db)
random_episode = random.randint(1, maximum_number_of_episodes)
print("random episode: " + str(random_episode))
#check if the episode was already seen
check_if_already_seen_query = "select seen from episodes where season="+ str(random_seasons) +" and episode = "+ str(random_episode) +";"
if not Launch_sql_query(check_if_already_seen_query, generated_db):
boolean_restart = False
else:
print("episode "+str(random_episode)+" from season "+str(random_seasons)+" already seen")
final_url = simpsons_url+str(random_seasons)+ "-episode-"+str(random_episode)#
print(final_url)
url_from_episode_season_query = "select url from episodes where season="+ str(random_seasons) +" and episode = "+ str(random_episode) +";"
generated_url = Launch_sql_query(url_from_episode_season_query,generated_db)
return HttpResponse(str(final_url))
# time.sleep(10)
# return redirect(str(final_url))
#mark as seen
url_from_episode_season_query = "update episodes set seen = True where season=" + str(random_seasons) + " and episode = " + str(random_episode) + ";"
Launch_sql_query(url_from_episode_season_query, generated_db)
generated_db.commit()
generated_db.close()
#return HttpResponse(str(generated_url))
return redirect(str(generated_url))
+3
View File
@@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.
+118
View File
@@ -0,0 +1,118 @@
from django.apps import AppConfig
from django.http import HttpResponse
from django.shortcuts import render
from django.shortcuts import redirect
#from jinja2 import Environment, FileSystemLoader
from django.core.files import File
from kubernetes import client, config
from celery import shared_task
import time
import random
import mimetypes
import ruamel.yaml
import yaml
from urllib import request as urlrequest
proxy_host = "gluetun-svc.gluetun.svc:8888"
def hello(request):
return HttpResponse('<h1>Hello stash!</h1>')
def form(request):
return render(request, 'stash_form.html',{})
def fapello(request):
return render(request, 'fapello_form.html',{})
def fapello_form(request):
stash_folder = "/tmp/stash"
name = request.GET.get('name')
url = request.GET.get('url')
url_suffix = request.GET.get('url_suffix')
maximum_increment = int(request.GET.get('maximum_increment'))
minimum_increment = request.GET.get('minimum_increment')
increment_and_download.delay(minimum_increment=minimum_increment,maximum_increment=maximum_increment,url=url,url_suffix=url_suffix,stash_folder=stash_folder,name=name)
#return HttpResponse(minimum_increment, content_type="text/plain")
# if minimum_increment == None:
# minimum_increment = 1
#
# text_generated = ""
#
# for increment in range(minimum_increment,maximum_increment):
# if len(str(increment)) == 3:
# increment_generated ='0' + str(increment)
# elif len(str(increment)) == 2:
# increment_generated ='00' + str(increment)
# elif len(str(increment)) == 1:
# increment_generated ='000' + str(increment)
#
#
# urllib.request.urlretrieve(url+increment_generated+url_suffix, stash_folder+"/"+increment_generated+url_suffix)
# text_generated = "\n downloading for "+name+" "+url+increment_generated+url_suffix
text_generated = "successfully sent to celery"
return HttpResponse(text_generated, content_type="text/plain")
@shared_task()
def increment_and_download(minimum_increment,maximum_increment,url,url_suffix,stash_folder,name):
if minimum_increment == None:
minimum_increment = 1
text_generated = ""
for increment in range(minimum_increment,maximum_increment):
if len(str(increment)) == 3:
increment_generated ='0' + str(increment)
elif len(str(increment)) == 2:
increment_generated ='00' + str(increment)
elif len(str(increment)) == 1:
increment_generated ='000' + str(increment)
req = urlrequest.Request(url+increment_generated+url_suffix)
req.set_proxy(proxy_host, 'https')
urlrequest.urlretrieve(req, stash_folder+"/"+increment_generated+url_suffix)
text_generated = "\n downloading for "+name+" "+url+increment_generated+url_suffix
return text_generated
def handle_survey_form(request):
config.load_kube_config(config_file='/kubeconfig/config')
v1 = client.BatchV1Api()
name = request.GET.get('name')
url = request.GET.get('url')
external_galleries = str(request.GET.get('external_galleries'))
stash_folder = "/stash"
if external_galleries:
print("external_galleries is not null")
performer_external_galleries = stash_folder+"/"+name+"_external_galleries.txt"
with open(performer_external_galleries, "a") as f:
f.write(external_galleries)
skip_searching_gallery = True
else:
print("external_galleries is null")
skip_searching_gallery = False
with open('django_code/stash_management/templates/template.stash-pornpics-dowloader.job.yml', 'r') as file:
#get the manifest in a variable template_manifest from the manifest file
template_manifest = yaml.safe_load(file)
#edit the container name
template_manifest['metadata']['name'] ="stash-pornpics-dowloader-"+name
template_manifest['spec']['template']['spec']['containers'][0]['name'] ="stash-pornpics-dowloader-"+name
#edit the command based on the input
command=['bash', '/config/download.sh', '--http_proxy', 'http://gluetun-svc.gluetun.svc:8888', '--BASE_URL', url, '--pornstars', name]
template_manifest['spec']['template']['spec']['containers'][0]['command']=command
#execute based on the value
api_response = v1.create_namespaced_job(body=template_manifest,namespace='stash')
return HttpResponse(api_response)
+3
View File
@@ -0,0 +1,3 @@
from django.db import models
# Create your models here.
@@ -0,0 +1 @@
<h1>Hello template!</h1>
@@ -0,0 +1,37 @@
apiVersion: batch/v1
kind: Job
metadata:
name: stash-pornpics-dowloader-{{ name }}
namespace: stash
spec:
template:
spec:
containers:
- name: stash-pornpics-dowloader-{{ name }}
image: bash
imagePullPolicy: Always
volumeMounts:
- mountPath: /config
name: scripts
- mountPath: /data
mountPropagation: None
name: data-pvc
command:
- bash
- /config/download.sh
- --http_proxy
- "http://gluetun-svc.gluetun.svc:8888"
- --BASE_URL
- "{{ url }}"
- --pornstars
- "{{ name }}"
restartPolicy: Never
volumes:
- configMap:
defaultMode: 0744
name: pornpic-dowloader
name: scripts
- name: data-pvc
persistentVolumeClaim:
claimName: data-pvc
backoffLimit: 4
+3
View File
@@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.
+8
View File
@@ -0,0 +1,8 @@
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>')
+14 -5
View File
@@ -1,13 +1,22 @@
FROM python:3
FROM gitea.tryton.geeraert.eu/pi-ux-ce/python:3
ENV PYTHONUNBUFFERED 1
WORKDIR /code/
# Copy only the requirements file first (Changes infrequently)
COPY requirements.txt ./
COPY django_code ./
RUN pip install --upgrade pip
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
RUN --mount=type=cache,target=/root/.cache/pip pip install --upgrade pip
RUN --mount=type=cache,target=/root/.cache/pip pip list --outdated
RUN --mount=type=cache,target=/root/.cache/pip pip install --upgrade wheel
RUN --mount=type=cache,target=/root/.cache/pip pip install --upgrade setuptools
RUN --mount=type=cache,target=/root/.cache/pip pip install -r requirements.txt
# Copy the rest of your application code (Changes frequently, invalidates subsequent cache)
COPY . ./
RUN python django_code/manage.py migrate
# CMD is the command run when the container starts
CMD [ "python","django_code/manage.py","runserver","0.0.0.0:8000" ]
+83
View File
@@ -0,0 +1,83 @@
#!/bin/bash
#install required packages
apk add curl wget
#named argument generation
skip_searching_gallery="${skip_searching_gallery:-false}"
while [ $# -gt 0 ]; do
if [[ $1 == "--"* ]]; then
v="${1/--/}"
declare "$v"="$2"
shift
fi
shift
done
#check if we will use a HTTP proxy or not
if [[ -z $http_proxy ]]; then
echo "not using proxy"
curl_command="curl"
else
echo "using proxy"
curl_command="curl -x $http_proxy"
fi
#dowload from https://www.pornpics.com/pornstars/eiby-shine/
DESTINATION_FOLDER="/data"
PROXY_HTTP="http://gluetun-svc.gluetun.svc:8888"
#BASE_URL="https://www.pornpics.com/pornstars/eiby-shine/"
#pornstars="eiby-shine"
#BASE_URL="https://www.pornpics.com/?q=shy+imp"
#pornstars="shy-imp"
#BASE_URL="https://www.pornpics.com/pornstars/gloria-sol/"
#pornstars="gloria-sol"
#BASE_URL="https://www.pornpics.com/pornstars/becky-summer"
#pornstars="becky-summer"
#clear files beforehand
echo "Pornstar: "$pornstars
echo "URL: "$BASE_URL
mkdir -p $DESTINATION_FOLDER/$pornstars
if [[ $skip_searching_gallery == true ]]; then
echo "not looping through galleries"
echo "using existing file instead"
#because we need to keep the file $DESTINATION_FOLDER/$pornstars-urls_of_galleries.txt with the existing URL , in this condition,
#no deletion of this file
echo $external_gallery > $DESTINATION_FOLDER/$pornstars-urls_of_galleries.txt
else
echo "looping through galleries"
#because we will re-generate this file, can be emptied
echo "" > $DESTINATION_FOLDER/$pornstars-urls_of_galleries.txt
$curl_command -s $BASE_URL | grep -Eo "(http|https)://[a-zA-Z0-9./?=_%:-]*" | grep "https://www.pornpics.com/galleries/" |sort -u >> $DESTINATION_FOLDER/$pornstars-urls_of_galleries.txt
fi
echo "" > $DESTINATION_FOLDER/$pornstars-image_to_download.txt
for f in $(cat $DESTINATION_FOLDER/$pornstars-urls_of_galleries.txt ); do
$curl_command $f | grep -Eo "(http|https)://[a-zA-Z0-9./?=_%:-]*" | grep "https://cdni.pornpics.com/1280" >> $DESTINATION_FOLDER/$pornstars-image_to_download.txt
echo $f
done
for g in $(cat $DESTINATION_FOLDER/$pornstars-image_to_download.txt ); do
$curl_command -O --output-dir $DESTINATION_FOLDER/$pornstars $g
# wget -e use_proxy=yes -e http_proxy=$PROXY_HTTP $g -P $DESTINATION_FOLDER/$pornstars
echo $g
done
exit 0
+6
View File
@@ -1,7 +1,13 @@
django
psycopg2
requests
proxmoxer
docker
kubernetes
ruamel.yaml
pyyaml
django-bootstrap-v5
jinja2
watchdog
celery
redis