From faad60346fe3ffc70ffaf1f3b468684cc1e35899 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Phillip=20K=C3=BChne?= Date: Fri, 15 Jul 2022 14:00:37 +0200 Subject: [PATCH 01/22] Intial changes for MariaDB --- backend/Dockerfile => Dockerfile | 0 backend/app.py | 6 +- backend/database.py | 139 +++++++++++++++---------------- backend/requirements.txt | 5 +- docker-compose.prod.yml | 11 +++ 5 files changed, 83 insertions(+), 78 deletions(-) rename backend/Dockerfile => Dockerfile (100%) create mode 100644 docker-compose.prod.yml diff --git a/backend/Dockerfile b/Dockerfile similarity index 100% rename from backend/Dockerfile rename to Dockerfile diff --git a/backend/app.py b/backend/app.py index a36000c..7511e4e 100644 --- a/backend/app.py +++ b/backend/app.py @@ -1,4 +1,4 @@ -from flask import Flask, render_template, Response, abort, request, redirect, send_from_directory +from flask import Flask, render_template, Response, abort, request, redirect, send_from_directory, jsonify import helpers import database import data_adapters @@ -131,8 +131,8 @@ def get_song_completions(input_string=""): input_string = request.args.get('search', input_string) if input_string != "": print(input_string) - list = database.get_song_completions(input_string=input_string) - return Response(json.dumps(list, ensure_ascii=False).encode('utf-8'), mimetype='text/json') + result = [list(x) for x in database.get_song_completions(input_string=input_string)] + return jsonify(result) else: return 400 diff --git a/backend/database.py b/backend/database.py index 8fe2cd2..f34d63e 100644 --- a/backend/database.py +++ b/backend/database.py @@ -1,6 +1,10 @@ # -*- coding: utf_8 -*- +from types import NoneType +from MySQLdb import Connection +from sqlalchemy import create_engine import sqlite3 +import mariadb import pandas from io import StringIO @@ -9,23 +13,28 @@ entry_table = "entries" index_label = "Id" done_table = "done_songs" +connection = None -def open_db(): - conn = sqlite3.connect("/tmp/karaoqueue.db") - conn.execute('PRAGMA encoding = "UTF-8";') - return conn + +def open_db() -> Connection: + global connection + if (not connection): + engine = create_engine( + "mysql://ek0ur6p6ky9gdmif:jk571ov6g38g5iqv@eporqep6b4b8ql12.chr7pe7iynqr.eu-west-1.rds.amazonaws.com:3306/xdfmpudc3remzgj0") + connection = engine.connect() + # cur.execute('PRAGMA encoding = "UTF-8";') + return connection def import_songs(song_csv): print("Start importing Songs...") df = pandas.read_csv(StringIO(song_csv), sep=';') conn = open_db() - cur = conn.cursor() df.to_sql(song_table, conn, if_exists='replace', index=False) - cur.execute("SELECT Count(Id) FROM songs") + cur = conn.execute("SELECT Count(Id) FROM songs") num_songs = cur.fetchone()[0] - conn.close() + # conn.close() print("Imported songs ({} in Database)".format(num_songs)) return("Imported songs ({} in Database)".format(num_songs)) @@ -34,157 +43,143 @@ def create_entry_table(): conn = open_db() conn.execute('CREATE TABLE IF NOT EXISTS '+entry_table + ' (ID INTEGER PRIMARY KEY NOT NULL, Song_Id INTEGER NOT NULL, Name VARCHAR(255), Client_Id VARCHAR(36), Transferred INTEGER DEFAULT 0)') - conn.close() + # conn.close() def create_done_song_table(): conn = open_db() conn.execute('CREATE TABLE IF NOT EXISTS '+done_table + ' (Song_Id INTEGER PRIMARY KEY NOT NULL, Plays INTEGER)') - conn.close() + # conn.close() def create_song_table(): conn = open_db() - conn.execute("CREATE TABLE IF NOT EXISTS \""+song_table+"""\" ( - "Id" INTEGER, - "Title" TEXT, - "Artist" TEXT, - "Year" INTEGER, - "Duo" INTEGER, - "Explicit" INTEGER, - "Date Added" TEXT, - "Styles" TEXT, - "Languages" TEXT + conn.execute("CREATE TABLE IF NOT EXISTS `"+song_table+"""` ( + `Id` INTEGER, + `Title` TEXT, + `Artist` TEXT, + `Year` INTEGER, + `Duo` INTEGER, + `Explicit` INTEGER, + `Date Added` TEXT, + `Styles` TEXT, + `Languages` TEXT )""") - conn.close() + # conn.close() def create_list_view(): conn = open_db() - conn.execute("""CREATE VIEW IF NOT EXISTS [Liste] AS - SELECT Name, Title, Artist, entries.Id, songs.Id, entries.Transferred + conn.execute("""CREATE OR REPLACE VIEW `Liste` AS + SELECT Name, Title, Artist, entries.Id AS entry_ID, songs.Id AS song_ID, entries.Transferred FROM entries, songs - WHERE entries.Song_Id=songs.Id""") - conn.close() + WHERE entries.Song_Id=Song_ID""") + # conn.close() def create_done_song_view(): conn = open_db() - conn.execute("""CREATE VIEW IF NOT EXISTS [Abspielliste] AS + conn.execute("""CREATE OR REPLACE VIEW `Abspielliste` AS SELECT Artist || \" - \" || Title AS Song, Plays AS Wiedergaben FROM songs, done_songs WHERE done_songs.Song_Id=songs.Id""") - conn.close() + # conn.close() def get_list(): conn = open_db() - conn.row_factory = sqlite3.Row - cur = conn.cursor() - cur.execute("SELECT * FROM Liste") + cur = conn.execute("SELECT * FROM Liste") return cur.fetchall() def get_played_list(): conn = open_db() - cur = conn.cursor() - cur.execute("SELECT * FROM Abspielliste") + cur = conn.execute("SELECT * FROM Abspielliste") return cur.fetchall() def get_song_list(): conn = open_db() - cur = conn.cursor() - cur.execute("SELECT Artist || \" - \" || Title AS Song, Id FROM songs;") + cur = conn.execute( + "SELECT Artist || \" - \" || Title AS Song, Id FROM songs;") return cur.fetchall() def get_song_completions(input_string): conn = open_db() - cur = conn.cursor() # Don't look, it burns... prepared_string = "%{0}%".format( input_string).upper() # "Test" -> "%TEST%" print(prepared_string) - cur.execute( - "SELECT Title || \" - \" || Artist AS Song, Id FROM songs WHERE REPLACE(REPLACE(REPLACE(REPLACE(UPPER( SONG ),'ö','Ö'),'ü','Ü'),'ä','Ä'),'ß','ẞ') LIKE (?) LIMIT 20;", (prepared_string,)) + cur = conn.execute( + "SELECT CONCAT(Artist,\" - \",Title) AS Song, Id FROM songs WHERE CONCAT(Artist,\" - \",Title) LIKE (%s) LIMIT 20;", [prepared_string]) return cur.fetchall() def add_entry(name, song_id, client_id): conn = open_db() - cur = conn.cursor() - cur.execute( - "INSERT INTO entries (Song_Id,Name,Client_Id) VALUES(?,?,?);", (song_id, name, client_id)) - conn.commit() - conn.close() + conn.execute( + "INSERT INTO entries (Song_Id,Name,Client_Id) VALUES(%s,%s,%s);", (song_id, name, client_id)) + # conn.close() return def add_sung_song(entry_id): conn = open_db() - cur = conn.cursor() - cur.execute("""SELECT Song_Id FROM entries WHERE Id=?""", (entry_id,)) + cur = conn.execute( + """SELECT Song_Id FROM entries WHERE Id=?""", (entry_id,)) song_id = cur.fetchone()[0] - cur.execute("""INSERT OR REPLACE INTO done_songs (Song_Id, Plays) + conn.execute("""INSERT OR REPLACE INTO done_songs (Song_Id, Plays) VALUES("""+str(song_id)+""", COALESCE( (SELECT Plays FROM done_songs WHERE Song_Id="""+str(song_id)+"), 0) + 1)" - ) - conn.commit() + ) delete_entry(entry_id) - conn.close() + # conn.close() return True def toggle_transferred(entry_id): conn = open_db() - cur = conn.cursor() - cur.execute("SELECT Transferred FROM entries WHERE ID =?", (entry_id,)) + cur = conn.execute( + "SELECT Transferred FROM entries WHERE ID =?", (entry_id,)) marked = cur.fetchall()[0][0] if(marked == 0): - cur.execute( + conn.execute( "UPDATE entries SET Transferred = 1 WHERE ID =?", (entry_id,)) else: - cur.execute( + conn.execute( "UPDATE entries SET Transferred = 0 WHERE ID =?", (entry_id,)) - conn.commit() - conn.close() + # conn.close() return True def check_entry_quota(client_id): conn = open_db() - cur = conn.cursor() - cur.execute( + cur = conn.execute( "SELECT Count(*) FROM entries WHERE entries.Client_Id = ?", (client_id,)) return cur.fetchall()[0][0] def check_queue_length(): conn = open_db() - cur = conn.cursor() - cur.execute("SELECT Count(*) FROM entries") + cur = conn.execute("SELECT Count(*) FROM entries") return cur.fetchall()[0][0] def clear_played_songs(): conn = open_db() - cur = conn.cursor() - cur.execute("DELETE FROM done_songs") - conn.commit() - conn.close() + conn.execute("DELETE FROM done_songs") + # conn.close() return True def delete_entry(id): conn = open_db() - cur = conn.cursor() - cur.execute("DELETE FROM entries WHERE id=?", (id,)) - conn.commit() - conn.close() + conn.execute("DELETE FROM entries WHERE id=?", (id,)) + # conn.close() return True @@ -194,19 +189,15 @@ def delete_entries(ids): idlist.append((x,)) try: conn = open_db() - cur = conn.cursor() - cur.executemany("DELETE FROM entries WHERE id=?", idlist) - conn.commit() - conn.close() + cur = conn.execute("DELETE FROM entries WHERE id=?", idlist) + # conn.close() return cur.rowcount - except sqlite3.Error as error: + except mariadb.Error as error: return -1 def delete_all_entries(): conn = open_db() - cur = conn.cursor() - cur.execute("DELETE FROM entries") - conn.commit() - conn.close() + conn.execute("DELETE FROM entries") + # conn.close() return True diff --git a/backend/requirements.txt b/backend/requirements.txt index 04324d8..adb164c 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -2,4 +2,7 @@ requests pandas Flask-BasicAuth bs4 -gunicorn \ No newline at end of file +gunicorn +mariadb +SQLAlchemy +mysqlclient \ No newline at end of file diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml new file mode 100644 index 0000000..7ef04ae --- /dev/null +++ b/docker-compose.prod.yml @@ -0,0 +1,11 @@ +version: "3.9" +services: + db: + image: mariadb + restart: always + environment: + MARIADB_ROOT_PASSWORD: dpMAZj*Mc4%FZM!V + MARIADB_ROOT_HOST: localhost + MARIADB_DATABASE: karaoqueue + MARIADB_USER: karaoqueue + MARIADB_PASSWORD: a5G@P*^tCW$$w@wE \ No newline at end of file From 97dd80b03a255093ae4d0a1bcf3002676575d110 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Phillip=20K=C3=BChne?= Date: Fri, 15 Jul 2022 14:16:06 +0200 Subject: [PATCH 02/22] Add or update the Azure App Service build and deployment workflow config --- ...ure-legacy-mariadb_database_karaoqueue.yml | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 .github/workflows/feature-legacy-mariadb_database_karaoqueue.yml diff --git a/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml b/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml new file mode 100644 index 0000000..85f3dbf --- /dev/null +++ b/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml @@ -0,0 +1,63 @@ +# Docs for the Azure Web Apps Deploy action: https://github.com/Azure/webapps-deploy +# More GitHub Actions for Azure: https://github.com/Azure/actions +# More info on Python, GitHub Actions, and Azure App Service: https://aka.ms/python-webapps-actions + +name: Build and deploy Python app to Azure Web App - karaoqueue + +on: + push: + branches: + - feature/legacy/mariadb_database + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + + - name: Set up Python version + uses: actions/setup-python@v1 + with: + python-version: '3.9' + + - name: Create and start virtual environment + run: | + python -m venv venv + source venv/bin/activate + + - name: Install dependencies + run: pip install -r requirements.txt + + # Optional: Add step to run tests here (PyTest, Django test suites, etc.) + + - name: Upload artifact for deployment jobs + uses: actions/upload-artifact@v2 + with: + name: python-app + path: | + . + !venv/ + + deploy: + runs-on: ubuntu-latest + needs: build + environment: + name: 'Production' + url: ${{ steps.deploy-to-webapp.outputs.webapp-url }} + + steps: + - name: Download artifact from build job + uses: actions/download-artifact@v2 + with: + name: python-app + path: . + + - name: 'Deploy to Azure Web App' + uses: azure/webapps-deploy@v2 + id: deploy-to-webapp + with: + app-name: 'karaoqueue' + slot-name: 'Production' + publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_8EBA2D69F5B7469D9CFD1F71F6A66108 }} From fb9677dc8806a4a605aca29871aa133df65879d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Phillip=20K=C3=BChne?= Date: Fri, 15 Jul 2022 14:23:17 +0200 Subject: [PATCH 03/22] Fix github workflow --- .../workflows/feature-legacy-mariadb_database_karaoqueue.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml b/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml index 85f3dbf..a8028a2 100644 --- a/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml +++ b/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml @@ -28,7 +28,7 @@ jobs: source venv/bin/activate - name: Install dependencies - run: pip install -r requirements.txt + run: pip install -r backend/requirements.txt # Optional: Add step to run tests here (PyTest, Django test suites, etc.) @@ -37,7 +37,7 @@ jobs: with: name: python-app path: | - . + backend !venv/ deploy: From 3527ba4fd9cbdc518ba81ff61151ce32aed1fbe7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Phillip=20K=C3=BChne?= Date: Fri, 15 Jul 2022 14:27:39 +0200 Subject: [PATCH 04/22] Fix dependencies --- .../workflows/feature-legacy-mariadb_database_karaoqueue.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml b/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml index a8028a2..96bbb70 100644 --- a/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml +++ b/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml @@ -27,6 +27,10 @@ jobs: python -m venv venv source venv/bin/activate + - name: Install mysql + run: sudo apt-get install -y mysql-server libmysqlclient-dev libmariadbclient-dev + + - name: Install dependencies run: pip install -r backend/requirements.txt From c9ad755a04383c1db1a5f7eff4de39eb30811260 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Phillip=20K=C3=BChne?= Date: Fri, 15 Jul 2022 14:29:18 +0200 Subject: [PATCH 05/22] Fix? --- .../workflows/feature-legacy-mariadb_database_karaoqueue.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml b/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml index 96bbb70..317b045 100644 --- a/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml +++ b/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml @@ -28,7 +28,7 @@ jobs: source venv/bin/activate - name: Install mysql - run: sudo apt-get install -y mysql-server libmysqlclient-dev libmariadbclient-dev + run: sudo apt-get install -y mariadb-client - name: Install dependencies From b88aac69e63e23955edccef994876da438f9554a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Phillip=20K=C3=BChne?= Date: Fri, 15 Jul 2022 14:32:06 +0200 Subject: [PATCH 06/22] Fix.. --- .../workflows/feature-legacy-mariadb_database_karaoqueue.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml b/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml index 317b045..5e5798f 100644 --- a/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml +++ b/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml @@ -28,7 +28,7 @@ jobs: source venv/bin/activate - name: Install mysql - run: sudo apt-get install -y mariadb-client + run: sudo sudo aptitude install -y mariadb-server - name: Install dependencies From 2a92c394508e7795d410b8818b5f3796fa45517d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Phillip=20K=C3=BChne?= Date: Fri, 15 Jul 2022 14:32:51 +0200 Subject: [PATCH 07/22] Test --- .../workflows/feature-legacy-mariadb_database_karaoqueue.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml b/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml index 5e5798f..3938261 100644 --- a/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml +++ b/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml @@ -28,7 +28,7 @@ jobs: source venv/bin/activate - name: Install mysql - run: sudo sudo aptitude install -y mariadb-server + run: sudo sudo apt install -y mariadb-server - name: Install dependencies From 8151e615c0d716de991e31a4d06148a9ace5584a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Phillip=20K=C3=BChne?= Date: Fri, 15 Jul 2022 14:34:07 +0200 Subject: [PATCH 08/22] Test --- .../workflows/feature-legacy-mariadb_database_karaoqueue.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml b/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml index 3938261..38da577 100644 --- a/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml +++ b/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml @@ -28,7 +28,7 @@ jobs: source venv/bin/activate - name: Install mysql - run: sudo sudo apt install -y mariadb-server + run: sudo sudo apt install -y mysql-server - name: Install dependencies From 69e252e28a32b4453c29b4c7fd4b6e0cba4edb78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Phillip=20K=C3=BChne?= Date: Fri, 15 Jul 2022 14:35:52 +0200 Subject: [PATCH 09/22] Add missing libraries to install --- .../workflows/feature-legacy-mariadb_database_karaoqueue.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml b/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml index 38da577..d81fb22 100644 --- a/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml +++ b/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml @@ -28,7 +28,7 @@ jobs: source venv/bin/activate - name: Install mysql - run: sudo sudo apt install -y mysql-server + run: sudo sudo apt install -y mysql-server libmysqlclient-dev libmariadbclient-dev - name: Install dependencies From 2a18f3dc2c1cca744dea981d28f72adbdc3dc3a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Phillip=20K=C3=BChne?= Date: Fri, 15 Jul 2022 14:36:47 +0200 Subject: [PATCH 10/22] Completely remove mariadb libs to hopefully fix conflicts --- .../workflows/feature-legacy-mariadb_database_karaoqueue.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml b/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml index d81fb22..9f8f323 100644 --- a/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml +++ b/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml @@ -28,7 +28,7 @@ jobs: source venv/bin/activate - name: Install mysql - run: sudo sudo apt install -y mysql-server libmysqlclient-dev libmariadbclient-dev + run: sudo sudo apt install -y mysql-server libmysqlclient-dev - name: Install dependencies From 9907a19066320c90fc8f6aefb9d37781b9a28adb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Phillip=20K=C3=BChne?= Date: Fri, 15 Jul 2022 14:43:16 +0200 Subject: [PATCH 11/22] Test --- .../workflows/feature-legacy-mariadb_database_karaoqueue.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml b/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml index 9f8f323..4a6170f 100644 --- a/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml +++ b/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml @@ -28,7 +28,7 @@ jobs: source venv/bin/activate - name: Install mysql - run: sudo sudo apt install -y mysql-server libmysqlclient-dev + run: sudo sudo apt install -y mysql-server libmysqlclient-dev python-dev - name: Install dependencies From 2138189dff5d94d75c16dc55b4f3e3157d0b7ee9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Phillip=20K=C3=BChne?= Date: Fri, 15 Jul 2022 14:44:26 +0200 Subject: [PATCH 12/22] python3 is still not default on Ubuntu? --- .../workflows/feature-legacy-mariadb_database_karaoqueue.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml b/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml index 4a6170f..2675db4 100644 --- a/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml +++ b/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml @@ -28,7 +28,7 @@ jobs: source venv/bin/activate - name: Install mysql - run: sudo sudo apt install -y mysql-server libmysqlclient-dev python-dev + run: sudo sudo apt install -y mysql-server libmysqlclient-dev python3-dev - name: Install dependencies From 3ae2803fccc2086502772d184b45a460713af4d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Phillip=20K=C3=BChne?= Date: Fri, 15 Jul 2022 14:51:05 +0200 Subject: [PATCH 13/22] Remove mysql and install mariadb --- .../feature-legacy-mariadb_database_karaoqueue.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml b/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml index 2675db4..4c4640a 100644 --- a/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml +++ b/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml @@ -27,8 +27,10 @@ jobs: python -m venv venv source venv/bin/activate - - name: Install mysql - run: sudo sudo apt install -y mysql-server libmysqlclient-dev python3-dev + - name: Install mariadb + run: | + sudo apt-get remove --purge mysql-server mysql-client mysql-common libmysqlclient-dev + sudo sudo apt install -y libmariadbclient-dev python3-dev - name: Install dependencies From 67a9552fee06adbde680373bd02e0a3d11591e65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Phillip=20K=C3=BChne?= Date: Fri, 15 Jul 2022 14:55:14 +0200 Subject: [PATCH 14/22] Update ubuntu to get newer mariadb connector --- .../workflows/feature-legacy-mariadb_database_karaoqueue.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml b/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml index 4c4640a..da661e3 100644 --- a/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml +++ b/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml @@ -12,7 +12,7 @@ on: jobs: build: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v2 From adfd120636dbef8743449c936c0bb7de991ea706 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Phillip=20K=C3=BChne?= Date: Fri, 15 Jul 2022 15:01:07 +0200 Subject: [PATCH 15/22] Update package names for 22.04 --- .../workflows/feature-legacy-mariadb_database_karaoqueue.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml b/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml index da661e3..3c0e492 100644 --- a/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml +++ b/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml @@ -30,7 +30,7 @@ jobs: - name: Install mariadb run: | sudo apt-get remove --purge mysql-server mysql-client mysql-common libmysqlclient-dev - sudo sudo apt install -y libmariadbclient-dev python3-dev + sudo sudo apt install -y libmariadbd-dev python3-dev - name: Install dependencies From fc78bdc4feaf7821d6649ae0db694e3184ad9ebe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Phillip=20K=C3=BChne?= Date: Fri, 15 Jul 2022 15:09:48 +0200 Subject: [PATCH 16/22] Fix types --- backend/database.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/backend/database.py b/backend/database.py index f34d63e..c7bdc48 100644 --- a/backend/database.py +++ b/backend/database.py @@ -1,9 +1,8 @@ # -*- coding: utf_8 -*- -from types import NoneType +from email.mime import base from MySQLdb import Connection -from sqlalchemy import create_engine -import sqlite3 +from sqlalchemy import create_engine, engine import mariadb import pandas from io import StringIO @@ -16,7 +15,7 @@ done_table = "done_songs" connection = None -def open_db() -> Connection: +def open_db() -> engine.base.Connection: global connection if (not connection): engine = create_engine( From 57ced69dddb72b46e61d97374240382209b3dc1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Phillip=20K=C3=BChne?= Date: Fri, 15 Jul 2022 15:27:36 +0200 Subject: [PATCH 17/22] Load DB Connection from ENV --- backend/app.py | 1 + backend/database.py | 4 ++-- backend/helpers.py | 13 +++++++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/backend/app.py b/backend/app.py index 7511e4e..0a86157 100644 --- a/backend/app.py +++ b/backend/app.py @@ -229,6 +229,7 @@ def admin(): @app.before_first_request def activate_job(): + helpers.load_dbconfig(app) helpers.load_version(app) helpers.create_data_directory() database.create_entry_table() diff --git a/backend/database.py b/backend/database.py index c7bdc48..7ba70c7 100644 --- a/backend/database.py +++ b/backend/database.py @@ -6,6 +6,7 @@ from sqlalchemy import create_engine, engine import mariadb import pandas from io import StringIO +from flask import current_app song_table = "songs" entry_table = "entries" @@ -18,8 +19,7 @@ connection = None def open_db() -> engine.base.Connection: global connection if (not connection): - engine = create_engine( - "mysql://ek0ur6p6ky9gdmif:jk571ov6g38g5iqv@eporqep6b4b8ql12.chr7pe7iynqr.eu-west-1.rds.amazonaws.com:3306/xdfmpudc3remzgj0") + engine = create_engine(current_app.config.get("DBCONNSTRING")) connection = engine.connect() # cur.execute('PRAGMA encoding = "UTF-8";') return connection diff --git a/backend/helpers.py b/backend/helpers.py index 17545a6..c937f04 100644 --- a/backend/helpers.py +++ b/backend/helpers.py @@ -47,6 +47,19 @@ def load_version(app): app.config['VERSION'] = "" else: app.config['VERSION'] = "" + +def load_dbconfig(app): + if os.environ.get("JAWSDB_MARIA_URL"): + app.config['VERSION'] = os.environ.get("JAWSDB_MARIA_URL") + elif os.path.isfile(".dbconn"): + with open('.dbconn', 'r') as file: + data = file.read().replace('\n', '') + if data: + app.config['DBCONNSTRING'] = data + else: + app.config['DBCONNSTRING'] = "" + else: + app.config['DBCONNSTRING'] = "" def setup_config(app): if check_config_exists(): From 72914109c054653965c8abcd1402a76509a83478 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Phillip=20K=C3=BChne?= Date: Fri, 15 Jul 2022 15:33:42 +0200 Subject: [PATCH 18/22] prune requirements --- backend/database.py | 3 +-- backend/requirements.txt | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/backend/database.py b/backend/database.py index 7ba70c7..528221d 100644 --- a/backend/database.py +++ b/backend/database.py @@ -3,7 +3,6 @@ from email.mime import base from MySQLdb import Connection from sqlalchemy import create_engine, engine -import mariadb import pandas from io import StringIO from flask import current_app @@ -191,7 +190,7 @@ def delete_entries(ids): cur = conn.execute("DELETE FROM entries WHERE id=?", idlist) # conn.close() return cur.rowcount - except mariadb.Error as error: + except Exception as error: return -1 diff --git a/backend/requirements.txt b/backend/requirements.txt index adb164c..d816517 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -3,6 +3,5 @@ pandas Flask-BasicAuth bs4 gunicorn -mariadb SQLAlchemy mysqlclient \ No newline at end of file From bc44985fed2a34b3435409f322ca73a22ca1ae76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Phillip=20K=C3=BChne?= Date: Fri, 15 Jul 2022 15:35:58 +0200 Subject: [PATCH 19/22] Fix DBCONNSTRING --- backend/database.py | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/database.py b/backend/database.py index 528221d..579f141 100644 --- a/backend/database.py +++ b/backend/database.py @@ -18,6 +18,7 @@ connection = None def open_db() -> engine.base.Connection: global connection if (not connection): + print(current_app.config.get("DBCONNSTRING")) engine = create_engine(current_app.config.get("DBCONNSTRING")) connection = engine.connect() # cur.execute('PRAGMA encoding = "UTF-8";') From a22960eae92713d744e76ae2f6693a87cf3ebdac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Phillip=20K=C3=BChne?= Date: Fri, 15 Jul 2022 15:54:15 +0200 Subject: [PATCH 20/22] Fix DB Connection --- .vscode/launch.json | 3 ++- backend/helpers.py | 24 +++++++++++++++--------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 2e00725..d9b4ed5 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -14,7 +14,8 @@ "env": { "FLASK_APP": "backend/app.py", "FLASK_ENV": "development", - "FLASK_DEBUG": "1" + "FLASK_DEBUG": "1", + "DBSTRING": "mysql://ek0ur6p6ky9gdmif:kpmi2bav4mvh4jbx@eporqep6b4b8ql12.chr7pe7iynqr.eu-west-1.rds.amazonaws.com:3306/xdfmpudc3remzgj0" }, "args": [ "run", diff --git a/backend/helpers.py b/backend/helpers.py index c937f04..53ee6a1 100644 --- a/backend/helpers.py +++ b/backend/helpers.py @@ -49,17 +49,23 @@ def load_version(app): app.config['VERSION'] = "" def load_dbconfig(app): - if os.environ.get("JAWSDB_MARIA_URL"): - app.config['VERSION'] = os.environ.get("JAWSDB_MARIA_URL") - elif os.path.isfile(".dbconn"): - with open('.dbconn', 'r') as file: - data = file.read().replace('\n', '') - if data: - app.config['DBCONNSTRING'] = data + if os.environ.get("FLASK_ENV") == "development": + app.config['DBCONNSTRING'] = os.environ.get("DBSTRING") + else: + if os.environ.get("DEPLOYMENT_PLATFORM") == "Heroku": + if os.environ.get("JAWSDB_MARIA_URL"): + app.config['DBCONNSTRING'] = os.environ.get("JAWSDB_MARIA_URL") else: app.config['DBCONNSTRING'] = "" - else: - app.config['DBCONNSTRING'] = "" + elif os.path.isfile(".dbconn"): + with open('.dbconn', 'r') as file: + data = file.read().replace('\n', '') + if data: + app.config['DBCONNSTRING'] = data + else: + app.config['DBCONNSTRING'] = "" + else: + app.config['DBCONNSTRING'] = "" def setup_config(app): if check_config_exists(): From 8dd90b728cd59f330f971c251664be634b2e879e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Phillip=20K=C3=BChne?= Date: Sat, 8 Oct 2022 19:47:29 +0200 Subject: [PATCH 21/22] MySQL Working, bug fixes. --- .vscode/launch.json | 10 ++++---- .vscode/tasks.json | 7 ++++++ Dockerfile | 2 +- backend/app.py | 13 +++++----- backend/database.py | 40 ++++++++++++++++-------------- backend/helpers.py | 41 ++++++++++++++++++++----------- backend/templates/base.html | 2 +- backend/templates/main_admin.html | 10 +++++--- docker-compose.prod.yml | 12 +++++++++ 9 files changed, 86 insertions(+), 51 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index d9b4ed5..27002f1 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -5,7 +5,7 @@ "version": "0.2.0", "configurations": [ { - "preLaunchTask": "versiondump", + "preLaunchTask": "mariadb", "name": "Python: Flask", "type": "python", "cwd": "${workspaceFolder}/backend", @@ -15,7 +15,7 @@ "FLASK_APP": "backend/app.py", "FLASK_ENV": "development", "FLASK_DEBUG": "1", - "DBSTRING": "mysql://ek0ur6p6ky9gdmif:kpmi2bav4mvh4jbx@eporqep6b4b8ql12.chr7pe7iynqr.eu-west-1.rds.amazonaws.com:3306/xdfmpudc3remzgj0" + "DBSTRING": "mysql://devuser:devpw@127.0.0.1:3306/karaoqueue" }, "args": [ "run", @@ -25,7 +25,7 @@ "jinja": true }, { - "preLaunchTask": "versiondump", + "preLaunchTask": "mariadb", "name": "Python: Flask (with reload)", "type": "python", "cwd": "${workspaceFolder}/backend", @@ -43,7 +43,7 @@ "jinja": true }, { - "preLaunchTask": "versiondump", + "preLaunchTask": "mariadb", "name": "Python: Flask (with reload, externally reachable)", "type": "python", "cwd": "${workspaceFolder}/backend", @@ -62,7 +62,7 @@ "jinja": true }, { - "preLaunchTask": "versiondump", + "preLaunchTask": "mariadb", "name": "Python: Flask (externally reachable)", "type": "python", "cwd": "${workspaceFolder}/backend", diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 563a855..bdaee63 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -8,6 +8,13 @@ "type": "shell", "command": "echo \"$(git rev-parse --abbrev-ref HEAD)-$(git describe)\"> ${workspaceFolder}/backend/.version", "problemMatcher": [] + }, + { + "label": "mariadb", + "type": "shell", + "command": "docker run --rm --name some-mariadb --env MARIADB_USER=devuser --env MARIADB_PASSWORD=devpw --env MARIADB_ROOT_PASSWORD=devrootpw --env MARIADB_DATABASE=karaoqueue -p 3306:3306 mariadb:latest", + "isBackground": true, + "activeOnStart": false } ] } \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 0e36a09..7389e11 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,4 +8,4 @@ RUN pip install Flask-BasicAuth RUN pip install bs4 -COPY ./app /app \ No newline at end of file +COPY ./backend /app \ No newline at end of file diff --git a/backend/app.py b/backend/app.py index 0a86157..370c2b6 100644 --- a/backend/app.py +++ b/backend/app.py @@ -1,4 +1,5 @@ -from flask import Flask, render_template, Response, abort, request, redirect, send_from_directory, jsonify +from flask import Flask, render_template, abort, request, redirect, send_from_directory, jsonify +from flask.wrappers import Request, Response import helpers import database import data_adapters @@ -9,7 +10,7 @@ from helpers import nocache app = Flask(__name__, static_url_path='/static') basic_auth = BasicAuth(app) -accept_entries = False +accept_entries = True @app.route("/") def home(): @@ -81,12 +82,12 @@ def settings(): def settings_post(): entryquota = request.form.get("entryquota") maxqueue = request.form.get("maxqueue") - if entryquota.isnumeric() and int(entryquota) > 0: - app.config['ENTRY_QUOTA'] = int(entryquota) + if entryquota.isnumeric() and int(entryquota) > 0: # type: ignore + app.config['ENTRY_QUOTA'] = int(entryquota) # type: ignore else: abort(400) - if maxqueue.isnumeric and int(maxqueue) > 0: - app.config['MAX_QUEUE'] = int(maxqueue) + if maxqueue.isnumeric and int(maxqueue) > 0: # type: ignore + app.config['MAX_QUEUE'] = int(maxqueue) # type: ignore else: abort(400) diff --git a/backend/database.py b/backend/database.py index 579f141..fe9805d 100644 --- a/backend/database.py +++ b/backend/database.py @@ -19,7 +19,7 @@ def open_db() -> engine.base.Connection: global connection if (not connection): print(current_app.config.get("DBCONNSTRING")) - engine = create_engine(current_app.config.get("DBCONNSTRING")) + engine = create_engine(current_app.config.get("DBCONNSTRING")) # type: ignore connection = engine.connect() # cur.execute('PRAGMA encoding = "UTF-8";') return connection @@ -32,7 +32,7 @@ def import_songs(song_csv): df.to_sql(song_table, conn, if_exists='replace', index=False) cur = conn.execute("SELECT Count(Id) FROM songs") - num_songs = cur.fetchone()[0] + num_songs = cur.fetchone()[0] # type: ignore # conn.close() print("Imported songs ({} in Database)".format(num_songs)) return("Imported songs ({} in Database)".format(num_songs)) @@ -41,7 +41,7 @@ def import_songs(song_csv): def create_entry_table(): conn = open_db() conn.execute('CREATE TABLE IF NOT EXISTS '+entry_table + - ' (ID INTEGER PRIMARY KEY NOT NULL, Song_Id INTEGER NOT NULL, Name VARCHAR(255), Client_Id VARCHAR(36), Transferred INTEGER DEFAULT 0)') + ' (ID INTEGER PRIMARY KEY NOT NULL AUTO_INCREMENT, Song_Id INTEGER NOT NULL, Name VARCHAR(255), Client_Id VARCHAR(36), Transferred INTEGER DEFAULT 0)') # conn.close() @@ -73,14 +73,14 @@ def create_list_view(): conn.execute("""CREATE OR REPLACE VIEW `Liste` AS SELECT Name, Title, Artist, entries.Id AS entry_ID, songs.Id AS song_ID, entries.Transferred FROM entries, songs - WHERE entries.Song_Id=Song_ID""") + WHERE entries.Song_Id=songs.Id""") # conn.close() def create_done_song_view(): conn = open_db() conn.execute("""CREATE OR REPLACE VIEW `Abspielliste` AS - SELECT Artist || \" - \" || Title AS Song, Plays AS Wiedergaben + SELECT CONCAT(Artist," - ", Title) AS Song, Plays AS Wiedergaben FROM songs, done_songs WHERE done_songs.Song_Id=songs.Id""") # conn.close() @@ -127,14 +127,16 @@ def add_entry(name, song_id, client_id): def add_sung_song(entry_id): conn = open_db() cur = conn.execute( - """SELECT Song_Id FROM entries WHERE Id=?""", (entry_id,)) - song_id = cur.fetchone()[0] - conn.execute("""INSERT OR REPLACE INTO done_songs (Song_Id, Plays) - VALUES("""+str(song_id)+""", - COALESCE( - (SELECT Plays FROM done_songs - WHERE Song_Id="""+str(song_id)+"), 0) + 1)" - ) + """SELECT Song_Id FROM entries WHERE Id=%s""", (entry_id,)) + song_id = cur.fetchone()[0] # type: ignore + conn.execute("""INSERT INTO done_songs (Song_Id, Plays) VALUES("""+str(song_id)+""",1) ON DUPLICATE KEY UPDATE Plays=Plays + 1;""") +# SQLite bullshittery +# conn.execute("""REPLACE INTO done_songs (Song_Id, Plays) +# VALUES("""+str(song_id)+""", +# COALESCE( +# (SELECT Plays FROM done_songs +# WHERE Song_Id="""+str(song_id)+"), 0) + 1)" +# ) delete_entry(entry_id) # conn.close() return True @@ -143,14 +145,14 @@ def add_sung_song(entry_id): def toggle_transferred(entry_id): conn = open_db() cur = conn.execute( - "SELECT Transferred FROM entries WHERE ID =?", (entry_id,)) + "SELECT Transferred FROM entries WHERE ID =%s", (entry_id,)) marked = cur.fetchall()[0][0] if(marked == 0): conn.execute( - "UPDATE entries SET Transferred = 1 WHERE ID =?", (entry_id,)) + "UPDATE entries SET Transferred = 1 WHERE ID =%s", (entry_id,)) else: conn.execute( - "UPDATE entries SET Transferred = 0 WHERE ID =?", (entry_id,)) + "UPDATE entries SET Transferred = 0 WHERE ID =%s", (entry_id,)) # conn.close() return True @@ -158,7 +160,7 @@ def toggle_transferred(entry_id): def check_entry_quota(client_id): conn = open_db() cur = conn.execute( - "SELECT Count(*) FROM entries WHERE entries.Client_Id = ?", (client_id,)) + "SELECT Count(*) FROM entries WHERE entries.Client_Id = %s", (client_id,)) return cur.fetchall()[0][0] @@ -177,7 +179,7 @@ def clear_played_songs(): def delete_entry(id): conn = open_db() - conn.execute("DELETE FROM entries WHERE id=?", (id,)) + conn.execute("DELETE FROM entries WHERE id=%s", (id,)) # conn.close() return True @@ -188,7 +190,7 @@ def delete_entries(ids): idlist.append((x,)) try: conn = open_db() - cur = conn.execute("DELETE FROM entries WHERE id=?", idlist) + cur = conn.execute("DELETE FROM entries WHERE id=%s", idlist) # conn.close() return cur.rowcount except Exception as error: diff --git a/backend/helpers.py b/backend/helpers.py index 53ee6a1..656a6bf 100644 --- a/backend/helpers.py +++ b/backend/helpers.py @@ -37,7 +37,7 @@ def check_config_exists(): def load_version(app): if os.environ.get("SOURCE_VERSION"): - app.config['VERSION'] = os.environ.get("SOURCE_VERSION")[0:7] + app.config['VERSION'] = os.environ.get("SOURCE_VERSION")[0:7] # type: ignore elif os.path.isfile(".version"): with open('.version', 'r') as file: data = file.read().replace('\n', '') @@ -57,6 +57,11 @@ def load_dbconfig(app): app.config['DBCONNSTRING'] = os.environ.get("JAWSDB_MARIA_URL") else: app.config['DBCONNSTRING'] = "" + if os.environ.get("DEPLOYMENT_PLATFORM") == "Docker": + if os.environ.get("DBSTRING"): + app.config['DBCONNSTRING'] = os.environ.get("DBSTRING") + else: + app.config['DBCONNSTRING'] = "" elif os.path.isfile(".dbconn"): with open('.dbconn', 'r') as file: data = file.read().replace('\n', '') @@ -68,20 +73,26 @@ def load_dbconfig(app): app.config['DBCONNSTRING'] = "" def setup_config(app): - if check_config_exists(): - config = json.load(open(config_file)) - with open(config_file, 'r') as handle: - config = json.load(handle) - print("Loaded existing config") + if os.environ.get("DEPLOYMENT_PLATFORM") == "Docker": + app.config['BASIC_AUTH_USERNAME'] = os.environ.get('BASIC_AUTH_USERNAME') + app.config['BASIC_AUTH_PASSWORD'] = os.environ.get('BASIC_AUTH_PASSWORD') + app.config['ENTRY_QUOTA'] = os.environ.get('ENTRY_QUOTA') + app.config['MAX_QUEUE'] = os.environ.get('MAX_QUEUE') else: - config = {'username': 'admin', 'password': 'changeme', 'entryquota': 3, 'maxqueue': 20} - with open(config_file, 'w') as handle: - json.dump(config, handle, indent=4, sort_keys=True) - print("Wrote new config") - app.config['BASIC_AUTH_USERNAME'] = config['username'] - app.config['BASIC_AUTH_PASSWORD'] = config['password'] - app.config['ENTRY_QUOTA'] = config['entryquota'] - app.config['MAX_QUEUE'] = config['maxqueue'] + if check_config_exists(): + config = json.load(open(config_file)) + with open(config_file, 'r') as handle: + config = json.load(handle) + print("Loaded existing config") + else: + config = {'username': 'admin', 'password': 'changeme', 'entryquota': 3, 'maxqueue': 20} + with open(config_file, 'w') as handle: + json.dump(config, handle, indent=4, sort_keys=True) + print("Wrote new config") + app.config['BASIC_AUTH_USERNAME'] = config['username'] + app.config['BASIC_AUTH_PASSWORD'] = config['password'] + app.config['ENTRY_QUOTA'] = config['entryquota'] + app.config['MAX_QUEUE'] = config['maxqueue'] @@ -89,7 +100,7 @@ def nocache(view): @wraps(view) def no_cache(*args, **kwargs): response = make_response(view(*args, **kwargs)) - response.headers['Last-Modified'] = datetime.now() + response.headers['Last-Modified'] = datetime.now() # type: ignore response.headers['Cache-Control'] = 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=0' response.headers['Pragma'] = 'no-cache' response.headers['Expires'] = '-1' diff --git a/backend/templates/base.html b/backend/templates/base.html index f243850..8b598ea 100644 --- a/backend/templates/base.html +++ b/backend/templates/base.html @@ -75,7 +75,7 @@ {% endif %} - KaraoQueue {{karaoqueue_version}} - © 2019-21 - Phillip + KaraoQueue {{karaoqueue_version}} - 2019-22 - Phillip Kühne diff --git a/backend/templates/main_admin.html b/backend/templates/main_admin.html index 5234a88..5379dc2 100644 --- a/backend/templates/main_admin.html +++ b/backend/templates/main_admin.html @@ -52,10 +52,10 @@ table td:nth-child(2) { {% block extrajs %} diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 7ef04ae..2ee48c0 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -1,5 +1,17 @@ version: "3.9" services: + karaoqueue: + image: "phillipkhne/karaoqueue:latest" + restart: always + ports: + - "127.0.0.1:8081:80" + environment: + DEPLOYMENT_PLATFORM: Docker + DBSTRING: mysql://user:pass@host:3306/database + BASIC_AUTH_USERNAME: admin + BASIC_AUTH_PASSWORD: changeme + ENTRY_QUOTA: 3 + MAX_QUEUE: 20 db: image: mariadb restart: always From 698c3717fda1b0d638bf2cf0ab21358f1019753c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Phillip=20K=C3=BChne?= Date: Sat, 8 Oct 2022 19:50:35 +0200 Subject: [PATCH 22/22] Remove outdated workflows --- ...ure-legacy-mariadb_database_karaoqueue.yml | 69 ------------------- 1 file changed, 69 deletions(-) delete mode 100644 .github/workflows/feature-legacy-mariadb_database_karaoqueue.yml diff --git a/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml b/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml deleted file mode 100644 index 3c0e492..0000000 --- a/.github/workflows/feature-legacy-mariadb_database_karaoqueue.yml +++ /dev/null @@ -1,69 +0,0 @@ -# Docs for the Azure Web Apps Deploy action: https://github.com/Azure/webapps-deploy -# More GitHub Actions for Azure: https://github.com/Azure/actions -# More info on Python, GitHub Actions, and Azure App Service: https://aka.ms/python-webapps-actions - -name: Build and deploy Python app to Azure Web App - karaoqueue - -on: - push: - branches: - - feature/legacy/mariadb_database - workflow_dispatch: - -jobs: - build: - runs-on: ubuntu-22.04 - - steps: - - uses: actions/checkout@v2 - - - name: Set up Python version - uses: actions/setup-python@v1 - with: - python-version: '3.9' - - - name: Create and start virtual environment - run: | - python -m venv venv - source venv/bin/activate - - - name: Install mariadb - run: | - sudo apt-get remove --purge mysql-server mysql-client mysql-common libmysqlclient-dev - sudo sudo apt install -y libmariadbd-dev python3-dev - - - - name: Install dependencies - run: pip install -r backend/requirements.txt - - # Optional: Add step to run tests here (PyTest, Django test suites, etc.) - - - name: Upload artifact for deployment jobs - uses: actions/upload-artifact@v2 - with: - name: python-app - path: | - backend - !venv/ - - deploy: - runs-on: ubuntu-latest - needs: build - environment: - name: 'Production' - url: ${{ steps.deploy-to-webapp.outputs.webapp-url }} - - steps: - - name: Download artifact from build job - uses: actions/download-artifact@v2 - with: - name: python-app - path: . - - - name: 'Deploy to Azure Web App' - uses: azure/webapps-deploy@v2 - id: deploy-to-webapp - with: - app-name: 'karaoqueue' - slot-name: 'Production' - publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_8EBA2D69F5B7469D9CFD1F71F6A66108 }}