Exemplo n.º 1
0
#    ログ取得APIを定義します。
###############################################################################
import sys
sys.path.insert(0, ".")
import datetime
from datetime import datetime as dt
from sqlalchemy import func, asc, desc
from sqlalchemy.orm.exc import NoResultFound

# Flask サブモジュールとして必要なパッケージの取り込みと設定を行う
from flask import Blueprint, request, jsonify, Response
from flask_cors import CORS
import app.common as Common
sub_function = Blueprint("logs", __name__, url_prefix="/logs")
CORS(sub_function)
logger = Common.get_logger("logs")


@sub_function.route("/", methods=["GET"])
def log():
    """指定期間、および日当たりそれぞれの時間帯におけるすべてのトイレの使用回数を表す Chart.js グラフ用データを返します。
    このAPIでは、ドアが閉じられた回数をもとに集計します。

    Arguments:
        begin_date {str} -- 期間開始日 (%Y%m%d)
        end_date {str} -- 期間終了日 (%Y%m%d)
        begin_hours_per_day {int} -- 日当たりの集計始端時間 (0-23)
        end_hours_per_day {int} -- 日当たりの集計終端時間 (0-23)
        step_hours {int} -- 期間内におけるサンプリング間隔 (1-24)、始端時間から終端時間の差をこの値で割り切れない場合は割り切れる時間まで延長します。

    Returns:
Exemplo n.º 2
0
import logging

from django.http import JsonResponse
from rest_framework import status

from app.common import get_logger
from app.rest import error_format


log = get_logger(__name__)


class ExceptionsHandlingMiddleware:

    def __init__(self, get_response):

        self.get_response = get_response

    def __call__(self, request):

        response = self.get_response(request)

        # rest_framework добавляет `data` к response,
        # поэтому этот код будет работать только тогда,
        # когда исключение возникло при маршрутизации
        if not hasattr(response, 'data') and \
                response.status_code == status.HTTP_404_NOT_FOUND:
            return JsonResponse(
                error_format(404, 'Endpoint not found =('),
                status=status.HTTP_404_NOT_FOUND)
Exemplo n.º 3
0
import json

from django.conf import settings
from django.contrib.auth.models import User
from django.db import models
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _
from rest_framework.exceptions import NotFound

from app.common import get_logger
from app.records import classification
from app.records import entity_extraction
from app.records.misc import import_module_attr
from app.records.signals import ready_to_process

log = get_logger(__file__)


class Source(models.Model):

    name = models.CharField(max_length=100)
    owner = models.ForeignKey(User, on_delete=models.CASCADE)

    @classmethod
    def get_or_create_default(cls, user):

        source, _created = cls.objects.get_or_create(
            owner=user, name=settings.DEFAULT_SOURCE_NAME)

        return source
Exemplo n.º 4
0
###############################################################################
#    取得系の処理を実行するAPIを定義します。
###############################################################################
import sys
sys.path.insert(0, ".")
import datetime
from datetime import datetime as dt
from sqlalchemy import func, asc, desc
from sqlalchemy.orm.exc import NoResultFound

# Flask サブモジュールとして必要なパッケージの取り込みと設定を行う
from flask import Blueprint, request, jsonify, Response
from flask_cors import CORS
import app.common as Common
from app.main import app
logger = Common.get_logger("root")


@app.route("/", methods=["GET"])
def status():
    """現在のトイレ在室状況を返します。
    なお、システム停止モードに移行している間はすべて success=False として返します。

    Returns:
        Response -- application/json = {
          success: True or False,
          message: "エラーメッセージ",    // エラー発生時のみ。正常完了時は空文字
          status: [
            {
              name: "4F 男性用トイレ"    // トイレグループの名称
              valid: True or False,    // このトイレグループの状況を取得できたかどうか
Exemplo n.º 5
0
###############################################################################
import sys
sys.path.insert(0, ".")
from datetime import datetime as dt
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.orm.exc import NoResultFound
from sqlalchemy.pool import SingletonThreadPool

# Flask サブモジュールとして必要なパッケージの取り込みと設定を行う
from flask import Blueprint, request, jsonify, Response
from flask_cors import CORS
import app.common as Common
sub_function = Blueprint("emergency", __name__, url_prefix="/emergency")
CORS(sub_function)
logger = Common.get_logger("emergency")


@sub_function.route("/", methods=["PATCH"])
def emergency() -> Response:
    """システムモードの 停止 or 再開 状態を反転させます。

    Returns:
        Response -- application/json = {
            valid: 0 or 1,            // 反転後のステート番号
            action: "停止" or "再開",  // 反転後のステート名
        }
    """
    from model.app_state import AppState
    logger.info(f"[emergency] API Called.")
Exemplo n.º 6
0
###############################################################################
import sys
sys.path.insert(0, ".")
from datetime import datetime as dt
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.orm.exc import NoResultFound
from sqlalchemy.pool import SingletonThreadPool

# Flask サブモジュールとして必要なパッケージの取り込みと設定を行う
from flask import Blueprint, request, jsonify, Response
from flask_cors import CORS
import app.common as Common
sub_function = Blueprint("door", __name__, url_prefix="/door")
CORS(sub_function)
logger = Common.get_logger("door")

### 定数定義
# open/close を許可する最短呼出間隔 (秒)
MIN_DOOR_EVENT_SPAN_SECONDS = 3


@sub_function.route("/open", methods=["PUT"])
def open() -> Response:
    """トイレのドアが開いたことを記録します。

    Arguments:
        toilet_id {int} -- ターゲットトイレID

    Returns:
        Response -- application/json = {