Using subresources in eve-sqlalchemy
I am trying to build a RESTful API with eve-sqlalchemy. I would like to use a common pattern where I can access the resources accordingly:
127.0.0.1:5000/resource1/
127.0.0.1:5000/resource1/2
127.0.0.1:5000/resource1/2/resource2
127.0.0.1:5000/resource1/2/resource2/4
127.0.0.1:5000/resource2/
127.0.0.1:5000/resource2/4
Where resource1
and resource2
are in the parent-child connection. I checked the midshipman's question: How to reference an endpoint in another? but if i use the "url" config in resource2
, original 127.0.0.1:5000/resource2/4
and 127.0.0.1:5000/resource2
cant be used.
If I define an additional endpoint for resource2
and use the "url" config here, the same thing happens that I cannot access in the resource2
normal way. Is there a way to get the desired effect, or am I doing something wrong?
Source:
models.py:
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, String, Integer, DECIMAL, DATETIME, ForeignKey
from sqlalchemy.orm import relationship
Base = declarative_base()
class CommonColumbs(Base):
__abstract__ = True
ID = Column(Integer, primary_key=True)
CreatedAt = Column(DATETIME)
CreatedBy = Column(String)
LastModifiedAt = Column(DATETIME, nullable=True)
LastModifiedBy = Column(String)
Etag = Column(String)
class MeasurementUnitTypes(CommonColumbs):
__tablename__ = 'MeasurementUnitTypes'
Name = Column(String)
IsValid = Column(Integer)
IsSpecial = Column(Integer)
BaseUnitID = Column(Integer, ForeignKey('api.MeasurementUnits.ID'))
BaseUnit = relationship("MeasurementUnits", foreign_keys=[BaseUnitID])
__table_args__ = {"schema": "api"}
class MeasurementUnits(CommonColumbs):
__tablename__ = 'MeasurementUnits'
Name = Column(String)
ConvertValue = Column(DECIMAL(asdecimal=False))
CodeToBase = Column(String)
CodeFromBase = Column(String)
MeasurementUnitTypeID = Column(Integer, ForeignKey('api.MeasurementUnitTypes.ID'))
MeasurementUnitType = relationship("MeasurementUnitTypes", foreign_keys=[MeasurementUnitTypeID])
IsValid = Column(Integer)
__table_args__ = {"schema": "api"}
setting.py:
from vm.models import MeasurementUnitTypes, MeasurementUnits
from vm import dbc
from eve_sqlalchemy.decorators import registerSchema
# --- registering schemas --- #
registerSchema('MeasurementUnits')(MeasurementUnits)
registerSchema('MeasurementUnitTypes')(MeasurementUnitTypes)
# ---------- end ------------ #
SQLALCHEMY_DATABASE_URI = dbc()
# ---- field definition ----- #
ID_FIELD = 'ID'
LAST_UPDATED = 'LastModifiedAt'
DATE_CREATED = 'CreatedAt'
ETAG = 'Etag'
# ---------- end ------------ #
SQLALCHEMY_ECHO = True
SQLALCHEMY_RECORD_QUERIES = True
DOMAIN = {
'MeasurementUnitTypes': MeasurementUnitTypes._eve_schema['MeasurementUnitTypes'],
'MeasurementUnits': MeasurementUnits._eve_schema['MeasurementUnits'],
}
DOMAIN['MeasurementUnitTypes'].update({
'item_title': 'MeasurementUnitTypes',
'additional_lookup': {
'url': '[0-9]+',
'field': 'ID',
},
'cache_control': 'max-age=10,must-revalidate',
'cache_expires': 10,
'resource_methods': ['GET', 'POST', 'DELETE'],
'item_methods': ['GET', 'PUT'],
'hateoas': False,
'pagination': False,
'data_relation': {'resource': 'MeasurementUnits',
'field': 'ID',
'embeddable': True}
})
DOMAIN['MeasurementUnits'].update({
'item_title': 'MeasurementUnits',
'additional_lookup': {
'url': '[0-9]+',
'field': 'ID',
},
'cache_control': 'max-age=10,must-revalidate',
'cache_expires': 10,
'resource_methods': ['GET', 'POST', 'DELETE'],
'item_methods': ['GET', 'PUT'],
'hateoas': False,
'pagination': False
})
EMBEDDING = True
source to share
No one has answered this question yet
See similar questions:
or similar: