"""Model for delivery restrictions requests for a release.""" from sqlalchemy import Column from sqlalchemy import Integer from sqlalchemy import String from oto import response from product_digital.connectors import mysql class DeliveryRestrictionsRequests(mysql.BaseModel): """Contains delivery restrictions requests for a release. This is for store specific instructions data, which feeds Carveouts and Delivery Restrictions requests from clients. """ __tablename__ = "delivery_restrictions_requests" release_id = Column(Integer, primary_key=True, nullable=False) delivery_requests = Column(String) def to_dict(self): """Convert delivery restriction requests data to dict.""" return { 'release_id': self.release_id, 'delivery_requests': self.delivery_requests, } def update(self, **kwargs): """Update delivery restriction requests data.""" for key, value in kwargs.items(): if hasattr(self, key): setattr(self, key, value) @mysql.wrap_db_errors @mysql.db_session_wrap def get_delivery_restrictions_request_by_release_id(release_id, session): """Get delivery restriction request by release ID.""" delivery_restriction_request = session.query(DeliveryRestrictionsRequests).filter_by(release_id=release_id).first() if not delivery_restriction_request: return None return response.Response(message=delivery_restriction_request.to_dict()) @mysql.wrap_db_errors @mysql.db_session_wrap def upsert_delivery_restrictions_request(delivery_restrictions_request_data, session): """Create or update the new delivery restriction request.""" delivery_restriction_request = session.query(DeliveryRestrictionsRequests).filter_by( release_id=delivery_restrictions_request_data['release_id']).first() if not delivery_restriction_request: delivery_restriction_request = DeliveryRestrictionsRequests() session.add(delivery_restriction_request) delivery_restriction_request.update(**delivery_restrictions_request_data) session.commit() return response.Response(message=delivery_restriction_request.to_dict()) @mysql.wrap_db_errors @mysql.db_session_wrap def delete_delivery_restriction_request(release_id, session): """Delete a delivery restriction request by release ID.""" deleted = session.query(DeliveryRestrictionsRequests).filter_by(release_id=release_id).delete() session.commit() if not deleted: return response.Response(message={}, status=203) return response.Response(message={})