Ejemplo n.º 1
0
def update_provider(provider_uuid: UUID,
                    provider_update: ProviderDTO) -> ProviderDTO:
    provider = Provider.find_or_fail(provider_uuid)
    provider.name = provider_update.name
    provider.save()
    provider.session.commit()
    return to_model(provider, ProviderDTO)
Ejemplo n.º 2
0
def create_collection_item(user: InternalUserDTO, collection_uuid: UUID,
                           item_dto: ItemDTO) -> ItemDTO:
    coll = Collection.find_writeable_or_fail(user, collection_uuid)
    item_dto.collection_uuid = coll.uuid  # type: ignore
    item = Item(**item_dto.to_dict())
    item.save()
    item.session.commit()
    return to_model(item, ItemDTO)
Ejemplo n.º 3
0
def update_series_by_uuid(user: InternalUserDTO, series_uuid: UUID,
                          series_update: SeriesDTO) -> SeriesDTO:
    series = Series.find_or_fail(series_uuid)
    Item.find_writeable_or_fail(user, series.item_uuid)
    series.data = series_update.data
    series.save()
    series.session.commit()
    return to_model(series, SeriesDTO)
Ejemplo n.º 4
0
def create_item_series(user: InternalUserDTO, item_uuid: UUID,
                       series_dto: SeriesDTO) -> SeriesDTO:
    item = Item.find_writeable_or_fail(user, item_uuid)
    series_dto.item_uuid = item.uuid  # type: ignore
    series = Series(**series_dto.to_dict())
    series.save()
    series.session.commit()
    return to_model(series, SeriesDTO)
Ejemplo n.º 5
0
def create_collection(
    user: InternalUserDTO, collection: CollectionDTO
) -> CollectionDTO:
    collection.provider_uuid = user.provider_uuid
    collection = Collection(**collection.to_dict())
    collection.save()
    collection.session.commit()
    return to_model(collection, CollectionDTO)
Ejemplo n.º 6
0
def create_series_metric(user: InternalUserDTO, series_uuid: UUID,
                         metric_dto: MetricDTO) -> MetricDTO:
    series = Series.find_or_fail(series_uuid)
    Item.find_writeable_or_fail(user, series.item_uuid)
    metric_dto.series_uuid = series.uuid  # type: ignore
    metric = Metric(**metric_dto.to_dict())
    metric.save()
    metric.session.commit()
    return to_model(metric, MetricDTO)
Ejemplo n.º 7
0
def update_metric(user: InternalUserDTO, series_uuid: UUID, ts: datetime,
                  metric_update: MetricDTO) -> MetricDTO:
    series = Series.find_or_fail(series_uuid)
    Item.find_writeable_or_fail(user, series.item_uuid)
    metric = Metric.find_or_fail((series_uuid, ts))
    metric.data = metric_update.data
    metric.save()
    metric.session.commit()
    return to_model(metric, MetricDTO)
Ejemplo n.º 8
0
def update_user(provider_uuid: UUID, user_uuid: UUID,
                user_update: UserDTO) -> UserDTO:
    user: User = User.first_or_fail(provider_uuid=provider_uuid,
                                    uuid=user_uuid)
    user.password = bcrypt.hashpw(user_update.password.encode("utf-8"),
                                  bcrypt.gensalt()).decode("utf-8")
    user.save()
    user.session.commit()
    return to_model(user, UserDTO)
Ejemplo n.º 9
0
def update_collection_by_uuid(
    user: InternalUserDTO, collection_uuid: UUID, collection_update: CollectionDTO
) -> CollectionDTO:
    collection = Collection.find_writeable_or_fail(user, collection_uuid)
    collection.name = collection_update.name
    collection.is_public = collection_update.is_public
    collection.save()
    collection.session.commit()
    return to_model(collection, CollectionDTO)
Ejemplo n.º 10
0
def update_collection_item(user: InternalUserDTO, collection_uuid: UUID,
                           item_uuid: UUID, item_update: ItemDTO) -> ItemDTO:
    item = Item.find_writeable_or_fail(user, item_uuid, collection_uuid)

    item.properties = item_update.properties
    item.geometry = item_update.geometry

    item.save()
    item.session.commit()
    return to_model(item, ItemDTO)
Ejemplo n.º 11
0
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)
Ejemplo n.º 12
0
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)
Ejemplo n.º 13
0
def create_user(user: UserDTO) -> UserDTO:
    user.password = bcrypt.hashpw(user.password.encode("utf-8"),
                                  bcrypt.gensalt()).decode("utf-8")
    User.session.begin_nested()
    try:
        provider = create_provider(ProviderDTO(name=user.email))
        user.provider_uuid = provider.uuid
        new_user = User.create(**user.to_dict())
    except IntegrityError as ie:
        User.session.rollback()

        orig = str(ie.__dict__["orig"])

        if "already exists" in orig and user.email in orig:
            raise UserAlreadyExistsError

        raise ValueError
    new_user.session.commit()
    return to_model(new_user, UserDTO)
Ejemplo n.º 14
0
def create_acl(user: InternalUserDTO, acl: ACLDTO) -> ACLDTO:
    if acl.collection_uuid:
        collection = Collection.find_writeable_or_fail(user,
                                                       acl.collection_uuid)
        if collection.provider_uuid != user.provider_uuid:
            raise PermissionError

    if acl.item_uuid:
        item = Item.find_writeable_or_fail(user, acl.item_uuid)
        if item.collection.provider_uuid != user.provider_uuid:
            raise PermissionError

    if acl.granted_provider_uuid:
        Provider.find_or_fail(acl.granted_provider_uuid)

    if acl.granted_user_uuid:
        User.find_or_fail(acl.granted_user_uuid)

    acl.provider_uuid = user.provider_uuid
    acl = ACL(**acl.to_dict())
    acl.save()
    acl.session.commit()
    return to_model(acl, ACLDTO)
Ejemplo n.º 15
0
def get_metric(user: InternalUserDTO, series_uuid: UUID,
               ts: datetime) -> MetricDTO:
    series = Series.find_or_fail(series_uuid)
    Item.find_readable_or_fail(user, series.item_uuid)
    metrics_dto = Metric.find_or_fail((series_uuid, ts))
    return to_model(Metric(**metrics_dto.to_dict()), MetricDTO)
Ejemplo n.º 16
0
def create_provider(provider: ProviderDTO) -> ProviderDTO:
    provider = Provider(**provider.to_dict())
    provider.save()
    provider.session.commit()
    return to_model(provider, ProviderDTO)
Ejemplo n.º 17
0
def get_series(user: InternalUserDTO, series_uuid: UUID) -> SeriesDTO:
    series_dto = Series.find_or_fail(series_uuid)
    Item.find_readable_or_fail(user, series_dto.item_uuid)
    return to_model(series_dto, SeriesDTO)
Ejemplo n.º 18
0
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)
Ejemplo n.º 19
0
def get_user(user_uuid: UUID) -> UserDTO:
    return to_model(User.find_or_fail(user_uuid), UserDTO)
Ejemplo n.º 20
0
def get_provider(provider_uuid: UUID) -> ProviderDTO:
    provider = Provider.find_or_fail(provider_uuid)
    return to_model(provider, ProviderDTO)
Ejemplo n.º 21
0
def get_user_by_email(email: str) -> UserDTO:
    return to_model(User.first_or_fail(email=email), UserDTO)
Ejemplo n.º 22
0
def get_item(user: InternalUserDTO, item_uuid: UUID) -> ItemDTO:
    item = Item.find_readable_or_fail(user, item_uuid)
    return to_model(item, ItemDTO)
Ejemplo n.º 23
0
def authenticate(email: str, password: str) -> Optional[UserDTO]:
    user: User = User.first(email=email)
    if not user or not verify_password(password, user.password):
        raise UnauthorizedError
    return to_model(user, UserDTO)
Ejemplo n.º 24
0
def get_acl_by_uuid(user: InternalUserDTO, acl_uuid: UUID) -> ACLDTO:
    acl = ACL.find_accessable_or_fail(user, acl_uuid)
    return to_model(acl, ACLDTO)