diff --git a/.idea/misc.xml b/.idea/misc.xml
index 55f930c..89e1c60 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -3,7 +3,7 @@
IDE
-
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/Backend__Start_dev_server.xml b/.idea/runConfigurations/Backend__Start_dev_server.xml
index 41b9a07..2c2f21c 100644
--- a/.idea/runConfigurations/Backend__Start_dev_server.xml
+++ b/.idea/runConfigurations/Backend__Start_dev_server.xml
@@ -6,7 +6,7 @@
-
+
diff --git a/code/backend/nest_backend/__main__.py b/code/backend/nest_backend/__main__.py
index 34e35f9..d58ebb5 100644
--- a/code/backend/nest_backend/__main__.py
+++ b/code/backend/nest_backend/__main__.py
@@ -1,8 +1,12 @@
+"""
+This is the runner for the server.
+"""
from flask import Flask
import os
import werkzeug.middleware.proxy_fix
from .routes import *
-from .database import Base
+from database import Base, tables
+import psycopg2
app = Flask(__name__)
@@ -12,13 +16,11 @@ else:
app.secret_key = "testing"
reverse_proxy_app = werkzeug.middleware.proxy_fix.ProxyFix(app=app, x_for=1, x_proto=0, x_host=1, x_port=0, x_prefix=0)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://postgres:password@localhost:5432/PdSDev'
-
+Base.app = app
+Base.init_app(app)
# Routes setup
app.add_url_rule("/doa", view_func=page_doa, methods=["GET"])
if __name__ == "__main__":
- try:
- Base.create_all()
- except Exception:
- pass
+ Base.create_all()
app.run(debug=True)
diff --git a/code/backend/nest_backend/database/__init__.py b/code/backend/nest_backend/database/__init__.py
index f699f3f..2498170 100644
--- a/code/backend/nest_backend/database/__init__.py
+++ b/code/backend/nest_backend/database/__init__.py
@@ -1,6 +1,6 @@
-from .tables import *
-from .base import Base
-
"""
This module imports all the tables and the declarative base
-"""
\ No newline at end of file
+"""
+
+from .tables import *
+from .base import Base
\ No newline at end of file
diff --git a/code/backend/nest_backend/database/base.py b/code/backend/nest_backend/database/base.py
index 477d30b..fafa769 100644
--- a/code/backend/nest_backend/database/base.py
+++ b/code/backend/nest_backend/database/base.py
@@ -1,3 +1,7 @@
+"""
+This module creates the declarative base
+"""
import flask_sqlalchemy
+from sqlalchemy.orm import backref
Base = flask_sqlalchemy.SQLAlchemy()
diff --git a/code/backend/nest_backend/database/tables/Alert.py b/code/backend/nest_backend/database/tables/Alert.py
new file mode 100644
index 0000000..03f058e
--- /dev/null
+++ b/code/backend/nest_backend/database/tables/Alert.py
@@ -0,0 +1,19 @@
+"""
+This module defines the Alert database class.
+"""
+
+from ..base import Base
+
+
+class Alert(Base.Model):
+ __tablename__ = "alert"
+ id = Base.Column(Base.Integer, primary_key=True)
+ name = Base.Column(Base.String, nullable=False)
+ limit = Base.Column(Base.Integer, nullable=False)
+ window_size = Base.Column(Base.Integer, nullable=False)
+ # Foreign Keys
+ repository_id = Base.Column(Base.Integer, Base.ForeignKey("repository.id"), nullable=False)
+ # Relationships
+ repository = Base.relationship("Repository", back_populates="alerts")
+ notifications = Base.relationship("Notifications", back_populates="alerts")
+ operations = Base.relationship("BoolOperation", back_populates="alert")
\ No newline at end of file
diff --git a/code/backend/nest_backend/database/tables/Authorization.py b/code/backend/nest_backend/database/tables/Authorization.py
new file mode 100644
index 0000000..49f2e51
--- /dev/null
+++ b/code/backend/nest_backend/database/tables/Authorization.py
@@ -0,0 +1,13 @@
+"""
+This module defines the Authorization database class.
+"""
+
+from ..base import Base
+
+
+class Authorization(Base.Model):
+ rid = Base.Column(Base.Integer, Base.ForeignKey("repository.id"), primary_key=True)
+ email = Base.Column(Base.String, Base.ForeignKey("user.email"), primary_key=True)
+ # Relationships
+ repository = Base.relationship("Repository", back_populates="authorizations")
+ user = Base.relationship("User", back_populates="authorizations")
\ No newline at end of file
diff --git a/code/backend/nest_backend/database/tables/BoolOperation.py b/code/backend/nest_backend/database/tables/BoolOperation.py
new file mode 100644
index 0000000..5fca10d
--- /dev/null
+++ b/code/backend/nest_backend/database/tables/BoolOperation.py
@@ -0,0 +1,25 @@
+"""
+This module defines the BoolOperation database class.
+"""
+
+from ..base import Base, backref
+from .Enums import OperationType
+
+
+class BoolOperation(Base.Model):
+ __tablename__ = "bool_operation"
+ id = Base.Column(Base.Integer, primary_key=True)
+ operation = Base.Column(Base.Enum(OperationType), nullable=False)
+ isRoot = Base.Column(Base.Boolean, default=False, nullable=False)
+ # Foreign Keys
+ condition_id = Base.Column(Base.Integer, Base.ForeignKey("condition.id"))
+ node_1_id = Base.Column(Base.Integer, Base.ForeignKey("bool_operation.id"))
+ node_2_id = Base.Column(Base.Integer, Base.ForeignKey("bool_operation.id"))
+ alert_id = Base.Column(Base.Integer, Base.ForeignKey("alert.id"))
+ # Relationships
+ condition = Base.relationship("Condition", back_populates="operations")
+ node_1 = Base.relationship("BoolOperation", primaryjoin=("bool_operation.c.node_1_id==bool_operation.c.id"),
+ remote_side="BoolOperation.id", backref=backref("father", uselist=False))
+ node_2 = Base.relationship("BoolOperation", primaryjoin=("bool_operation.c.node_2_id==bool_operation.c.id"),
+ remote_side="BoolOperation.id", backref=backref("father", uselist=False))
+ alert = Base.relationship("Alert", back_populates="operations")
diff --git a/code/backend/nest_backend/database/tables/Composed.py b/code/backend/nest_backend/database/tables/Composed.py
new file mode 100644
index 0000000..98564de
--- /dev/null
+++ b/code/backend/nest_backend/database/tables/Composed.py
@@ -0,0 +1,14 @@
+"""
+This module defines the Composed database class.
+"""
+
+from ..base import Base
+
+
+class Composed(Base.Model):
+ __tablename__ = "composed"
+ rid = Base.Column(Base.Integer, Base.ForeignKey("repository.id"), primary_key=True)
+ snowflake = Base.Column(Base.String, Base.ForeignKey("tweet.snowflake"), primary_key=True)
+ # Relationships
+ repository = Base.relationship("Repository", back_populates="tweets")
+ tweet = Base.relationship("Tweet", back_populates="repositories")
\ No newline at end of file
diff --git a/code/backend/nest_backend/database/tables/Condition.py b/code/backend/nest_backend/database/tables/Condition.py
new file mode 100644
index 0000000..46e6ee4
--- /dev/null
+++ b/code/backend/nest_backend/database/tables/Condition.py
@@ -0,0 +1,17 @@
+"""
+This module defines the Condition database class.
+"""
+
+from ..base import Base
+from .Enums import ConditionType
+
+
+class Condition(Base.Model):
+ __tablename__ = "condition"
+ id = Base.Column(Base.Integer, primary_key=True)
+ type = Base.Column(Base.Enum(ConditionType), nullable=False)
+ content = Base.Column(Base.String, nullable=False)
+ # Relationships
+ used = Base.relationship("Uses", back_populates="condition")
+ tweets = Base.relationship("Contains", back_populates="condition")
+ operations = Base.relationship("BoolOperation", back_populates="condition")
diff --git a/code/backend/nest_backend/database/tables/Contains.py b/code/backend/nest_backend/database/tables/Contains.py
new file mode 100644
index 0000000..7ddbaae
--- /dev/null
+++ b/code/backend/nest_backend/database/tables/Contains.py
@@ -0,0 +1,14 @@
+"""
+This module defines the Contains database class.
+"""
+
+from ..base import Base
+
+
+class Contains(Base.Model):
+ __tablename__ = "contains"
+ cid = Base.Column(Base.Integer, Base.ForeignKey("condition.id"), primary_key=True)
+ snowflake = Base.Column(Base.String, Base.ForeignKey("tweet.snowflake"), primary_key=True)
+ # Relationships
+ condition = Base.relationship("Condition", back_populates="tweets")
+ tweet = Base.relationship("Tweet", back_populates="conditions")
\ No newline at end of file
diff --git a/code/backend/nest_backend/database/tables/Enums.py b/code/backend/nest_backend/database/tables/Enums.py
new file mode 100644
index 0000000..512c332
--- /dev/null
+++ b/code/backend/nest_backend/database/tables/Enums.py
@@ -0,0 +1,18 @@
+"""
+This module contains the main enum definitions.
+"""
+
+import enum
+
+
+class ConditionType(enum.Enum):
+ hashtag = 0
+ location = 1
+ time = 2
+
+
+class OperationType(enum.Enum):
+ _and = 0
+ _or = 1
+ _not = 2
+ assign = 3
diff --git a/code/backend/nest_backend/database/tables/Notification.py b/code/backend/nest_backend/database/tables/Notification.py
new file mode 100644
index 0000000..ae751b4
--- /dev/null
+++ b/code/backend/nest_backend/database/tables/Notification.py
@@ -0,0 +1,14 @@
+"""
+This module defines the Notification database class.
+"""
+
+from ..base import Base
+
+class Notification(Base.Model):
+ __tablename__ = "notification"
+ id = Base.Column(Base.Integer, primary_key=True)
+ ora = Base.Column(Base.DateTime, nullable=False)
+ # Foreign Key
+ alert_id = Base.Column(Base.Integer, Base.ForeignKey("alert.id"), nullable=False)
+ # Relationships
+ alert = Base.relationship("Alert", back_populates="notifications")
\ No newline at end of file
diff --git a/code/backend/nest_backend/database/tables/Repository.py b/code/backend/nest_backend/database/tables/Repository.py
new file mode 100644
index 0000000..1a14cfa
--- /dev/null
+++ b/code/backend/nest_backend/database/tables/Repository.py
@@ -0,0 +1,20 @@
+"""
+This module defines the Repository database class.
+"""
+
+from ..base import Base
+
+
+class Repository(Base.Model):
+ __tablename__ = "repository"
+ id = Base.Column(Base.Integer, primary_key=True)
+ name = Base.Column(Base.String, nullable=False)
+ start = Base.Column(Base.DateTime, nullable=False)
+ end = Base.Column(Base.DateTime, nullable=False)
+ # Foreign Keys
+ owner_id = Base.Column(Base.String, Base.ForeignKey("user.email"), nullable=False)
+ # Relationships
+ owner = Base.relationship("User", back_populates="owner_of")
+ authorizations = Base.relationship("Authorization", back_populates="repository")
+ tweets = Base.relationship("Composed", back_populates="repository")
+ alerts = Base.relationship("Alert", back_populates="repository")
\ No newline at end of file
diff --git a/code/backend/nest_backend/database/tables/Tweet.py b/code/backend/nest_backend/database/tables/Tweet.py
new file mode 100644
index 0000000..e90c25c
--- /dev/null
+++ b/code/backend/nest_backend/database/tables/Tweet.py
@@ -0,0 +1,16 @@
+"""
+This module defines the Tweet database class.
+"""
+
+from ..base import Base
+
+
+class Tweet(Base.Model):
+ __tablename__ = "tweet"
+ snowflake = Base.Column(Base.String, primary_key=True)
+ content = Base.Column(Base.String)
+ location = Base.Column(Base.String) # Todo: see if a dedicated class for locations is needed. This is likely.
+ poster = Base.Column(Base.String) # Todo: see if a dedicated class for posters is needed.
+ # Relationships
+ repositories = Base.relationship("Composed", back_populates="tweet")
+ conditions = Base.relationship("Contains", back_populates="tweet")
\ No newline at end of file
diff --git a/code/backend/nest_backend/database/tables/User.py b/code/backend/nest_backend/database/tables/User.py
new file mode 100644
index 0000000..f54f0bf
--- /dev/null
+++ b/code/backend/nest_backend/database/tables/User.py
@@ -0,0 +1,16 @@
+"""
+This module defines the User database class.
+"""
+
+from ..base import Base
+
+
+class User(Base.Model):
+ __tablename__ = "user"
+ email = Base.Column(Base.String, primary_key=True)
+ username = Base.Column(Base.String, nullable=False)
+ password = Base.Column(Base.LargeBinary, nullable=False)
+ isAdmin = Base.Column(Base.Boolean, default=False)
+ # Relationships
+ owner_of = Base.relationship("Repository", back_populates="owner")
+ authorizations = Base.relationship("Authorization", back_populates="user")
\ No newline at end of file
diff --git a/code/backend/nest_backend/database/tables/Uses.py b/code/backend/nest_backend/database/tables/Uses.py
new file mode 100644
index 0000000..dbfa74d
--- /dev/null
+++ b/code/backend/nest_backend/database/tables/Uses.py
@@ -0,0 +1,14 @@
+"""
+This module defines the Uses database class.
+"""
+
+from ..base import Base
+
+
+class Uses(Base.Model):
+ __tablename__ = "uses"
+ rid = Base.Column(Base.Integer, Base.ForeignKey("repository.id"), primary_key=True)
+ cid = Base.Column(Base.Integer, Base.ForeignKey("condition.id"), primary_key=True)
+ # Relationships
+ repository = Base.relationship("Repository", back_populates="uses")
+ condition = Base.relationship("Condition", back_populates="used")
\ No newline at end of file
diff --git a/code/backend/nest_backend/database/tables/Utente.py b/code/backend/nest_backend/database/tables/Utente.py
deleted file mode 100644
index 9d11a92..0000000
--- a/code/backend/nest_backend/database/tables/Utente.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from ..base import Base
-
-
-class Utente(Base.Model):
- __tablename__ = "utente"
- email = Base.Column(Base.String, primary_key=True)
- username = Base.Column(Base.String, nullable=False)
- password = Base.Column(Base.LargeBinary, nullable=False)
\ No newline at end of file
diff --git a/code/backend/nest_backend/database/tables/__init__.py b/code/backend/nest_backend/database/tables/__init__.py
index 339563a..1b80d7b 100644
--- a/code/backend/nest_backend/database/tables/__init__.py
+++ b/code/backend/nest_backend/database/tables/__init__.py
@@ -1,5 +1,15 @@
-from .Utente import Utente
-
"""
This module contains all database classes.
-"""
\ No newline at end of file
+"""
+
+from .Alert import Alert
+from .Authorization import Authorization
+from .BoolOperation import BoolOperation
+from .Composed import Composed
+from .Condition import Condition
+from .Contains import Contains
+from .Notification import Notification
+from .Repository import Repository
+from .Tweet import Tweet
+from .User import User
+from .Uses import Uses
diff --git a/code/backend/nest_backend/routes/__init__.py b/code/backend/nest_backend/routes/__init__.py
index 80d20c1..1a1609c 100644
--- a/code/backend/nest_backend/routes/__init__.py
+++ b/code/backend/nest_backend/routes/__init__.py
@@ -1,5 +1,5 @@
-from .doa import page_doa
-
"""
This module imports all the routes that return something to the frontend.
-"""
\ No newline at end of file
+"""
+
+from .doa import page_doa
\ No newline at end of file
diff --git a/code/backend/nest_backend/routes/doa.py b/code/backend/nest_backend/routes/doa.py
index 2ea0f46..58ff15f 100644
--- a/code/backend/nest_backend/routes/doa.py
+++ b/code/backend/nest_backend/routes/doa.py
@@ -1,10 +1,12 @@
-from flask import render_template, abort
-from ..database import *
-
"""
Page that displays a message if the server is on
"""
+from flask import render_template, abort
+from ..database import *
+
+
+
def page_doa():
utente = Utente()
diff --git a/code/backend/poetry.lock b/code/backend/poetry.lock
index 8cf35fd..5ebbdf2 100644
--- a/code/backend/poetry.lock
+++ b/code/backend/poetry.lock
@@ -78,9 +78,17 @@ category = "main"
optional = false
python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*"
+[[package]]
+name = "psycopg2"
+version = "2.8.6"
+description = "psycopg2 - Python-PostgreSQL Database Adapter"
+category = "main"
+optional = false
+python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*"
+
[[package]]
name = "sqlalchemy"
-version = "1.4.9"
+version = "1.4.10"
description = "Database Abstraction Library"
category = "main"
optional = false
@@ -123,8 +131,8 @@ watchdog = ["watchdog"]
[metadata]
lock-version = "1.1"
-python-versions = "^3.8"
-content-hash = "1c4775c88c3f9f7f9ceb05ec717052a69039f2d7d9f44cbdb348330be98c118e"
+python-versions = "^3.8.5"
+content-hash = "71b957004ae80674013de8327f592dd17b9ffb4e5c6a865e69326555f9c2a1ce"
[metadata.files]
click = [
@@ -227,41 +235,58 @@ markupsafe = [
{file = "MarkupSafe-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be"},
{file = "MarkupSafe-1.1.1.tar.gz", hash = "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b"},
]
+psycopg2 = [
+ {file = "psycopg2-2.8.6-cp27-cp27m-win32.whl", hash = "sha256:068115e13c70dc5982dfc00c5d70437fe37c014c808acce119b5448361c03725"},
+ {file = "psycopg2-2.8.6-cp27-cp27m-win_amd64.whl", hash = "sha256:d160744652e81c80627a909a0e808f3c6653a40af435744de037e3172cf277f5"},
+ {file = "psycopg2-2.8.6-cp34-cp34m-win32.whl", hash = "sha256:b8cae8b2f022efa1f011cc753adb9cbadfa5a184431d09b273fb49b4167561ad"},
+ {file = "psycopg2-2.8.6-cp34-cp34m-win_amd64.whl", hash = "sha256:f22ea9b67aea4f4a1718300908a2fb62b3e4276cf00bd829a97ab5894af42ea3"},
+ {file = "psycopg2-2.8.6-cp35-cp35m-win32.whl", hash = "sha256:26e7fd115a6db75267b325de0fba089b911a4a12ebd3d0b5e7acb7028bc46821"},
+ {file = "psycopg2-2.8.6-cp35-cp35m-win_amd64.whl", hash = "sha256:00195b5f6832dbf2876b8bf77f12bdce648224c89c880719c745b90515233301"},
+ {file = "psycopg2-2.8.6-cp36-cp36m-win32.whl", hash = "sha256:a49833abfdede8985ba3f3ec641f771cca215479f41523e99dace96d5b8cce2a"},
+ {file = "psycopg2-2.8.6-cp36-cp36m-win_amd64.whl", hash = "sha256:f974c96fca34ae9e4f49839ba6b78addf0346777b46c4da27a7bf54f48d3057d"},
+ {file = "psycopg2-2.8.6-cp37-cp37m-win32.whl", hash = "sha256:6a3d9efb6f36f1fe6aa8dbb5af55e067db802502c55a9defa47c5a1dad41df84"},
+ {file = "psycopg2-2.8.6-cp37-cp37m-win_amd64.whl", hash = "sha256:56fee7f818d032f802b8eed81ef0c1232b8b42390df189cab9cfa87573fe52c5"},
+ {file = "psycopg2-2.8.6-cp38-cp38-win32.whl", hash = "sha256:ad2fe8a37be669082e61fb001c185ffb58867fdbb3e7a6b0b0d2ffe232353a3e"},
+ {file = "psycopg2-2.8.6-cp38-cp38-win_amd64.whl", hash = "sha256:56007a226b8e95aa980ada7abdea6b40b75ce62a433bd27cec7a8178d57f4051"},
+ {file = "psycopg2-2.8.6-cp39-cp39-win32.whl", hash = "sha256:2c93d4d16933fea5bbacbe1aaf8fa8c1348740b2e50b3735d1b0bf8154cbf0f3"},
+ {file = "psycopg2-2.8.6-cp39-cp39-win_amd64.whl", hash = "sha256:d5062ae50b222da28253059880a871dc87e099c25cb68acf613d9d227413d6f7"},
+ {file = "psycopg2-2.8.6.tar.gz", hash = "sha256:fb23f6c71107c37fd667cb4ea363ddeb936b348bbd6449278eb92c189699f543"},
+]
sqlalchemy = [
- {file = "SQLAlchemy-1.4.9-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:e26791ac43806dec1f18d328596db87f1b37f9d8271997dd1233054b4c377f51"},
- {file = "SQLAlchemy-1.4.9-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:c4485040d86d4b3d9aa509fd3c492de3687d9bf52fb85d66b33912ad068a088c"},
- {file = "SQLAlchemy-1.4.9-cp27-cp27m-win32.whl", hash = "sha256:a8763fe4de02f746666161b130cc3e5d1494a6f5475f5622f05251739fc22e55"},
- {file = "SQLAlchemy-1.4.9-cp27-cp27m-win_amd64.whl", hash = "sha256:e7d262415e4adf148441bd9f10ae4e5498d6649962fabc62a64ec7b4891d56c5"},
- {file = "SQLAlchemy-1.4.9-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:c6f228b79fd757d9ca539c9958190b3a44308f743dc7d83575aa0891033f6c86"},
- {file = "SQLAlchemy-1.4.9-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:cfbf2cf8e8ef0a1d23bfd0fa387057e6e522d55e43821f1d115941d913ee7762"},
- {file = "SQLAlchemy-1.4.9-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:815a8cdf9c0fa504d0bfbe83fb3e596b7663fc828b73259a20299c01330467aa"},
- {file = "SQLAlchemy-1.4.9-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:cfa4a336de7d32ae30b54f7b8ec888fb5c6313a1b7419a9d7b3f49cdd83012a3"},
- {file = "SQLAlchemy-1.4.9-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:065ac7331b87494a86bf3dc4430c1ee7779d6dc532213c528394ddd00804e518"},
- {file = "SQLAlchemy-1.4.9-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:690fbca2a208314504a2ab46d3e7dae320247fcb1967863b9782a70bf49fc600"},
- {file = "SQLAlchemy-1.4.9-cp36-cp36m-win32.whl", hash = "sha256:4edff2b4101a1c442fb1b17d594a5fdf99145f27c5eaffae12c26aef2bb2bf65"},
- {file = "SQLAlchemy-1.4.9-cp36-cp36m-win_amd64.whl", hash = "sha256:6c6090d73820dcf04549f0b6e80f67b46c8191f0e40bf09c6d6f8ece2464e8b6"},
- {file = "SQLAlchemy-1.4.9-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:fc82688695eacf77befc3d839df2bc7ff314cd1d547f120835acdcbac1a480b8"},
- {file = "SQLAlchemy-1.4.9-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:4e554872766d2783abf0a11704536596e8794229fb0fa63d311a74caae58c6c5"},
- {file = "SQLAlchemy-1.4.9-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:bce6eaf7b9a3a445911e225570b8fd26b7e98654ac9f308a8a52addb64a2a488"},
- {file = "SQLAlchemy-1.4.9-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:25aaf0bec9eadde9789e3c0178c718ae6923b57485fdeae85999bc3089d9b871"},
- {file = "SQLAlchemy-1.4.9-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:f239778cf03cd46da4962636501f6dea55af9b4684cd7ceee104ad4f0290e878"},
- {file = "SQLAlchemy-1.4.9-cp37-cp37m-win32.whl", hash = "sha256:b0266e133d819d33b555798822606e876187a96798e2d8c9b7f85e419d73ef94"},
- {file = "SQLAlchemy-1.4.9-cp37-cp37m-win_amd64.whl", hash = "sha256:230b210fc6d1af5d555d1d04ff9bd4259d6ab82b020369724ab4a1c805a32dd3"},
- {file = "SQLAlchemy-1.4.9-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:a28c7b96bc5beef585172ca9d79068ae7fa2527feaa26bd63371851d7894c66f"},
- {file = "SQLAlchemy-1.4.9-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:457a1652bc1c5f832165ff341380b3742bfb98b9ceca24576350992713ad700f"},
- {file = "SQLAlchemy-1.4.9-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:e9e95568eafae18ac40d00694b82dc3febe653f81eee83204ef248563f39696d"},
- {file = "SQLAlchemy-1.4.9-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:0d8aab144cf8d31c1ac834802c7df4430248f74bd8b3ed3149f9c9eec0eafe50"},
- {file = "SQLAlchemy-1.4.9-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:cde2cf3ee76e8c538f2f43f5cf9252ad53404fc350801191128bab68f335a8b2"},
- {file = "SQLAlchemy-1.4.9-cp38-cp38-win32.whl", hash = "sha256:bb97aeaa699c43da62e35856ab56e5154d062c09a3593a2c12c67d6a21059920"},
- {file = "SQLAlchemy-1.4.9-cp38-cp38-win_amd64.whl", hash = "sha256:fbdcf9019e92253fc6aa0bcd5937302664c3a4d53884c425c0caa994e56c4421"},
- {file = "SQLAlchemy-1.4.9-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:2e1b8d31c97a2b91aea8ed8299ad360a32d60728a89f2aac9c98eef07a633a0e"},
- {file = "SQLAlchemy-1.4.9-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:7bdb0f972bc35054c05088e91cec8fa810c3aa565b690bae75c005ee430e12e8"},
- {file = "SQLAlchemy-1.4.9-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:ec7c33e22beac16b4c5348c41cd94cfee056152e55a0efc62843deebfc53fcb4"},
- {file = "SQLAlchemy-1.4.9-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:29816a338982c30dd7ee76c4e79f17d5991abb1b6561e9f1d72703d030a79c86"},
- {file = "SQLAlchemy-1.4.9-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:099e63ffad329989080c533896267c40f9cb38ed5704168f7dae3afdda121e10"},
- {file = "SQLAlchemy-1.4.9-cp39-cp39-win32.whl", hash = "sha256:343c679899afdc4952ac659dc46f2075a2bd4fba87ca0df264be838eecd02096"},
- {file = "SQLAlchemy-1.4.9-cp39-cp39-win_amd64.whl", hash = "sha256:386f215248c3fb2fab9bb77f631bc3c6cd38354ca2363d241784f8297d16b80a"},
- {file = "SQLAlchemy-1.4.9.tar.gz", hash = "sha256:f31757972677fbe9132932a69a4f23db59187a072cc26427f56a3082b46b6dac"},
+ {file = "SQLAlchemy-1.4.10-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:6c24884bb8d0065cf6f61b643e8f32947ef8386a5bcdad41b921ed81994ea8f1"},
+ {file = "SQLAlchemy-1.4.10-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:266fbf4a0d3f4ed614fff60485e3ba83d3eef4a736102b9b7e461402dc930234"},
+ {file = "SQLAlchemy-1.4.10-cp27-cp27m-win32.whl", hash = "sha256:e7e52b59e0895c3c85eb271e2b77b9507b131eec621a2de1986682a69cc96889"},
+ {file = "SQLAlchemy-1.4.10-cp27-cp27m-win_amd64.whl", hash = "sha256:4513c4d2a9d03239dd48c558b7e89969128e07493c8930a4edc2ba9c6ba6f098"},
+ {file = "SQLAlchemy-1.4.10-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:978a89d594d477f2bf088aedf2f60fb213b0191f8f8d96f5b48b7e0cf76b420c"},
+ {file = "SQLAlchemy-1.4.10-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:13508e69d6feba528ff583f81b840b837a085456fb084db968a65e6bcc4f0193"},
+ {file = "SQLAlchemy-1.4.10-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:92b153cbc0138931e82cc26fedcd84d55ac6f6916e881799e540ff4d3c875b67"},
+ {file = "SQLAlchemy-1.4.10-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:e55e7624c5253fad07ceee52d06ce9b562895a33c004f48118b05a50773ae380"},
+ {file = "SQLAlchemy-1.4.10-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:b127b4c6961005eb16e46d6f84dc272af58259c7e373dc49e287b0157a776073"},
+ {file = "SQLAlchemy-1.4.10-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:e1088a429716ce32f30925228d56c74b3566dae880b8b89d12d3245469d0e494"},
+ {file = "SQLAlchemy-1.4.10-cp36-cp36m-win32.whl", hash = "sha256:2bf1a89887ff316c8bc6e69197dbd37ef84c41231c2d92c4af438a391fb730ea"},
+ {file = "SQLAlchemy-1.4.10-cp36-cp36m-win_amd64.whl", hash = "sha256:bc840a012a5521635cb084b690ae4a2587072b34707c626de57619c96b079ffd"},
+ {file = "SQLAlchemy-1.4.10-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:8bb0a2767a88e41be9d414fdd18e3929d7aa0abad81a6ab0747d5098d785c8a9"},
+ {file = "SQLAlchemy-1.4.10-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:99d90172d1d284550caa490617f50392dcdea330401fad0eddb95b83d6b4a501"},
+ {file = "SQLAlchemy-1.4.10-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:08c5a58bfbd6638c17b13fad8d78c75756a11d67948615ac6713d8aaa19634ed"},
+ {file = "SQLAlchemy-1.4.10-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:56fc949c075085bfd4aa38a2cb0e3dd3e9f6a1a01a628cb1225adbd169dbdeb4"},
+ {file = "SQLAlchemy-1.4.10-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:482e38d6ea79b3d2d136044188545bf262ba001d8a4f41112808a8d457e8bb9f"},
+ {file = "SQLAlchemy-1.4.10-cp37-cp37m-win32.whl", hash = "sha256:83372e25c1cc2100d00603907abe8d05d1143f8907f841780760c694285b714d"},
+ {file = "SQLAlchemy-1.4.10-cp37-cp37m-win_amd64.whl", hash = "sha256:d5618889532bd4096f7c7eb143e5e7039c24eb4327aef7d87d8f56220c4fdd5d"},
+ {file = "SQLAlchemy-1.4.10-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:8d2c8a1f1352a9db7b5c370411f61cf36b9bfed61cbac4ae1033c39374981a0c"},
+ {file = "SQLAlchemy-1.4.10-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:01988ae8841b8b2efe2bfe5094466d7cec09c69afb430de42c1bc847f2742579"},
+ {file = "SQLAlchemy-1.4.10-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:a2a11d6102ed1f3c949bacd2381e47c0587413889dd35ce4f8b68927ec2e5dd0"},
+ {file = "SQLAlchemy-1.4.10-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:adb965b2310c01249481a3f94a1ab2bb88cd7aa78964a6252a38886a9ecdcaf1"},
+ {file = "SQLAlchemy-1.4.10-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:c4dca554ffe5041bceb5bc938316a46f8391802b5607ed2bc94bfab539545bea"},
+ {file = "SQLAlchemy-1.4.10-cp38-cp38-win32.whl", hash = "sha256:4b49e4700660964e70676aed5b83650b1b7fbbb7ff4b8fca587212e3496cb965"},
+ {file = "SQLAlchemy-1.4.10-cp38-cp38-win_amd64.whl", hash = "sha256:c5f138ffa743508488bf40affa4f34e14deaa47e2ae15e6b1e00fa1220983e0d"},
+ {file = "SQLAlchemy-1.4.10-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:25375f44246e9dd652ba3a566e55a3b35ad7fd88f63bdf1266b6612b956e72cb"},
+ {file = "SQLAlchemy-1.4.10-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:ac61e7129099aae447f0c2c00350b6e598e8985d1891bab21c79affd58c0a23d"},
+ {file = "SQLAlchemy-1.4.10-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:05c3f89fc4c459a71bf643a1145a92ed09e6824c04b9190ea88e2155f42e4ed1"},
+ {file = "SQLAlchemy-1.4.10-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:db314bac56215008af4c1ca2d4cb4e8178140dc009f2f6b04d5af73b26ca895c"},
+ {file = "SQLAlchemy-1.4.10-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:552056e00c58c73fa69c04ba854a3590cd5efd09ee380f06c121553fc42786d5"},
+ {file = "SQLAlchemy-1.4.10-cp39-cp39-win32.whl", hash = "sha256:dbbe277b32aa2df9bf87979d1ec10b5a9288ebf7346c8ae28013db1f32737850"},
+ {file = "SQLAlchemy-1.4.10-cp39-cp39-win_amd64.whl", hash = "sha256:8b3f2719f8957e3402bdcbddde8054399c09898e62ef4b2a7f946ae7e78e7945"},
+ {file = "SQLAlchemy-1.4.10.tar.gz", hash = "sha256:483fb869a3151dae6d1c97d242fe2e1b08f97bc71bd4946229930b9efedc9d9d"},
]
werkzeug = [
{file = "Werkzeug-1.0.1-py2.py3-none-any.whl", hash = "sha256:2de2a5db0baeae7b2d2664949077c2ac63fbd16d98da0ff71837f7d1dea3fd43"},
diff --git a/code/backend/pyproject.toml b/code/backend/pyproject.toml
index 7dc7030..5f87c99 100644
--- a/code/backend/pyproject.toml
+++ b/code/backend/pyproject.toml
@@ -2,10 +2,11 @@
name = "g2-progetto"
version = "0.1.0"
description = ""
-authors = ["Nemesis "]
+authors = ["Lorenzo Balugani "]
[tool.poetry.dependencies]
-python = "^3.8"
+python = "^3.8.5"
+psycopg2 = "^2.8.6"
Flask = "^1.1.2"
Flask-SQLAlchemy = "^2.5.1"