def getPeriod(self): period = request.args.get('period', default = -1, type = int) groupId = request.args.get('groupId', default = -1, type = int) # from_time = request.args.get('from_time', default = -1, type = int) # to_time = request.args.get('to_time', default = -1, type = int) # from_time = int(from_time/1000) to_time = int(to_time/1000) # check group id is valid # get chat with limit # return time s = self.datamodel.session _datamodel = SQLAInterface(Contact) _datamodel.session = s filters = _datamodel.get_filters() filters.add_filter('user_id', FilterEqual, current_user.id) filters.add_filter('contact_group_id', FilterEqual, groupId) filters.add_filter('updated', FilterGreater, datetime.datetime.fromtimestamp(from_time)) filters.add_filter('updated', FilterSmaller, datetime.datetime.fromtimestamp(to_time)) count, item = _datamodel.query(filters=filters, order_column="updated", order_direction="desc", page_size=period) if count == 0: return self.response_400(message="no group found") data = { 'from_time': item[len(item)-1].updated.timestamp(), 'to_time': item[0].updated.timestamp() } return self.response(200, data=data)
def refresh_client(self): # https://stackoverflow.com/questions/15974730/how-do-i-get-the-different-parts-of-a-flask-requests-url to = request.args.get('to', default=request.url_root, type=str) id = request.args.get('id', default=-1, type=int) s = self.datamodel.session _datamodel = SQLAInterface(Project) _datamodel.session = s filters = _datamodel.get_filters() filters.add_filter('user_id', FilterEqual, current_user.id) count, item = _datamodel.query(filters=filters, page_size=1) is_found = False p = {} item = item[0] for i in item.projectfiles: if i.id == id: is_found = True p = i break if is_found and p.status is 0: global g g['is_logout'][p.name] = 0 socketio.emit('message', { 'action': 'refresh', 'p': '' }, namespace='/canary', room=p.name) return redirect(to)
def heartbeat(self, name=-1): me_id = request.args.get( 'me_id', default='-1', type=str) # me_id means be monitored's line id #LineFuncuntionView._heartbeat(name) resp = {'is_find': 0, 'is_alive': 0} _datamodel = SQLAInterface(ProjectFiles, db.session) filters = _datamodel.get_filters() filters.add_filter('name', FilterEqual, name) count, item = _datamodel.query(filters=filters, order_column='id', order_direction='desc', page_size=-1) if count: item = item[0] resp['is_alive'] = item.status resp['is_find'] = 1 s = "" i = "" if me_id in g['status'] and name in g['status'][me_id]: if 'status' in g['status'][me_id][name]: s = g['status'][me_id][name]['status'] elif 'info' in g['status'][me_id][name]: i = g['status'][me_id][name]['info'] resp['status'] = s resp['info'] = i if i == "": resp['info'] = _('logouting') return self.response(200, resp=resp)
def list(self): name = request.args.get('name', default = '-1', type = str) me_id = request.args.get('me_id', default = '-1', type = str) # me_id means be monitored's line id s = self.datamodel.session _datamodel = SQLAInterface(ProjectFiles) _datamodel.session = s filters = _datamodel.get_filters() filters.add_filter('name', FilterEqual, name) count, item = _datamodel.query(filters=filters, page_size=0) base_order = self.base_order page_size = self.page_size order_columns = self.order_columns; formatters_columns = self.formatters_columns if count is 0 or ProjectFiles.is_not_active(item[0]): name = -1 if current_user.id != 1: filter_user_id = self._base_filters.get_filter_value('user_id') if filter_user_id is None or filter_user_id != current_user.id: pass self._base_filters.clear_filters() self._base_filters.add_filter('user_id', FilterEqual, current_user.id) self._base_filters.add_filter('projectfiles_name', FilterEqual, name) self._base_filters.add_filter('me_id', FilterEqual, me_id) self.list_columns = ['name', 'updated'] self.page_size = -1 self.base_order = ('updated','desc') self.order_columns = ['updated'] else: self._base_filters.clear_filters() self.list_columns = ['name', 'me_id', 'projectfiles_name', 'user_id', 'updated'] if self.__class__.__name__ is 'ContactGroupModelChatView': self.formatters_columns = {'updated': lambda x: x.strftime('%p %I:%M').lstrip("0").replace(" 0", "") if x is not None else ""} #self.formatters_columns = {'updated': lambda x: dateutil.parser.parse(x).strftime('%p %I:%M').lstrip("0").replace(" 0", "") } self.list_columns = ['name', 'id', 'line_id', 'updated', 'icon_base64'] widgets = self._list() if self.__class__.__name__ is 'ContactGroupModelChatView': widgets['list'].template = "chat_group.html" self.page_size = page_size self.base_order = base_order self.formatters_columns = formatters_columns self.order_columns = order_columns; return self.render_template( self.list_template, title=self.list_title, widgets=widgets)
def get_line_id_by_current_user(s): _datamodel = SQLAInterface(Project) _datamodel.session = s filters = _datamodel.get_filters() filters.add_filter('user_id', FilterEqual, current_user.id) count, item = _datamodel.query(filters=filters, page_size=1) project = item[0] line_id = project.name return line_id
def update_user(self): ## post with json #{ # "rid": xx, # "action": "update_user", # "user": # { # "name": XX, # "icon_base64": # "me": xx if not request.is_json: return self.response_400(message="Request payload is not JSON") user = request.json.get('user', None) rid = request.json.get('rid', None) if not user or not rid: return self.response_400(message="Missing required parameter") s = self.datamodel.session _datamodel = SQLAInterface(ProjectFiles) _datamodel.session = s filters = _datamodel.get_filters() filters.add_filter('name', FilterEqual, str(rid)) count, item = _datamodel.query(filters=filters, page_size=1) if count is 0: return self.response_400(message=("Missing required parameter, rid %s" % rid)) item = item[0] item.user_name = user['name'] item.icon_base64 = user['icon_base64'] item.me_id = user['me_id'] _datamodel.add(item) message = "warning" try: s.commit() message = "success" except IntegrityError as e: message = "warning" log.warning(LOGMSG_WAR_DBI_ADD_INTEGRITY.format(str(e))) s.rollback() if raise_exception: raise e except Exception as e: message = str(sys.exc_info()[0]) + "danger" log.exception(LOGMSG_ERR_DBI_ADD_GENERIC.format(str(e))) s.rollback() if raise_exception: raise e return self.response(200, message=message)
def list(self, pk=-1): #self._base_filters = Project.is_used.is_(False) s = self.datamodel.session _datamodel = SQLAInterface(Project) _datamodel.session = s filters = _datamodel.get_filters() filters.add_filter('user_id', FilterEqual, current_user.id) #filters.add_filter('limit_qrcode', FilterGreater, 'current') count, item = _datamodel.query(filters=filters, page_size=1) if count: first_unused = item[0] pk = first_unused.id else: filters = _datamodel.get_filters() filters.add_filter('user_id', FilterEqual, None) item = _datamodel.query(filters=filters, page_size=1) #log.info(item[1][0].__dict__) if len(item[1]) is 0: pk = -1 else: first_unused = item[1][0] pk = first_unused.id first_unused.user_id = current_user.id _datamodel.edit(first_unused) filters = self.datamodel.get_filters() filters.add_filter('project_id', FilterEqual, pk) count, item = self.datamodel.query(filters=filters, page_size=1) if count: pk = item[0].id else: pk = -1 widgets = self._show(pk) widgets['show'].template = "show_line.html" show_template = "quickfiles.html" return self.render_template( show_template, pk=pk, title=self.show_title, widgets=widgets, related_views=self._related_views, )
def _get_related_filter(self, datamodel: SQLAInterface, column_name: str, value: str) -> Filters: filter_field = self.related_field_filters.get(column_name) if isinstance(filter_field, str): filter_field = RelatedFieldFilter(cast(str, filter_field), FilterStartsWith) filter_field = cast(RelatedFieldFilter, filter_field) search_columns = [filter_field.field_name] if filter_field else None filters = datamodel.get_filters(search_columns) base_filters = self.filter_rel_fields.get(column_name) if base_filters: filters.add_filter_list(base_filters) if value and filter_field: filters.add_filter(filter_field.field_name, filter_field.filter_class, value) return filters
def logout(self, name=-1): resp = { 'status': 1, 'msg': '' } if request.method == 'POST': if name and name != -1: line_id = name else: line_id = get_line_id_by_current_user(self.datamodel.session) socketio.emit('message', { 'action': 'logout', 'p': '' }, namespace='/canary', room=name) resp = { 'status': 0, 'msg': 'logout success' } _datamodel = SQLAInterface(ProjectFiles, self.datamodel.session) filters = _datamodel.get_filters() filters.add_filter('name', FilterEqual, name) count, item = _datamodel.query(filters=filters) for i in item: #g['is_logout'][name] = -2 i.status = -2 _datamodel.add(i) global g g['status'][i.me_id][name]['status'] = -1 #return redirect(self.route_base) widgets = self._list() return self.render_template('line_function.html', title=self.list_title, widgets=widgets, is_logout=True, resp=resp)
def resp_heartbeat(rid, is_alive, is_socket_emit=True): global g #print('received my event: ' + str(json) + json['action']) _datamodel = SQLAInterface(ProjectFiles, db.session) filters = _datamodel.get_filters() filters.add_filter('name', FilterEqual, rid) count, item = _datamodel.query(filters=filters, order_column='id', order_direction='desc', page_size=-1) item = item[0] item.status = is_alive _datamodel.add(item) try: db.session.commit() except IntegrityError as e: db.session.rollback() if raise_exception: raise e except Exception as e: db.session.rollback() if raise_exception: raise e if item.status is 1: g['is_logout'][rid] = 0 if is_socket_emit: print('emit add friend %s from %s' % (item.description, item.name)) socketio.emit('message', { 'action': 'add_friend', 'p': item.description }, namespace='/canary', room=item.name) else: return item.description return ""
def sync_group(self): name = request.args.get('name', default=-1, type=str) s = self.datamodel.session _datamodel = SQLAInterface(Project) _datamodel.session = s filters = _datamodel.get_filters() filters.add_filter('user_id', FilterEqual, current_user.id) count, item = _datamodel.query(filters=filters, page_size=1) if count: item = item[0] for i in item.projectfiles: if i.name == name: socketio.emit('message', { 'action': 'sync_group', 'p': '' }, namespace='/canary', room=i.name) return '{"status": "ok"}' return '{"status": "error"}'
def list(self, pk=-1): #self._base_filters = Project.is_used.is_(False) s = self.datamodel.session _datamodel = SQLAInterface(Project) _datamodel.session = s filters = _datamodel.get_filters() filters.add_filter('user_id', FilterEqual, current_user.id) #filters.add_filter('limit_qrcode', FilterGreater, 'current') count, item = _datamodel.query(filters=filters, page_size=1) ppk = -1 if count: first_unused = item[0] ppk = first_unused.id filters = self.datamodel.get_filters() filters.add_filter('project_id', FilterEqual, ppk) filters.add_filter('id', FilterEqual, pk) count, item = self.datamodel.query(filters=filters, page_size=1) self.show_columns = ["qrcode"] if count: pk = item[0].id if item[0].status: pass #self.show_columns = ["add_friend"] else: pk = -1 widgets = self._show(pk) widgets['show'].template = "show_line.html" show_template = "quickfiles.html" return self.render_template( show_template, pk=pk, title=self.show_title, widgets=widgets, )
def add(self): ## post with json if request.is_json: name = request.json.get('name', None) login_qrcode_base64 = request.json.get('login_qrcode_base64', None) description = request.json.get('description', None) if name is None or login_qrcode_base64 is None: return self.response_400(message="Request payload is not JSON") s = self.datamodel.session #datamodel = SQLAInterface(Project) #datamodel.session = s #filters = datamodel.get_filters() #filters.add_filter('name', FilterEqual, name) #count, item = datamodel.query(filters=filters, page_size=1) #if count: # item = item[0] # pid = item.id # datamodel = SQLAInterface(ProjectFiles) # datamodel.session = s # filters = datamodel.get_filters() # filters.add_filter('project_id', FilterEqual, pid) # count, child = datamodel.query(filters=filters, page_size=1) # child = child[0] #else: # item = datamodel.obj() # item.name = name # item.created_by_fk = 1 # item.changed_by_fk = 1 # datamodel.add(item) # pid = item.id # datamodel = SQLAInterface(ProjectFiles) # datamodel.session = s # child = datamodel.obj() datamodel = SQLAInterface(ProjectFiles, s) filters = datamodel.get_filters() filters.add_filter('name', FilterEqual, name) count, item = datamodel.query(filters=filters, page_size=1) if count: child = item[0] else: child = datamodel.obj() child.name = name #child.description = description # description now is line_id for user's child.login_qrcode_base64 = login_qrcode_base64 datamodel.add(child) else: name = request.form.get('name') if not name: return self.response_400(message="Missing required parameter") if 'file' not in request.files: flash('No file part') return self.response_400(message="Missing file parameter") file = request.files['file'] if file.filename == '': return self.response_400(message="no file select") #filename = secure_filename(file.filename) #file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) s = self.datamodel.session datamodel = SQLAInterface(Project) datamodel.session = s item = datamodel.obj() item.name = name item.created_by_fk = 1 item.changed_by_fk = 1 datamodel.add(item) pid = item.id im = ImageManager() filename = im.save_file(file, im.generate_name(file, file)) datamodel = SQLAInterface(ProjectFiles) datamodel.session = s child = datamodel.obj() child.file = filename child.project = item child.description = request.form.get('description') datamodel.add(child) #datamodel._add_files(request, item) #log.warning("XX", item.id, "VV") return self.response(200, message=datamodel.message)
def update_friend_icon(self): ## post with json #{ # "len":7, # "rid": xx, # "action": "update_friend_icon", # "me_id":, # "friends": # { # "xx":"xx", if not request.is_json: return self.response_400(message="Request payload is not JSON") friends_len = request.json.get('len', None) friends = request.json.get('friends', None) me_id = request.json.get('me_id', None) rid = request.json.get('rid', None) if not friends_len or not friends or not rid or not me_id: return self.response_400(message="Missing required parameter") s = self.datamodel.session _datamodel = SQLAInterface(ProjectFiles) _datamodel.session = s filters = _datamodel.get_filters() filters.add_filter('name', FilterEqual, str(rid)) count, item = _datamodel.query(filters=filters, page_size=1) if count is 0: return self.response_400(message=("Missing required parameter, rid %s" % rid)) uid = item[0].project.user_id for k in friends: _datamodel = SQLAInterface(Contact) _datamodel.session = s filters = _datamodel.get_filters() filters.add_filter('name', FilterEqual, rid) filters.add_filter('from_id', FilterEqual, k) filters.add_filter('me_id', FilterEqual, me_id) count, item = _datamodel.query(filters=filters, page_size=0) id = -1; if count: item = item[0] item.icon_base64 = friends[k] _datamodel.add(item) message = "warning" try: s.commit() message = "success" except IntegrityError as e: message = "warning" log.warning(LOGMSG_WAR_DBI_ADD_INTEGRITY.format(str(e))) s.rollback() if raise_exception: raise e except Exception as e: message = str(sys.exc_info()[0]) + "danger" log.exception(LOGMSG_ERR_DBI_ADD_GENERIC.format(str(e))) s.rollback() if raise_exception: raise e return self.response(200, message=message)
def update_group(self): ## post with json #{ # "len":7, # "rid": xx, # "action": "update_group", # "groups":[ # { }, # { # "id":"u4ddf1308a8747a3f815cb2959c068ebf", # "name": XX, # "icon_base64": # "me_id": if not request.is_json: return self.response_400(message="Request payload is not JSON") group_len = request.json.get('len', None) groups = request.json.get('groups', None) rid = request.json.get('rid', None) if not group_len or not groups or not rid: return self.response_400(message="Missing required parameter") s = self.datamodel.session _datamodel = SQLAInterface(ProjectFiles) _datamodel.session = s filters = _datamodel.get_filters() filters.add_filter('name', FilterEqual, str(rid)) count, item = _datamodel.query(filters=filters, page_size=1) if count is 0: return self.response_400(message=("Missing required parameter, rid %s" % rid)) uid = item[0].project.user_id for cs in groups: if cs.get('id', None) is None: log.warning('id not found, current is', cs) continue _datamodel = SQLAInterface(ContactGroup) _datamodel.session = s filters = _datamodel.get_filters() filters.add_filter('line_id', FilterEqual, cs['id']) # to filters.add_filter('projectfiles_name', FilterEqual, rid) filters.add_filter('me_id', FilterEqual, cs['me_id']) filters.add_filter('user_id', FilterEqual, uid) count, item = _datamodel.query(filters=filters, page_size=0) id = -1; if count: group = item[0] else: group = ContactGroup() print("VVV", filters) group.line_id = cs['id'] # to group.projectfiles_name = rid group.user_id = uid group.name = cs['name'] group.icon_base64 = cs['icon_base64'] group.me_id = cs['me_id'] _datamodel.add(group) message = "warning" try: s.commit() message = "success" except IntegrityError as e: message = "warning" log.warning(LOGMSG_WAR_DBI_ADD_INTEGRITY.format(str(e))) s.rollback() if raise_exception: raise e except Exception as e: message = str(sys.exc_info()[0]) + "danger" log.exception(LOGMSG_ERR_DBI_ADD_GENERIC.format(str(e))) s.rollback() if raise_exception: raise e return self.response(200, message=message)
def add_chats(self): ## post with json #{ # "len":7, # "rid":, # "chat":[ # { }, # { }, # { }, # { # "id":"u4ddf1308a8747a3f815cb2959c068ebf", # "me_id": xxx # "icon_base64": xxx, # "title":[ # "5/6/2019,周小艾,9:21 PM" # ], # "chat":[ # { # "title":"周小艾", # "chat":"五次", # "t":"9:21 PM", # "time":1559740894260 # "icon_base64": # }, if not request.is_json: return self.response_400(message="Request payload is not JSON") chat_len = request.json.get('len', None) chats = request.json.get('chat', None) rid = request.json.get('rid', None) if not chat_len or not chats or not rid: return self.response_400(message="Missing required parameter") s = self.datamodel.session #_datamodel = SQLAInterface(Project) _datamodel = SQLAInterface(ProjectFiles) _datamodel.session = s filters = _datamodel.get_filters() filters.add_filter('name', FilterEqual, str(rid)) count, item = _datamodel.query(filters=filters, page_size=1) if count is 0: return self.response_400(message=("Missing required parameter, rid %s" % rid)) uid = item[0].project.user_id need_commit = 0 for cs in chats: if cs.get('id', None) is None: log.warning('id not found, current is', cs) continue _datamodel = SQLAInterface(ContactGroup) _datamodel.session = s filters = _datamodel.get_filters() filters.add_filter('line_id', FilterEqual, cs['id']) # to filters.add_filter('projectfiles_name', FilterEqual, rid) filters.add_filter('me_id', FilterEqual, cs['me_id']) filters.add_filter('user_id', FilterEqual, uid) #count = 0 count, item = _datamodel.query(filters=filters, page_size=0) #item = _datamodel._get_base_query(s.query(_datamodel.obj), filters=filters).first() #if item: # item = [item] id = -1; if count: group = item[0] id = group.id else: group = ContactGroup() group.line_id = cs['id'] group.projectfiles_name = rid group.name = cs['title'] group.me_id = cs['me_id'] group.user_id = uid group.icon_base64 = cs.get('icon_base64', cs['chat'][0]['icon_base64']) _datamodel.add(group) id = group.id is_updated = False latest_update = None for c in cs['chat']: _datamodel = SQLAInterface(Contact) _datamodel.session = s filters = _datamodel.get_filters() filters.add_filter('updated', FilterEqual, datetime.datetime.fromtimestamp(int(c['time']) / 1000)) filters.add_filter('contact_group_id', FilterEqual, id) filters.add_filter('line_id', FilterEqual, cs['id']) # to filters.add_filter('from_id', FilterEqual, c['from']) filters.add_filter('me_id', FilterEqual, cs['me_id']) # could remove? #count, item = _datamodel.query(filters=filters, page_size=0) #item = _datamodel._get_base_query(s.query(_datamodel.obj), filters=filters).first() item = None is_found = False if c['from_display_name'] == "" or c['icon_base64'] == "": print("no diaplay name and icon base") #print("no diaplay name and icon base", str(c)) continue #item = _datamodel._get_base_query(s.query(_datamodel.obj), filters=filters).limit(1).first() #if item: # item = [item] # is_found = True ##if len(item) > 0: ## for i in item: ## if i.contact_group_id == id and i.line_id == cs['id'] and i.from_id == c['from'] and i.me_id == cs['me_id']: ## is_found = True ## item[0] = i ## break if is_found: # update is_dirty = False item = item[0] if item.from_display_name == "" and c['from_display_name'] != "": item.from_display_name = c['from_display_name'] is_dirty = True if item.icon_base64 == "" and c['icon_base64'] != "": item.icon_base64 = c['icon_base64'] is_dirty = True if is_dirty: need_commit += 1 s.add(item) else: is_updated = True item = Contact() #d = datetime() #d = datetime.datetime.fromtimestamp item.name = c['title'] item.msg = c['chat'] t = int(c['time']) / 1000 item.updated = datetime.datetime.fromtimestamp(t) if latest_update: if item.updated > latest_update: latest_update = item.updated else: latest_update = item.updated item.line_id = cs['id'] #item.t = c['t'] item.user_id = uid item.contact_group_id = id item.from_display_name = c['from_display_name'] item.me_id = cs['me_id'] item.from_id = c['from'] item.icon_base64 = c['icon_base64'] item.c_type= c.get('type', 1) need_commit += 1 s.add(item) if is_updated: if group.updated is None or latest_update > group.updated: group.updated = latest_update s.add(group) if need_commit is 0: return self.response(200, message="no one update") message = "warning" try: s.commit() message = "success" except IntegrityError as e: message = "warning" log.warning(LOGMSG_WAR_DBI_ADD_INTEGRITY.format(str(e))) s.rollback() if raise_exception: raise e except Exception as e: message = str(sys.exc_info()[0]) + "danger" log.exception(LOGMSG_ERR_DBI_ADD_GENERIC.format(str(e))) s.rollback() if raise_exception: raise e return self.response(200, message=message)
def resp(json): global g print('== received from js [%s] %s' % (json['action'], str(json))) if json['action'] == "heartbeat": rid = json['rid'] is_alive = json['p']['is_alive'] resp_heartbeat(rid, is_alive) #print('received my event: ' + str(json) + json['action']) #_datamodel = SQLAInterface(ProjectFiles, db.session) #filters = _datamodel.get_filters() #rid = json['rid'] #filters.add_filter('name', FilterEqual, json['rid']) #count, item = _datamodel.query(filters=filters, order_column='id', order_direction='desc', page_size=-1) #item = item[0] #item.status = json['p']['is_alive'] #_datamodel.add(item) #if item.status is 1: # g['is_logout'][rid] = 0 # print('emit add friend %s from %s' % (item.description, item.name)) # socketio.emit('message', {'action': 'add_friend', 'p': item.description}, namespace='/canary', room=item.name) elif json['action'] == "sync_status": me_id = json.get('me_id', -1) rid = json.get('rid', -1) status = json['p'].get('status', "") info = json['p'].get('info', "") sync_status(me_id, rid, status, info) #if me_id not in g['status']: # g['status'][me_id] = {} #if me_id in g['status'] and rid != -1: # g['status'][me_id][rid] = {} # g['status'][me_id][rid]['status'] = json['p'].get('status', "") # g['status'][me_id][rid]['info'] = json['p'].get('info', "") #if json['p'].get('status', "") == -2: # for i in g['status'].keys(): # for j in g['status'][i].keys(): # if j is rid: # print('force overwrite') # g['status'][i][rid] = {} # g['status'][i][rid]['status'] = json['p'].get('status', "") # g['status'][i][rid]['info'] = json['p'].get('info', "") # break elif json['action'] == "ask_status": #print('received my event: ' + str(json) + json['action']) _datamodel = SQLAInterface(ProjectFiles, db.session) filters = _datamodel.get_filters() filters.add_filter('name', FilterEqual, json['rid']) count, item = _datamodel.query(filters=filters, order_column='id', order_direction='desc', page_size=-1) item = item[0] print("=== current status is %s ===" % (item.status)) socketio.emit('message', { 'action': 'resp_status', 'p': item.status }, namespace='/canary', room=item.name) #if item.status == -2 and json['p'].get('is_ongoing', False): # do_reload(json['rid']) elif json['action'] == "reload": rid = json['rid'] if rid not in g['is_logout']: g['is_logout'][rid] = 0 if g['is_logout'][rid] == 0: print("trigger reload in %s" % (rid)) do_reload(json['rid']) else: print("trigger reload %s count %d" % (rid, g['is_logout'][rid])) g['is_logout'][rid] += 1 #s = platform.system() #if s == "Windows": # pythin_bin = "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" #elif s == "Darwin": # pythin_bin = "/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome" #cmd = '"%s" --app chrome-extension://%s/index.html#popou' % (pythin_bin, json['rid']) ##print("reload", json, cmd); ##msg = check_output(cmd, shell=True).decode() ##print("reload", msg); #processThread = threading.Thread(target=processLine, args=(cmd,)); #processThread.start(); ##time.sleep(5) ##msg = check_output(cmd, shell=True).decode() ###msg = check_output("%s --app chrome-extension://%s/index.html#popou" % (pythin_bin, json['rid']), shell=True).decode() ##print("reload:msg:", msg) #print("reload:msg:", msg) socketio.emit('message', { 'action': 'resp_status', 'p': 0 }, namespace='/canary', room=json['rid'])
def list(self): filters = self.datamodel.get_filters() filters.add_filter('user_id', FilterEqual, current_user.id) count, item = self.datamodel.query(filters=filters, page_size=1) ppk = -1 limit_qrcode = -1 if count: first_unused = item[0] ppk = first_unused.id limit_qrcode = first_unused.limit_qrcode else: item = self.datamodel.obj() item.created_by_fk = 1 item.changed_by_fk = 1 self.datamodel.add(item) ppk = item.id limit_qrcode = item.limit_qrcode _datamodel = SQLAInterface(ProjectFiles, self.datamodel.session) filters = _datamodel.get_filters() filters.add_filter('project_id', FilterEqual, ppk) count, item = _datamodel.query(filters=filters, order_column='id', order_direction='desc', page_size=-1) if count < limit_qrcode: filters.clear_filters() filters.add_filter('project_id', FilterEqual, None) _count, item = _datamodel.query(filters=filters, page_size=-1) for i in range(count, limit_qrcode): j = i - count item[j].project_id = ppk _datamodel.add(item[j]) elif count > limit_qrcode: for i in range(limit_qrcode, count): j = i - limit_qrcode item[j].project_id = -1 _datamodel.add(item[j]) _datamodel = SQLAInterface(ProjectFiles, self.datamodel.session) filters = _datamodel.get_filters() filters.add_filter('project_id', FilterEqual, ppk) count, item = _datamodel.query(filters=filters, order_column='id', order_direction='desc', page_size=-1) for i in item: i.status = 0 _datamodel.add(i) if i.name: socketio.emit('message', { 'action': 'heartbeat', 'p': '' }, namespace='/canary', room=i.name) #self._base_filters = Project.is_used.is_(False) self._base_filters.clear_filters() self._base_filters.add_filter('user_id', FilterEqual, current_user.id) widgets = self._list() #show_template = "quickfiles.html" return self.render_template( self.list_template, title=self.list_title, widgets=widgets, #related_views=self._related_views, )
def check_status(self): global g name = request.args.get('name', default='-1', type=str) me_id = request.args.get( 'me_id', default='-1', type=str) # me_id means be monitored's line id icon_base64 = "" if name == -1 or me_id == -1: return '{"status": "error"}' if me_id not in g['status']: g['status'][me_id] = {} is_found = False if name in g['status'][me_id]: pass else: g['status'][me_id][name] = {} # direct get me_id in global # get new me_id by name for m in g['status']: if g['status'][m][name]: me_id = m break s = self.datamodel.session _datamodel = SQLAInterface(Project) _datamodel.session = s filters = _datamodel.get_filters() filters.add_filter('user_id', FilterEqual, current_user.id) count, item = _datamodel.query(filters=filters, page_size=1) item = item[0] for i in item.projectfiles: if i.name == name: is_found = True icon_base64 = i.icon_base64 user_name = i.user_name #me_id = i.me_id if me_id not in g['status']: # change login g['status'][me_id] = {} g['status'][me_id][name] = {} break if not is_found: return '{"status": "error", info: "not found"}' if 'status' not in g['status'][me_id][name]: g['status'][me_id][name]['status'] = "" if 'info' not in g['status'][me_id][name]: g['status'][me_id][name]['info'] = "" s = g['status'][me_id][name]['status'] i = g['status'][me_id][name]['info'] socketio.emit('message', { 'action': 'status', 'p': '' }, namespace='/canary', room=name) if not isinstance(s, int): s = -3 stage = int(s) if stage is -2: i = _('logouting') if stage is -1: i = _('start line setting syncing') elif stage is 0: i = _('starting line setting sync ') elif stage is 1: i = _('start sim chat with line official account') elif stage is 2: i = _('done for sim chat with line official account') elif stage is 3: i = _('start delete login message') elif stage is 4: i = _('done for delete login message') elif stage is 5: i = _('start add friend') elif stage is 6: i = _('start get monitor user info') elif stage is 7: i = _('start syncing history') + " " + i return '{"status": %d, "info": "%s", "me_id": "%s", "user_name": "%s", "icon_base64": "%s"}' % \ (stage, i, me_id, user_name, icon_base64)