예제 #1
0
    def _receive_packet(self):
        while True:
            robots_list = db.table('robots').all()
            for id in range(6):
                updated_robot = {
                    "info": {
                        "id": id,
                        "name": "Robot {}".format(id)
                    },
                    "supply": {
                        "batt": random.random() * 100,
                        "voltage": random.random() * 16,
                        "current": random.random() * 5,
                        "power": random.random()
                    },
                    "com": {
                        "time_since_last_packet": 2
                    }
                }

                if any(robot['info']['name'] == updated_robot['info']['name']
                       for robot in robots_list):
                    sio.emit('robots_update', updated_robot)
                    with transaction(db.table('robots')) as robots:
                        robots.update(
                            updated_robot,
                            where('info').name == updated_robot['info']
                            ['name'])
                else:
                    sio.emit('robots_insert', updated_robot)
                    with transaction(db.table('robots')) as robots:
                        robots.insert(updated_robot)

                time.sleep(1)
예제 #2
0
def upgrade_tags_v2():
    # read old table , convert data and insert into new table
    for t in db.table('pre_upgrade_tags_v2').select(
            db.raw(
                'id, hwid, description, (NOT is_disabled) as is_enabled, created_at, updated_at'
            )).get():
        print("insert:", t)
        db.table('tags').insert(t)

    # destroy old table
    db.table('tags').delete()
예제 #3
0
def add_execute_logs(socket, uuid, app_uuid, app_name, result):
    log_info = {
        "uuid": uuid,
        "app_uuid": app_uuid,
        "app_name": app_name,
        "result": result,
        "create_time": Time.get_date_time(),
    }

    db.table("zbn_logs").insert(log_info)

    data = {"method": "execute_log", "data": log_info}

    if socket is None:
        pass
    else:
        socket.send(json.dumps(data))
예제 #4
0
def generate(repo_name, from_date=None, to_date=None):
    stats = prst.PrSt(config.token, repo_name, from_date, to_date)

    table = db.table("report")

    stats.result["name"] = repo_name
    stats.result["id"] = table._last_id + 1

    table.insert(stats.result)
예제 #5
0
 def insert_gateway_record(self, msg):
     db = TinyDB('device_data/Gateway/gateway_records.json')
     table = db.table('gateway_records')
     values = {}
     value = 0
     for key in msg["keys"]:
         values[key] = msg["values"][value]
         value += 1
     values["time"] = msg["time"]
     table.insert(values)
예제 #6
0
    def getList(self, args, qraw=None):
        if hasattr(self, '__view__'):
            me = db.table(self.__view__)
        elif hasattr(self, 'use_raw_view'):
            if self.use_raw_view:
                me = self.vw()
            else:
                me = self
        else:
            me = self
        
        #Page Number
        if 'p' in args:
            args['p']=int(args['p'])
        else:
            args['p']=1

        # Record Per Page
        if 'rp' in args:
            args['rp']=int(args['rp'])
        else:
            args['rp']=25

        # Search Raw
        if qraw is not None:
            me = me.where_raw(qraw)

        # Filter
        if 'f' in args:
            if len(args['f']):
                for k, v in args['f'].items():
                    me = me.where(k, v)
        # Order
        if 'o' in args:
            if args['o'] is not None and len(args['o']):
                for k, v in args['o'].items():
                    if (v.lower() == 'asc' or v.lower() == 'desc'):
                        me = me.order_by(k, v)
        result = {
            'args':args
        }   
        result['data'] = me.simple_paginate(args['rp'], args['p']).serialize()

        result['next']=args['p']+1
        if len(result['data'])<args['rp']:
            result['next']=args['p']

        result['prev']=args['p']-1
        if args['p']==1:
            result['prev']=1

        return result
예제 #7
0
    def get(self, resource_id):
        table = db.table("report")
        if resource_id == "all":
            reports = table.all()
            for curr in reports:
                curr.pop("users", None)
                curr["name"] = curr["name"].split("/")[1]
            return sorted(reports,
                          key=lambda x: x["timespan"]["captured_at"],
                          reverse=True)

        q = Query()
        return table.search(q.id == int(resource_id))[0]
예제 #8
0
    def getApiList(self,
                   recPerPage=25,
                   search=None,
                   filter={},
                   page=1,
                   order={}):
        if hasattr(self, '__view__'):
            me = db.table(self.__view__)
            table = self.__view__
        else:
            me = self
            table = me.__table__

        # Filter
        if len(filter):
            for k, v in filter.items():
                me = me.where(k, v)

        # Search
        if search is not None and search != '':
            me = me.where_raw(search)

        # Order
        if order is not None and len(order):
            for k, v in order.items():
                if schema.has_column(table, k) and (v.lower() == 'asc'
                                                    or v.lower() == 'desc'):
                    me = me.order_by(k, v)

        paged = me.paginate(recPerPage, page)
        result = {
            "total": paged.total,
            "per_page": paged.per_page,
            "current_page": paged.current_page,
            "last_page": paged.last_page,
            "prev_page": paged.previous_page,
            "next_page": paged.next_page,
            "data": paged.serialize()
        }
        return result
예제 #9
0
    def getWebList(self, search, args):
        if hasattr(self, '__view__'):
            me = db.table(self.__view__)
            table = self.__view__
        else:
            me = self
            table = me.__table__

        recPerPage = 10
        page = 1

        if 'p' in args:
            page = int(args['p'])
        else:
            args['p'] = page

        if 'rp' in args:
            recPerPage = int(args['rp'])
        else:
            args['rp'] = recPerPage

        if search is not None and search != '':
            me = me.where_raw(search)

        result = {'args': args}

        #use simple_paginate to just use next and prev paging
        result['data'] = me.simple_paginate(recPerPage, page)

        result['next'] = page + 1
        if len(result['data']) < recPerPage:
            result['next'] = page

        result['prev'] = page - 1
        if page == 1:
            result['prev'] = 1

        return result
예제 #10
0
 def get_gateway_records():
     db = TinyDB('device_data/Gateway/gateway_records.json')
     table = db.table('gateway_records')
     data = table.all()
     return data
예제 #11
0
 def _getTable(self):
     return db.table(self._getTableName())
예제 #12
0
def run_exec(socket, uuid):
    workflow_info = (
        db.table("zbn_workflow")
        .select("uuid", "name", "start_app", "end_app", "flow_json", "flow_data")
        .where("uuid", uuid)
        .first()
    )

    if workflow_info:
        start_app = workflow_info["start_app"]
        end_app = workflow_info["end_app"]

        flow_json = json.loads(workflow_info["flow_json"])
        flow_data = json.loads(workflow_info["flow_data"])

        # for r in flow_json["edges"]:
        #     print(r["label"], r["source"], r["target"])

        global_data = {}

        target_app = find_start_app(edges=flow_json["edges"], start_app=start_app)

        add_execute_logs(
            socket=socket, uuid=uuid, app_uuid=start_app, app_name="开始", result="剧本开始执行"
        )

        is_while = True

        while is_while:
            try:
                # 拿到当前APP数据
                if_else, source_app, next_app = find_next_app(
                    edges=flow_json["edges"], next_app=target_app
                )
            except Exception:
                add_execute_logs(
                    socket=socket,
                    uuid=uuid,
                    app_uuid="",
                    app_name="",
                    result="当前剧本不具有可执行条件",
                )
                is_while = False
                break

            key = target_app + "_sum"
            if redis.exists(key) == 1:
                sum = redis.get(key)
                redis.set(key, int(sum) + 1, ex=3)
            else:
                redis.set(key, 1, ex=3)

            # 当前APP执行数据
            source_info = flow_data[source_app]
            # print(source_app)
            s, ifelse_result = get_app_data(
                socket=socket,
                uuid=uuid,
                app_uuid=source_app,
                app_info=source_info,
                global_data=global_data,
            )

            if not s:
                add_execute_logs(
                    socket=socket,
                    uuid=uuid,
                    app_uuid=end_app,
                    app_name=flow_data.get(source_app).get("name"),
                    result="执行错误:{}".format(ifelse_result),
                )
                add_execute_logs(
                    socket=socket,
                    uuid=uuid,
                    app_uuid=end_app,
                    app_name="结束",
                    result="剧本执行结束",
                )
                is_while = False

            if if_else != "":
                if if_else == ifelse_result:
                    target_app = next_app
            else:
                target_app = next_app

            if next_app == end_app:
                add_execute_logs(
                    socket=socket,
                    uuid=uuid,
                    app_uuid=end_app,
                    app_name="结束",
                    result="剧本执行结束",
                )
                is_while = False
예제 #13
0
    db.Column("work_article_id",
              db.Integer,
              db.ForeignKey("tb_work_article.id"),
              primary_key=True),
    db.Column("thinking_article_id",
              db.Integer,
              db.ForeignKey("tb_thinking_article.id"),
              primary_key=True),
    db.Column("create_time", db.DateTime, default=datetime.now))

user_follow = db.table(
    "tb_user_follow",
    db.Column("follower_id",
              db.Integer,
              db.ForeignKey("tb_user.id"),
              primary_key=True),
    db.Column("followed_id",
              db.Integer,
              db.ForeignKey("tb_user.id"),
              primary_key=True),
)


class User(BaseModel, db.Model):
    """定义用户类"""
    __tablename__ = 'tb_user'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    user_name = db.Column(db.String(32), nullable=False, unique=True)
    password_hash = db.Column(db.String(128))
    signature = db.Column(db.String(512), nullable=True)
    avatar_url = db.Column(db.String(256))
예제 #14
0
def send_robots_list():
    robots_list = db.table('robots').all()
    return jsonify(robots_list)
예제 #15
0
 def delete(self, resource_id):
     table = db.table("report")
     return 200 if len(table.remove(
         where("id") == int(resource_id))) != 0 else 500