From 229b3e2b0748a968403c4fa972c444da1b095feb Mon Sep 17 00:00:00 2001 From: svitvojimilioni Date: Mon, 24 Jun 2024 10:45:06 -0400 Subject: [PATCH] minimal working --- .gitignore | 451 +++++++++++++++++++++++++++++ app/__init__.py | 20 ++ app/models.py | 8 + app/routes.py | 30 ++ app/tasks.py | 3 + app/templates/includes/footer.html | 3 + app/templates/includes/form.html | 18 ++ app/templates/includes/header.html | 4 + app/templates/layouts/base.html | 14 + app/templates/pages/index.html | 9 + app/templates/pages/results.html | 22 ++ app/templates/pages/success.html | 10 + config.py | 29 ++ db_bootstrap.py | 6 + requirements.txt | 11 + run.py | 4 + 16 files changed, 642 insertions(+) create mode 100644 .gitignore create mode 100644 app/__init__.py create mode 100644 app/models.py create mode 100644 app/routes.py create mode 100644 app/tasks.py create mode 100644 app/templates/includes/footer.html create mode 100644 app/templates/includes/form.html create mode 100644 app/templates/includes/header.html create mode 100644 app/templates/layouts/base.html create mode 100644 app/templates/pages/index.html create mode 100644 app/templates/pages/results.html create mode 100644 app/templates/pages/success.html create mode 100644 config.py create mode 100644 db_bootstrap.py create mode 100644 requirements.txt create mode 100644 run.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..657db98 --- /dev/null +++ b/.gitignore @@ -0,0 +1,451 @@ +### Flask ### +instance/* +!instance/.gitignore +.webassets-cache +.env + +### Flask.Python Stack ### +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ + +### Intellij ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# AWS User-specific +.idea/**/aws.xml + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# SonarLint plugin +.idea/sonarlint/ + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### Intellij Patch ### +# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 + +# *.iml +# modules.xml +# .idea/misc.xml +# *.ipr + +# Sonarlint plugin +# https://plugins.jetbrains.com/plugin/7973-sonarlint +.idea/**/sonarlint/ + +# SonarQube Plugin +# https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin +.idea/**/sonarIssues.xml + +# Markdown Navigator plugin +# https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced +.idea/**/markdown-navigator.xml +.idea/**/markdown-navigator-enh.xml +.idea/**/markdown-navigator/ + +# Cache file creation bug +# See https://youtrack.jetbrains.com/issue/JBR-2257 +.idea/$CACHE_FILE$ + +# CodeStream plugin +# https://plugins.jetbrains.com/plugin/12206-codestream +.idea/codestream.xml + +# Azure Toolkit for IntelliJ plugin +# https://plugins.jetbrains.com/plugin/8053-azure-toolkit-for-intellij +.idea/**/azureSettings.xml + +### PyCharm+all ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff + +# AWS User-specific + +# Generated files + +# Sensitive or high-churn files + +# Gradle + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake + +# Mongo Explorer plugin + +# File-based project format + +# IntelliJ + +# mpeltonen/sbt-idea plugin + +# JIRA plugin + +# Cursive Clojure plugin + +# SonarLint plugin + +# Crashlytics plugin (for Android Studio and IntelliJ) + +# Editor-based Rest Client + +# Android studio 3.1+ serialized cache file + +### PyCharm+all Patch ### +# Ignore everything but code style settings and run configurations +# that are supposed to be shared within teams. + +.idea/* + +!.idea/codeStyles +!.idea/runConfigurations + +### Python ### +# Byte-compiled / optimized / DLL files + +# C extensions + +# Distribution / packaging + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. + +# Installer logs + +# Unit test / coverage reports + +# Translations + +# Django stuff: + +# Flask stuff: + +# Scrapy stuff: + +# Sphinx documentation + +# PyBuilder + +# Jupyter Notebook + +# IPython + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm + +# Celery stuff + +# SageMath parsed files + +# Environments + +# Spyder project settings + +# Rope project settings + +# mkdocs documentation + +# mypy + +# Pyre type checker + +# pytype static type analyzer + +# Cython debug symbols + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. + +### Python Patch ### +# Poetry local configuration file - https://python-poetry.org/docs/configuration/#local-configuration +poetry.toml + +# ruff +.ruff_cache/ + +# LSP config files +pyrightconfig.json + +### Vim ### +# Swap +[._]*.s[a-v][a-z] +!*.svg # comment out if you don't need vector files +[._]*.sw[a-p] +[._]s[a-rt-v][a-z] +[._]ss[a-gi-z] +[._]sw[a-p] + +# Session +Session.vim +Sessionx.vim + +# Temporary +.netrwhist +*~ +# Auto-generated tag files +tags +# Persistent undo +[._]*.un~ + + diff --git a/app/__init__.py b/app/__init__.py new file mode 100644 index 0000000..145786b --- /dev/null +++ b/app/__init__.py @@ -0,0 +1,20 @@ +from flask import Flask +from flask_sqlalchemy import SQLAlchemy +from sqlalchemy.orm import DeclarativeBase +import os + +app = Flask(__name__) + +config_string = os.environ.get("FLASK_CONFIG", "config.DevelopmentConfig") +app.config.from_object("config.DevelopmentConifg") +app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///app.db" +app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False + +class Base(DeclarativeBase): + pass + +db = SQLAlchemy(model_class=Base) +db.init_app(app) + +from . import routes + diff --git a/app/models.py b/app/models.py new file mode 100644 index 0000000..ddfb17f --- /dev/null +++ b/app/models.py @@ -0,0 +1,8 @@ +from sqlalchemy import Integer, String +from app import db +from sqlalchemy.orm import Mapped, mapped_column + +class Reply(db.Model): + id: Mapped[int] = mapped_column(primary_key=True) + attendence: Mapped[bool] + comment: Mapped[str] diff --git a/app/routes.py b/app/routes.py new file mode 100644 index 0000000..37e0d3c --- /dev/null +++ b/app/routes.py @@ -0,0 +1,30 @@ +from flask import render_template, request, redirect + +from . import app, db +from .models import Reply + +@app.route("/", methods=["GET"]) +def index(): + return render_template("pages/index.html") + +@app.route("/process-form", methods=["POST"]) +def process_form(): + form_data = request.form + attendence = True if form_data["attendence"] == "yes" else False + comment = form_data["comment"] + reply = Reply(attendence=attendence, comment=comment) + try: + db.session.add(reply) + db.session.commit() + return redirect("/success") + except Exception as e: + return "fail" + +@app.route("/success", methods=["GET"]) +def success(): + return render_template("pages/success.html") + +@app.route("/results") +def results(): + replies = db.session.execute(db.select(Reply)).scalars() + return render_template("pages/results.html", replies=replies) diff --git a/app/tasks.py b/app/tasks.py new file mode 100644 index 0000000..22f1e1d --- /dev/null +++ b/app/tasks.py @@ -0,0 +1,3 @@ +def example_task(n: int) -> int: + """ Example task""" + return n**n diff --git a/app/templates/includes/footer.html b/app/templates/includes/footer.html new file mode 100644 index 0000000..a9b3bf6 --- /dev/null +++ b/app/templates/includes/footer.html @@ -0,0 +1,3 @@ + diff --git a/app/templates/includes/form.html b/app/templates/includes/form.html new file mode 100644 index 0000000..0d943ff --- /dev/null +++ b/app/templates/includes/form.html @@ -0,0 +1,18 @@ +
+
+ +
+ +

Dolazim (I'll be there)

+
+
+ +

Ne dolazim (Won't be there)

+
+
+
+ + +
+ +
diff --git a/app/templates/includes/header.html b/app/templates/includes/header.html new file mode 100644 index 0000000..e10ad98 --- /dev/null +++ b/app/templates/includes/header.html @@ -0,0 +1,4 @@ +
+

Dekonferencija v1.0

+
+
diff --git a/app/templates/layouts/base.html b/app/templates/layouts/base.html new file mode 100644 index 0000000..0dfac9a --- /dev/null +++ b/app/templates/layouts/base.html @@ -0,0 +1,14 @@ + + + + + App + + +
+ {% include "includes/header.html" %} + {% block content %}{% endblock content %} + {% include "includes/footer.html" %} +
+ + diff --git a/app/templates/pages/index.html b/app/templates/pages/index.html new file mode 100644 index 0000000..5aae85b --- /dev/null +++ b/app/templates/pages/index.html @@ -0,0 +1,9 @@ +{% extends "layouts/base.html" %} + +{% block content %} +
+

Dekonferencija je prva konferencija koju organizuje Decentrala,samoorganizovani kolektiv. Dekonferencija je mesto gde cemo imati predavanja, radionice, razmenjivati iskustva i ideje i druziti se. +

+
+ {% include "includes/form.html" %} +{% endblock %} diff --git a/app/templates/pages/results.html b/app/templates/pages/results.html new file mode 100644 index 0000000..e4cbd47 --- /dev/null +++ b/app/templates/pages/results.html @@ -0,0 +1,22 @@ +{% extends "layouts/base.html" %} + +{% block content %} + + + + + + + + {% for reply in replies %} + + + + + {% endfor%} +
Prisustvo (Attendance)Komentar ili pitanje (Comment or question)
+ {{reply["attendence"]}} + + {{reply["comment"]}} +
+{% endblock %} diff --git a/app/templates/pages/success.html b/app/templates/pages/success.html new file mode 100644 index 0000000..cf9d013 --- /dev/null +++ b/app/templates/pages/success.html @@ -0,0 +1,10 @@ +{% extends "layouts/base.html" %} + +{% block content %} +
+

Hvala na prijavi! U medjuvrmenu mozete se prikljuciti diskusijama na forumu (forum.dmz.rs) ili XMPP grupi(decentrala@conference.dmz.rs). + +Thanks for application! In meantime you can join forum(forum.dmz.rs) or XMPP group (decentrala@conference.dmz.rs) +

+
+{% endblock %} diff --git a/config.py b/config.py new file mode 100644 index 0000000..2a9567f --- /dev/null +++ b/config.py @@ -0,0 +1,29 @@ +from pathlib import Path +import os + +class Config: + APP_NAME = "Dekonferencija v1.0" + DEBUG = False + TESTING = False + + SECRET_KEY = "Change this to something secure" + APP_ROOT = os.path.join(Path(__file__).parent, "app") + + DB_NAME = "app.db" + DB_USERNAME = "" + DB_PASSWORD = "" + SQLALCHEMY_DATABASE_URI = f"sqlite:///{DB_NAME}" + SQLALCHEMY_TRACK_MODIFICATIONS = False + HOST = "127.0.0.1" + + + UPLOAD_FOLDER = f"{APP_ROOT}/static/generated_audio" + +class DevelopmentConifg(Config): + DEBUG = True + +class ProductionConfig(Config): + HOST = "0.0.0.0" + +class TestingConfig(Config): + TESTING = True diff --git a/db_bootstrap.py b/db_bootstrap.py new file mode 100644 index 0000000..b5c0cb2 --- /dev/null +++ b/db_bootstrap.py @@ -0,0 +1,6 @@ +from app import app, db + +with app.app_context(): + db.create_all() + +print("DB success") diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..cfff8d0 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,11 @@ +click +Flask +Flask-SQLAlchemy +greenlet +importlib-metadata +itsdangerous +Jinja2 +MarkupSafe +SQLAlchemy +Werkzeug +zipp diff --git a/run.py b/run.py new file mode 100644 index 0000000..3a43937 --- /dev/null +++ b/run.py @@ -0,0 +1,4 @@ +from app import app + +if __name__ == '__main__': + app.run()