From ef431c28ca30cf07d1387a6b4f18fa53699e1380 Mon Sep 17 00:00:00 2001 From: Gardient Date: Wed, 22 Sep 2021 19:25:51 +0300 Subject: [PATCH] routing and model `__init__` updates --- api/target/models.py | 13 ++++++++++--- api/target/serializers.py | 3 +++ api/target/views.py | 24 +++++++++++++----------- api/target_exchange/models.py | 5 ++++- api/target_exchange/views.py | 12 ++++++------ 5 files changed, 36 insertions(+), 21 deletions(-) diff --git a/api/target/models.py b/api/target/models.py index 9845493..025eaf2 100644 --- a/api/target/models.py +++ b/api/target/models.py @@ -1,12 +1,19 @@ -from api.database import (Model, SurrogatePK, db, - Column, reference_col, relationship) from sqlalchemy import String +from api.database import (Model, SurrogatePK, db, + Column, reference_col, relationship) from api.target_exchange.models import TargetExchange + class Target(SurrogatePK, Model): __tablename__ = "target" name = Column(String(255), unique=True, nullable=False) routing_key = Column(String(255), nullable=False) target_exchange_id = reference_col(TargetExchange.__tablename__, nullable=False) - exchange = relationship(TargetExchange.__name__, backref=db.backref('targets')) + exchange = relationship(TargetExchange.__name__, backref=db.backref("targets")) + + def __init__(self, **kwargs): + super(Target, self).__init__(**kwargs) + + def __repr__(self): + return '<%s(%d):%r->%r>' % (Target.__name__, self.id, self.routing_key, self.exchange.name) diff --git a/api/target/serializers.py b/api/target/serializers.py index 4591954..3ddc9a7 100644 --- a/api/target/serializers.py +++ b/api/target/serializers.py @@ -1,11 +1,14 @@ from marshmallow import Schema, fields + from api.target_exchange.serializers import TargetExchangeSchema + class TargetSchema(Schema): id = fields.Int() name = fields.Str() routing_key = fields.Str(required=True) exchange = fields.Nested(TargetExchangeSchema) + target_schema = TargetSchema() targets_schema = TargetSchema(many=True) diff --git a/api/target/views.py b/api/target/views.py index e04d840..daa8610 100644 --- a/api/target/views.py +++ b/api/target/views.py @@ -1,11 +1,10 @@ from flask import Blueprint -from flask_jwt_extended import jwt_required from flask_apispec import use_kwargs, marshal_with, doc +from flask_jwt_extended import jwt_required from marshmallow import fields -from api.exceptions import NotFoundException +from api.exceptions import NotFoundException, BadRequestException from api.target_exchange.models import TargetExchange - from .models import Target from .serializers import target_schema, targets_schema @@ -29,18 +28,21 @@ def get_list(exchange=None): @jwt_required() @use_kwargs(target_schema) @marshal_with(target_schema) -def create(name): - target = Target(name=name) +def create(name, routing_key, exchange): + xchange = TargetExchange.get_by_id(exchange.id) + if xchange is None: + raise BadRequestException(f"the exchange {exchange.name}({exchange.id}) could not be found") + target = Target(name=name, routing_key=routing_key, target_exchange_id=xchange.id) target.save() return target @doc(tags=['Target']) -@blueprint.route('/', methods=['GET']) +@blueprint.route('/', methods=['GET']) @jwt_required() @marshal_with(target_schema) -def get_by_id(id): - target_exchange = Target.get_by_id(id) +def get_by_id(target_id: int): + target_exchange = Target.get_by_id(target_id) if target_exchange is not None: return target_exchange else: @@ -48,12 +50,12 @@ def get_by_id(id): @doc(tags=['Target']) -@blueprint.route('/', methods=['PUT']) +@blueprint.route('/', methods=['PUT']) @jwt_required() @use_kwargs(target_schema) @marshal_with(target_schema) -def update(id, **kwargs): - target_exchange = Target.get_by_id(id) +def update(target_id, **kwargs): + target_exchange = Target.get_by_id(target_id) if target_exchange is not None: return target_exchange.update(**kwargs) else: diff --git a/api/target_exchange/models.py b/api/target_exchange/models.py index 2bf60c1..d3dd1c3 100644 --- a/api/target_exchange/models.py +++ b/api/target_exchange/models.py @@ -1,11 +1,14 @@ from api.database import (Model, SurrogatePK, db, - Column, reference_col, relationship) + Column) class TargetExchange(SurrogatePK, Model): __tablename__ = "target-exchange" name = Column(db.String(255), unique=True, nullable=False) + def __init__(self, **kwargs): + super(TargetExchange, self).__init__(**kwargs) + @staticmethod def ensure_created(name): if TargetExchange.query.filter_by(name=name).first() is None: diff --git a/api/target_exchange/views.py b/api/target_exchange/views.py index 8e7820d..96b2484 100644 --- a/api/target_exchange/views.py +++ b/api/target_exchange/views.py @@ -30,11 +30,11 @@ def create(name): @doc(tags=['TargetExchange']) -@blueprint.route('/', methods=['GET']) +@blueprint.route('/', methods=['GET']) @jwt_required() @marshal_with(target_exchange_schema) -def get_by_id(id): - target_exchange = TargetExchange.get_by_id(id) +def get_by_id(exchange_id): + target_exchange = TargetExchange.get_by_id(exchange_id) if target_exchange is not None: return target_exchange else: @@ -42,12 +42,12 @@ def get_by_id(id): @doc(tags=['TargetExchange']) -@blueprint.route('/', methods=['PUT']) +@blueprint.route('/', methods=['PUT']) @jwt_required() @use_kwargs(target_exchange_schema) @marshal_with(target_exchange_schema) -def update(id, **kwargs): - target_exchange = TargetExchange.get_by_id(id) +def update(exchange_id, **kwargs): + target_exchange = TargetExchange.get_by_id(exchange_id) if target_exchange is not None: return target_exchange.update(**kwargs) else: