mirror of
https://github.com/pds-nest/nest.git
synced 2024-11-22 04:54:18 +00:00
Add repository GET
This commit is contained in:
parent
b0217d6f36
commit
ad9982a463
8 changed files with 85 additions and 4 deletions
|
@ -8,6 +8,7 @@ from .gestione import *
|
||||||
from .app import app, extension_sqlalchemy
|
from .app import app, extension_sqlalchemy
|
||||||
from .database import User
|
from .database import User
|
||||||
|
|
||||||
|
print(" * N.E.S.T. Server is now starting. Please hold up.")
|
||||||
|
|
||||||
print(" * Swagger docs will be available at http://127.0.0.1:5000/docs")
|
print(" * Swagger docs will be available at http://127.0.0.1:5000/docs")
|
||||||
|
|
||||||
|
@ -20,5 +21,5 @@ with app.app_context():
|
||||||
User(email="admin@admin.com", password=gen_password("password"), username="admin", isAdmin=True))
|
User(email="admin@admin.com", password=gen_password("password"), username="admin", isAdmin=True))
|
||||||
extension_sqlalchemy.session.commit()
|
extension_sqlalchemy.session.commit()
|
||||||
print(" * Created! Username: admin | Password: password")
|
print(" * Created! Username: admin | Password: password")
|
||||||
|
print(" * N.E.S.T. is based on Gestione and coded by the N.E.S.T. team.")
|
||||||
app.run(debug=__debug__)
|
app.run(debug=__debug__)
|
||||||
|
|
|
@ -63,6 +63,16 @@ class RepositorySchema(Schema):
|
||||||
evaluation_mode = fields.Integer(description="The mode with which conditions are evaluated.")
|
evaluation_mode = fields.Integer(description="The mode with which conditions are evaluated.")
|
||||||
|
|
||||||
|
|
||||||
|
class TweetSchema(Schema):
|
||||||
|
snowflake = fields.String(description="The tweet identifier.")
|
||||||
|
content = fields.String(description="The content of the tweet.")
|
||||||
|
location = fields.String(description="The location (coordinates) from which the tweet was tweeted.")
|
||||||
|
place = fields.String(description="The place from which the tweet was tweeted.")
|
||||||
|
poster = fields.String(default="The one that created the tweet.")
|
||||||
|
insert_time = fields.DateTime(default="The time on which the tweet was captured.")
|
||||||
|
conditions = fields.Nested(ConditionSchema, many=True)
|
||||||
|
|
||||||
|
|
||||||
class CreateRepository(Schema):
|
class CreateRepository(Schema):
|
||||||
name = fields.String(description="The repository name.")
|
name = fields.String(description="The repository name.")
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,7 @@ spec.components.schema("CreateCondition", schema=CreateCondition)
|
||||||
spec.components.schema("ConditionParameter", schema=ConditionParameterSchema)
|
spec.components.schema("ConditionParameter", schema=ConditionParameterSchema)
|
||||||
spec.components.schema("AlertParameter", schema=AlertParameterSchema)
|
spec.components.schema("AlertParameter", schema=AlertParameterSchema)
|
||||||
spec.components.schema("Alert", schema=Alert)
|
spec.components.schema("Alert", schema=Alert)
|
||||||
|
spec.components.schema("Tweet", schema=TweetSchema)
|
||||||
spec.components.schema("CreateAlert", schema=CreateAlert)
|
spec.components.schema("CreateAlert", schema=CreateAlert)
|
||||||
spec.components.security_scheme("jwt", {"type": "http", "scheme": "bearer", "bearerFormat": "JWT"})
|
spec.components.security_scheme("jwt", {"type": "http", "scheme": "bearer", "bearerFormat": "JWT"})
|
||||||
|
|
||||||
|
|
|
@ -66,6 +66,11 @@ app.add_url_rule(
|
||||||
view_func=routes.page_repository_alerts,
|
view_func=routes.page_repository_alerts,
|
||||||
methods=["GET", "POST"]
|
methods=["GET", "POST"]
|
||||||
)
|
)
|
||||||
|
app.add_url_rule(
|
||||||
|
"/api/v1/repositories/<int:rid>/tweets",
|
||||||
|
view_func=routes.page_repository_tweets,
|
||||||
|
methods=["GET"]
|
||||||
|
)
|
||||||
app.add_url_rule(
|
app.add_url_rule(
|
||||||
"/api/v1/alert/<int:aid>",
|
"/api/v1/alert/<int:aid>",
|
||||||
view_func=routes.page_alert,
|
view_func=routes.page_alert,
|
||||||
|
|
|
@ -9,8 +9,15 @@ class Tweet(ext.Model):
|
||||||
__tablename__ = "tweet"
|
__tablename__ = "tweet"
|
||||||
snowflake = ext.Column(ext.String, primary_key=True)
|
snowflake = ext.Column(ext.String, primary_key=True)
|
||||||
content = ext.Column(ext.String)
|
content = ext.Column(ext.String)
|
||||||
location = ext.Column(ext.String) # Todo: see if a dedicated class for locations is needed. This is likely.
|
location = ext.Column(ext.String)
|
||||||
poster = ext.Column(ext.String) # Todo: see if a dedicated class for posters is needed.
|
place = ext.Column(ext.String)
|
||||||
|
poster = ext.Column(ext.String)
|
||||||
|
insert_time = ext.Column(ext.DateTime, nullable=False)
|
||||||
# Relationships
|
# Relationships
|
||||||
repositories = ext.relationship("Composed", back_populates="tweet", cascade="all, delete")
|
repositories = ext.relationship("Composed", back_populates="tweet", cascade="all, delete")
|
||||||
conditions = ext.relationship("Contains", back_populates="tweet", cascade="all, delete")
|
conditions = ext.relationship("Contains", back_populates="tweet", cascade="all, delete")
|
||||||
|
|
||||||
|
def to_json(self):
|
||||||
|
return {"snowflake": self.snowflake, "content": self.content, "location": self.location, "poster": self.poster,
|
||||||
|
"place": self.place, "insert_time": self.insert_time.isoformat(),
|
||||||
|
"conditions": [c.condition.to_json() for c in self.conditions]}
|
||||||
|
|
|
@ -3,6 +3,7 @@ from .repository import page_repository
|
||||||
from .repositories import page_repositories
|
from .repositories import page_repositories
|
||||||
from .conditions import *
|
from .conditions import *
|
||||||
from .alerts import *
|
from .alerts import *
|
||||||
|
from .tweets import *
|
||||||
|
|
||||||
__all__ = ["page_condition", "page_repository_conditions", "page_repositories",
|
__all__ = ["page_condition", "page_repository_conditions", "page_repositories",
|
||||||
"page_alert", "page_repository", "page_repository_alerts"]
|
"page_alert", "page_repository", "page_repository_alerts", "page_repository_tweets"]
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
from .repository_tweets import page_repository_tweets
|
||||||
|
__all__ = ["page_repository_tweets"]
|
|
@ -0,0 +1,54 @@
|
||||||
|
from flask import request
|
||||||
|
from flask_jwt_extended import jwt_required
|
||||||
|
from nest_backend.gestione import repository_auth, json_error, json_success, ConditionType, Condition, Repository, \
|
||||||
|
find_user, get_jwt_identity
|
||||||
|
from nest_backend.database import ext
|
||||||
|
from flask_cors import cross_origin
|
||||||
|
from nest_backend.gestione import hashtag_validator
|
||||||
|
|
||||||
|
|
||||||
|
@cross_origin()
|
||||||
|
@jwt_required()
|
||||||
|
@repository_auth
|
||||||
|
def page_repository_tweets(rid):
|
||||||
|
"""
|
||||||
|
---
|
||||||
|
get:
|
||||||
|
summary: Get a list of a repository tweets.
|
||||||
|
parameters:
|
||||||
|
- in: path
|
||||||
|
schema: IntegerParameterSchema
|
||||||
|
security:
|
||||||
|
- jwt: []
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
description: List of Tweet schemas, incapsulated in Success.
|
||||||
|
'401':
|
||||||
|
description: The user is not logged in.
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema: Error
|
||||||
|
'403':
|
||||||
|
description: The user is not authorized.
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema: Error
|
||||||
|
'404':
|
||||||
|
description: The repository could not be found.
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema: Error
|
||||||
|
tags:
|
||||||
|
- repository-related
|
||||||
|
"""
|
||||||
|
|
||||||
|
repository = Repository.query.filter_by(id=rid).first()
|
||||||
|
if not repository:
|
||||||
|
return json_error("Could not find repository"), 404
|
||||||
|
user = find_user(get_jwt_identity())
|
||||||
|
|
||||||
|
if user.email != repository.owner_id:
|
||||||
|
return json_error("You are not authorized."), 403
|
||||||
|
|
||||||
|
if request.method == "GET":
|
||||||
|
return json_success([t.tweet.to_json() for t in repository.tweets])
|
Loading…
Reference in a new issue