import uuid
from datetime import datetime
import falcon
import mysql.connector
import simplejson as json
from anytree import AnyNode, LevelOrderIter
from anytree.exporter import JsonExporter
import config
from core.useractivity import user_logger, access_control
class SpaceCollection:
@staticmethod
def __init__():
"""Initializes Class"""
pass
@staticmethod
def on_options(req, resp):
resp.status = falcon.HTTP_200
@staticmethod
def on_get(req, resp):
cnx = mysql.connector.connect(**config.myems_system_db)
cursor = cnx.cursor()
query = (" SELECT id, name, uuid "
" FROM tbl_spaces ")
cursor.execute(query)
rows_spaces = cursor.fetchall()
space_dict = dict()
if rows_spaces is not None and len(rows_spaces) > 0:
for row in rows_spaces:
space_dict[row[0]] = {"id": row[0],
"name": row[1],
"uuid": row[2]}
query = (" SELECT id, name, utc_offset "
" FROM tbl_timezones ")
cursor.execute(query)
rows_timezones = cursor.fetchall()
timezone_dict = dict()
if rows_timezones is not None and len(rows_timezones) > 0:
for row in rows_timezones:
timezone_dict[row[0]] = {"id": row[0],
"name": row[1],
"utc_offset": row[2]}
query = (" SELECT id, name, uuid "
" FROM tbl_contacts ")
cursor.execute(query)
rows_contacts = cursor.fetchall()
contact_dict = dict()
if rows_contacts is not None and len(rows_contacts) > 0:
for row in rows_contacts:
contact_dict[row[0]] = {"id": row[0],
"name": row[1],
"uuid": row[2]}
query = (" SELECT id, name, uuid "
" FROM tbl_cost_centers ")
cursor.execute(query)
rows_cost_centers = cursor.fetchall()
cost_center_dict = dict()
if rows_cost_centers is not None and len(rows_cost_centers) > 0:
for row in rows_cost_centers:
cost_center_dict[row[0]] = {"id": row[0],
"name": row[1],
"uuid": row[2]}
query = (" SELECT id, name, uuid, "
" parent_space_id, area, timezone_id, is_input_counted, is_output_counted, "
" contact_id, cost_center_id, description "
" FROM tbl_spaces "
" ORDER BY id ")
cursor.execute(query)
rows_spaces = cursor.fetchall()
result = list()
if rows_spaces is not None and len(rows_spaces) > 0:
for row in rows_spaces:
timezone = timezone_dict.get(row[5], None)
contact = contact_dict.get(row[8], None)
cost_center = cost_center_dict.get(row[9], None)
parent_space = space_dict.get(row[3], None)
meta_result = {"id": row[0],
"name": row[1],
"uuid": row[2],
"parent_space": parent_space,
"area": row[4],
"timezone": timezone,
"is_input_counted": bool(row[6]),
"is_output_counted": bool(row[7]),
"contact": contact,
"cost_center": cost_center,
"description": row[10],
"qrcode": "space:" + row[2]}
result.append(meta_result)
cursor.close()
cnx.close()
resp.text = json.dumps(result)
@staticmethod
@user_logger
def on_post(req, resp):
"""Handles POST requests"""
access_control(req)
try:
raw_json = req.stream.read().decode('utf-8')
new_values = json.loads(raw_json)
except Exception as ex:
raise falcon.HTTPError(status=falcon.HTTP_400,
title='API.BAD_REQUEST',
description='API.FAILED_TO_READ_REQUEST_STREAM')
if 'name' not in new_values['data'].keys() or \
not isinstance(new_values['data']['name'], str) or \
len(str.strip(new_values['data']['name'])) == 0:
raise falcon.HTTPError(status=falcon.HTTP_400, title='API.BAD_REQUEST',
description='API.INVALID_SPACE_NAME')
name = str.strip(new_values['data']['name'])
if 'parent_space_id' in new_values['data'].keys():
if new_values['data']['parent_space_id'] <= 0:
raise falcon.HTTPError(status=falcon.HTTP_400, title='API.BAD_REQUEST',
description='API.INVALID_PARENT_SPACE_ID')
parent_space_id = new_values['data']['parent_space_id']
else:
parent_space_id = None
if 'area' not in new_values['data'].keys() or \
not (isinstance(new_values['data']['area'], float) or
isinstance(new_values['data']['area'], int)) or \
new_values['data']['area'] <= 0.0:
raise falcon.HTTPError(status=falcon.HTTP_400, title='API.BAD_REQUEST',
description='API.INVALID_AREA_VALUE')
area = new_values['data']['area']
if 'timezone_id' not in new_values['data'].keys() or \
not isinstance(new_values['data']['timezone_id'], int) or \
new_values['data']['timezone_id'] <= 0:
raise falcon.HTTPError(status=falcon.HTTP_400, title='API.BAD_REQUEST',
description='API.INVALID_TIMEZONE_ID')
timezone_id = new_values['data']['timezone_id']
if 'is_input_counted' not in new_values['data'].keys() or \
not isinstance(new_values['data']['is_input_counted'], bool):
raise falcon.HTTPError(status=falcon.HTTP_400, title='API.BAD_REQUEST',
description='API.INVALID_IS_INPUT_COUNTED_VALUE')
is_input_counted = new_values['data']['is_input_counted']
if 'is_output_counted' not in new_values['data'].keys() or \
not isinstance(new_values['data']['is_output_counted'], bool):
raise falcon.HTTPError(status=falcon.HTTP_400, title='API.BAD_REQUEST',
description='API.INVALID_IS_OUTPUT_COUNTED_VALUE')
is_output_counted = new_values['data']['is_output_counted']
if 'contact_id' in new_values['data'].keys():
if new_values['data']['contact_id'] <= 0:
raise falcon.HTTPError(status=falcon.HTTP_400, title='API.BAD_REQUEST',
description='API.INVALID_CONTACT_ID')
contact_id = new_values['data']['contact_id']
else:
contact_id = None
if 'cost_center_id' in new_values['data'].keys():
if new_values['data']['cost_center_id'] <= 0:
raise falcon.HTTPError(status=falcon.HTTP_400, title='API.BAD_REQUEST',
description='API.INVALID_COST_CENTER_ID')
cost_center_id = new_values['data']['cost_center_id']
else:
cost_center_id = None
if 'description' in new_values['data'].keys() and \
new_values['data']['description'] is not None and \
len(str(new_values['data']['description'])) > 0:
description = str.strip(new_values['data']['description'])
else:
description = None
cnx = mysql.connector.connect
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
MyEMS是行业领先的开源能源管理系统,基于Python, React开发。 用于建筑、工厂、商场、数据中心、园区等能源数据采集、处理、分析、报表和展示。 还具有设备管理、故障诊断、工单管理、人工智能优化控制等功能。 MyEMS由资深专业团队开发维护,源代码基于MIT开源软件许可协议发布。 用开源助力实现碳达峰碳中和目标。
资源推荐
资源详情
资源评论
收起资源包目录
基于Python, React开发的行业领先的开源能源管理系统 (3722个子文件)
.browserslistrc 75B
CNAME 8B
nginx.conf 2KB
nginx.conf 1KB
myems-api.conf 33B
theme-dark-rtl.css 380KB
theme-dark.css 380KB
theme-rtl.css 366KB
theme.css 365KB
style.css 169KB
bootstrap.css 143KB
bootstrap.min.css 119KB
animate.css 64KB
bootstrap-rtl.css 31KB
style.css 29KB
font-awesome.css 28KB
style.min.css 25KB
bootstrap-rtl.min.css 24KB
font-awesome.min.css 23KB
fonts-swap.css 19KB
fonts.css 19KB
sweetalert.css 18KB
colorpicker.css 17KB
chartist.min.css 14KB
jasny-bootstrap.min.css 14KB
myems.css 13KB
chosen.css 13KB
social-buttons.css 13KB
dropzone.css 12KB
fullcalendar.css 11KB
toastr.min.css 11KB
datatables.min.css 10KB
ladda-themeless.min.css 8KB
integralui.css 7KB
angular-datapicker.css 7KB
blueimp-gallery.min.css 7KB
daterangepicker-bs3.css 7KB
awesome-bootstrap-checkbox.css 7KB
select.min.css 6KB
blueimp-gallery.css 6KB
daterangepicker.min.css 6KB
jquery.steps.css 6KB
footable.core.css 5KB
fullcalendar.print.css 5KB
tree-icon.css 4KB
clockpicker.css 4KB
ng-dropzone.css 4KB
ion.rangeSlider.css 3KB
integralui.treeview.css 3KB
slick-theme.css 3KB
jquery.nouislider.css 3KB
loading-bar.css 3KB
bootstrap-markdown.min.css 3KB
blueimp-gallery-video.css 2KB
bootstrap-tour.min.css 2KB
ion.rangeSlider.skinFlat.css 2KB
jquery.justifiedgallery.css 2KB
theme-bootstrap.css 2KB
slick.css 2KB
ion.rangeSlider.skinSimple.css 2KB
ion.rangeSlider.skinNice.css 2KB
blueimp-gallery-indicator.css 2KB
jquery.justifiedgallery.min.css 1KB
angular-notify.min.css 1KB
custom.css 1KB
angular-ui-tree.min.css 1KB
basic.css 1KB
integralui.checkbox.css 975B
jquery.bootstrap-touchspin.min.css 899B
demo.css 867B
switchery.css 610B
angular-csp.css 343B
flyout.css 205B
ng-img-crop.css 195B
jquery-jvectormap-2.0.2.css 0B
Dockerfile 906B
Dockerfile 531B
Dockerfile 391B
Dockerfile 359B
Dockerfile 359B
Dockerfile 359B
Dockerfile 358B
.editorconfig 413B
.editorconfig 413B
example.env 3KB
example.env 1KB
example.env 1KB
example.env 864B
example.env 662B
fontawesome-webfont.eot 59KB
glyphicons-halflings-regular.eot 20KB
glyphicons-halflings-regular.eot 20KB
footable.eot 5KB
slick.eot 2KB
myems-space-energycategory2.gif 3.98MB
myems-large-screen-dashboard.gif 2.11MB
myems-space-energycategory3.gif 1.25MB
myems-space-energycategory1.gif 345KB
loading.gif 9KB
ajax-loader.gif 4KB
共 3722 条
- 1
- 2
- 3
- 4
- 5
- 6
- 38
资源评论
- weixin_484271422024-03-26资源使用价值高,内容详实,给了我很多新想法,感谢大佬分享~
- 辣条也想内卷2023-08-28这个资源总结的也太全面了吧,内容详实,对我帮助很大。
- Dxs08072023-10-24怎么能有这么好的资源!只能用感激涕零来形容TAT...
Java程序员-张凯
- 粉丝: 1w+
- 资源: 6651
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功