microservice-chassis-grupo2 0.1.1__tar.gz → 0.1.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of microservice-chassis-grupo2 might be problematic. Click here for more details.

Files changed (20) hide show
  1. {microservice_chassis_grupo2-0.1.1 → microservice_chassis_grupo2-0.1.3}/PKG-INFO +1 -1
  2. microservice_chassis_grupo2-0.1.3/microservice_chassis_grupo2/__init__.py +0 -0
  3. microservice_chassis_grupo2-0.1.3/microservice_chassis_grupo2/core/__init__.py +0 -0
  4. microservice_chassis_grupo2-0.1.3/microservice_chassis_grupo2/core/config.py +8 -0
  5. microservice_chassis_grupo2-0.1.3/microservice_chassis_grupo2/core/dependencies.py +40 -0
  6. microservice_chassis_grupo2-0.1.3/microservice_chassis_grupo2/core/rabbitmq_core.py +17 -0
  7. microservice_chassis_grupo2-0.1.3/microservice_chassis_grupo2/core/router_utils.py +18 -0
  8. microservice_chassis_grupo2-0.1.3/microservice_chassis_grupo2/core/security.py +26 -0
  9. microservice_chassis_grupo2-0.1.3/microservice_chassis_grupo2/sql/__init__.py +0 -0
  10. microservice_chassis_grupo2-0.1.3/microservice_chassis_grupo2/sql/database.py +24 -0
  11. microservice_chassis_grupo2-0.1.3/microservice_chassis_grupo2/sql/models.py +30 -0
  12. {microservice_chassis_grupo2-0.1.1 → microservice_chassis_grupo2-0.1.3}/microservice_chassis_grupo2.egg-info/PKG-INFO +1 -1
  13. microservice_chassis_grupo2-0.1.3/microservice_chassis_grupo2.egg-info/SOURCES.txt +16 -0
  14. microservice_chassis_grupo2-0.1.3/microservice_chassis_grupo2.egg-info/top_level.txt +1 -0
  15. {microservice_chassis_grupo2-0.1.1 → microservice_chassis_grupo2-0.1.3}/setup.py +1 -1
  16. microservice_chassis_grupo2-0.1.1/microservice_chassis_grupo2.egg-info/SOURCES.txt +0 -6
  17. microservice_chassis_grupo2-0.1.1/microservice_chassis_grupo2.egg-info/top_level.txt +0 -1
  18. {microservice_chassis_grupo2-0.1.1 → microservice_chassis_grupo2-0.1.3}/README.md +0 -0
  19. {microservice_chassis_grupo2-0.1.1 → microservice_chassis_grupo2-0.1.3}/microservice_chassis_grupo2.egg-info/dependency_links.txt +0 -0
  20. {microservice_chassis_grupo2-0.1.1 → microservice_chassis_grupo2-0.1.3}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: microservice_chassis_grupo2
3
- Version: 0.1.1
3
+ Version: 0.1.3
4
4
  Summary: A reusable library for microservices
5
5
  Home-page: https://github.com/Grupo-MACC/Chassis
6
6
  Author: Grupo 2
@@ -0,0 +1,8 @@
1
+ import os
2
+
3
+ class Settings():
4
+ ALGORITHM: str = "RS256"
5
+ RABBITMQ_HOST = f"amqp://{os.getenv("RABBITMQ_USER", "guest")}:{os.getenv("RABBITMQ_PASSWORD", "guest")}@rabbitmq/"
6
+ EXCHANGE_NAME = "broker"
7
+
8
+ settings = Settings()
@@ -0,0 +1,40 @@
1
+ import logging
2
+ from fastapi import Depends, HTTPException, status
3
+ from fastapi.security import HTTPAuthorizationCredentials, HTTPBearer
4
+ from microservice_chassis_grupo2.core.security import decode_token
5
+
6
+ logger = logging.getLogger(__name__)
7
+ auth_scheme = HTTPBearer()
8
+
9
+ # Database #########################################################################################
10
+ async def get_db():
11
+ """Generates database sessions and closes them when finished."""
12
+ from sql.database import SessionLocal
13
+ logger.debug("Getting database SessionLocal")
14
+ db = SessionLocal()
15
+ try:
16
+ yield db
17
+ await db.commit()
18
+ except:
19
+ await db.rollback()
20
+ finally:
21
+ await db.close()
22
+
23
+ async def get_current_user(
24
+ credentials: HTTPAuthorizationCredentials = Depends(auth_scheme)
25
+ ):
26
+ """
27
+ Decodifica el JWT y obtiene el usuario actual desde la base de datos.
28
+ """
29
+ token = credentials.credentials
30
+
31
+ try:
32
+ payload = decode_token(token)
33
+ except ValueError:
34
+ raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Token inválido")
35
+
36
+ user_id = payload.get("user_id")
37
+ if not user_id:
38
+ raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Token inválido")
39
+
40
+ return user_id
@@ -0,0 +1,17 @@
1
+ from aio_pika import connect_robust, ExchangeType
2
+ from microservice_chassis_grupo2.core.config import settings
3
+
4
+ async def get_channel():
5
+ connection = await connect_robust(settings.RABBITMQ_HOST)
6
+ channel = await connection.channel()
7
+
8
+ return connection, channel
9
+
10
+ async def declare_exchange(channel):
11
+ exchange = channel.declare_exchange(
12
+ settings.EXCHANGE_NAME,
13
+ ExchangeType.TOPIC,
14
+ durable=True
15
+ )
16
+
17
+ return exchange
@@ -0,0 +1,18 @@
1
+ # -*- coding: utf-8 -*-
2
+ """Util/Helper functions for router definitions."""
3
+ import logging
4
+ from fastapi import HTTPException
5
+
6
+ ORDER_SERVICE_URL = "https://order:5000"
7
+ MACHINE_SERVICE_URL = "https://machine:5001"
8
+ DELIVERY_SERVICE_URL = "https://delivery:5002"
9
+ PAYMENT_SERVICE_URL = "https://payment:5003"
10
+ AUTH_SERVICE_URL = "https://auth:5004"
11
+
12
+ logger = logging.getLogger(__name__)
13
+
14
+
15
+ def raise_and_log_error(my_logger, status_code: int, message: str):
16
+ """Raises HTTPException and logs an error."""
17
+ my_logger.error(message)
18
+ raise HTTPException(status_code, message)
@@ -0,0 +1,26 @@
1
+ import jwt
2
+ import os
3
+ from fastapi import HTTPException
4
+ from microservice_chassis_grupo2.core.config import settings
5
+
6
+ PUBLIC_KEY_PATH = "/home/pyuser/code/auth_public.pem"
7
+
8
+ def read_public_pem():
9
+ if not os.path.exists(PUBLIC_KEY_PATH):
10
+ print("no hay")
11
+ print(PUBLIC_KEY_PATH)
12
+ raise ValueError(f"Public key not found at {PUBLIC_KEY_PATH}")
13
+ with open(PUBLIC_KEY_PATH, "r", encoding="utf-8") as f:
14
+ return f.read()
15
+
16
+ def decode_token(token: str) -> dict:
17
+ try:
18
+ public_pem = read_public_pem()
19
+ payload = jwt.decode(token, public_pem, algorithms=[settings.ALGORITHM])
20
+ return payload
21
+ except FileNotFoundError as e:
22
+ raise HTTPException(status_code=500, detail="Public key file not found")
23
+ except ValueError as e:
24
+ raise HTTPException(status_code=401, detail=str(e))
25
+ except Exception as e:
26
+ raise HTTPException(status_code=500, detail=f"Unexpected error: {str(e)}")
@@ -0,0 +1,24 @@
1
+ import os
2
+ from sqlalchemy.orm import sessionmaker, declarative_base
3
+ from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
4
+
5
+ SQLALCHEMY_DATABASE_URL = os.getenv(
6
+ 'SQLALCHEMY_DATABASE_URL',
7
+ "sqlite+aiosqlite:///./default.db"
8
+ )
9
+
10
+ engine = create_async_engine(
11
+ SQLALCHEMY_DATABASE_URL,
12
+ connect_args={"check_same_thread": False},
13
+ echo=False
14
+ )
15
+
16
+ SessionLocal = sessionmaker(
17
+ autocommit=False,
18
+ autoflush=False,
19
+ bind=engine,
20
+ class_=AsyncSession,
21
+ future=True
22
+ )
23
+
24
+ Base = declarative_base()
@@ -0,0 +1,30 @@
1
+ from sqlalchemy import Column, DateTime
2
+ from sqlalchemy.sql import func
3
+ from microservice_chassis_grupo2.sql.database import Base
4
+
5
+ class BaseModel(Base):
6
+ """Base database table representation to reuse."""
7
+ __abstract__ = True
8
+ creation_date = Column(DateTime(timezone=True), server_default=func.now())
9
+ update_date = Column(DateTime, nullable=False, server_default=func.now(), onupdate=func.now())
10
+
11
+ def __repr__(self):
12
+ fields = ""
13
+ for column in self.__table__.columns:
14
+ if fields == "":
15
+ fields = f"{column.name}='{getattr(self, column.name)}'"
16
+ # fields = "{}='{}'".format(column.name, getattr(self, column.name))
17
+ else:
18
+ fields = f"{fields}, {column.name}='{getattr(self, column.name)}'"
19
+ # fields = "{}, {}='{}'".format(fields, column.name, getattr(self, column.name))
20
+ return f"<{self.__class__.__name__}({fields})>"
21
+ # return "<{}({})>".format(self.__class__.__name__, fields)
22
+
23
+ @staticmethod
24
+ def list_as_dict(items):
25
+ """Returns list of items as dict."""
26
+ return [i.as_dict() for i in items]
27
+
28
+ def as_dict(self):
29
+ """Return the item as dict."""
30
+ return {c.name: getattr(self, c.name) for c in self.__table__.columns}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: microservice_chassis_grupo2
3
- Version: 0.1.1
3
+ Version: 0.1.3
4
4
  Summary: A reusable library for microservices
5
5
  Home-page: https://github.com/Grupo-MACC/Chassis
6
6
  Author: Grupo 2
@@ -0,0 +1,16 @@
1
+ README.md
2
+ setup.py
3
+ microservice_chassis_grupo2/__init__.py
4
+ microservice_chassis_grupo2.egg-info/PKG-INFO
5
+ microservice_chassis_grupo2.egg-info/SOURCES.txt
6
+ microservice_chassis_grupo2.egg-info/dependency_links.txt
7
+ microservice_chassis_grupo2.egg-info/top_level.txt
8
+ microservice_chassis_grupo2/core/__init__.py
9
+ microservice_chassis_grupo2/core/config.py
10
+ microservice_chassis_grupo2/core/dependencies.py
11
+ microservice_chassis_grupo2/core/rabbitmq_core.py
12
+ microservice_chassis_grupo2/core/router_utils.py
13
+ microservice_chassis_grupo2/core/security.py
14
+ microservice_chassis_grupo2/sql/__init__.py
15
+ microservice_chassis_grupo2/sql/database.py
16
+ microservice_chassis_grupo2/sql/models.py
@@ -0,0 +1 @@
1
+ microservice_chassis_grupo2
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
2
2
 
3
3
  setup(
4
4
  name="microservice_chassis_grupo2",
5
- version="0.1.1",
5
+ version="0.1.3",
6
6
  packages=find_packages(),
7
7
  install_requires=[],
8
8
  author="Grupo 2",
@@ -1,6 +0,0 @@
1
- README.md
2
- setup.py
3
- microservice_chassis_grupo2.egg-info/PKG-INFO
4
- microservice_chassis_grupo2.egg-info/SOURCES.txt
5
- microservice_chassis_grupo2.egg-info/dependency_links.txt
6
- microservice_chassis_grupo2.egg-info/top_level.txt