Esempio n. 1
0
def action_data_out_by_random():
    content = request.get_json(silent=True)
    content = content if content is not None else {}

    form = DeviceDataOutByRandomForm.from_json(content)

    if form.validate():
        datasets = form.datasets.data
        dataset_list = []

        for _ in range(datasets):
            items = random_int_values(form.amount.data, form.min_value.data, form.max_value.data)

            dataset_list.append({
                'items': items
            })

        labels = random_datetime_range(
            datetime.now() - timedelta(seconds=form.amount.data - 1),
            datetime.now(),
            dt_format='%H:%M:%S'
        )

        return response.success(data={
            'labels': labels,
            'datasets': dataset_list
        })
    else:
        return response.from_form(form)
Esempio n. 2
0
def action_data_out_by_device():
    content = request.get_json(silent=True)
    content = content if content is not None else {}

    form = DeviceDataOutByDeviceForm.from_json(content)

    if form.validate():
        device = Device.query.get(form.device_id.data)

        if device:
            items = DeviceData.query.filter(
                DeviceData.device_id == form.device_id.data,
                DeviceData.type == form.type.data,
                DeviceData.created_at >= form.start_dt.data,
                DeviceData.created_at <= form.end_dt.data
            ).all()

            if items:
                labels = map(lambda item: item.created_at.strftime(form.format_dt.data), items)
                items = map(lambda item: item.value, items)

                return response.success(data={
                    'labels': labels,
                    'datasets': [{
                        'items': items
                    }]
                })
            else:
                return response.not_success('empty')
        else:
            return response.not_success('not-found')
    else:
        return response.from_form(form)
Esempio n. 3
0
def action_update(account):
    if not account.is_admin:
        return response.unauthorized()

    content = request.get_json(silent=True)
    content = content if content is not None else {}

    form = AccountUpdateForm.from_json(content)

    if form.validate():
        found_account = Account.query.get(form.id.data)

        if found_account:
            found_account.name = form.name.data
            found_account.token = form.token.data
            found_account.email = form.email.data
            found_account.photo_url = form.photo_url.data
            found_account.is_admin = form.is_admin.data
            found_account.updated_at = datetime.utcnow()

            if form.password.data:
                found_account.set_password(form.password.data)

            db.session.flush()
            db.session.commit()

            found_account = Account.query.get(found_account.id)

            return response.success(
                data={"account": found_account.to_dict("update")})
        else:
            return response.not_success("not-found")
    else:
        return response.from_form(form)
Esempio n. 4
0
def action_delete(account):
    if not account.is_admin:
        return response.unauthorized()

    content = request.get_json(silent=True)
    content = content if content is not None else {}

    form = AccountDeleteForm.from_json(content)

    if form.validate():
        if form.id.data > 1:
            found_account = Account.query.get(form.id.data)

            if found_account:
                db.session.delete(found_account)
                db.session.flush()
                db.session.commit()

                return response.success()
            else:
                return response.not_success("not-found")
        else:
            return response.with_validate_error(
                "id", ["Cannot delete this account."])
    else:
        return response.from_form(form)
Esempio n. 5
0
def action_create(account):
    if not account.is_admin:
        return response.unauthorized()

    content = request.get_json(silent=True)
    content = content if content is not None else {}

    form = AccountCreateForm.from_json(content)

    if form.validate():
        new_account = Account()

        new_account.name = form.name.data
        new_account.email = form.email.data
        new_account.photo_url = form.photo_url.data
        new_account.is_admin = form.is_admin.data
        new_account.created_at = datetime.utcnow()

        new_account.set_password(form.password.data)

        db.session.add(new_account)
        db.session.flush()
        db.session.commit()

        new_account = Account.query.get(new_account.id)

        return response.success(
            data={'account': new_account.to_dict('create')})
    else:
        return response.from_form(form)
Esempio n. 6
0
def action_update():
    content = request.get_json(silent=True)
    content = content if content is not None else {}

    form = DeviceUpdateForm.from_json(content)

    if form.validate():
        device = Device.query.get(form.id.data)

        if device:
            device.name = form.name.data
            device.updated_at = datetime.utcnow()

            db.session.flush()
            db.session.commit()

            device = Device.query.get(device.id)

            return response.success(data={
                'device': device.to_dict('update')
            })
        else:
            return response.not_success('not-found')
    else:
        return response.from_form(form)
Esempio n. 7
0
def action_data_out_by_device():
    content = request.get_json(silent=True)
    content = content if content is not None else {}

    form = DeviceDataOutByDeviceForm.from_json(content)

    if form.validate():
        device = Device.query.filter(
            Device.token == form.device_token.data).first()

        if device:
            if form.order.data == "asc":
                order_by = asc(DeviceData.created_at)
            else:
                order_by = desc(DeviceData.created_at)

            items = (DeviceData.query.filter(
                DeviceData.device_id == device.id,
                DeviceData.type == form.type.data,
                DeviceData.created_at >= form.start_dt.data,
                DeviceData.created_at <= form.end_dt.data,
            ).order_by(order_by).limit(form.amount.data).all())

            if items:
                if form.format_dt.data:
                    labels = map(
                        lambda item: item.created_at.strftime(form.format_dt.
                                                              data),
                        items,
                    )
                else:
                    labels = map(
                        lambda item: int(
                            calendar.timegm(item.created_at.timetuple()) * 1000
                        ),
                        items,
                    )

                items = map(lambda item: item.value, items)

                return response.success(data={
                    "labels": labels,
                    "datasets": [{
                        "items": items
                    }]
                })
            else:
                return response.not_success("empty")
        else:
            return response.not_success("not-found")
    else:
        return response.from_form(form)
Esempio n. 8
0
def action_token():
    content = request.get_json(silent=True)
    content = content if content is not None else {}

    form = DeviceGetForm.from_json(content)

    if form.validate():
        device = Device.query.get(form.id.data)

        if device:
            return response.success(data={"token": device.get_jwt_encoded()})
        else:
            return response.not_success("not-found")
    else:
        return response.from_form(form)
Esempio n. 9
0
def action_get():
    content = request.get_json(silent=True)
    content = content if content is not None else {}

    form = DeviceGetForm.from_json(content)

    if form.validate():
        device = Device.query.get(form.id.data)

        if device:
            return response.success(data={
                'device': device.to_dict('get')
            })
        else:
            return response.not_success('not-found')
    else:
        return response.from_form(form)
Esempio n. 10
0
def action_delete():
    content = request.get_json(silent=True)
    content = content if content is not None else {}

    form = DeviceDeleteForm.from_json(content)

    if form.validate():
        device = Device.query.get(form.id.data)

        if device:
            db.session.delete(device)
            db.session.flush()
            db.session.commit()

            return response.success()
        else:
            return response.not_success("not-found")
    else:
        return response.from_form(form)
Esempio n. 11
0
def action_token(account):
    if not account.is_admin:
        return response.unauthorized()

    content = request.get_json(silent=True)
    content = content if content is not None else {}

    form = AccountGetForm.from_json(content)

    if form.validate():
        found_account = Account.query.get(form.id.data)

        if found_account:
            return response.success(
                data={"token": found_account.get_jwt_encoded()})
        else:
            return response.not_success("not-found")
    else:
        return response.from_form(form)
Esempio n. 12
0
def action_get(account):
    if not account.is_admin:
        return response.unauthorized()

    content = request.get_json(silent=True)
    content = content if content is not None else {}

    form = AccountGetForm.from_json(content)

    if form.validate():
        found_account = Account.query.get(form.id.data)

        if found_account:
            return response.success(
                data={'account': found_account.to_dict('get')})
        else:
            return response.not_success('not-found')
    else:
        return response.from_form(form)
Esempio n. 13
0
def action_update(account):
    content = request.get_json(silent=True)
    content = content if content is not None else {}

    form = AuthUpdateForm.from_json(content)

    if form.validate():
        account.name = form.name.data
        account.email = form.email.data
        account.photo_url = form.photo_url.data
        account.updated_at = datetime.utcnow()

        db.session.flush()
        db.session.commit()

        account = Account.query.get(account.id)

        return response.success(data={"account": account.to_dict("update")})
    else:
        return response.from_form(form)
Esempio n. 14
0
def action_update_password(account):
    content = request.get_json(silent=True)
    content = content if content is not None else {}

    form = AuthUpdatePasswordForm.from_json(content)

    if form.validate():
        if account.check_password(form.old_password.data):
            account.set_password(form.password.data)
            account.updated_at = datetime.utcnow()

            db.session.flush()
            db.session.commit()

            return response.success()
        else:
            return response.with_validate_error('password',
                                                ['The old password is wrong'])
    else:
        return response.from_form(form)
Esempio n. 15
0
def action_create():
    content = request.get_json(silent=True)
    content = content if content is not None else {}

    form = DeviceCreateForm.from_json(content)

    if form.validate():
        new_device = Device()

        new_device.name = form.name.data
        new_device.token = form.token.data
        new_device.created_at = datetime.utcnow()

        db.session.add(new_device)
        db.session.flush()
        db.session.commit()

        new_device = Device.query.get(new_device.id)

        return response.success(data={"device": new_device.to_dict("create")})
    else:
        return response.from_form(form)
Esempio n. 16
0
def action_data_in(device):
    content = request.get_json(silent=True)
    content = content if content is not None else {}

    form = DeviceDataCreateForm.from_json(content)
    form.device_id.data = device.id

    if form.validate():
        new_device_data = DeviceData()

        new_device_data.device_id = form.device_id.data
        new_device_data.type = form.type.data
        new_device_data.value = form.value.data
        new_device_data.created_at = datetime.utcnow()

        db.session.add(new_device_data)
        db.session.flush()
        db.session.commit()

        return response.success()
    else:
        return response.from_form(form)