diff --git a/resolvers/editor.py b/resolvers/editor.py index 4828cc20..25867831 100644 --- a/resolvers/editor.py +++ b/resolvers/editor.py @@ -9,7 +9,7 @@ from services.schema import mutation, query from orm.shout import Shout, ShoutAuthor, ShoutTopic from orm.topic import Topic from reaction import reactions_follow, reactions_unfollow -from services.presence import notify_shout +from services.notify import notify_shout @query.field("loadDrafts") diff --git a/resolvers/follower.py b/resolvers/follower.py index fd274ef7..d565b148 100644 --- a/resolvers/follower.py +++ b/resolvers/follower.py @@ -6,7 +6,7 @@ from resolvers.community import community_follow, community_unfollow from services.following import FollowingManager, FollowingResult from services.db import local_session from orm.author import Author -from services.presence import notify_follower +from services.notify import notify_follower @login_required @@ -52,7 +52,7 @@ async def unfollow(_, info, what, slug): with local_session() as session: author = session.query(Author.id).where(Author.slug == slug).one() follower = session.query(Author).where(Author.id == follower_id).one() - notify_follower(follower.dict(), author.id) + notify_follower(follower.dict(), author.id, "unfollow") elif what == "TOPIC": if topic_unfollow(follower_id, slug): result = FollowingResult("DELETED", 'topic', slug) diff --git a/resolvers/reaction.py b/resolvers/reaction.py index 905fadcf..a9f0964f 100644 --- a/resolvers/reaction.py +++ b/resolvers/reaction.py @@ -1,7 +1,7 @@ from datetime import datetime, timedelta, timezone from sqlalchemy import and_, asc, desc, select, text, func, case from sqlalchemy.orm import aliased -from services.presence import notify_reaction +from services.notify import notify_reaction from services.auth import login_required from base.exceptions import OperationNotAllowed from services.db import local_session diff --git a/schemas/core.graphql b/schemas/core.graphql index df3d9c31..6e5249d4 100644 --- a/schemas/core.graphql +++ b/schemas/core.graphql @@ -165,7 +165,7 @@ type AuthorStat { type Author { id: Int! - user: Int! + user: String! slug: String! name: String pic: String diff --git a/services/exceptions.py b/services/exceptions.py deleted file mode 100644 index 95511db2..00000000 --- a/services/exceptions.py +++ /dev/null @@ -1,39 +0,0 @@ -from starlette.exceptions import HTTPException - - -# TODO: remove traceback from logs for defined exceptions - - -class BaseHttpException(HTTPException): - states_code = 500 - detail = "500 Server error" - - -class ExpiredToken(BaseHttpException): - states_code = 401 - detail = "401 Expired Token" - - -class InvalidToken(BaseHttpException): - states_code = 401 - detail = "401 Invalid Token" - - -class Unauthorized(BaseHttpException): - states_code = 401 - detail = "401 Unauthorized" - - -class ObjectNotExist(BaseHttpException): - code = 404 - detail = "404 Object Does Not Exist" - - -class OperationNotAllowed(BaseHttpException): - states_code = 403 - detail = "403 Operation Is Not Allowed" - - -class InvalidPassword(BaseHttpException): - states_code = 403 - message = "403 Invalid Password" diff --git a/services/following.py b/services/following.py index a86bcd30..ec889664 100644 --- a/services/following.py +++ b/services/following.py @@ -12,7 +12,7 @@ class Following: queue = asyncio.Queue() def __init__(self, kind, uid): - self.kind = kind # author topic shout chat + self.kind = kind # author topic shout community self.uid = uid diff --git a/services/presence.py b/services/notify.py similarity index 100% rename from services/presence.py rename to services/notify.py diff --git a/services/search.py b/services/search.py index 28494e94..3ac05678 100644 --- a/services/search.py +++ b/services/search.py @@ -26,6 +26,7 @@ class SearchService: "limit": limit, "offset": offset, } + # FIXME: use elastic request here payload = await load_shouts_by(None, None, options) await redis.execute("SET", text, json.dumps(payload)) return payload diff --git a/services/server.py b/services/server.py deleted file mode 100644 index e9ae773f..00000000 --- a/services/server.py +++ /dev/null @@ -1,67 +0,0 @@ -import sys -import uvicorn -from uvicorn.main import logger - -from settings import PORT - -log_settings = { - "version": 1, - "disable_existing_loggers": True, - "formatters": { - "default": { - "()": "uvicorn.logging.DefaultFormatter", - "fmt": "%(levelprefix)s %(message)s", - "use_colors": None, - }, - "access": { - "()": "uvicorn.logging.AccessFormatter", - "fmt": '%(levelprefix)s %(client_addr)s - "%(request_line)s" %(status_code)s', - }, - }, - "handlers": { - "default": { - "formatter": "default", - "class": "logging.StreamHandler", - "stream": "ext://sys.stderr", - }, - "access": { - "formatter": "access", - "class": "logging.StreamHandler", - "stream": "ext://sys.stdout", - }, - }, - "loggers": { - "uvicorn": {"handlers": ["default"], "level": "INFO"}, - "uvicorn.error": {"level": "INFO", "handlers": ["default"], "propagate": True}, - "uvicorn.access": {"handlers": ["access"], "level": "INFO", "propagate": False}, - }, -} - -local_headers = [ - ("Access-Control-Allow-Methods", "GET, POST, OPTIONS, HEAD"), - ("Access-Control-Allow-Origin", "https://localhost:3000"), - ( - "Access-Control-Allow-Headers", - "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization", - ), - ("Access-Control-Expose-Headers", "Content-Length,Content-Range"), - ("Access-Control-Allow-Credentials", "true"), -] - - -def exception_handler(_et, exc, _tb): - logger.error(..., exc_info=(type(exc), exc, exc.__traceback__)) - - -if __name__ == "__main__": - sys.excepthook = exception_handler - if "dev" in sys.argv: - import os - os.environ.set("MODE", "development") - uvicorn.run( - "main:app", - host="0.0.0.0", - port=PORT, - proxy_headers=True, - server_header=True - ) diff --git a/services/settings.py b/services/settings.py deleted file mode 100644 index edaaa36e..00000000 --- a/services/settings.py +++ /dev/null @@ -1,14 +0,0 @@ -from os import environ - -PORT = 8080 -DB_URL = ( - environ.get("DATABASE_URL") - or environ.get("DB_URL") - or "postgresql://postgres@localhost:5432/discoursio" -) -REDIS_URL = environ.get("REDIS_URL") or "redis://127.0.0.1" -API_BASE = environ.get("API_BASE") or "" -AUTH_URL = environ.get("AUTH_URL") or "" -MODE = environ.get("MODE") or "production" -SENTRY_DSN = environ.get("SENTRY_DSN") -DEV_SERVER_PID_FILE_NAME = "dev-server.pid"