def copy_collection_from(
    user: InternalUserDTO, src_collection_uuid: UUID, dst_collection_uuid: UUID,
) -> CollectionDTO:
    try:
        src_collection = Collection.find_readable_or_fail(user, src_collection_uuid)
    except ModelNotFoundError:
        raise PermissionError()

    copy_items_by_collection_uuid(src_collection_uuid, dst_collection_uuid)
    src_collection.session.commit()
    collection = Collection.find_readable_or_fail(user, dst_collection_uuid)
    return to_model(collection, CollectionDTO)
def copy_collection_to_new(
    user: InternalUserDTO, src_collection_uuid: UUID, dst_collection_dto: CollectionDTO,
) -> CollectionDTO:
    try:
        src_collection = Collection.find_readable_or_fail(user, src_collection_uuid)
    except ModelNotFoundError:
        raise PermissionError()

    dst_collection_dto.provider_uuid = user.provider_uuid
    dst_collection = Collection.create(**dst_collection_dto.to_dict())
    copy_items_by_collection_uuid(src_collection_uuid, dst_collection.uuid)
    src_collection.session.commit()
    return to_model(dst_collection, CollectionDTO)
def get_collection_by_uuid(
    user: InternalUserDTO, collection_uuid: UUID
) -> CollectionDTO:
    collection = Collection.find_readable_or_fail(user, collection_uuid)
    return to_model(collection, CollectionDTO)