cloudpss 4.1.1b7__py3-none-any.whl → 4.5.13__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. cloudpss/__init__.py +2 -3
  2. cloudpss/asyncio/__init__.py +8 -0
  3. cloudpss/asyncio/job/__init__.py +5 -0
  4. cloudpss/asyncio/job/job.py +116 -0
  5. cloudpss/asyncio/job/messageStreamReceiver.py +121 -0
  6. cloudpss/asyncio/job/messageStreamSender.py +45 -0
  7. cloudpss/asyncio/model/__init__.py +5 -0
  8. cloudpss/asyncio/model/model.py +257 -0
  9. cloudpss/asyncio/model/revision.py +41 -0
  10. cloudpss/asyncio/model/topology.py +34 -0
  11. cloudpss/asyncio/utils/__init__.py +6 -0
  12. cloudpss/{utils → asyncio/utils}/httpAsyncRequest.py +2 -2
  13. cloudpss/dslab/dataManageModel.py +43 -14
  14. cloudpss/dslab/dslab.py +35 -9
  15. cloudpss/dslab/files/curveData.py +35066 -35042
  16. cloudpss/dslab/files/files.py +21 -13
  17. cloudpss/function/functionExecution.py +74 -5
  18. cloudpss/ieslab/DataManageModel.py +144 -9
  19. cloudpss/ieslab/EvaluationModel.py +80 -9
  20. cloudpss/ieslab/IESLabOpt.py +235 -0
  21. cloudpss/ieslab/IESLabPlan.py +82 -4
  22. cloudpss/ieslab/IESLabSimulation.py +59 -32
  23. cloudpss/ieslab/PlanModel.py +222 -18
  24. cloudpss/ieslab/__init__.py +2 -1
  25. cloudpss/job/TemplateCompiler.py +273 -0
  26. cloudpss/job/TemplateManager.py +37 -0
  27. cloudpss/job/job.py +136 -141
  28. cloudpss/job/jobReceiver.py +8 -2
  29. cloudpss/job/messageStreamReceiver.py +42 -99
  30. cloudpss/job/messageStreamSender.py +5 -42
  31. cloudpss/job/{view/EMTView.py → result/EMTResult.py} +57 -14
  32. cloudpss/job/result/IESLabSimulationResult.py +5 -0
  33. cloudpss/job/result/IESLabTypicalDayResult.py +134 -0
  34. cloudpss/job/{view/IESView.py → result/IESResult.py} +7 -5
  35. cloudpss/job/{view/PowerFlowView.py → result/PowerFlowResult.py} +2 -2
  36. cloudpss/job/result/__init__.py +40 -0
  37. cloudpss/job/{view/view.py → result/result.py} +38 -8
  38. cloudpss/model/implements/diagram.py +140 -0
  39. cloudpss/model/jobDefinitions.py +6 -6
  40. cloudpss/model/model.py +245 -226
  41. cloudpss/model/revision.py +30 -35
  42. cloudpss/model/topology.py +26 -15
  43. cloudpss/runner/IESLabEvaluationResult.py +14 -6
  44. cloudpss/runner/IESLabPlanResult.py +91 -35
  45. cloudpss/runner/IESLabTypicalDayResult.py +62 -50
  46. cloudpss/runner/MessageStreamReceiver.py +5 -100
  47. cloudpss/runner/result.py +6 -1
  48. cloudpss/runner/runner.py +97 -53
  49. cloudpss/utils/IO.py +3 -1
  50. cloudpss/utils/graphqlUtil.py +3 -2
  51. cloudpss/utils/httprequests.py +19 -10
  52. cloudpss/version.py +1 -1
  53. {cloudpss-4.1.1b7.dist-info → cloudpss-4.5.13.dist-info}/METADATA +2 -2
  54. cloudpss-4.5.13.dist-info/RECORD +80 -0
  55. cloudpss/dslab/DSLabFinancialResult.py +0 -96
  56. cloudpss/job/jobMachine.py +0 -11
  57. cloudpss/job/jobPolicy.py +0 -129
  58. cloudpss/job/jobQueue.py +0 -14
  59. cloudpss/job/jobTres.py +0 -6
  60. cloudpss/job/view/IESLabSimulationView.py +0 -5
  61. cloudpss/job/view/IESLabTypicalDayView.py +0 -27
  62. cloudpss/job/view/__init__.py +0 -42
  63. cloudpss-4.1.1b7.dist-info/RECORD +0 -72
  64. /cloudpss/{utils → asyncio/utils}/AsyncIterable.py +0 -0
  65. {cloudpss-4.1.1b7.dist-info → cloudpss-4.5.13.dist-info}/WHEEL +0 -0
  66. {cloudpss-4.1.1b7.dist-info → cloudpss-4.5.13.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,7 @@
1
1
  from ..utils import request, fileLoad, graphql_request
2
2
  import json
3
3
  import time, datetime
4
+ import urllib.parse
4
5
  import copy
5
6
  import os
6
7
  from cloudpss.dslab.files import getCurveData
@@ -178,23 +179,33 @@ class DataManageModel(object):
178
179
  def AddDataItem(self, kind, data, extra=None):
179
180
  '''
180
181
  向kind类型的数据库中添加内容为data的数据项
181
- :params: kind str类型,数据的种类标识,包含:光伏、风机、燃气、水电、常规小火电、生物质发电、垃圾电厂、传输线、变压器、开关、负荷分类、负荷用户、储能配置、上网电价、输配电价、常数电价、阶梯电价、分时电价、分时阶梯电价
182
+ :params: kind str类型,数据的种类标识,包含:光伏、光伏曲线、风机、风机曲线、燃气、燃气曲线、水电、水电曲线、火电、火电曲线、生物质发电、生物质发电曲线、垃圾电厂、垃圾电厂曲线、传输线、变压器、开关、负荷分类、负荷用户、储能设备、储能运行策略、上网电价、输配电价、常数电价、阶梯电价、分时电价、分时阶梯电价
182
183
  :params: data dict类型,表示添加的数据内容,其数据结构应满足对应数据项的结构要求
183
184
  :params extra list类型,表示添加的基准出力曲线、负荷曲线、策略曲线数据
184
185
 
185
186
  :return: list<dict>类型,返回该种类下所有数据项的列表
186
187
  '''
187
188
  if extra is None or not extra:
188
- extra = getCurveData(kind)
189
- r = {
190
- 'simu': self.resourceId,
191
- 'name': data.get('name', ''),
192
- 'extra': extra,
193
- 'data': data.get('data', {}),
194
- }
195
- url = f"{self._baseUri}rest/{kind}"
196
- self._saveItemData(url, r)
197
- return self._fetchItemData(url)
189
+ curveData = getCurveData(kind)
190
+ if len(curveData) > 0:
191
+ r = {
192
+ 'simu': self.resourceId,
193
+ 'name': data.get('name', ''),
194
+ 'extra': curveData,
195
+ 'data': data.get('data', {}),
196
+ }
197
+ url = f"{self._baseUri}rest/{kind}"
198
+ self._saveItemData(url, r)
199
+ return self._fetchItemData(url)
200
+ else:
201
+ r = {
202
+ 'simu': self.resourceId,
203
+ 'name': data.get('name', ''),
204
+ 'data': data.get('data', {}),
205
+ }
206
+ url = f"{self._baseUri}rest/{kind}"
207
+ self._saveItemData(url, r)
208
+ return self._fetchItemData(url)
198
209
  else:
199
210
  r = {
200
211
  'simu': self.resourceId,
@@ -210,7 +221,7 @@ class DataManageModel(object):
210
221
  '''
211
222
  获取kind类型对应所有数据项的列表
212
223
  :params: id int类型,数据的id
213
- :params: kind str类型,数据的类型
224
+ :params: kind str类型,数据的种类标识,包含:光伏、光伏曲线、风机、风机曲线、燃气、燃气曲线、水电、水电曲线、火电、火电曲线、生物质发电、生物质发电曲线、垃圾电厂、垃圾电厂曲线、传输线、变压器、开关、负荷分类、负荷用户、储能设备、储能运行策略、上网电价、输配电价、常数电价、阶梯电价、分时电价、分时阶梯电价
214
225
 
215
226
  :return: list<dict>类型,返回该种类下所有数据项的列表
216
227
  '''
@@ -222,7 +233,7 @@ class DataManageModel(object):
222
233
  def UpdateDataItem(self, kind, data):
223
234
  '''
224
235
  更新kind类型对应数据项
225
- :params: kind str类型,数据的类型
236
+ :params: kind str类型,数据的种类标识,包含:光伏、光伏曲线、风机、风机曲线、燃气、燃气曲线、水电、水电曲线、火电、火电曲线、生物质发电、生物质发电曲线、垃圾电厂、垃圾电厂曲线、传输线、变压器、开关、负荷分类、负荷用户、储能设备、储能运行策略、上网电价、输配电价、常数电价、阶梯电价、分时电价、分时阶梯电价
226
237
  :params: data dict类型,表示添加的数据内容,其数据结构应满足对应数据项的结构要求
227
238
 
228
239
  :return: list<dict>类型,返回该种类下所有数据项的列表
@@ -240,7 +251,7 @@ class DataManageModel(object):
240
251
  def GetItemList(self, kind):
241
252
  '''
242
253
  获取kind类型对应所有数据项的列表
243
- :params: kind str类型,数据的种类标识,包含:光伏、风机、燃气、水电、常规小火电、生物质发电、垃圾电厂、传输线、变压器、开关、负荷分类、负荷用户、储能配置、上网电价、输配电价、常数电价、阶梯电价、分时电价、分时阶梯电价
254
+ :params: kind str类型,数据的种类标识,包含:光伏、光伏曲线、风机、风机曲线、燃气、燃气曲线、水电、水电曲线、火电、火电曲线、生物质发电、生物质发电曲线、垃圾电厂、垃圾电厂曲线、传输线、变压器、开关、负荷分类、负荷用户、储能设备、储能运行策略、上网电价、输配电价、常数电价、阶梯电价、分时电价、分时阶梯电价
244
255
 
245
256
  :return: list<dict>类型,返回该种类下所有数据项的列表
246
257
  '''
@@ -258,6 +269,24 @@ class DataManageModel(object):
258
269
  if data.get('extra', None) is None:
259
270
  return None
260
271
  return data.get('extra', None).get('data', None)
272
+
273
+ def UpdateItemExtra(self, kind, data):
274
+ '''
275
+ 更新kind类型对应数据项的基准出力曲线、负荷曲线、策略曲线数据
276
+ :params: kind str类型,数据的种类标识,包含:光伏、光伏曲线、风机、风机曲线、燃气、燃气曲线、水电、水电曲线、火电、火电曲线、生物质发电、生物质发电曲线、垃圾电厂、垃圾电厂曲线、传输线、变压器、开关、负荷分类、负荷用户、储能设备、储能运行策略、上网电价、输配电价、常数电价、阶梯电价、分时电价、分时阶梯电价
277
+ :params: data dict类型,表示添加的数据内容,其数据结构应满足对应数据项的结构要求,形如:{'data': {}, 'extra': [], 'id': ""}
278
+
279
+ :return: list<dict>类型,返回该种类下所有数据项的列表
280
+ '''
281
+ url = f"{self._baseUri}rest/{kind}"
282
+ r = {
283
+ 'id': data.get('id', ''),
284
+ 'data': data.get('data', {}),
285
+ 'extra': data.get('extra', []),
286
+ }
287
+
288
+ self._updateItemData(url, r)
289
+ return self._fetchItemData(url)
261
290
 
262
291
  class DSLabDataManageModel(DataManageModel):
263
292
  _baseUri = 'api/dslab/'
cloudpss/dslab/dslab.py CHANGED
@@ -86,16 +86,17 @@ class DSLab(object):
86
86
 
87
87
  :return: runner Runner[IESResult]
88
88
  '''
89
+ rid = 'function/CloudPSS/ieslab-load-prediction'
89
90
  if job is None:
90
91
  currentJob = self.model.context['currentJob']
91
92
  job = self.model.jobs[currentJob]
92
- if job['rid'] != 'job-definition/ies/ies-load-prediction':
93
+ if job['rid'] != rid:
93
94
  for j in self.model.jobs:
94
- if j['rid'] == 'job-definition/ies/ies-load-prediction':
95
+ if j['rid'] == rid:
95
96
  job = j
96
97
  if job is None:
97
98
  raise Exception("找不到负荷预测方案内核运行的计算方案")
98
- if job['rid'] != 'job-definition/ies/ies-load-prediction':
99
+ if job['rid'] != rid:
99
100
  raise Exception("不是负荷预测方案内核运行生成算法的计算方案")
100
101
  return self.run(job=job, name=name)
101
102
 
@@ -108,16 +109,17 @@ class DSLab(object):
108
109
 
109
110
  :return: runner Runner[IESResult]
110
111
  '''
112
+ rid = 'function/CloudPSS/ieslab-power-flow'
111
113
  if job is None:
112
114
  currentJob = self.model.context['currentJob']
113
115
  job = self.model.jobs[currentJob]
114
- if job['rid'] != 'job-definition/ies/ies-power-flow':
116
+ if job['rid'] != rid:
115
117
  for j in self.model.jobs:
116
- if j['rid'] == 'job-definition/ies/ies-power-flow':
118
+ if j['rid'] == rid:
117
119
  job = j
118
120
  if job is None:
119
121
  raise Exception("找不到时序潮流方案内核运行的计算方案")
120
- if job['rid'] != 'job-definition/ies/ies-power-flow':
122
+ if job['rid'] != rid:
121
123
  raise Exception("不是时序潮流方案内核运行生成算法的计算方案")
122
124
  return self.run(job=job, name=name)
123
125
 
@@ -130,19 +132,43 @@ class DSLab(object):
130
132
 
131
133
  :return: runner Runner[IESResult]
132
134
  '''
135
+ rid = 'function/CloudPSS/ieslab-energy-storage-plan'
133
136
  if job is None:
134
137
  currentJob = self.model.context['currentJob']
135
138
  job = self.model.jobs[currentJob]
136
- if job['rid'] != 'job-definition/ies/ies-energy-storage-plan':
139
+ if job['rid'] != rid:
137
140
  for j in self.model.jobs:
138
- if j['rid'] == 'job-definition/ies/ies-energy-storage-plan':
141
+ if j['rid'] == rid:
139
142
  job = j
140
143
  if job is None:
141
144
  raise Exception("找不到储能规划方案内核运行的计算方案")
142
- if job['rid'] != 'job-definition/ies/ies-energy-storage-plan':
145
+ if job['rid'] != rid:
143
146
  raise Exception("不是储能规划方案内核运行生成算法的计算方案")
144
147
  return self.run(job=job, name=name)
145
148
 
149
+ def runIESShortCurrent(self,job=None,name=None, **kwargs)->Runner[IESResult]:
150
+ '''
151
+ 运行 短路电流计算 内核,如果当前 model 没有创建 Job 时报错,默认使用第一个计算方案,进行仿真。
152
+
153
+ :param: job 计算方案名称,可选,字符串类型或者字典类型,默认使用第一个计算方案,如果同名使用最靠前一个
154
+ :params name: 任务名称,为空时使用项目的参数方案名称和计算方案名称
155
+
156
+ :return: runner Runner[IESResult]
157
+ '''
158
+ rid = 'function/CloudPSS/short-circuit-current-calculation'
159
+ if job is None:
160
+ currentJob = self.model.context['currentJob']
161
+ job = self.model.jobs[currentJob]
162
+ if job['rid'] != rid:
163
+ for j in self.model.jobs:
164
+ if j['rid'] == rid:
165
+ job = j
166
+ if job is None:
167
+ raise Exception("找不到短路电流计算方案内核运行的计算方案")
168
+ if job['rid'] != rid:
169
+ raise Exception("不是短路电流计算方案内核运行生成算法的计算方案")
170
+ return self.run(job=job, name=name)
171
+
146
172
  @staticmethod
147
173
  def createProjectGroup(name, description=None, createById=None):
148
174
  '''