mirror of
https://github.com/pds-nest/nest.git
synced 2024-11-25 22:44:19 +00:00
Fixes and changes
Changed the way repos are deleted, fixed a few issues.
This commit is contained in:
parent
1da9543a8c
commit
3d20f1a252
11 changed files with 33 additions and 62 deletions
|
@ -15,6 +15,7 @@ class Repository(ext.Model):
|
||||||
start = ext.Column(ext.DateTime, nullable=True)
|
start = ext.Column(ext.DateTime, nullable=True)
|
||||||
end = ext.Column(ext.DateTime, nullable=True)
|
end = ext.Column(ext.DateTime, nullable=True)
|
||||||
is_active = ext.Column(ext.Boolean, nullable=False, default=False)
|
is_active = ext.Column(ext.Boolean, nullable=False, default=False)
|
||||||
|
is_deleted = ext.Column(ext.Boolean, nullable=False, default=False)
|
||||||
evaluation_mode = ext.Column(ext.Enum(ConditionMode), default=ConditionMode.all_or)
|
evaluation_mode = ext.Column(ext.Enum(ConditionMode), default=ConditionMode.all_or)
|
||||||
|
|
||||||
# Foreign Keys
|
# Foreign Keys
|
||||||
|
|
|
@ -149,7 +149,7 @@ def page_alert(aid):
|
||||||
"""
|
"""
|
||||||
user = find_user(get_jwt_identity())
|
user = find_user(get_jwt_identity())
|
||||||
alert = Alert.query.filter_by(id=aid).first()
|
alert = Alert.query.filter_by(id=aid).first()
|
||||||
if not alert:
|
if not alert or alert.repository.is_deleted:
|
||||||
return json_error("Could not find alert.", ALERT_NOT_FOUND), 404
|
return json_error("Could not find alert.", ALERT_NOT_FOUND), 404
|
||||||
if alert.repository not in [a.repository for a in user.authorizations] + user.owner_of:
|
if alert.repository not in [a.repository for a in user.authorizations] + user.owner_of:
|
||||||
return json_error("You are not authorized to proceed.", USER_NOT_AUTHORIZED), 403
|
return json_error("You are not authorized to proceed.", USER_NOT_AUTHORIZED), 403
|
||||||
|
|
|
@ -71,7 +71,7 @@ def page_repository_alerts(rid):
|
||||||
- alert-related
|
- alert-related
|
||||||
"""
|
"""
|
||||||
|
|
||||||
repository = Repository.query.filter_by(id=rid).first()
|
repository = Repository.query.filter_by(id=rid, is_deleted=False).first()
|
||||||
if not repository:
|
if not repository:
|
||||||
return json_error("Could not find repository", REPOSITORY_NOT_FOUND), 404
|
return json_error("Could not find repository", REPOSITORY_NOT_FOUND), 404
|
||||||
user = find_user(get_jwt_identity())
|
user = find_user(get_jwt_identity())
|
||||||
|
@ -116,7 +116,7 @@ def page_repository_alerts(rid):
|
||||||
return json_error("Missing `content` parameter.", GENERIC_MISSING_FIELDS), 400
|
return json_error("Missing `content` parameter.", GENERIC_MISSING_FIELDS), 400
|
||||||
if type_ == ConditionType.hashtag:
|
if type_ == ConditionType.hashtag:
|
||||||
content = hashtag_validator(content)
|
content = hashtag_validator(content)
|
||||||
c = Condition(content=content, type=type_, repository_id=rid)
|
c = Condition(content=content, type=type_)
|
||||||
ext.session.add(c)
|
ext.session.add(c)
|
||||||
ext.session.commit()
|
ext.session.commit()
|
||||||
conn = MadeOf(aid=alert.id, cid=c.id)
|
conn = MadeOf(aid=alert.id, cid=c.id)
|
||||||
|
|
|
@ -39,7 +39,7 @@ def page_authorization(rid, email):
|
||||||
tags:
|
tags:
|
||||||
- repository-related
|
- repository-related
|
||||||
"""
|
"""
|
||||||
repository = Repository.query.filter_by(id=rid).first()
|
repository = Repository.query.filter_by(id=rid, is_deleted=False).first()
|
||||||
user = find_user(get_jwt_identity())
|
user = find_user(get_jwt_identity())
|
||||||
if not repository:
|
if not repository:
|
||||||
return json_error("Could not find the repository.", REPOSITORY_NOT_FOUND), 404
|
return json_error("Could not find the repository.", REPOSITORY_NOT_FOUND), 404
|
||||||
|
|
|
@ -112,7 +112,7 @@ def page_repository_authorizations(rid):
|
||||||
- repository-related
|
- repository-related
|
||||||
"""
|
"""
|
||||||
|
|
||||||
repository = Repository.query.filter_by(id=rid).first()
|
repository = Repository.query.filter_by(id=rid, is_deleted=False).first()
|
||||||
if not repository:
|
if not repository:
|
||||||
return json_error("Could not find repository", REPOSITORY_NOT_FOUND), 404
|
return json_error("Could not find repository", REPOSITORY_NOT_FOUND), 404
|
||||||
user = find_user(get_jwt_identity())
|
user = find_user(get_jwt_identity())
|
||||||
|
|
|
@ -106,7 +106,7 @@ def page_condition(cid):
|
||||||
"""
|
"""
|
||||||
condition = Condition.query.filter_by(id=cid).first()
|
condition = Condition.query.filter_by(id=cid).first()
|
||||||
user = find_user(get_jwt_identity())
|
user = find_user(get_jwt_identity())
|
||||||
if not condition:
|
if not condition or condition.repository.is_deleted:
|
||||||
return json_error("Could not find the condition.", CONDITION_NOT_FOUND), 404
|
return json_error("Could not find the condition.", CONDITION_NOT_FOUND), 404
|
||||||
if condition.repository not in [a.repository for a in user.authorizations] + user.owner_of and not user.isAdmin:
|
if condition.repository not in [a.repository for a in user.authorizations] + user.owner_of and not user.isAdmin:
|
||||||
return json_error("You lack the authorization to proceed, pal.", USER_NOT_AUTHORIZED), 403
|
return json_error("You lack the authorization to proceed, pal.", USER_NOT_AUTHORIZED), 403
|
||||||
|
|
|
@ -73,7 +73,7 @@ def page_repository_conditions(rid):
|
||||||
- repository-related
|
- repository-related
|
||||||
"""
|
"""
|
||||||
|
|
||||||
repository = Repository.query.filter_by(id=rid).first()
|
repository = Repository.query.filter_by(id=rid, is_deleted=False).first()
|
||||||
if not repository:
|
if not repository:
|
||||||
return json_error("Could not find repository", REPOSITORY_NOT_FOUND), 404
|
return json_error("Could not find repository", REPOSITORY_NOT_FOUND), 404
|
||||||
user = find_user(get_jwt_identity())
|
user = find_user(get_jwt_identity())
|
||||||
|
|
|
@ -5,6 +5,7 @@ from nest_backend.gestione import *
|
||||||
import datetime
|
import datetime
|
||||||
from flask_cors import cross_origin
|
from flask_cors import cross_origin
|
||||||
from nest_backend.errors import *
|
from nest_backend.errors import *
|
||||||
|
from nest_crawler.repo_search import search_repo_conditions
|
||||||
|
|
||||||
|
|
||||||
@cross_origin()
|
@cross_origin()
|
||||||
|
@ -62,7 +63,7 @@ def page_repositories():
|
||||||
user = find_user(get_jwt_identity())
|
user = find_user(get_jwt_identity())
|
||||||
if request.method == "GET":
|
if request.method == "GET":
|
||||||
owner = Repository.query.filter_by(owner_id=user.email)
|
owner = Repository.query.filter_by(owner_id=user.email)
|
||||||
spectator = Authorization.query.filter_by(email=user.email).join(Repository)
|
spectator = Authorization.query.filter_by(email=user.email).join(Repository).filter_by(is_deleted=False)
|
||||||
if request.args.get("onlyActive"):
|
if request.args.get("onlyActive"):
|
||||||
owner = owner.filter_by(is_active=True)
|
owner = owner.filter_by(is_active=True)
|
||||||
spectator = spectator.filter(Repository.is_active)
|
spectator = spectator.filter(Repository.is_active)
|
||||||
|
@ -71,7 +72,7 @@ def page_repositories():
|
||||||
spectator = spectator.filter(not Repository.is_active)
|
spectator = spectator.filter(not Repository.is_active)
|
||||||
owner = owner.all()
|
owner = owner.all()
|
||||||
spectator = spectator.all()
|
spectator = spectator.all()
|
||||||
return json_success([r.to_json() for r in owner] + [r.repository.to_json() for r in spectator])
|
return json_success([r.to_json() for r in owner if not r.is_deleted] + [r.repository.to_json() for r in spectator if not r.is_deleted])
|
||||||
elif request.method == "POST":
|
elif request.method == "POST":
|
||||||
# Users will be tolerated if they change parameters they're not supposed to touch. We'll ignore them for now.
|
# Users will be tolerated if they change parameters they're not supposed to touch. We'll ignore them for now.
|
||||||
if not request.json.get("name") or not request.json.get("conditions") or not str(
|
if not request.json.get("name") or not request.json.get("conditions") or not str(
|
||||||
|
@ -88,7 +89,8 @@ def page_repositories():
|
||||||
ext.session.add(repository)
|
ext.session.add(repository)
|
||||||
ext.session.commit()
|
ext.session.commit()
|
||||||
conditions = [c for c in repository.conditions if c.id not in [a['id'] for a in request.json['conditions'] if
|
conditions = [c for c in repository.conditions if c.id not in [a['id'] for a in request.json['conditions'] if
|
||||||
a['id'] in [b.id for b in repository.conditions]]]
|
a['id'] in [b.id for b in
|
||||||
|
repository.conditions]]]
|
||||||
for c in conditions:
|
for c in conditions:
|
||||||
ext.session.delete(c)
|
ext.session.delete(c)
|
||||||
ext.session.commit()
|
ext.session.commit()
|
||||||
|
@ -104,4 +106,8 @@ def page_repositories():
|
||||||
repository.is_active = True
|
repository.is_active = True
|
||||||
repository.start = datetime.datetime.now()
|
repository.start = datetime.datetime.now()
|
||||||
ext.session.commit()
|
ext.session.commit()
|
||||||
|
try:
|
||||||
|
search_repo_conditions(repository.id)
|
||||||
|
except Exception:
|
||||||
|
return json_success(repository.to_json()), 201
|
||||||
return json_success(repository.to_json()), 201
|
return json_success(repository.to_json()), 201
|
||||||
|
|
|
@ -154,7 +154,7 @@ def page_repository(rid):
|
||||||
- repository-related
|
- repository-related
|
||||||
"""
|
"""
|
||||||
user = find_user(get_jwt_identity())
|
user = find_user(get_jwt_identity())
|
||||||
repository = Repository.query.filter_by(id=rid).first()
|
repository = Repository.query.filter_by(id=rid, is_deleted=False).first()
|
||||||
if not repository:
|
if not repository:
|
||||||
return json_error("Could not find repository.", REPOSITORY_NOT_FOUND), 404
|
return json_error("Could not find repository.", REPOSITORY_NOT_FOUND), 404
|
||||||
if request.method == "GET":
|
if request.method == "GET":
|
||||||
|
@ -181,50 +181,7 @@ def page_repository(rid):
|
||||||
if repository.owner_id != user.email and not user.isAdmin:
|
if repository.owner_id != user.email and not user.isAdmin:
|
||||||
return json_error("You are not the owner of this repository.", REPOSITORY_NOT_OWNER), 403
|
return json_error("You are not the owner of this repository.", REPOSITORY_NOT_OWNER), 403
|
||||||
try:
|
try:
|
||||||
# Deleting Tweets...
|
repository.is_deleted = True
|
||||||
tweets = [t.tweet for t in repository.tweets]
|
|
||||||
for tweet in tweets:
|
|
||||||
if len(tweet.repositories) < 2:
|
|
||||||
# Delete Tweets if only attached to this repo
|
|
||||||
for conn in tweet.repositories:
|
|
||||||
ext.session.delete(conn)
|
|
||||||
for conn in tweet.conditions:
|
|
||||||
ext.session.delete(conn)
|
|
||||||
ext.session.delete(tweet)
|
|
||||||
ext.session.commit()
|
|
||||||
else:
|
|
||||||
conns = [conn for conn in tweet.repositories if conn.rid == rid]
|
|
||||||
for conn in conns:
|
|
||||||
ext.session.delete(conn)
|
|
||||||
ext.session.commit()
|
|
||||||
# Deleting authorizations...
|
|
||||||
for auth in repository.authorizations:
|
|
||||||
ext.session.delete(auth)
|
|
||||||
ext.session.commit()
|
|
||||||
# Deleting conditions...
|
|
||||||
for condition in repository.conditions:
|
|
||||||
for c in condition.tweets:
|
|
||||||
ext.session.delete(c)
|
|
||||||
for c in condition.alerts:
|
|
||||||
ext.session.delete(c)
|
|
||||||
ext.session.commit()
|
|
||||||
ext.session.delete(condition)
|
|
||||||
ext.session.commit()
|
|
||||||
# Deleting Alerts...
|
|
||||||
for alert in repository.alerts:
|
|
||||||
for elem in alert.conditions:
|
|
||||||
condition = elem.condition
|
|
||||||
ext.session.delete(elem)
|
|
||||||
ext.session.commit()
|
|
||||||
if not condition.repository_id:
|
|
||||||
ext.session.delete(condition)
|
|
||||||
ext.session.commit()
|
|
||||||
for notification in alert.notifications:
|
|
||||||
ext.session.delete(notification)
|
|
||||||
ext.session.commit()
|
|
||||||
ext.session.delete(alert)
|
|
||||||
ext.session.commit()
|
|
||||||
ext.session.delete(repository)
|
|
||||||
ext.session.commit()
|
ext.session.commit()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
ext.session.rollback()
|
ext.session.rollback()
|
||||||
|
@ -244,9 +201,18 @@ def page_repository(rid):
|
||||||
ext.session.commit()
|
ext.session.commit()
|
||||||
ids = [c['id'] for c in request.json['conditions'] if c['id']]
|
ids = [c['id'] for c in request.json['conditions'] if c['id']]
|
||||||
# Delete no longer needed conditions.
|
# Delete no longer needed conditions.
|
||||||
|
try:
|
||||||
for c in repository.conditions:
|
for c in repository.conditions:
|
||||||
if c.id not in ids:
|
if c.id not in ids:
|
||||||
|
for t in c.tweets:
|
||||||
|
ext.session.delete(t)
|
||||||
|
for a in c.alerts:
|
||||||
|
ext.session.delete(a)
|
||||||
|
ext.session.commit()
|
||||||
ext.session.delete(c)
|
ext.session.delete(c)
|
||||||
|
ext.session.commit()
|
||||||
|
except Exception as e:
|
||||||
|
return json_error("Could not delete conditions.", GENERIC_UFO), 500
|
||||||
# Create brand new conditions
|
# Create brand new conditions
|
||||||
for c in request.json['conditions']:
|
for c in request.json['conditions']:
|
||||||
if not c['id']:
|
if not c['id']:
|
||||||
|
|
|
@ -43,7 +43,7 @@ def page_repository_tweets(rid):
|
||||||
- repository-related
|
- repository-related
|
||||||
"""
|
"""
|
||||||
|
|
||||||
repository = Repository.query.filter_by(id=rid).first()
|
repository = Repository.query.filter_by(id=rid, is_deleted=False).first()
|
||||||
if not repository:
|
if not repository:
|
||||||
return json_error("Could not find repository", REPOSITORY_NOT_FOUND), 404
|
return json_error("Could not find repository", REPOSITORY_NOT_FOUND), 404
|
||||||
user = find_user(get_jwt_identity())
|
user = find_user(get_jwt_identity())
|
||||||
|
|
|
@ -29,7 +29,7 @@ def page_users():
|
||||||
application/json:
|
application/json:
|
||||||
schema: Error
|
schema: Error
|
||||||
tags:
|
tags:
|
||||||
- admin-only
|
- user-related
|
||||||
post:
|
post:
|
||||||
summary: Creates a user.
|
summary: Creates a user.
|
||||||
security:
|
security:
|
||||||
|
@ -65,8 +65,6 @@ def page_users():
|
||||||
"""
|
"""
|
||||||
user = find_user(get_jwt_identity())
|
user = find_user(get_jwt_identity())
|
||||||
if request.method == "GET":
|
if request.method == "GET":
|
||||||
if not user.isAdmin:
|
|
||||||
return json_error("User is not admin. Thou art not authorized", USER_NOT_ADMIN), 403
|
|
||||||
users = User.query.all()
|
users = User.query.all()
|
||||||
return json_success([user.to_json() for user in users]), 200
|
return json_success([user.to_json() for user in users]), 200
|
||||||
if request.method == "POST":
|
if request.method == "POST":
|
||||||
|
|
Loading…
Reference in a new issue