diff --git a/iib/web/api_v1.py b/iib/web/api_v1.py index 1ca82d1dd..f7d6f2495 100644 --- a/iib/web/api_v1.py +++ b/iib/web/api_v1.py @@ -6,7 +6,7 @@ import flask import kombu from flask_login import current_user, login_required -from sqlalchemy.orm import with_polymorphic +from sqlalchemy.orm import aliased, with_polymorphic from sqlalchemy.sql import text from sqlalchemy import or_ from werkzeug.exceptions import Forbidden, Gone, NotFound @@ -396,24 +396,36 @@ def get_builds() -> flask.Response: query = query.join(Request.user).filter(User.username == user) if index_image: + # https://sqlalche.me/e/20/xaj2 - Create aliases for self-join (Sqlalchemy 2.0) + request_create_empty_index_alias = aliased(RequestCreateEmptyIndex, flat=True) + request_add_alias = aliased(RequestAdd, flat=True) + request_rm_alias = aliased(RequestRm, flat=True) + request_merge_index_image_alias = aliased(RequestMergeIndexImage, flat=True) + query_params['index_image'] = index_image # Get the image id of the image to be searched image_result = Image.query.filter_by(pull_specification=index_image).first() if image_result: # join with the Request* tables to get the response as image_ids are stored there query = ( - query.outerjoin(RequestCreateEmptyIndex, Request.id == RequestCreateEmptyIndex.id) - .outerjoin(RequestAdd, Request.id == RequestAdd.id) - .outerjoin(RequestMergeIndexImage, Request.id == RequestMergeIndexImage.id) - .outerjoin(RequestRm, Request.id == RequestRm.id) + query.outerjoin( + request_create_empty_index_alias, + Request.id == request_create_empty_index_alias.id, + ) + .outerjoin(request_add_alias, Request.id == request_add_alias.id) + .outerjoin( + request_merge_index_image_alias, + Request.id == request_merge_index_image_alias.id, + ) + .outerjoin(request_rm_alias, Request.id == request_rm_alias.id) ) query = query.filter( or_( - RequestCreateEmptyIndex.index_image_id == image_result.id, - RequestAdd.index_image_id == image_result.id, - RequestMergeIndexImage.index_image_id == image_result.id, - RequestRm.index_image_id == image_result.id, + request_create_empty_index_alias.index_image_id == image_result.id, + request_add_alias.index_image_id == image_result.id, + request_merge_index_image_alias.index_image_id == image_result.id, + request_rm_alias.index_image_id == image_result.id, ) ) # if index_image is not found in image table, then raise an error @@ -441,7 +453,8 @@ def get_healthcheck() -> flask.Response: """ # Test DB connection try: - db.engine.execute(text('SELECT 1')) + with db.engine.connect() as connection: + connection.execute(text('SELECT 1')) except Exception: flask.current_app.logger.exception('DB test failed.') raise IIBError('Database health check failed.') diff --git a/iib/web/migrations/env.py b/iib/web/migrations/env.py index 10afdb40a..cab9586cb 100644 --- a/iib/web/migrations/env.py +++ b/iib/web/migrations/env.py @@ -68,7 +68,6 @@ def process_revision_directives(context, revision, directives): connection=connection, target_metadata=target_metadata, process_revision_directives=process_revision_directives, - render_as_batch=True, **current_app.extensions['migrate'].configure_args, ) diff --git a/iib/web/migrations/versions/04dd7532d9c5_polymorphic_requests.py b/iib/web/migrations/versions/04dd7532d9c5_polymorphic_requests.py index 345baea98..c0cc8ce60 100644 --- a/iib/web/migrations/versions/04dd7532d9c5_polymorphic_requests.py +++ b/iib/web/migrations/versions/04dd7532d9c5_polymorphic_requests.py @@ -25,7 +25,8 @@ # Create references to the various tables used to migrate data during # the upgrade and the downgrade processes. - +# sqlalchemy 2.0: https://docs.sqlalchemy.org/en/20/changelog/migration_20.html#migration-core-usage +# where clause parameter in select is not longer supported and list in select has been deprecated. old_request_table = sa.Table( 'request', sa.MetaData(), @@ -216,24 +217,21 @@ def _upgrade_data(): 'index_image_id', ], select( - [ - old_request_table.c.id, - old_request_table.c.organization, - old_request_table.c.binary_image_id, - old_request_table.c.binary_image_resolved_id, - old_request_table.c.from_index_id, - old_request_table.c.from_index_resolved_id, - old_request_table.c.index_image_id, - ], - old_request_table.c.type == REQUEST_TYPE_ADD, - ), + old_request_table.c.id, + old_request_table.c.organization, + old_request_table.c.binary_image_id, + old_request_table.c.binary_image_resolved_id, + old_request_table.c.from_index_id, + old_request_table.c.from_index_resolved_id, + old_request_table.c.index_image_id, + ).where(old_request_table.c.type == REQUEST_TYPE_ADD), ) ) connection.execute( request_add_bundle_table.insert().from_select( ['request_add_id', 'image_id'], - select([request_bundle_table.c.request_id, request_bundle_table.c.image_id]), + select(request_bundle_table.c.request_id, request_bundle_table.c.image_id), ) ) @@ -248,23 +246,20 @@ def _upgrade_data(): 'index_image_id', ], select( - [ - old_request_table.c.id, - old_request_table.c.binary_image_id, - old_request_table.c.binary_image_resolved_id, - old_request_table.c.from_index_id, - old_request_table.c.from_index_resolved_id, - old_request_table.c.index_image_id, - ], - old_request_table.c.type == REQUEST_TYPE_RM, - ), + old_request_table.c.id, + old_request_table.c.binary_image_id, + old_request_table.c.binary_image_resolved_id, + old_request_table.c.from_index_id, + old_request_table.c.from_index_resolved_id, + old_request_table.c.index_image_id, + ).where(old_request_table.c.type == REQUEST_TYPE_RM), ) ) connection.execute( request_rm_operator_table.insert().from_select( ['request_rm_id', 'operator_id'], - select([request_operator_table.c.request_id, request_operator_table.c.operator_id]), + select(request_operator_table.c.request_id, request_operator_table.c.operator_id), ) ) @@ -372,9 +367,7 @@ def _downgrade_data(): connection.execute( request_bundle_table.insert().from_select( ['request_id', 'image_id'], - select( - [request_add_bundle_table.c.request_add_id, request_add_bundle_table.c.image_id] - ), + select(request_add_bundle_table.c.request_add_id, request_add_bundle_table.c.image_id), ) ) @@ -402,7 +395,7 @@ def _downgrade_data(): request_operator_table.insert().from_select( ['request_id', 'operator_id'], select( - [request_rm_operator_table.c.request_rm_id, request_rm_operator_table.c.operator_id] + request_rm_operator_table.c.request_rm_id, request_rm_operator_table.c.operator_id ), ) ) diff --git a/iib/web/migrations/versions/5d6808c0ce1f_regenerate_bundle_request.py b/iib/web/migrations/versions/5d6808c0ce1f_regenerate_bundle_request.py index c3ba18fd7..9adcb4f88 100644 --- a/iib/web/migrations/versions/5d6808c0ce1f_regenerate_bundle_request.py +++ b/iib/web/migrations/versions/5d6808c0ce1f_regenerate_bundle_request.py @@ -21,6 +21,9 @@ # Create references to the tables used to migrate data during the upgrade # and the downgrade processes. + +# sqlalchemy 2.0: https://docs.sqlalchemy.org/en/20/changelog/migration_20.html#migration-core-usage +# where clause parameter in select is not longer supported and list in select has been deprecated. request_table = sa.Table( 'request', sa.MetaData(), @@ -52,7 +55,7 @@ def downgrade(): # there are no records of that type in the database since the data loss is # irreversible. regenerate_bundle_requests = connection.execute( - sa.select([sa.func.count()]) + sa.select(sa.func.count()) .select_from(request_table) .where(request_table.c.type == REQUEST_TYPE_REGENERATE_BUNDLE) ).scalar() diff --git a/iib/web/models.py b/iib/web/models.py index b55201fa9..e953b4660 100644 --- a/iib/web/models.py +++ b/iib/web/models.py @@ -12,10 +12,8 @@ from flask_sqlalchemy.model import DefaultMeta import sqlalchemy from sqlalchemy.ext.declarative import declared_attr -from sqlalchemy.orm import joinedload, load_only, validates -from sqlalchemy.orm.strategy_options import _UnboundLoad -from sqlalchemy.orm.relationships import RelationshipProperty -from sqlalchemy.sql.schema import Column +from sqlalchemy.orm import joinedload, load_only, Mapped, validates +from sqlalchemy.orm.strategy_options import _AbstractLoad from werkzeug.exceptions import Forbidden from iib.exceptions import ValidationError @@ -141,15 +139,14 @@ class RequestMergeBundleDeprecation(db.Model): # A primary key is required by SQLAlchemy when using declaritive style tables, so a composite # primary key is used on the two required columns - merge_index_image_id = db.Column( - db.Integer, + merge_index_image_id: Mapped[int] = db.mapped_column( db.ForeignKey('request_merge_index_image.id'), autoincrement=False, index=True, primary_key=True, ) - bundle_id = db.Column( - db.Integer, db.ForeignKey('image.id'), autoincrement=False, index=True, primary_key=True + bundle_id: Mapped[int] = db.mapped_column( + db.ForeignKey('image.id'), autoincrement=False, index=True, primary_key=True ) __table_args__ = ( @@ -164,15 +161,14 @@ class RequestAddBundleDeprecation(db.Model): # A primary key is required by SQLAlchemy when using declaritive style tables, so a composite # primary key is used on the two required columns - request_add_id = db.Column( - db.Integer, + request_add_id: Mapped[int] = db.mapped_column( db.ForeignKey('request_add.id'), autoincrement=False, index=True, primary_key=True, ) - bundle_id = db.Column( - db.Integer, db.ForeignKey('image.id'), autoincrement=False, index=True, primary_key=True + bundle_id: Mapped[int] = db.mapped_column( + db.ForeignKey('image.id'), autoincrement=False, index=True, primary_key=True ) __table_args__ = ( @@ -185,8 +181,8 @@ class RequestAddBundleDeprecation(db.Model): class Architecture(db.Model): """An architecture associated with an image.""" - id = db.Column(db.Integer, primary_key=True) - name = db.Column(db.String, nullable=False, unique=True) + id: Mapped[int] = db.mapped_column(primary_key=True) + name: Mapped[str] = db.mapped_column(unique=True) def __repr__(self) -> str: return ''.format(self.name) @@ -212,11 +208,10 @@ class RequestArchitecture(db.Model): # A primary key is required by SQLAlchemy when using declaritive style tables, so a composite # primary key is used on the two required columns - request_id = db.Column( - db.Integer, db.ForeignKey('request.id'), autoincrement=False, index=True, primary_key=True + request_id: Mapped[int] = db.mapped_column( + db.ForeignKey('request.id'), autoincrement=False, index=True, primary_key=True ) - architecture_id = db.Column( - db.Integer, + architecture_id: Mapped[int] = db.mapped_column( db.ForeignKey('architecture.id'), autoincrement=False, index=True, @@ -233,11 +228,11 @@ class Image(db.Model): This will typically point to a manifest list. """ - id = db.Column(db.Integer, primary_key=True) - operator_id = db.Column(db.Integer, db.ForeignKey('operator.id')) - pull_specification = db.Column(db.String, nullable=False, index=True, unique=True) + id: Mapped[int] = db.mapped_column(primary_key=True) + operator_id: Mapped[int] = db.mapped_column(db.ForeignKey('operator.id')) + pull_specification: Mapped[str] = db.mapped_column(index=True, unique=True) - operator = db.relationship('Operator') + operator: Mapped['Operator'] = db.relationship('Operator') def __repr__(self) -> str: return ''.format(self.pull_specification) @@ -269,8 +264,8 @@ def get_or_create(cls, pull_specification: str) -> Image: class Operator(db.Model): """An operator that has been handled by IIB.""" - id = db.Column(db.Integer, primary_key=True) - name = db.Column(db.String, nullable=False, index=True, unique=True) + id: Mapped[int] = db.mapped_column(primary_key=True) + name: Mapped[str] = db.mapped_column(index=True, unique=True) def __repr__(self) -> str: return ''.format(self.name) @@ -296,18 +291,18 @@ def get_or_create(cls, name: str) -> Operator: class BuildTag(db.Model): """Extra tag associated with built index image.""" - id = db.Column(db.Integer, primary_key=True) - name = db.Column(db.String, nullable=False, unique=False) + id: Mapped[int] = db.mapped_column(primary_key=True) + name: Mapped[str] = db.mapped_column(unique=False) class RequestBuildTag(db.Model): """Association table for extra build tags and build request.""" - request_id = db.Column( - db.Integer, db.ForeignKey('request.id'), index=True, nullable=False, primary_key=True + request_id: Mapped[int] = db.mapped_column( + db.ForeignKey('request.id'), index=True, primary_key=True ) - tag_id = db.Column( - db.Integer, db.ForeignKey('build_tag.id'), autoincrement=False, index=True, primary_key=True + tag_id: Mapped[int] = db.mapped_column( + db.ForeignKey('build_tag.id'), autoincrement=False, index=True, primary_key=True ) __table_args__ = (db.UniqueConstraint('request_id', 'tag_id'),) @@ -317,15 +312,14 @@ class RequestRmOperator(db.Model): # A primary key is required by SQLAlchemy when using declaritive style tables, so a composite # primary key is used on the two required columns - request_rm_id = db.Column( - db.Integer, + request_rm_id: Mapped[int] = db.mapped_column( db.ForeignKey('request_rm.id'), autoincrement=False, index=True, primary_key=True, ) - operator_id = db.Column( - db.Integer, db.ForeignKey('operator.id'), autoincrement=False, index=True, primary_key=True + operator_id: Mapped[int] = db.mapped_column( + db.ForeignKey('operator.id'), autoincrement=False, index=True, primary_key=True ) __table_args__ = (db.UniqueConstraint('request_rm_id', 'operator_id'),) @@ -336,15 +330,14 @@ class RequestAddBundle(db.Model): # A primary key is required by SQLAlchemy when using declaritive style tables, so a composite # primary key is used on the two required columns - request_add_id = db.Column( - db.Integer, + request_add_id: Mapped[int] = db.mapped_column( db.ForeignKey('request_add.id'), autoincrement=False, index=True, primary_key=True, ) - image_id = db.Column( - db.Integer, db.ForeignKey('image.id'), autoincrement=False, index=True, primary_key=True + image_id: Mapped[int] = db.mapped_column( + db.ForeignKey('image.id'), autoincrement=False, index=True, primary_key=True ) __table_args__ = (db.UniqueConstraint('request_add_id', 'image_id'),) @@ -355,34 +348,34 @@ class Request(db.Model): __tablename__ = 'request' - id = db.Column(db.Integer, primary_key=True) - architectures = db.relationship( + id: Mapped[int] = db.mapped_column(primary_key=True) + architectures: Mapped[List['Architecture']] = db.relationship( 'Architecture', order_by='Architecture.name', secondary=RequestArchitecture.__table__ ) - batch_id = db.Column(db.Integer, db.ForeignKey('batch.id'), index=True, nullable=False) - batch = db.relationship('Batch', back_populates='requests') - request_state_id = db.Column( - db.Integer, db.ForeignKey('request_state.id'), index=True, unique=True + batch_id: Mapped[int] = db.mapped_column(db.ForeignKey('batch.id'), index=True) + batch: Mapped['Batch'] = db.relationship('Batch', back_populates='requests') + request_state_id: Mapped[int] = db.mapped_column( + db.ForeignKey('request_state.id'), index=True, unique=True ) # This maps to a value in RequestTypeMapping - type = db.Column(db.Integer, nullable=False) - user_id = db.Column(db.Integer, db.ForeignKey('user.id')) + type: Mapped[int] + user_id: Mapped[int] = db.mapped_column(db.ForeignKey('user.id')) - state = db.relationship('RequestState', foreign_keys=[request_state_id]) - states = db.relationship( + state: Mapped['RequestState'] = db.relationship('RequestState', foreign_keys=[request_state_id]) + states: Mapped[List['RequestState']] = db.relationship( 'RequestState', foreign_keys='RequestState.request_id', back_populates='request', order_by='RequestState.updated', ) - user = db.relationship('User', back_populates='requests') - build_tags = db.relationship( + user: Mapped['User'] = db.relationship('User', back_populates='requests') + build_tags: Mapped[List['BuildTag']] = db.relationship( 'BuildTag', order_by='BuildTag.name', secondary=RequestBuildTag.__table__ ) __mapper_args__ = { 'polymorphic_identity': RequestTypeMapping.__members__['generic'].value, - 'polymorphic_on': type, + 'polymorphic_on': 'type', } @validates('type') @@ -574,10 +567,10 @@ def temporary_data_expiration(self) -> datetime: class Batch(db.Model): """A batch associated with one or more requests.""" - id = db.Column(db.Integer, primary_key=True) - _annotations = db.Column('annotations', db.Text, nullable=True) + id: Mapped[int] = db.mapped_column(primary_key=True) + _annotations: Mapped[Optional[str]] = db.mapped_column('annotations', db.Text) - requests = db.relationship( + requests: Mapped[List['Request']] = db.relationship( 'Request', foreign_keys=[Request.batch_id], back_populates='batch', order_by='Request.id' ) @@ -663,11 +656,15 @@ def request_states(self) -> List[str]: # in the batch requests = ( db.session.query(Request) - .options(joinedload(Request.state).load_only(RequestState.state), load_only()) + .options( + joinedload(Request.state).load_only(RequestState.state), + load_only(Request.id, Request.batch_id), + ) .filter(Request.batch_id == self.id) .order_by(Request.id) .all() ) + return [RequestStateMapping(request.state.state).name for request in requests] @property @@ -716,7 +713,7 @@ def validate_batch(batch_id: Union[Optional[str], int]) -> int: return rv -def get_request_query_options(verbose: Optional[bool] = False) -> List[_UnboundLoad]: +def get_request_query_options(verbose: Optional[bool] = False) -> List[_AbstractLoad]: """ Get the query options for a SQLAlchemy query for one or more requests to output as JSON. @@ -775,93 +772,93 @@ class RequestIndexImageMixin: """ @declared_attr - def binary_image_id(cls: DefaultMeta) -> Column: + def binary_image_id(cls: DefaultMeta) -> Mapped[int]: """Return the ID of the image that the opm binary comes from.""" - return db.Column(db.Integer, db.ForeignKey('image.id')) + return db.mapped_column(db.Integer, db.ForeignKey('image.id')) @declared_attr - def binary_image_resolved_id(cls: DefaultMeta) -> Column: + def binary_image_resolved_id(cls: DefaultMeta) -> Mapped[int]: """Return the ID of the resolved image that the opm binary comes from.""" - return db.Column(db.Integer, db.ForeignKey('image.id')) + return db.mapped_column(db.Integer, db.ForeignKey('image.id')) @declared_attr - def binary_image(cls: DefaultMeta) -> RelationshipProperty: + def binary_image(cls: DefaultMeta) -> Mapped['Image']: """Return the relationship to the image that the opm binary comes from.""" return db.relationship('Image', foreign_keys=[cls.binary_image_id], uselist=False) @declared_attr - def binary_image_resolved(cls: DefaultMeta) -> RelationshipProperty: + def binary_image_resolved(cls: DefaultMeta) -> Mapped['Image']: """Return the relationship to the resolved image that the opm binary comes from.""" return db.relationship('Image', foreign_keys=[cls.binary_image_resolved_id], uselist=False) @declared_attr - def from_index_id(cls: DefaultMeta) -> Column: + def from_index_id(cls: DefaultMeta) -> Mapped[int]: """Return the ID of the index image to base the request from.""" - return db.Column(db.Integer, db.ForeignKey('image.id')) + return db.mapped_column(db.Integer, db.ForeignKey('image.id')) @declared_attr - def from_index_resolved_id(cls: DefaultMeta) -> Column: + def from_index_resolved_id(cls: DefaultMeta) -> Mapped[int]: """Return the ID of the resolved index image to base the request from.""" - return db.Column(db.Integer, db.ForeignKey('image.id')) + return db.mapped_column(db.Integer, db.ForeignKey('image.id')) @declared_attr - def from_index(cls: DefaultMeta) -> RelationshipProperty: + def from_index(cls: DefaultMeta) -> Mapped['Image']: """Return the relationship of the index image to base the request from.""" return db.relationship('Image', foreign_keys=[cls.from_index_id], uselist=False) @declared_attr - def from_index_resolved(cls: DefaultMeta) -> Image: + def from_index_resolved(cls: DefaultMeta) -> Mapped['Image']: """Return the relationship of the resolved index image to base the request from.""" return db.relationship('Image', foreign_keys=[cls.from_index_resolved_id], uselist=False) @declared_attr - def index_image_id(cls: DefaultMeta) -> Column: + def index_image_id(cls: DefaultMeta) -> Mapped[int]: """Return the ID of the built index image.""" - return db.Column(db.Integer, db.ForeignKey('image.id')) + return db.mapped_column(db.Integer, db.ForeignKey('image.id')) @declared_attr - def index_image(cls: DefaultMeta) -> RelationshipProperty: + def index_image(cls: DefaultMeta) -> Mapped['Image']: """Return the relationship to the built index image.""" return db.relationship('Image', foreign_keys=[cls.index_image_id], uselist=False) @declared_attr - def index_image_resolved_id(cls: DefaultMeta) -> Column: + def index_image_resolved_id(cls: DefaultMeta) -> Mapped[int]: """Return the ID of the resolved built index image.""" - return db.Column(db.Integer, db.ForeignKey('image.id')) + return db.mapped_column(db.Integer, db.ForeignKey('image.id')) @declared_attr - def index_image_resolved(cls: DefaultMeta) -> RelationshipProperty: + def index_image_resolved(cls: DefaultMeta) -> Mapped['Image']: """Return the relationship to the built index image.""" return db.relationship('Image', foreign_keys=[cls.index_image_resolved_id], uselist=False) @declared_attr - def internal_index_image_copy_id(cls: DefaultMeta) -> Column: + def internal_index_image_copy_id(cls: DefaultMeta) -> Mapped[int]: """Return the ID of IIB's internal copy of the built index image.""" - return db.Column(db.Integer, db.ForeignKey('image.id')) + return db.mapped_column(db.Integer, db.ForeignKey('image.id')) @declared_attr - def internal_index_image_copy(cls: DefaultMeta) -> RelationshipProperty: + def internal_index_image_copy(cls: DefaultMeta) -> Mapped['Image']: """Return the relationship to IIB's internal copy of the built index image.""" return db.relationship( 'Image', foreign_keys=[cls.internal_index_image_copy_id], uselist=False ) @declared_attr - def internal_index_image_copy_resolved_id(cls: DefaultMeta) -> Column: + def internal_index_image_copy_resolved_id(cls: DefaultMeta) -> Mapped[int]: """Return the ID of resolved IIB's internal copy of the built index image.""" - return db.Column(db.Integer, db.ForeignKey('image.id')) + return db.mapped_column(db.Integer, db.ForeignKey('image.id')) @declared_attr - def internal_index_image_copy_resolved(cls: DefaultMeta) -> RelationshipProperty: + def internal_index_image_copy_resolved(cls: DefaultMeta) -> Mapped['Image']: """Return the relationship to resolved IIB's internal copy of the built index image.""" return db.relationship( 'Image', foreign_keys=[cls.internal_index_image_copy_resolved_id], uselist=False ) @declared_attr - def distribution_scope(cls: DefaultMeta) -> Column: + def distribution_scope(cls: DefaultMeta) -> Mapped[str]: """Return the distribution_scope for the request.""" - return db.Column(db.String, nullable=True) + return db.mapped_column(db.String, nullable=True) # Union for request_kwargs would require exhausting checking of the request_kwargs in the method @staticmethod @@ -1034,12 +1031,16 @@ class RequestAdd(Request, RequestIndexImageMixin): __tablename__ = 'request_add' - id = db.Column(db.Integer, db.ForeignKey('request.id'), autoincrement=False, primary_key=True) - bundles = db.relationship('Image', secondary=RequestAddBundle.__table__) - deprecation_list = db.relationship('Image', secondary=RequestAddBundleDeprecation.__table__) - organization = db.Column(db.String, nullable=True) + id: Mapped[int] = db.mapped_column( + db.ForeignKey('request.id'), autoincrement=False, primary_key=True + ) + bundles: Mapped[List['Image']] = db.relationship('Image', secondary=RequestAddBundle.__table__) + deprecation_list: Mapped[List['Image']] = db.relationship( + 'Image', secondary=RequestAddBundleDeprecation.__table__ + ) + organization: Mapped[Optional[str]] - omps_operator_version = db.Column(db.String, nullable=True) + omps_operator_version: Mapped[Optional[str]] __mapper_args__ = {'polymorphic_identity': RequestTypeMapping.__members__['add'].value} @@ -1166,11 +1167,15 @@ class RequestRm(Request, RequestIndexImageMixin): __tablename__ = 'request_rm' - id = db.Column(db.Integer, db.ForeignKey('request.id'), autoincrement=False, primary_key=True) + id: Mapped[int] = db.mapped_column( + db.ForeignKey('request.id'), autoincrement=False, primary_key=True + ) # The ID of the index image to base the request from. This is always # required for "rm" requests. - from_index_id = db.Column(db.Integer, db.ForeignKey('image.id'), nullable=False) - operators = db.relationship('Operator', secondary=RequestRmOperator.__table__) + from_index_id: Mapped[int] = db.mapped_column(db.ForeignKey('image.id')) + operators: Mapped[List['Operator']] = db.relationship( + 'Operator', secondary=RequestRmOperator.__table__ + ) __mapper_args__ = {'polymorphic_identity': RequestTypeMapping.__members__['rm'].value} @@ -1246,22 +1251,30 @@ class RequestRegenerateBundle(Request): __tablename__ = 'request_regenerate_bundle' - id = db.Column(db.Integer, db.ForeignKey('request.id'), autoincrement=False, primary_key=True) + id: Mapped[int] = db.mapped_column( + db.ForeignKey('request.id'), autoincrement=False, primary_key=True + ) # The ID of the regenerated bundle image - bundle_image_id = db.Column(db.Integer, db.ForeignKey('image.id'), nullable=True) - bundle_image = db.relationship('Image', foreign_keys=[bundle_image_id], uselist=False) + bundle_image_id: Mapped[Optional[int]] = db.mapped_column(db.ForeignKey('image.id')) + bundle_image: Mapped['Image'] = db.relationship( + 'Image', foreign_keys=[bundle_image_id], uselist=False + ) # The ID of the bundle image to be regenerated - from_bundle_image_id = db.Column(db.Integer, db.ForeignKey('image.id'), nullable=False) - from_bundle_image = db.relationship('Image', foreign_keys=[from_bundle_image_id], uselist=False) + from_bundle_image_id: Mapped[int] = db.mapped_column(db.ForeignKey('image.id')) + from_bundle_image: Mapped['Image'] = db.relationship( + 'Image', foreign_keys=[from_bundle_image_id], uselist=False + ) # The ID of the resolved bundle image to be regenerated - from_bundle_image_resolved_id = db.Column(db.Integer, db.ForeignKey('image.id'), nullable=True) - from_bundle_image_resolved = db.relationship( + from_bundle_image_resolved_id: Mapped[Optional[int]] = db.mapped_column( + db.ForeignKey('image.id') + ) + from_bundle_image_resolved: Mapped['Image'] = db.relationship( 'Image', foreign_keys=[from_bundle_image_resolved_id], uselist=False ) # The name of the organization the bundle should be regenerated for - organization = db.Column(db.String, nullable=True) + organization: Mapped[Optional[str]] # The mapping of bundle replacements to apply to the regeneration request - _bundle_replacements = db.Column('bundle_replacements', db.Text, nullable=True) + _bundle_replacements: Mapped[Optional[str]] = db.mapped_column('bundle_replacements', db.Text) __mapper_args__ = { 'polymorphic_identity': RequestTypeMapping.__members__['regenerate_bundle'].value @@ -1397,33 +1410,45 @@ class RequestMergeIndexImage(Request): __tablename__ = 'request_merge_index_image' - id = db.Column(db.Integer, db.ForeignKey('request.id'), autoincrement=False, primary_key=True) - binary_image_id = db.Column(db.Integer, db.ForeignKey('image.id')) - binary_image_resolved_id = db.Column(db.Integer, db.ForeignKey('image.id')) - binary_image = db.relationship('Image', foreign_keys=[binary_image_id], uselist=False) - binary_image_resolved = db.relationship( + id: Mapped[int] = db.mapped_column( + db.ForeignKey('request.id'), autoincrement=False, primary_key=True + ) + binary_image_id: Mapped[int] = db.mapped_column(db.ForeignKey('image.id')) + binary_image_resolved_id: Mapped[int] = db.mapped_column(db.ForeignKey('image.id')) + binary_image: Mapped['Image'] = db.relationship( + 'Image', foreign_keys=[binary_image_id], uselist=False + ) + binary_image_resolved: Mapped['Image'] = db.relationship( 'Image', foreign_keys=[binary_image_resolved_id], uselist=False ) - deprecation_list = db.relationship('Image', secondary=RequestMergeBundleDeprecation.__table__) + deprecation_list: Mapped[List['Image']] = db.relationship( + 'Image', secondary=RequestMergeBundleDeprecation.__table__ + ) - index_image_id = db.Column(db.Integer, db.ForeignKey('image.id')) - index_image = db.relationship('Image', foreign_keys=[index_image_id], uselist=False) + index_image_id: Mapped[int] = db.mapped_column(db.ForeignKey('image.id')) + index_image: Mapped['Image'] = db.relationship( + 'Image', foreign_keys=[index_image_id], uselist=False + ) - source_from_index_id = db.Column(db.Integer, db.ForeignKey('image.id'), nullable=False) - source_from_index_resolved_id = db.Column(db.Integer, db.ForeignKey('image.id')) - source_from_index = db.relationship('Image', foreign_keys=[source_from_index_id], uselist=False) - source_from_index_resolved = db.relationship( + source_from_index_id: Mapped[int] = db.mapped_column(db.ForeignKey('image.id')) + source_from_index_resolved_id: Mapped[int] = db.mapped_column(db.ForeignKey('image.id')) + source_from_index: Mapped['Image'] = db.relationship( + 'Image', foreign_keys=[source_from_index_id], uselist=False + ) + source_from_index_resolved: Mapped['Image'] = db.relationship( 'Image', foreign_keys=[source_from_index_resolved_id], uselist=False ) - target_index_id = db.Column(db.Integer, db.ForeignKey('image.id'), nullable=True) - target_index_resolved_id = db.Column(db.Integer, db.ForeignKey('image.id')) - target_index = db.relationship('Image', foreign_keys=[target_index_id], uselist=False) - target_index_resolved = db.relationship( + target_index_id: Mapped[Optional[int]] = db.mapped_column(db.ForeignKey('image.id')) + target_index_resolved_id: Mapped[int] = db.mapped_column(db.ForeignKey('image.id')) + target_index: Mapped['Image'] = db.relationship( + 'Image', foreign_keys=[target_index_id], uselist=False + ) + target_index_resolved: Mapped['Image'] = db.relationship( 'Image', foreign_keys=[target_index_resolved_id], uselist=False ) - distribution_scope = db.Column(db.String, nullable=True) + distribution_scope: Mapped[Optional[str]] __mapper_args__ = { 'polymorphic_identity': RequestTypeMapping.__members__['merge_index_image'].value @@ -1587,14 +1612,16 @@ def get_mutable_keys(self) -> Set[str]: class RequestState(db.Model): """Represents a state (historical or present) of a request.""" - id = db.Column(db.Integer, primary_key=True) - request_id = db.Column(db.Integer, db.ForeignKey('request.id'), index=True, nullable=False) + id: Mapped[int] = db.mapped_column(primary_key=True) + request_id: Mapped[int] = db.mapped_column(db.ForeignKey('request.id'), index=True) # This maps to a value in RequestStateMapping - state = db.Column(db.Integer, nullable=False) - state_reason = db.Column(db.String, nullable=False) - updated = db.Column(db.DateTime(), nullable=False, default=sqlalchemy.func.now()) + state: Mapped[int] + state_reason: Mapped[str] + updated: Mapped[datetime] = db.mapped_column(db.DateTime(), default=sqlalchemy.func.now()) - request = db.relationship('Request', foreign_keys=[request_id], back_populates='states') + request: Mapped['Request'] = db.relationship( + 'Request', foreign_keys=[request_id], back_populates='states' + ) @property def state_name(self) -> Optional[str]: @@ -1612,9 +1639,11 @@ def __repr__(self) -> str: class User(db.Model, UserMixin): """Represents an external user that owns an IIB request.""" - id = db.Column(db.Integer, primary_key=True) - username = db.Column(db.String, index=True, unique=True, nullable=False) - requests = db.relationship('Request', foreign_keys=[Request.user_id], back_populates='user') + id: Mapped[int] = db.mapped_column(primary_key=True) + username: Mapped[str] = db.mapped_column(index=True, unique=True) + requests: Mapped[List['Request']] = db.relationship( + 'Request', foreign_keys=[Request.user_id], back_populates='user' + ) @classmethod def get_or_create(cls, username: str) -> User: @@ -1711,8 +1740,10 @@ class RequestCreateEmptyIndex(Request, RequestIndexImageMixin): __tablename__ = 'request_create_empty_index' - id = db.Column(db.Integer, db.ForeignKey('request.id'), autoincrement=False, primary_key=True) - _labels = db.Column('labels', db.Text, nullable=True) + id: Mapped[int] = db.mapped_column( + db.ForeignKey('request.id'), autoincrement=False, primary_key=True + ) + _labels: Mapped[Optional[str]] = db.mapped_column('labels', db.Text) __mapper_args__ = { 'polymorphic_identity': RequestTypeMapping.__members__['create_empty_index'].value @@ -1840,21 +1871,23 @@ class RequestRecursiveRelatedBundles(Request): __tablename__ = 'request_recursive_related_bundles' - id = db.Column(db.Integer, db.ForeignKey('request.id'), autoincrement=False, primary_key=True) + id: Mapped[int] = db.mapped_column( + db.ForeignKey('request.id'), autoincrement=False, primary_key=True + ) # The ID of the parent bundle image - parent_bundle_image_id = db.Column(db.Integer, db.ForeignKey('image.id'), nullable=True) - parent_bundle_image = db.relationship( + parent_bundle_image_id: Mapped[Optional[int]] = db.mapped_column(db.ForeignKey('image.id')) + parent_bundle_image: Mapped['Image'] = db.relationship( 'Image', foreign_keys=[parent_bundle_image_id], uselist=False ) # The ID of the resolved parent bundle image - parent_bundle_image_resolved_id = db.Column( - db.Integer, db.ForeignKey('image.id'), nullable=True + parent_bundle_image_resolved_id: Mapped[Optional[int]] = db.mapped_column( + db.ForeignKey('image.id') ) - parent_bundle_image_resolved = db.relationship( + parent_bundle_image_resolved: Mapped['Image'] = db.relationship( 'Image', foreign_keys=[parent_bundle_image_resolved_id], uselist=False ) # The name of the organization the related bundles should be found for - organization = db.Column(db.String, nullable=True) + organization: Mapped[Optional[str]] __mapper_args__ = { 'polymorphic_identity': RequestTypeMapping.__members__['recursive_related_bundles'].value @@ -1956,12 +1989,16 @@ class RequestFbcOperations(Request, RequestIndexImageMixin): __tablename__ = 'request_fbc_operations' - id = db.Column(db.Integer, db.ForeignKey('request.id'), autoincrement=False, primary_key=True) + id: Mapped[int] = db.mapped_column( + db.ForeignKey('request.id'), autoincrement=False, primary_key=True + ) - fbc_fragment_id = db.Column(db.Integer, db.ForeignKey('image.id')) - fbc_fragment_resolved_id = db.Column(db.Integer, db.ForeignKey('image.id')) - fbc_fragment = db.relationship('Image', foreign_keys=[fbc_fragment_id], uselist=False) - fbc_fragment_resolved = db.relationship( + fbc_fragment_id: Mapped[int] = db.mapped_column(db.ForeignKey('image.id')) + fbc_fragment_resolved_id: Mapped[int] = db.mapped_column(db.ForeignKey('image.id')) + fbc_fragment: Mapped['Image'] = db.relationship( + 'Image', foreign_keys=[fbc_fragment_id], uselist=False + ) + fbc_fragment_resolved: Mapped['Image'] = db.relationship( 'Image', foreign_keys=[fbc_fragment_resolved_id], uselist=False ) diff --git a/iib/web/utils.py b/iib/web/utils.py index d6d8aa9b1..3f3da6f0d 100644 --- a/iib/web/utils.py +++ b/iib/web/utils.py @@ -1,6 +1,6 @@ # SPDX-License-Identifier: GPL-3.0-or-later from flask import request, url_for -from flask_sqlalchemy import Pagination +from flask_sqlalchemy.pagination import Pagination from typing import Optional from iib.web.iib_static_types import PaginationMetadata diff --git a/requirements-test.txt b/requirements-test.txt index ef312b9ef..9ff39fae6 100644 --- a/requirements-test.txt +++ b/requirements-test.txt @@ -1,11 +1,12 @@ # -# This file is autogenerated by pip-compile with python 3.9 -# To update, run: +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: # # pip-compile --generate-hashes --output-file=requirements-test.txt requirements-test.in # -alembic==1.4.0 \ - --hash=sha256:2df2519a5b002f881517693b95626905a39c5faf4b5a1f94de4f1441095d1d26 +alembic==1.9.4 \ + --hash=sha256:4d3bd32ecdbb7bbfb48a9fe9e6d6fd6a831a1b59d03e26e292210237373e7db5 \ + --hash=sha256:6f1c2207369bf4f49f952057a33bb017fbe5c148c2a773b46906b806ea6e825f # via # -r requirements.txt # flask-migrate @@ -185,21 +186,30 @@ coverage[toml]==6.0.1 \ # via # -r requirements-test.in # pytest-cov -cryptography==3.4.7 \ - --hash=sha256:0f1212a66329c80d68aeeb39b8a16d54ef57071bf22ff4e521657b27372e327d \ - --hash=sha256:1e056c28420c072c5e3cb36e2b23ee55e260cb04eee08f702e0edfec3fb51959 \ - --hash=sha256:240f5c21aef0b73f40bb9f78d2caff73186700bf1bc6b94285699aff98cc16c6 \ - --hash=sha256:26965837447f9c82f1855e0bc8bc4fb910240b6e0d16a664bb722df3b5b06873 \ - --hash=sha256:37340614f8a5d2fb9aeea67fd159bfe4f5f4ed535b1090ce8ec428b2f15a11f2 \ - --hash=sha256:3d10de8116d25649631977cb37da6cbdd2d6fa0e0281d014a5b7d337255ca713 \ - --hash=sha256:3d8427734c781ea5f1b41d6589c293089704d4759e34597dce91014ac125aad1 \ - --hash=sha256:7ec5d3b029f5fa2b179325908b9cd93db28ab7b85bb6c1db56b10e0b54235177 \ - --hash=sha256:8e56e16617872b0957d1c9742a3f94b43533447fd78321514abbe7db216aa250 \ - --hash=sha256:b01fd6f2737816cb1e08ed4807ae194404790eac7ad030b34f2ce72b332f5586 \ - --hash=sha256:bf40af59ca2465b24e54f671b2de2c59257ddc4f7e5706dbd6930e26823668d3 \ - --hash=sha256:de4e5f7f68220d92b7637fc99847475b59154b7a1b3868fb7385337af54ac9ca \ - --hash=sha256:eb8cc2afe8b05acbd84a43905832ec78e7b3873fb124ca190f574dca7389a87d \ - --hash=sha256:ee77aa129f481be46f8d92a1a7db57269a2f23052d5f2433b4621bb457081cc9 +cryptography==39.0.1 \ + --hash=sha256:0f8da300b5c8af9f98111ffd512910bc792b4c77392a9523624680f7956a99d4 \ + --hash=sha256:35f7c7d015d474f4011e859e93e789c87d21f6f4880ebdc29896a60403328f1f \ + --hash=sha256:4789d1e3e257965e960232345002262ede4d094d1a19f4d3b52e48d4d8f3b885 \ + --hash=sha256:5aa67414fcdfa22cf052e640cb5ddc461924a045cacf325cd164e65312d99502 \ + --hash=sha256:5d2d8b87a490bfcd407ed9d49093793d0f75198a35e6eb1a923ce1ee86c62b41 \ + --hash=sha256:6687ef6d0a6497e2b58e7c5b852b53f62142cfa7cd1555795758934da363a965 \ + --hash=sha256:6f8ba7f0328b79f08bdacc3e4e66fb4d7aab0c3584e0bd41328dce5262e26b2e \ + --hash=sha256:706843b48f9a3f9b9911979761c91541e3d90db1ca905fd63fee540a217698bc \ + --hash=sha256:807ce09d4434881ca3a7594733669bd834f5b2c6d5c7e36f8c00f691887042ad \ + --hash=sha256:83e17b26de248c33f3acffb922748151d71827d6021d98c70e6c1a25ddd78505 \ + --hash=sha256:96f1157a7c08b5b189b16b47bc9db2332269d6680a196341bf30046330d15388 \ + --hash=sha256:aec5a6c9864be7df2240c382740fcf3b96928c46604eaa7f3091f58b878c0bb6 \ + --hash=sha256:b0afd054cd42f3d213bf82c629efb1ee5f22eba35bf0eec88ea9ea7304f511a2 \ + --hash=sha256:c5caeb8188c24888c90b5108a441c106f7faa4c4c075a2bcae438c6e8ca73cef \ + --hash=sha256:ced4e447ae29ca194449a3f1ce132ded8fcab06971ef5f618605aacaa612beac \ + --hash=sha256:d1f6198ee6d9148405e49887803907fe8962a23e6c6f83ea7d98f1c0de375695 \ + --hash=sha256:e124352fd3db36a9d4a21c1aa27fd5d051e621845cb87fb851c08f4f75ce8be6 \ + --hash=sha256:e422abdec8b5fa8462aa016786680720d78bdce7a30c652b7fadf83a4ba35336 \ + --hash=sha256:ef8b72fa70b348724ff1218267e7f7375b8de4e8194d1636ee60510aae104cd0 \ + --hash=sha256:f0c64d1bd842ca2633e74a1a28033d139368ad959872533b1bab8c80e8240a0c \ + --hash=sha256:f24077a3b5298a5a06a8e0536e3ea9ec60e4c7ac486755e5fb6e6ea9b3500106 \ + --hash=sha256:fdd188c8a6ef8769f148f88f859884507b954cc64db6b52f66ef199bb9ad660a \ + --hash=sha256:fe913f20024eb2cb2f323e42a64bdf2911bb9738a15dba7d3cce48151034e3a8 # via # -r requirements.txt # pyspnego @@ -218,28 +228,92 @@ exceptiongroup==1.0.4 \ --hash=sha256:542adf9dea4055530d6e1279602fa5cb11dab2395fa650b8674eaec35fc4a828 \ --hash=sha256:bd14967b79cd9bdb54d97323216f8fdf533e278df937aa2a90089e7d6e06e5ec # via pytest -flask==2.0.2 \ - --hash=sha256:7b2fb8e934ddd50731893bdcdb00fc8c0315916f9fcd50d22c7cc1a95ab634e2 \ - --hash=sha256:cb90f62f1d8e4dc4621f52106613488b5ba826b2e1e10a33eac92f723093ab6a +flask==2.2.3 \ + --hash=sha256:7eb373984bf1c770023fce9db164ed0c3353cd0b53f130f4693da0ca756a2e6d \ + --hash=sha256:c0bec9477df1cb867e5a67c9e1ab758de9cb4a3e52dd70681f59fa40a62b3f2d # via # -r requirements.txt # flask-login # flask-migrate # flask-sqlalchemy -flask-login==0.5.0 \ - --hash=sha256:6d33aef15b5bcead780acc339464aae8a6e28f13c90d8b1cf9de8b549d1c0b4b \ - --hash=sha256:7451b5001e17837ba58945aead261ba425fdf7b4f0448777e597ddab39f4fba0 +flask-login==0.6.2 \ + --hash=sha256:1ef79843f5eddd0f143c2cd994c1b05ac83c0401dc6234c143495af9a939613f \ + --hash=sha256:c0a7baa9fdc448cdd3dd6f0939df72eec5177b2f7abe6cb82fc934d29caac9c3 # via -r requirements.txt -flask-migrate==2.5.2 \ - --hash=sha256:6fb038be63d4c60727d5dfa5f581a6189af5b4e2925bc378697b4f0a40cfb4e1 \ - --hash=sha256:a96ff1875a49a40bd3e8ac04fce73fdb0870b9211e6168608cbafa4eb839d502 +flask-migrate==4.0.4 \ + --hash=sha256:73293d40b10ac17736e715b377e7b7bde474cb8105165d77474df4c3619b10b3 \ + --hash=sha256:77580f27ab39bc68be4906a43c56d7674b45075bc4f883b1d0b985db5164d58f # via -r requirements.txt -flask-sqlalchemy==2.4.1 \ - --hash=sha256:0078d8663330dc05a74bc72b3b6ddc441b9a744e2f56fe60af1a5bfc81334327 \ - --hash=sha256:6974785d913666587949f7c2946f7001e4fa2cb2d19f4e69ead02e4b8f50b33d +flask-sqlalchemy==3.0.3 \ + --hash=sha256:2764335f3c9d7ebdc9ed6044afaf98aae9fa50d7a074cef55dde307ec95903ec \ + --hash=sha256:add5750b2f9cd10512995261ee2aa23fab85bd5626061aa3c564b33bb4aa780a # via # -r requirements.txt # flask-migrate +greenlet==2.0.2 \ + --hash=sha256:03a8f4f3430c3b3ff8d10a2a86028c660355ab637cee9333d63d66b56f09d52a \ + --hash=sha256:0bf60faf0bc2468089bdc5edd10555bab6e85152191df713e2ab1fcc86382b5a \ + --hash=sha256:18a7f18b82b52ee85322d7a7874e676f34ab319b9f8cce5de06067384aa8ff43 \ + --hash=sha256:18e98fb3de7dba1c0a852731c3070cf022d14f0d68b4c87a19cc1016f3bb8b33 \ + --hash=sha256:1a819eef4b0e0b96bb0d98d797bef17dc1b4a10e8d7446be32d1da33e095dbb8 \ + --hash=sha256:26fbfce90728d82bc9e6c38ea4d038cba20b7faf8a0ca53a9c07b67318d46088 \ + --hash=sha256:2780572ec463d44c1d3ae850239508dbeb9fed38e294c68d19a24d925d9223ca \ + --hash=sha256:283737e0da3f08bd637b5ad058507e578dd462db259f7f6e4c5c365ba4ee9343 \ + --hash=sha256:2d4686f195e32d36b4d7cf2d166857dbd0ee9f3d20ae349b6bf8afc8485b3645 \ + --hash=sha256:2dd11f291565a81d71dab10b7033395b7a3a5456e637cf997a6f33ebdf06f8db \ + --hash=sha256:30bcf80dda7f15ac77ba5af2b961bdd9dbc77fd4ac6105cee85b0d0a5fcf74df \ + --hash=sha256:32e5b64b148966d9cccc2c8d35a671409e45f195864560829f395a54226408d3 \ + --hash=sha256:36abbf031e1c0f79dd5d596bfaf8e921c41df2bdf54ee1eed921ce1f52999a86 \ + --hash=sha256:3a06ad5312349fec0ab944664b01d26f8d1f05009566339ac6f63f56589bc1a2 \ + --hash=sha256:3a51c9751078733d88e013587b108f1b7a1fb106d402fb390740f002b6f6551a \ + --hash=sha256:3c9b12575734155d0c09d6c3e10dbd81665d5c18e1a7c6597df72fd05990c8cf \ + --hash=sha256:3f6ea9bd35eb450837a3d80e77b517ea5bc56b4647f5502cd28de13675ee12f7 \ + --hash=sha256:4b58adb399c4d61d912c4c331984d60eb66565175cdf4a34792cd9600f21b394 \ + --hash=sha256:4d2e11331fc0c02b6e84b0d28ece3a36e0548ee1a1ce9ddde03752d9b79bba40 \ + --hash=sha256:5454276c07d27a740c5892f4907c86327b632127dd9abec42ee62e12427ff7e3 \ + --hash=sha256:561091a7be172ab497a3527602d467e2b3fbe75f9e783d8b8ce403fa414f71a6 \ + --hash=sha256:6c3acb79b0bfd4fe733dff8bc62695283b57949ebcca05ae5c129eb606ff2d74 \ + --hash=sha256:703f18f3fda276b9a916f0934d2fb6d989bf0b4fb5a64825260eb9bfd52d78f0 \ + --hash=sha256:7492e2b7bd7c9b9916388d9df23fa49d9b88ac0640db0a5b4ecc2b653bf451e3 \ + --hash=sha256:76ae285c8104046b3a7f06b42f29c7b73f77683df18c49ab5af7983994c2dd91 \ + --hash=sha256:7cafd1208fdbe93b67c7086876f061f660cfddc44f404279c1585bbf3cdc64c5 \ + --hash=sha256:7efde645ca1cc441d6dc4b48c0f7101e8d86b54c8530141b09fd31cef5149ec9 \ + --hash=sha256:88d9ab96491d38a5ab7c56dd7a3cc37d83336ecc564e4e8816dbed12e5aaefc8 \ + --hash=sha256:8eab883b3b2a38cc1e050819ef06a7e6344d4a990d24d45bc6f2cf959045a45b \ + --hash=sha256:910841381caba4f744a44bf81bfd573c94e10b3045ee00de0cbf436fe50673a6 \ + --hash=sha256:9190f09060ea4debddd24665d6804b995a9c122ef5917ab26e1566dcc712ceeb \ + --hash=sha256:937e9020b514ceedb9c830c55d5c9872abc90f4b5862f89c0887033ae33c6f73 \ + --hash=sha256:94c817e84245513926588caf1152e3b559ff794d505555211ca041f032abbb6b \ + --hash=sha256:971ce5e14dc5e73715755d0ca2975ac88cfdaefcaab078a284fea6cfabf866df \ + --hash=sha256:9d14b83fab60d5e8abe587d51c75b252bcc21683f24699ada8fb275d7712f5a9 \ + --hash=sha256:9f35ec95538f50292f6d8f2c9c9f8a3c6540bbfec21c9e5b4b751e0a7c20864f \ + --hash=sha256:a1846f1b999e78e13837c93c778dcfc3365902cfb8d1bdb7dd73ead37059f0d0 \ + --hash=sha256:acd2162a36d3de67ee896c43effcd5ee3de247eb00354db411feb025aa319857 \ + --hash=sha256:b0ef99cdbe2b682b9ccbb964743a6aca37905fda5e0452e5ee239b1654d37f2a \ + --hash=sha256:b80f600eddddce72320dbbc8e3784d16bd3fb7b517e82476d8da921f27d4b249 \ + --hash=sha256:b864ba53912b6c3ab6bcb2beb19f19edd01a6bfcbdfe1f37ddd1778abfe75a30 \ + --hash=sha256:b9ec052b06a0524f0e35bd8790686a1da006bd911dd1ef7d50b77bfbad74e292 \ + --hash=sha256:ba2956617f1c42598a308a84c6cf021a90ff3862eddafd20c3333d50f0edb45b \ + --hash=sha256:bdfea8c661e80d3c1c99ad7c3ff74e6e87184895bbaca6ee8cc61209f8b9b85d \ + --hash=sha256:be4ed120b52ae4d974aa40215fcdfde9194d63541c7ded40ee12eb4dda57b76b \ + --hash=sha256:c4302695ad8027363e96311df24ee28978162cdcdd2006476c43970b384a244c \ + --hash=sha256:c48f54ef8e05f04d6eff74b8233f6063cb1ed960243eacc474ee73a2ea8573ca \ + --hash=sha256:c9c59a2120b55788e800d82dfa99b9e156ff8f2227f07c5e3012a45a399620b7 \ + --hash=sha256:cd021c754b162c0fb55ad5d6b9d960db667faad0fa2ff25bb6e1301b0b6e6a75 \ + --hash=sha256:d27ec7509b9c18b6d73f2f5ede2622441de812e7b1a80bbd446cb0633bd3d5ae \ + --hash=sha256:d5508f0b173e6aa47273bdc0a0b5ba055b59662ba7c7ee5119528f466585526b \ + --hash=sha256:d75209eed723105f9596807495d58d10b3470fa6732dd6756595e89925ce2470 \ + --hash=sha256:db1a39669102a1d8d12b57de2bb7e2ec9066a6f2b3da35ae511ff93b01b5d564 \ + --hash=sha256:dbfcfc0218093a19c252ca8eb9aee3d29cfdcb586df21049b9d777fd32c14fd9 \ + --hash=sha256:e0f72c9ddb8cd28532185f54cc1453f2c16fb417a08b53a855c4e6a418edd099 \ + --hash=sha256:e7c8dc13af7db097bed64a051d2dd49e9f0af495c26995c00a9ee842690d34c0 \ + --hash=sha256:ea9872c80c132f4663822dd2a08d404073a5a9b5ba6155bea72fb2a79d1093b5 \ + --hash=sha256:eff4eb9b7eb3e4d0cae3d28c283dc16d9bed6b193c2e1ace3ed86ce48ea8df19 \ + --hash=sha256:f82d4d717d8ef19188687aa32b8363e96062911e63ba22a0cff7802a8e58e5f1 \ + --hash=sha256:fc3a569657468b6f3fb60587e48356fe512c1754ca05a564f11366ac9e306526 + # via + # -r requirements.txt + # sqlalchemy gssapi==1.8.2 \ --hash=sha256:02e0a8f35e1f5b1c0eada646e3da1af3022c25e8df26ded3fd18ee78abb155ea \ --hash=sha256:13aba9a947994f5f5f1fb6f425b397a359b191cee2983fa33911cf5e212d6cfb \ @@ -270,6 +344,16 @@ idna==2.8 \ # via # -r requirements.txt # requests +importlib-metadata==6.0.0 \ + --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ + --hash=sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d + # via + # -r requirements.txt + # flask +importlib-resources==5.12.0 \ + --hash=sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6 \ + --hash=sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a + # via -r requirements.txt iniconfig==1.0.1 \ --hash=sha256:80cf40c597eb564e86346103f609d74efce0f6b4d4f30ec8ce9e2c26411ba437 \ --hash=sha256:e5f92f89355a67de0595932a6c6c02ab4afddc6fcdc0bfc5becd0d60884d3f69 @@ -318,80 +402,62 @@ mako==1.2.2 \ # via # -r requirements.txt # alembic -markupsafe==2.0.1 \ - --hash=sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298 \ - --hash=sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64 \ - --hash=sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b \ - --hash=sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194 \ - --hash=sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567 \ - --hash=sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff \ - --hash=sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724 \ - --hash=sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74 \ - --hash=sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646 \ - --hash=sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35 \ - --hash=sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6 \ - --hash=sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a \ - --hash=sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6 \ - --hash=sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad \ - --hash=sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26 \ - --hash=sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38 \ - --hash=sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac \ - --hash=sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7 \ - --hash=sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6 \ - --hash=sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047 \ - --hash=sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75 \ - --hash=sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f \ - --hash=sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b \ - --hash=sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135 \ - --hash=sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8 \ - --hash=sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a \ - --hash=sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a \ - --hash=sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1 \ - --hash=sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9 \ - --hash=sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864 \ - --hash=sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914 \ - --hash=sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee \ - --hash=sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f \ - --hash=sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18 \ - --hash=sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8 \ - --hash=sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2 \ - --hash=sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d \ - --hash=sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b \ - --hash=sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b \ - --hash=sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86 \ - --hash=sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6 \ - --hash=sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f \ - --hash=sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb \ - --hash=sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833 \ - --hash=sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28 \ - --hash=sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e \ - --hash=sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415 \ - --hash=sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902 \ - --hash=sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f \ - --hash=sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d \ - --hash=sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9 \ - --hash=sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d \ - --hash=sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145 \ - --hash=sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066 \ - --hash=sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c \ - --hash=sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1 \ - --hash=sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a \ - --hash=sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207 \ - --hash=sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f \ - --hash=sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53 \ - --hash=sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd \ - --hash=sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134 \ - --hash=sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85 \ - --hash=sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9 \ - --hash=sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5 \ - --hash=sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94 \ - --hash=sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509 \ - --hash=sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51 \ - --hash=sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872 +markupsafe==2.1.2 \ + --hash=sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed \ + --hash=sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc \ + --hash=sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2 \ + --hash=sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460 \ + --hash=sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7 \ + --hash=sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0 \ + --hash=sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1 \ + --hash=sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa \ + --hash=sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03 \ + --hash=sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323 \ + --hash=sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65 \ + --hash=sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013 \ + --hash=sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036 \ + --hash=sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f \ + --hash=sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4 \ + --hash=sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419 \ + --hash=sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2 \ + --hash=sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619 \ + --hash=sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a \ + --hash=sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a \ + --hash=sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd \ + --hash=sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7 \ + --hash=sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666 \ + --hash=sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65 \ + --hash=sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859 \ + --hash=sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625 \ + --hash=sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff \ + --hash=sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156 \ + --hash=sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd \ + --hash=sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba \ + --hash=sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f \ + --hash=sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1 \ + --hash=sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094 \ + --hash=sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a \ + --hash=sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513 \ + --hash=sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed \ + --hash=sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d \ + --hash=sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3 \ + --hash=sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147 \ + --hash=sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c \ + --hash=sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603 \ + --hash=sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601 \ + --hash=sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a \ + --hash=sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1 \ + --hash=sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d \ + --hash=sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3 \ + --hash=sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54 \ + --hash=sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2 \ + --hash=sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6 \ + --hash=sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58 # via # -r requirements.txt # jinja2 # mako + # werkzeug operator-manifest==0.0.5 \ --hash=sha256:8e1dfc47fc133947ed575f947f0d51d7c5efb4beb0f5de5202214bea257c26b5 # via -r requirements.txt @@ -486,19 +552,19 @@ pyparsing==3.0.6 \ # via # -r requirements.txt # packaging -pyspnego[kerberos]==0.5.3 \ - --hash=sha256:1ee612f20c843365fbc6cf7f95c526b4ee8795281641a9bb87083622a2f87939 \ - --hash=sha256:284ca7a6218344bb90aeae02fb1d2ed73e5c991d6e4c16c0df404aeab5eb58a3 \ - --hash=sha256:416fd2d67e82b44ba3d2d9062485056e4dde3c141630170e9190379d6b19972a \ - --hash=sha256:4c1be83e0aca12d64f5eec638259c77eaa8bf552c89ac69f0af2322a3be9afeb \ - --hash=sha256:4d1ea987b9c2539457235793014e0d9c5e4766da9e4e028d4b6b596cfbe53828 \ - --hash=sha256:725df2030e5d1b1155bb696eca3d684f403164da8e6a6b0bee3eb02f8748f72b \ - --hash=sha256:7320539f45da463029e12f3742102085d2a0343bfe77ac550c11d2fdac1d34f5 \ - --hash=sha256:77b86002082f278c3f5935d8b428a0d0659ea709e305537294ba95fc49907339 \ - --hash=sha256:aa93d94775d01bf70d16840426d1ddd58c11a6a71c4d0d1d7e529ad541fa0a60 \ - --hash=sha256:c2abca03b6d3c71d7ec9678c7b2220d99d9a29ef204b4c52549080169e586310 \ - --hash=sha256:e6645107f200fb7bf6698512d04ea0790b292028861ce169eb97e5ad8eba14ed \ - --hash=sha256:f4784d9f8e9c50a36109d715a140150add1990fce16805a56217e8ccaf69d234 +pyspnego[kerberos]==0.8.0 \ + --hash=sha256:1f76a924866040cece4600e1973bfdb20656f9a3ceb2935ed6be1f932c990b19 \ + --hash=sha256:2df21796b15e73b99a4b4bbe91e4ecd3fdaa888b7255c4ab697ccb6615dbd6e3 \ + --hash=sha256:3e49fddd34c19d6bd1d534501769de5e2b0716ce9b6f26d50f2f0600158780c9 \ + --hash=sha256:55b9bc76efb2ef335640f1bfe6922651c31d21a4c989b0def889eaa2f4865711 \ + --hash=sha256:92501106898b4fa60f454dc9445b8006c133e177c859d49b3c7f260985449cad \ + --hash=sha256:9dbbd3aec5240aa8b75a5baa0b8a78d3b4ec16638c5fe299cd849b2390cfd2ec \ + --hash=sha256:c3cb9d9da79f1d38e8a268988c5af7520f25dc8f6c7bc97444260f8ce3d1efe9 \ + --hash=sha256:cf8bd2bd2cadc825e7fc7ff86a57eb158d898d30c0f7670940178c48ebe78e31 \ + --hash=sha256:e0499cc066c56762f8a315bb053243d34240cb85e384afc6b87b4fa0142543df \ + --hash=sha256:e15d7ecf70cb70f09ec80a7efd57086886380dcfbe0c31b1808f3349484f0b96 \ + --hash=sha256:e2faff077fe942ed7169bd6c84c9396f259f50069237d93de12a5bd5e11bb445 \ + --hash=sha256:ff546dc4a56c92aae253c04c8999baf4357919a523665c8daa65788567a52fe3 # via # -r requirements.txt # requests-kerberos @@ -517,15 +583,7 @@ python-dateutil==2.8.1 \ --hash=sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a # via # -r requirements.txt - # alembic # botocore -python-editor==1.0.4 \ - --hash=sha256:1bf6e860a8ad52a14c3ee1252d5dc25b2030618ed80c022598f00176adc8367d \ - --hash=sha256:51fda6bcc5ddbbb7063b2af7509e43bd84bfc32a4ff71349ec7847713882327b \ - --hash=sha256:5f98b069316ea1c2ed3f67e7f5df6c0d8f10b689964a4a811ff64f0106819ec8 - # via - # -r requirements.txt - # alembic python-memcached==1.59 \ --hash=sha256:4dac64916871bd3550263323fc2ce18e1e439080a2d5670c594cf3118d99b594 \ --hash=sha256:a2e28637be13ee0bf1a8b6843e7490f9456fd3f2a4cb60471733c7b5d5557e4f @@ -596,8 +654,48 @@ six==1.14.0 \ # click-repl # python-dateutil # python-memcached -sqlalchemy==1.3.13 \ - --hash=sha256:64a7b71846db6423807e96820993fa12a03b89127d278290ca25c0b11ed7b4fb +sqlalchemy==2.0.4 \ + --hash=sha256:011ef3c33f30bae5637c575f30647e0add98686642d237f0c3a1e3d9b35747fa \ + --hash=sha256:0adca8a3ca77234a142c5afed29322fb501921f13d1d5e9fa4253450d786c160 \ + --hash=sha256:1644c603558590f465b3fa16e4557d87d3962bc2c81fd7ea85b582ecf4676b31 \ + --hash=sha256:2267c004e78e291bba0dc766a9711c389649cf3e662cd46eec2bc2c238c637bd \ + --hash=sha256:25e4e54575f9d2af1eab82d3a470fca27062191c48ee57b6386fe09a3c0a6a33 \ + --hash=sha256:2a2f9120eb32190bdba31d1022181ef08f257aed4f984f3368aa4e838de72bc0 \ + --hash=sha256:2c82395e2925639e6d320592943608070678e7157bd1db2672a63be9c7889434 \ + --hash=sha256:3f927340b37fe65ec42e19af7ce15260a73e11c6b456febb59009bfdfec29a35 \ + --hash=sha256:54aa9f40d88728dd058e951eeb5ecc55241831ba4011e60c641738c1da0146b7 \ + --hash=sha256:57dcd9eed52413f7270b22797aa83c71b698db153d1541c1e83d45ecdf8e95e7 \ + --hash=sha256:582053571125895d008d4b8d9687d12d4bd209c076cdbab3504da307e2a0a2bd \ + --hash=sha256:59cf0cdb29baec4e074c7520d7226646a8a8f856b87d8300f3e4494901d55235 \ + --hash=sha256:6363697c938b9a13e07f1bc2cd433502a7aa07efd55b946b31d25b9449890621 \ + --hash=sha256:662a79e80f3e9fe33b7861c19fedf3d8389fab2413c04bba787e3f1139c22188 \ + --hash=sha256:67901b91bf5821482fcbe9da988cb16897809624ddf0fde339cd62365cc50032 \ + --hash=sha256:679b9bd10bb32b8d3befed4aad4356799b6ec1bdddc0f930a79e41ba5b084124 \ + --hash=sha256:738c80705e11c1268827dbe22c01162a9cdc98fc6f7901b429a1459db2593060 \ + --hash=sha256:77a380bf8721b416782c763e0ff66f80f3b05aee83db33ddfc0eac20bcb6791f \ + --hash=sha256:77d05773d5c79f2d3371d81697d54ee1b2c32085ad434ce9de4482e457ecb018 \ + --hash=sha256:817aab80f7e8fe581696dae7aaeb2ceb0b7ea70ad03c95483c9115970d2a9b00 \ + --hash=sha256:81f1ea264278fcbe113b9a5840f13a356cb0186e55b52168334124f1cd1bc495 \ + --hash=sha256:8a88b32ce5b69d18507ffc9f10401833934ebc353c7b30d1e056023c64f0a736 \ + --hash=sha256:8ff0a7c669ec7cdb899eae7e622211c2dd8725b82655db2b41740d39e3cda466 \ + --hash=sha256:918c2b553e3c78268b187f70983c9bc6f91e451a4f934827e9c919e03d258bd7 \ + --hash=sha256:954f1ad73b78ea5ba5a35c89c4a5dfd0f3a06c17926503de19510eb9b3857bde \ + --hash=sha256:95a18e1a6af2114dbd9ee4f168ad33070d6317e11bafa28d983cc7b585fe900b \ + --hash=sha256:9946ee503962859f1a9e1ad17dff0859269b0cb453686747fe87f00b0e030b34 \ + --hash=sha256:9a7ecaf90fe9ec8e45c86828f4f183564b33c9514e08667ca59e526fea63893a \ + --hash=sha256:a42e6831e82dfa6d16b45f0c98c69e7b0defc64d76213173456355034450c414 \ + --hash=sha256:b01dce097cf6f145da131a53d4cce7f42e0bfa9ae161dd171a423f7970d296d0 \ + --hash=sha256:b5deafb4901618b3f98e8df7099cd11edd0d1e6856912647e28968b803de0dae \ + --hash=sha256:b67d6e626caa571fb53accaac2fba003ef4f7317cb3481e9ab99dad6e89a70d6 \ + --hash=sha256:c1e8edc49b32483cd5d2d015f343e16be7dfab89f4aaf66b0fa6827ab356880d \ + --hash=sha256:c621f05859caed5c0aab032888a3d3bde2cae3988ca151113cbecf262adad976 \ + --hash=sha256:ce54965a94673a0ebda25e7c3a05bf1aa74fd78cc452a1a710b704bf73fb8402 \ + --hash=sha256:d8efdda920988bcade542f53a2890751ff680474d548f32df919a35a21404e3f \ + --hash=sha256:dc7b9f55c2f72c13b2328b8a870ff585c993ba1b5c155ece5c9d3216fa4b18f6 \ + --hash=sha256:dd801375f19a6e1f021dabd8b1714f2fdb91cbc835cd13b5dd0bd7e9860392d7 \ + --hash=sha256:f342057422d6bcfdd4996e34cd5c7f78f7e500112f64b113f334cdfc6a0c593d \ + --hash=sha256:f696828784ab2c07b127bfd2f2d513f47ec58924c29cff5b19806ac37acee31c \ + --hash=sha256:fdb2686eb01f670cdc6c43f092e333ff08c1cf0b646da5256c1237dc4ceef4ae # via # -r requirements.txt # alembic @@ -619,7 +717,9 @@ tomli==1.2.1 \ typing-extensions==4.3.0 \ --hash=sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02 \ --hash=sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6 - # via -r requirements.txt + # via + # -r requirements.txt + # sqlalchemy urllib3==1.26.6 \ --hash=sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4 \ --hash=sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f @@ -641,12 +741,20 @@ wcwidth==0.2.5 \ # via # -r requirements.txt # prompt-toolkit -werkzeug==2.0.2 \ - --hash=sha256:63d3dc1cf60e7b7e35e97fa9861f7397283b75d765afcaefd993d6046899de8f \ - --hash=sha256:aa2bb6fc8dee8d6c504c0ac1e7f5f7dc5810a9903e793b6f715a9f015bdadb9a +werkzeug==2.2.3 \ + --hash=sha256:2e1ccc9417d4da358b9de6f174e3ac094391ea1d4fbef2d667865d819dfd0afe \ + --hash=sha256:56433961bc1f12533306c624f3be5e744389ac61d722175d543e1751285da612 # via # -r requirements.txt # flask + # flask-login +zipp==3.15.0 \ + --hash=sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b \ + --hash=sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556 + # via + # -r requirements.txt + # importlib-metadata + # importlib-resources # WARNING: The following packages were not pinned, but pip requires them to be # pinned when the requirements file includes hashes. Consider using the --allow-unsafe flag. diff --git a/requirements.txt b/requirements.txt index 101196d22..de9a98850 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,11 +1,12 @@ # -# This file is autogenerated by pip-compile with python 3.9 -# To update, run: +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: # # pip-compile --generate-hashes --output-file=requirements.txt # -alembic==1.4.0 \ - --hash=sha256:2df2519a5b002f881517693b95626905a39c5faf4b5a1f94de4f1441095d1d26 +alembic==1.9.4 \ + --hash=sha256:4d3bd32ecdbb7bbfb48a9fe9e6d6fd6a831a1b59d03e26e292210237373e7db5 \ + --hash=sha256:6f1c2207369bf4f49f952057a33bb017fbe5c148c2a773b46906b806ea6e825f # via flask-migrate amqp==5.0.6 \ --hash=sha256:03e16e94f2b34c31f8bf1206d8ddd3ccaa4c315f7f6a1879b7b1210d229568c2 \ @@ -124,21 +125,30 @@ click-repl==0.2.0 \ --hash=sha256:94b3fbbc9406a236f176e0506524b2937e4b23b6f4c0c0b2a0a83f8a64e9194b \ --hash=sha256:cd12f68d745bf6151210790540b4cb064c7b13e571bc64b6957d98d120dacfd8 # via celery -cryptography==3.4.7 \ - --hash=sha256:0f1212a66329c80d68aeeb39b8a16d54ef57071bf22ff4e521657b27372e327d \ - --hash=sha256:1e056c28420c072c5e3cb36e2b23ee55e260cb04eee08f702e0edfec3fb51959 \ - --hash=sha256:240f5c21aef0b73f40bb9f78d2caff73186700bf1bc6b94285699aff98cc16c6 \ - --hash=sha256:26965837447f9c82f1855e0bc8bc4fb910240b6e0d16a664bb722df3b5b06873 \ - --hash=sha256:37340614f8a5d2fb9aeea67fd159bfe4f5f4ed535b1090ce8ec428b2f15a11f2 \ - --hash=sha256:3d10de8116d25649631977cb37da6cbdd2d6fa0e0281d014a5b7d337255ca713 \ - --hash=sha256:3d8427734c781ea5f1b41d6589c293089704d4759e34597dce91014ac125aad1 \ - --hash=sha256:7ec5d3b029f5fa2b179325908b9cd93db28ab7b85bb6c1db56b10e0b54235177 \ - --hash=sha256:8e56e16617872b0957d1c9742a3f94b43533447fd78321514abbe7db216aa250 \ - --hash=sha256:b01fd6f2737816cb1e08ed4807ae194404790eac7ad030b34f2ce72b332f5586 \ - --hash=sha256:bf40af59ca2465b24e54f671b2de2c59257ddc4f7e5706dbd6930e26823668d3 \ - --hash=sha256:de4e5f7f68220d92b7637fc99847475b59154b7a1b3868fb7385337af54ac9ca \ - --hash=sha256:eb8cc2afe8b05acbd84a43905832ec78e7b3873fb124ca190f574dca7389a87d \ - --hash=sha256:ee77aa129f481be46f8d92a1a7db57269a2f23052d5f2433b4621bb457081cc9 +cryptography==39.0.1 \ + --hash=sha256:0f8da300b5c8af9f98111ffd512910bc792b4c77392a9523624680f7956a99d4 \ + --hash=sha256:35f7c7d015d474f4011e859e93e789c87d21f6f4880ebdc29896a60403328f1f \ + --hash=sha256:4789d1e3e257965e960232345002262ede4d094d1a19f4d3b52e48d4d8f3b885 \ + --hash=sha256:5aa67414fcdfa22cf052e640cb5ddc461924a045cacf325cd164e65312d99502 \ + --hash=sha256:5d2d8b87a490bfcd407ed9d49093793d0f75198a35e6eb1a923ce1ee86c62b41 \ + --hash=sha256:6687ef6d0a6497e2b58e7c5b852b53f62142cfa7cd1555795758934da363a965 \ + --hash=sha256:6f8ba7f0328b79f08bdacc3e4e66fb4d7aab0c3584e0bd41328dce5262e26b2e \ + --hash=sha256:706843b48f9a3f9b9911979761c91541e3d90db1ca905fd63fee540a217698bc \ + --hash=sha256:807ce09d4434881ca3a7594733669bd834f5b2c6d5c7e36f8c00f691887042ad \ + --hash=sha256:83e17b26de248c33f3acffb922748151d71827d6021d98c70e6c1a25ddd78505 \ + --hash=sha256:96f1157a7c08b5b189b16b47bc9db2332269d6680a196341bf30046330d15388 \ + --hash=sha256:aec5a6c9864be7df2240c382740fcf3b96928c46604eaa7f3091f58b878c0bb6 \ + --hash=sha256:b0afd054cd42f3d213bf82c629efb1ee5f22eba35bf0eec88ea9ea7304f511a2 \ + --hash=sha256:c5caeb8188c24888c90b5108a441c106f7faa4c4c075a2bcae438c6e8ca73cef \ + --hash=sha256:ced4e447ae29ca194449a3f1ce132ded8fcab06971ef5f618605aacaa612beac \ + --hash=sha256:d1f6198ee6d9148405e49887803907fe8962a23e6c6f83ea7d98f1c0de375695 \ + --hash=sha256:e124352fd3db36a9d4a21c1aa27fd5d051e621845cb87fb851c08f4f75ce8be6 \ + --hash=sha256:e422abdec8b5fa8462aa016786680720d78bdce7a30c652b7fadf83a4ba35336 \ + --hash=sha256:ef8b72fa70b348724ff1218267e7f7375b8de4e8194d1636ee60510aae104cd0 \ + --hash=sha256:f0c64d1bd842ca2633e74a1a28033d139368ad959872533b1bab8c80e8240a0c \ + --hash=sha256:f24077a3b5298a5a06a8e0536e3ea9ec60e4c7ac486755e5fb6e6ea9b3500106 \ + --hash=sha256:fdd188c8a6ef8769f148f88f859884507b954cc64db6b52f66ef199bb9ad660a \ + --hash=sha256:fe913f20024eb2cb2f323e42a64bdf2911bb9738a15dba7d3cce48151034e3a8 # via # pyspnego # requests-kerberos @@ -151,28 +161,90 @@ decorator==4.4.2 \ dogpile-cache==1.0.2 \ --hash=sha256:64fda39d25b46486a4876417ca03a4af06f35bfadba9f59613f9b3d748aa21ef # via iib (setup.py) -flask==2.0.2 \ - --hash=sha256:7b2fb8e934ddd50731893bdcdb00fc8c0315916f9fcd50d22c7cc1a95ab634e2 \ - --hash=sha256:cb90f62f1d8e4dc4621f52106613488b5ba826b2e1e10a33eac92f723093ab6a +flask==2.2.3 \ + --hash=sha256:7eb373984bf1c770023fce9db164ed0c3353cd0b53f130f4693da0ca756a2e6d \ + --hash=sha256:c0bec9477df1cb867e5a67c9e1ab758de9cb4a3e52dd70681f59fa40a62b3f2d # via # flask-login # flask-migrate # flask-sqlalchemy # iib (setup.py) -flask-login==0.5.0 \ - --hash=sha256:6d33aef15b5bcead780acc339464aae8a6e28f13c90d8b1cf9de8b549d1c0b4b \ - --hash=sha256:7451b5001e17837ba58945aead261ba425fdf7b4f0448777e597ddab39f4fba0 +flask-login==0.6.2 \ + --hash=sha256:1ef79843f5eddd0f143c2cd994c1b05ac83c0401dc6234c143495af9a939613f \ + --hash=sha256:c0a7baa9fdc448cdd3dd6f0939df72eec5177b2f7abe6cb82fc934d29caac9c3 # via iib (setup.py) -flask-migrate==2.5.2 \ - --hash=sha256:6fb038be63d4c60727d5dfa5f581a6189af5b4e2925bc378697b4f0a40cfb4e1 \ - --hash=sha256:a96ff1875a49a40bd3e8ac04fce73fdb0870b9211e6168608cbafa4eb839d502 +flask-migrate==4.0.4 \ + --hash=sha256:73293d40b10ac17736e715b377e7b7bde474cb8105165d77474df4c3619b10b3 \ + --hash=sha256:77580f27ab39bc68be4906a43c56d7674b45075bc4f883b1d0b985db5164d58f # via iib (setup.py) -flask-sqlalchemy==2.4.1 \ - --hash=sha256:0078d8663330dc05a74bc72b3b6ddc441b9a744e2f56fe60af1a5bfc81334327 \ - --hash=sha256:6974785d913666587949f7c2946f7001e4fa2cb2d19f4e69ead02e4b8f50b33d +flask-sqlalchemy==3.0.3 \ + --hash=sha256:2764335f3c9d7ebdc9ed6044afaf98aae9fa50d7a074cef55dde307ec95903ec \ + --hash=sha256:add5750b2f9cd10512995261ee2aa23fab85bd5626061aa3c564b33bb4aa780a # via # flask-migrate # iib (setup.py) +greenlet==2.0.2 \ + --hash=sha256:03a8f4f3430c3b3ff8d10a2a86028c660355ab637cee9333d63d66b56f09d52a \ + --hash=sha256:0bf60faf0bc2468089bdc5edd10555bab6e85152191df713e2ab1fcc86382b5a \ + --hash=sha256:18a7f18b82b52ee85322d7a7874e676f34ab319b9f8cce5de06067384aa8ff43 \ + --hash=sha256:18e98fb3de7dba1c0a852731c3070cf022d14f0d68b4c87a19cc1016f3bb8b33 \ + --hash=sha256:1a819eef4b0e0b96bb0d98d797bef17dc1b4a10e8d7446be32d1da33e095dbb8 \ + --hash=sha256:26fbfce90728d82bc9e6c38ea4d038cba20b7faf8a0ca53a9c07b67318d46088 \ + --hash=sha256:2780572ec463d44c1d3ae850239508dbeb9fed38e294c68d19a24d925d9223ca \ + --hash=sha256:283737e0da3f08bd637b5ad058507e578dd462db259f7f6e4c5c365ba4ee9343 \ + --hash=sha256:2d4686f195e32d36b4d7cf2d166857dbd0ee9f3d20ae349b6bf8afc8485b3645 \ + --hash=sha256:2dd11f291565a81d71dab10b7033395b7a3a5456e637cf997a6f33ebdf06f8db \ + --hash=sha256:30bcf80dda7f15ac77ba5af2b961bdd9dbc77fd4ac6105cee85b0d0a5fcf74df \ + --hash=sha256:32e5b64b148966d9cccc2c8d35a671409e45f195864560829f395a54226408d3 \ + --hash=sha256:36abbf031e1c0f79dd5d596bfaf8e921c41df2bdf54ee1eed921ce1f52999a86 \ + --hash=sha256:3a06ad5312349fec0ab944664b01d26f8d1f05009566339ac6f63f56589bc1a2 \ + --hash=sha256:3a51c9751078733d88e013587b108f1b7a1fb106d402fb390740f002b6f6551a \ + --hash=sha256:3c9b12575734155d0c09d6c3e10dbd81665d5c18e1a7c6597df72fd05990c8cf \ + --hash=sha256:3f6ea9bd35eb450837a3d80e77b517ea5bc56b4647f5502cd28de13675ee12f7 \ + --hash=sha256:4b58adb399c4d61d912c4c331984d60eb66565175cdf4a34792cd9600f21b394 \ + --hash=sha256:4d2e11331fc0c02b6e84b0d28ece3a36e0548ee1a1ce9ddde03752d9b79bba40 \ + --hash=sha256:5454276c07d27a740c5892f4907c86327b632127dd9abec42ee62e12427ff7e3 \ + --hash=sha256:561091a7be172ab497a3527602d467e2b3fbe75f9e783d8b8ce403fa414f71a6 \ + --hash=sha256:6c3acb79b0bfd4fe733dff8bc62695283b57949ebcca05ae5c129eb606ff2d74 \ + --hash=sha256:703f18f3fda276b9a916f0934d2fb6d989bf0b4fb5a64825260eb9bfd52d78f0 \ + --hash=sha256:7492e2b7bd7c9b9916388d9df23fa49d9b88ac0640db0a5b4ecc2b653bf451e3 \ + --hash=sha256:76ae285c8104046b3a7f06b42f29c7b73f77683df18c49ab5af7983994c2dd91 \ + --hash=sha256:7cafd1208fdbe93b67c7086876f061f660cfddc44f404279c1585bbf3cdc64c5 \ + --hash=sha256:7efde645ca1cc441d6dc4b48c0f7101e8d86b54c8530141b09fd31cef5149ec9 \ + --hash=sha256:88d9ab96491d38a5ab7c56dd7a3cc37d83336ecc564e4e8816dbed12e5aaefc8 \ + --hash=sha256:8eab883b3b2a38cc1e050819ef06a7e6344d4a990d24d45bc6f2cf959045a45b \ + --hash=sha256:910841381caba4f744a44bf81bfd573c94e10b3045ee00de0cbf436fe50673a6 \ + --hash=sha256:9190f09060ea4debddd24665d6804b995a9c122ef5917ab26e1566dcc712ceeb \ + --hash=sha256:937e9020b514ceedb9c830c55d5c9872abc90f4b5862f89c0887033ae33c6f73 \ + --hash=sha256:94c817e84245513926588caf1152e3b559ff794d505555211ca041f032abbb6b \ + --hash=sha256:971ce5e14dc5e73715755d0ca2975ac88cfdaefcaab078a284fea6cfabf866df \ + --hash=sha256:9d14b83fab60d5e8abe587d51c75b252bcc21683f24699ada8fb275d7712f5a9 \ + --hash=sha256:9f35ec95538f50292f6d8f2c9c9f8a3c6540bbfec21c9e5b4b751e0a7c20864f \ + --hash=sha256:a1846f1b999e78e13837c93c778dcfc3365902cfb8d1bdb7dd73ead37059f0d0 \ + --hash=sha256:acd2162a36d3de67ee896c43effcd5ee3de247eb00354db411feb025aa319857 \ + --hash=sha256:b0ef99cdbe2b682b9ccbb964743a6aca37905fda5e0452e5ee239b1654d37f2a \ + --hash=sha256:b80f600eddddce72320dbbc8e3784d16bd3fb7b517e82476d8da921f27d4b249 \ + --hash=sha256:b864ba53912b6c3ab6bcb2beb19f19edd01a6bfcbdfe1f37ddd1778abfe75a30 \ + --hash=sha256:b9ec052b06a0524f0e35bd8790686a1da006bd911dd1ef7d50b77bfbad74e292 \ + --hash=sha256:ba2956617f1c42598a308a84c6cf021a90ff3862eddafd20c3333d50f0edb45b \ + --hash=sha256:bdfea8c661e80d3c1c99ad7c3ff74e6e87184895bbaca6ee8cc61209f8b9b85d \ + --hash=sha256:be4ed120b52ae4d974aa40215fcdfde9194d63541c7ded40ee12eb4dda57b76b \ + --hash=sha256:c4302695ad8027363e96311df24ee28978162cdcdd2006476c43970b384a244c \ + --hash=sha256:c48f54ef8e05f04d6eff74b8233f6063cb1ed960243eacc474ee73a2ea8573ca \ + --hash=sha256:c9c59a2120b55788e800d82dfa99b9e156ff8f2227f07c5e3012a45a399620b7 \ + --hash=sha256:cd021c754b162c0fb55ad5d6b9d960db667faad0fa2ff25bb6e1301b0b6e6a75 \ + --hash=sha256:d27ec7509b9c18b6d73f2f5ede2622441de812e7b1a80bbd446cb0633bd3d5ae \ + --hash=sha256:d5508f0b173e6aa47273bdc0a0b5ba055b59662ba7c7ee5119528f466585526b \ + --hash=sha256:d75209eed723105f9596807495d58d10b3470fa6732dd6756595e89925ce2470 \ + --hash=sha256:db1a39669102a1d8d12b57de2bb7e2ec9066a6f2b3da35ae511ff93b01b5d564 \ + --hash=sha256:dbfcfc0218093a19c252ca8eb9aee3d29cfdcb586df21049b9d777fd32c14fd9 \ + --hash=sha256:e0f72c9ddb8cd28532185f54cc1453f2c16fb417a08b53a855c4e6a418edd099 \ + --hash=sha256:e7c8dc13af7db097bed64a051d2dd49e9f0af495c26995c00a9ee842690d34c0 \ + --hash=sha256:ea9872c80c132f4663822dd2a08d404073a5a9b5ba6155bea72fb2a79d1093b5 \ + --hash=sha256:eff4eb9b7eb3e4d0cae3d28c283dc16d9bed6b193c2e1ace3ed86ce48ea8df19 \ + --hash=sha256:f82d4d717d8ef19188687aa32b8363e96062911e63ba22a0cff7802a8e58e5f1 \ + --hash=sha256:fc3a569657468b6f3fb60587e48356fe512c1754ca05a564f11366ac9e306526 + # via sqlalchemy gssapi==1.8.2 \ --hash=sha256:02e0a8f35e1f5b1c0eada646e3da1af3022c25e8df26ded3fd18ee78abb155ea \ --hash=sha256:13aba9a947994f5f5f1fb6f425b397a359b191cee2983fa33911cf5e212d6cfb \ @@ -199,6 +271,14 @@ idna==2.8 \ --hash=sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407 \ --hash=sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c # via requests +importlib-metadata==6.0.0 \ + --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ + --hash=sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d + # via flask +importlib-resources==5.12.0 \ + --hash=sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6 \ + --hash=sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a + # via iib (setup.py) itsdangerous==2.0.1 \ --hash=sha256:5174094b9637652bdb841a3029700391451bd092ba3db90600dea710ba28e97c \ --hash=sha256:9e724d68fc22902a1435351f84c3fb8623f303fffcc566a4cb952df8c572cff0 @@ -232,79 +312,61 @@ mako==1.2.2 \ --hash=sha256:3724869b363ba630a272a5f89f68c070352137b8fd1757650017b7e06fda163f \ --hash=sha256:8efcb8004681b5f71d09c983ad5a9e6f5c40601a6ec469148753292abc0da534 # via alembic -markupsafe==2.0.1 \ - --hash=sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298 \ - --hash=sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64 \ - --hash=sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b \ - --hash=sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194 \ - --hash=sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567 \ - --hash=sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff \ - --hash=sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724 \ - --hash=sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74 \ - --hash=sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646 \ - --hash=sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35 \ - --hash=sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6 \ - --hash=sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a \ - --hash=sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6 \ - --hash=sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad \ - --hash=sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26 \ - --hash=sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38 \ - --hash=sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac \ - --hash=sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7 \ - --hash=sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6 \ - --hash=sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047 \ - --hash=sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75 \ - --hash=sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f \ - --hash=sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b \ - --hash=sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135 \ - --hash=sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8 \ - --hash=sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a \ - --hash=sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a \ - --hash=sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1 \ - --hash=sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9 \ - --hash=sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864 \ - --hash=sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914 \ - --hash=sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee \ - --hash=sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f \ - --hash=sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18 \ - --hash=sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8 \ - --hash=sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2 \ - --hash=sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d \ - --hash=sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b \ - --hash=sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b \ - --hash=sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86 \ - --hash=sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6 \ - --hash=sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f \ - --hash=sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb \ - --hash=sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833 \ - --hash=sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28 \ - --hash=sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e \ - --hash=sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415 \ - --hash=sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902 \ - --hash=sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f \ - --hash=sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d \ - --hash=sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9 \ - --hash=sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d \ - --hash=sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145 \ - --hash=sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066 \ - --hash=sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c \ - --hash=sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1 \ - --hash=sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a \ - --hash=sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207 \ - --hash=sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f \ - --hash=sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53 \ - --hash=sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd \ - --hash=sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134 \ - --hash=sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85 \ - --hash=sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9 \ - --hash=sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5 \ - --hash=sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94 \ - --hash=sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509 \ - --hash=sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51 \ - --hash=sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872 +markupsafe==2.1.2 \ + --hash=sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed \ + --hash=sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc \ + --hash=sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2 \ + --hash=sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460 \ + --hash=sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7 \ + --hash=sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0 \ + --hash=sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1 \ + --hash=sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa \ + --hash=sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03 \ + --hash=sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323 \ + --hash=sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65 \ + --hash=sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013 \ + --hash=sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036 \ + --hash=sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f \ + --hash=sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4 \ + --hash=sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419 \ + --hash=sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2 \ + --hash=sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619 \ + --hash=sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a \ + --hash=sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a \ + --hash=sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd \ + --hash=sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7 \ + --hash=sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666 \ + --hash=sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65 \ + --hash=sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859 \ + --hash=sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625 \ + --hash=sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff \ + --hash=sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156 \ + --hash=sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd \ + --hash=sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba \ + --hash=sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f \ + --hash=sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1 \ + --hash=sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094 \ + --hash=sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a \ + --hash=sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513 \ + --hash=sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed \ + --hash=sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d \ + --hash=sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3 \ + --hash=sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147 \ + --hash=sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c \ + --hash=sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603 \ + --hash=sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601 \ + --hash=sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a \ + --hash=sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1 \ + --hash=sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d \ + --hash=sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3 \ + --hash=sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54 \ + --hash=sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2 \ + --hash=sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6 \ + --hash=sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58 # via # jinja2 # mako + # werkzeug operator-manifest==0.0.5 \ --hash=sha256:8e1dfc47fc133947ed575f947f0d51d7c5efb4beb0f5de5202214bea257c26b5 # via iib (setup.py) @@ -385,31 +447,24 @@ pyparsing==3.0.6 \ --hash=sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4 \ --hash=sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81 # via packaging -pyspnego[kerberos]==0.5.3 \ - --hash=sha256:1ee612f20c843365fbc6cf7f95c526b4ee8795281641a9bb87083622a2f87939 \ - --hash=sha256:284ca7a6218344bb90aeae02fb1d2ed73e5c991d6e4c16c0df404aeab5eb58a3 \ - --hash=sha256:416fd2d67e82b44ba3d2d9062485056e4dde3c141630170e9190379d6b19972a \ - --hash=sha256:4c1be83e0aca12d64f5eec638259c77eaa8bf552c89ac69f0af2322a3be9afeb \ - --hash=sha256:4d1ea987b9c2539457235793014e0d9c5e4766da9e4e028d4b6b596cfbe53828 \ - --hash=sha256:725df2030e5d1b1155bb696eca3d684f403164da8e6a6b0bee3eb02f8748f72b \ - --hash=sha256:7320539f45da463029e12f3742102085d2a0343bfe77ac550c11d2fdac1d34f5 \ - --hash=sha256:77b86002082f278c3f5935d8b428a0d0659ea709e305537294ba95fc49907339 \ - --hash=sha256:aa93d94775d01bf70d16840426d1ddd58c11a6a71c4d0d1d7e529ad541fa0a60 \ - --hash=sha256:c2abca03b6d3c71d7ec9678c7b2220d99d9a29ef204b4c52549080169e586310 \ - --hash=sha256:e6645107f200fb7bf6698512d04ea0790b292028861ce169eb97e5ad8eba14ed \ - --hash=sha256:f4784d9f8e9c50a36109d715a140150add1990fce16805a56217e8ccaf69d234 +pyspnego[kerberos]==0.8.0 \ + --hash=sha256:1f76a924866040cece4600e1973bfdb20656f9a3ceb2935ed6be1f932c990b19 \ + --hash=sha256:2df21796b15e73b99a4b4bbe91e4ecd3fdaa888b7255c4ab697ccb6615dbd6e3 \ + --hash=sha256:3e49fddd34c19d6bd1d534501769de5e2b0716ce9b6f26d50f2f0600158780c9 \ + --hash=sha256:55b9bc76efb2ef335640f1bfe6922651c31d21a4c989b0def889eaa2f4865711 \ + --hash=sha256:92501106898b4fa60f454dc9445b8006c133e177c859d49b3c7f260985449cad \ + --hash=sha256:9dbbd3aec5240aa8b75a5baa0b8a78d3b4ec16638c5fe299cd849b2390cfd2ec \ + --hash=sha256:c3cb9d9da79f1d38e8a268988c5af7520f25dc8f6c7bc97444260f8ce3d1efe9 \ + --hash=sha256:cf8bd2bd2cadc825e7fc7ff86a57eb158d898d30c0f7670940178c48ebe78e31 \ + --hash=sha256:e0499cc066c56762f8a315bb053243d34240cb85e384afc6b87b4fa0142543df \ + --hash=sha256:e15d7ecf70cb70f09ec80a7efd57086886380dcfbe0c31b1808f3349484f0b96 \ + --hash=sha256:e2faff077fe942ed7169bd6c84c9396f259f50069237d93de12a5bd5e11bb445 \ + --hash=sha256:ff546dc4a56c92aae253c04c8999baf4357919a523665c8daa65788567a52fe3 # via requests-kerberos python-dateutil==2.8.1 \ --hash=sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c \ --hash=sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a - # via - # alembic - # botocore -python-editor==1.0.4 \ - --hash=sha256:1bf6e860a8ad52a14c3ee1252d5dc25b2030618ed80c022598f00176adc8367d \ - --hash=sha256:51fda6bcc5ddbbb7063b2af7509e43bd84bfc32a4ff71349ec7847713882327b \ - --hash=sha256:5f98b069316ea1c2ed3f67e7f5df6c0d8f10b689964a4a811ff64f0106819ec8 - # via alembic + # via botocore python-memcached==1.59 \ --hash=sha256:4dac64916871bd3550263323fc2ce18e1e439080a2d5670c594cf3118d99b594 \ --hash=sha256:a2e28637be13ee0bf1a8b6843e7490f9456fd3f2a4cb60471733c7b5d5557e4f @@ -475,8 +530,48 @@ six==1.14.0 \ # click-repl # python-dateutil # python-memcached -sqlalchemy==1.3.13 \ - --hash=sha256:64a7b71846db6423807e96820993fa12a03b89127d278290ca25c0b11ed7b4fb +sqlalchemy==2.0.4 \ + --hash=sha256:011ef3c33f30bae5637c575f30647e0add98686642d237f0c3a1e3d9b35747fa \ + --hash=sha256:0adca8a3ca77234a142c5afed29322fb501921f13d1d5e9fa4253450d786c160 \ + --hash=sha256:1644c603558590f465b3fa16e4557d87d3962bc2c81fd7ea85b582ecf4676b31 \ + --hash=sha256:2267c004e78e291bba0dc766a9711c389649cf3e662cd46eec2bc2c238c637bd \ + --hash=sha256:25e4e54575f9d2af1eab82d3a470fca27062191c48ee57b6386fe09a3c0a6a33 \ + --hash=sha256:2a2f9120eb32190bdba31d1022181ef08f257aed4f984f3368aa4e838de72bc0 \ + --hash=sha256:2c82395e2925639e6d320592943608070678e7157bd1db2672a63be9c7889434 \ + --hash=sha256:3f927340b37fe65ec42e19af7ce15260a73e11c6b456febb59009bfdfec29a35 \ + --hash=sha256:54aa9f40d88728dd058e951eeb5ecc55241831ba4011e60c641738c1da0146b7 \ + --hash=sha256:57dcd9eed52413f7270b22797aa83c71b698db153d1541c1e83d45ecdf8e95e7 \ + --hash=sha256:582053571125895d008d4b8d9687d12d4bd209c076cdbab3504da307e2a0a2bd \ + --hash=sha256:59cf0cdb29baec4e074c7520d7226646a8a8f856b87d8300f3e4494901d55235 \ + --hash=sha256:6363697c938b9a13e07f1bc2cd433502a7aa07efd55b946b31d25b9449890621 \ + --hash=sha256:662a79e80f3e9fe33b7861c19fedf3d8389fab2413c04bba787e3f1139c22188 \ + --hash=sha256:67901b91bf5821482fcbe9da988cb16897809624ddf0fde339cd62365cc50032 \ + --hash=sha256:679b9bd10bb32b8d3befed4aad4356799b6ec1bdddc0f930a79e41ba5b084124 \ + --hash=sha256:738c80705e11c1268827dbe22c01162a9cdc98fc6f7901b429a1459db2593060 \ + --hash=sha256:77a380bf8721b416782c763e0ff66f80f3b05aee83db33ddfc0eac20bcb6791f \ + --hash=sha256:77d05773d5c79f2d3371d81697d54ee1b2c32085ad434ce9de4482e457ecb018 \ + --hash=sha256:817aab80f7e8fe581696dae7aaeb2ceb0b7ea70ad03c95483c9115970d2a9b00 \ + --hash=sha256:81f1ea264278fcbe113b9a5840f13a356cb0186e55b52168334124f1cd1bc495 \ + --hash=sha256:8a88b32ce5b69d18507ffc9f10401833934ebc353c7b30d1e056023c64f0a736 \ + --hash=sha256:8ff0a7c669ec7cdb899eae7e622211c2dd8725b82655db2b41740d39e3cda466 \ + --hash=sha256:918c2b553e3c78268b187f70983c9bc6f91e451a4f934827e9c919e03d258bd7 \ + --hash=sha256:954f1ad73b78ea5ba5a35c89c4a5dfd0f3a06c17926503de19510eb9b3857bde \ + --hash=sha256:95a18e1a6af2114dbd9ee4f168ad33070d6317e11bafa28d983cc7b585fe900b \ + --hash=sha256:9946ee503962859f1a9e1ad17dff0859269b0cb453686747fe87f00b0e030b34 \ + --hash=sha256:9a7ecaf90fe9ec8e45c86828f4f183564b33c9514e08667ca59e526fea63893a \ + --hash=sha256:a42e6831e82dfa6d16b45f0c98c69e7b0defc64d76213173456355034450c414 \ + --hash=sha256:b01dce097cf6f145da131a53d4cce7f42e0bfa9ae161dd171a423f7970d296d0 \ + --hash=sha256:b5deafb4901618b3f98e8df7099cd11edd0d1e6856912647e28968b803de0dae \ + --hash=sha256:b67d6e626caa571fb53accaac2fba003ef4f7317cb3481e9ab99dad6e89a70d6 \ + --hash=sha256:c1e8edc49b32483cd5d2d015f343e16be7dfab89f4aaf66b0fa6827ab356880d \ + --hash=sha256:c621f05859caed5c0aab032888a3d3bde2cae3988ca151113cbecf262adad976 \ + --hash=sha256:ce54965a94673a0ebda25e7c3a05bf1aa74fd78cc452a1a710b704bf73fb8402 \ + --hash=sha256:d8efdda920988bcade542f53a2890751ff680474d548f32df919a35a21404e3f \ + --hash=sha256:dc7b9f55c2f72c13b2328b8a870ff585c993ba1b5c155ece5c9d3216fa4b18f6 \ + --hash=sha256:dd801375f19a6e1f021dabd8b1714f2fdb91cbc835cd13b5dd0bd7e9860392d7 \ + --hash=sha256:f342057422d6bcfdd4996e34cd5c7f78f7e500112f64b113f334cdfc6a0c593d \ + --hash=sha256:f696828784ab2c07b127bfd2f2d513f47ec58924c29cff5b19806ac37acee31c \ + --hash=sha256:fdb2686eb01f670cdc6c43f092e333ff08c1cf0b646da5256c1237dc4ceef4ae # via # alembic # flask-sqlalchemy @@ -491,7 +586,9 @@ tenacity==8.1.0 \ typing-extensions==4.3.0 \ --hash=sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02 \ --hash=sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6 - # via iib (setup.py) + # via + # iib (setup.py) + # sqlalchemy urllib3==1.26.6 \ --hash=sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4 \ --hash=sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f @@ -509,10 +606,18 @@ wcwidth==0.2.5 \ --hash=sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784 \ --hash=sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83 # via prompt-toolkit -werkzeug==2.0.2 \ - --hash=sha256:63d3dc1cf60e7b7e35e97fa9861f7397283b75d765afcaefd993d6046899de8f \ - --hash=sha256:aa2bb6fc8dee8d6c504c0ac1e7f5f7dc5810a9903e793b6f715a9f015bdadb9a - # via flask +werkzeug==2.2.3 \ + --hash=sha256:2e1ccc9417d4da358b9de6f174e3ac094391ea1d4fbef2d667865d819dfd0afe \ + --hash=sha256:56433961bc1f12533306c624f3be5e744389ac61d722175d543e1751285da612 + # via + # flask + # flask-login +zipp==3.15.0 \ + --hash=sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b \ + --hash=sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556 + # via + # importlib-metadata + # importlib-resources # WARNING: The following packages were not pinned, but pip requires them to be # pinned when the requirements file includes hashes. Consider using the --allow-unsafe flag. diff --git a/setup.py b/setup.py index 2b3dd5d30..3be078609 100644 --- a/setup.py +++ b/setup.py @@ -16,6 +16,7 @@ 'flask-login', 'flask-migrate', 'flask-sqlalchemy', + 'importlib-resources', 'operator-manifest', 'psycopg2-binary', 'python-memcached ', diff --git a/tests/test_web/test_api_v1.py b/tests/test_web/test_api_v1.py index 5f2d5a9f0..fa6887746 100644 --- a/tests/test_web/test_api_v1.py +++ b/tests/test_web/test_api_v1.py @@ -16,8 +16,8 @@ def test_get_build(app, auth_env, client, db): with app.test_request_context(environ_base=auth_env): data = { 'binary_image': 'quay.io/namespace/binary_image:latest', - 'bundles': [f'quay.io/namespace/bundle:1.0-3'], - 'from_index': f'quay.io/namespace/repo:latest', + 'bundles': ['quay.io/namespace/bundle:1.0-3'], + 'from_index': 'quay.io/namespace/repo:latest', } request = RequestAdd.from_json(data) request.binary_image_resolved = Image.get_or_create( @@ -210,7 +210,7 @@ def test_get_builds_invalid_batch(batch, app, client, db): assert rv.json == {'error': 'The batch must be a positive integer'} -@mock.patch('sqlalchemy.engine.base.Engine.execute') +@mock.patch('sqlalchemy.engine.base.Engine.connect') def test_get_healthcheck_db_fail(mock_db_execute, app, client, db): mock_db_execute.side_effect = DisconnectionError('DB failed') rv = client.get('/api/v1/healthcheck')