cloudpss 4.5.2__py3-none-any.whl → 4.5.3__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.
@@ -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
@@ -268,6 +269,24 @@ class DataManageModel(object):
268
269
  if data.get('extra', None) is None:
269
270
  return None
270
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)
271
290
 
272
291
  class DSLabDataManageModel(DataManageModel):
273
292
  _baseUri = 'api/dslab/'
cloudpss/dslab/dslab.py CHANGED
@@ -146,6 +146,29 @@ class DSLab(object):
146
146
  raise Exception("不是储能规划方案内核运行生成算法的计算方案")
147
147
  return self.run(job=job, name=name)
148
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
+
149
172
  @staticmethod
150
173
  def createProjectGroup(name, description=None, createById=None):
151
174
  '''
@@ -1,3 +1,4 @@
1
+ import logging
1
2
  from cloudpss.job.TemplateCompiler import template
2
3
  class TemplateManager():
3
4
 
@@ -1,3 +1,4 @@
1
+ import re
1
2
  from .component import Component
2
3
  from typing import Optional
3
4
  import uuid
@@ -140,7 +141,7 @@ class DiagramImplement(object):
140
141
  position["y"] += 5
141
142
  return True
142
143
 
143
- def updateComponent(self, key: str, args: dict) -> bool:
144
+ def updateComponent(self, key: str, **kwargs: dict) -> bool:
144
145
  """
145
146
  更新元件
146
147
 
@@ -150,10 +151,36 @@ class DiagramImplement(object):
150
151
 
151
152
  >>>> diagram.updateComponent(key)
152
153
  """
153
- component = self.cells.get(key)
154
- if not component:
154
+ component = self.cells.get(key,None)
155
+ if component is None:
155
156
  return False
156
- for k, v in self.cells.items():
157
- if k == key:
158
- v.__dict__.update(args)
159
- return True
157
+ for k, v in kwargs.items():
158
+ if component.__dict__.get(k,None) is None:
159
+ raise Exception(f"Component has no attribute {k}")
160
+ if k == 'args' and not isinstance(v, dict):
161
+ raise Exception(f"Component args must be dict")
162
+ if k == 'pins' and not isinstance(v, dict):
163
+ raise Exception(f"Component pins must be dict")
164
+ if k == 'position' and not isinstance(v, dict):
165
+ raise Exception(f"Component position must be dict")
166
+ if k == 'size' and not isinstance(v, dict):
167
+ raise Exception(f"Component size must be dict")
168
+ if k == 'style' and not isinstance(v, dict):
169
+ raise Exception(f"Component style must be dict")
170
+ if k == 'props' and not isinstance(v, dict):
171
+ raise Exception(f"Component props must be dict")
172
+ if k == 'context' and not isinstance(v, dict):
173
+ raise Exception(f"Component context must be dict")
174
+
175
+ if k == 'definition' and not re.match(r'^model/([!()\-.0-9@A-Z\[\]_a-z{}~]{1,240})/([!()\-.0-9@A-Z\[\]_a-z{}~]{1,240})$', v):
176
+ raise Exception(f"Component definition must be in the format of 'model/owner/key'")
177
+
178
+ if k == 'zIndex' and v < 0:
179
+ raise Exception(f"Component zIndex must be greater than 0")
180
+
181
+ if isinstance(v, dict):
182
+ component.__dict__[k].update(v)
183
+ continue
184
+
185
+ component.__dict__[k] = v
186
+
cloudpss/model/model.py CHANGED
@@ -137,7 +137,7 @@ class Model(object):
137
137
  raise ValueError("不存在拓扑实现")
138
138
  return diagramImplement.removeComponent(key)
139
139
 
140
- def updateComponent(self, key, args):
140
+ def updateComponent(self, key, **kwargs):
141
141
  """
142
142
  更新元件实现
143
143
 
@@ -148,7 +148,7 @@ class Model(object):
148
148
  diagramImplement = self.revision.getImplements().getDiagram()
149
149
  if diagramImplement is None:
150
150
  raise ValueError("不存在拓扑实现")
151
- return diagramImplement.updateComponent(key, args)
151
+ return diagramImplement.updateComponent(key, **kwargs)
152
152
 
153
153
 
154
154
  def getComponentsByRid(self, rid: str):
@@ -397,6 +397,7 @@ class Model(object):
397
397
  data = IO.load(filePath, format)
398
398
  return data
399
399
 
400
+
400
401
  @staticmethod
401
402
  def dump(model, file, format="yaml", compress="gzip"):
402
403
  """
cloudpss/utils/IO.py CHANGED
@@ -2,6 +2,7 @@ import io
2
2
  import json
3
3
  import ubjson
4
4
  import yaml
5
+ from yaml.dumper import SafeDumper
5
6
  import gzip
6
7
  import base64
7
8
  import struct
@@ -85,6 +86,7 @@ class IO(object):
85
86
  result = ubjson.dumpb(obj)
86
87
  if format == 'yaml':
87
88
  result = yaml.dump(obj).encode(encoding="utf-8")
89
+
88
90
  if result is None:
89
91
  assert False, 'format not support'
90
92
  if compress == 'gzip':
@@ -104,7 +106,7 @@ class IO(object):
104
106
  if format == 'ubjson':
105
107
  return ubjson.loadb(byt)
106
108
  if format == 'yaml':
107
- return yaml.load(io.BytesIO(byt), Loader=yaml.BaseLoader)
109
+ return yaml.load(io.BytesIO(byt), Loader=yaml.FullLoader)
108
110
  assert False, 'format not support'
109
111
 
110
112
  @staticmethod
cloudpss/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = '4.5.2'
1
+ __version__ = '4.5.3'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cloudpss
3
- Version: 4.5.2
3
+ Version: 4.5.3
4
4
  Summary: cloudpss sdk
5
5
  Home-page: https://www.cloudpss.net
6
6
  Author: cloudpss
@@ -1,6 +1,6 @@
1
1
  cloudpss/__init__.py,sha256=1RNmUBhoxYUutZiTS-XJ9yBoNGGh8Mpt1uY6ETlSBDc,825
2
2
  cloudpss/verify.py,sha256=KF4Gd59DGvCyIEkRD7rNnekWw22XxJpi3DW6keb6j4c,1498
3
- cloudpss/version.py,sha256=uuxZmCPYe74VYVKPFVVPfcxz9tTAAZCaW7FA4Q5oETk,22
3
+ cloudpss/version.py,sha256=Qwf2PqCgwNBpHE5DrBEwfOiFsFvEpa01UTldrgQkx9Q,22
4
4
  cloudpss/asyncio/__init__.py,sha256=CJGopQl_vz3z3fJsK7NjMX5uzkzfrJrbqKVhyYqlYWc,198
5
5
  cloudpss/asyncio/job/__init__.py,sha256=3UIFZYjJTzuckM61o8kim1c3PWt2SSHTL72jrGu5IzI,51
6
6
  cloudpss/asyncio/job/job.py,sha256=Bn2BEERw1J8YarFauTzVrGJK7nmaoMsdlrFUqiHRth4,3897
@@ -14,8 +14,8 @@ cloudpss/asyncio/utils/AsyncIterable.py,sha256=AIWYrTnmjsIfOowE3asZlexdHNhpK2gm7
14
14
  cloudpss/asyncio/utils/__init__.py,sha256=F-rCvgRAGcV-fFO7o-dsXwooyhcVpElWoBEQM67kO7c,84
15
15
  cloudpss/asyncio/utils/httpAsyncRequest.py,sha256=KIck-3uQwGcHMIJ6632_Zo0syc4GnNG2EoUXmQh54ck,2692
16
16
  cloudpss/dslab/__init__.py,sha256=UdLDA9OArvLndHtumYAMMHdr5h8S6DrZCYkXIi2Mb4Y,45
17
- cloudpss/dslab/dataManageModel.py,sha256=7sTRpAGnuSNtFsUb-VEDp5XzOlAZvidypkniHX32wLY,11527
18
- cloudpss/dslab/dslab.py,sha256=u5xwlsuQiVIEAAuHW6kQ5MFiRjR7Iaxoxd724lHW-gk,8696
17
+ cloudpss/dslab/dataManageModel.py,sha256=NeG2YbIappMxAOCZGfFUcOBwo2Kyhh27kHMFK37re60,12711
18
+ cloudpss/dslab/dslab.py,sha256=K__KohK6w6Alj3WCmLJQ2pr_RPFvvtnce2C6tdLhTIE,9914
19
19
  cloudpss/dslab/financialAnalysisModel.py,sha256=t9cZ03yWvLN5ojVeLp-UGgFBIFVU5wbnn5E0UHZA0ws,5062
20
20
  cloudpss/dslab/files/__init__.py,sha256=l2g0VadtTiMW39zwCwHPHUC01Kbklb_nFUPVeQ16FwM,58
21
21
  cloudpss/dslab/files/curveData.py,sha256=GU_DTTKjVn_ln9Hx0q9CFgfmNtokZi7b4DYSzGeP5dk,4291778
@@ -32,7 +32,7 @@ cloudpss/ieslab/IESLabSimulation.py,sha256=-EJFkhklN9ao-nbfk7Lz6JCHboFCSDcn5R2jr
32
32
  cloudpss/ieslab/PlanModel.py,sha256=WHvXWNFgi7fO_M-sL9empRgHR5riCj1jeThBRT-oqEc,14088
33
33
  cloudpss/ieslab/__init__.py,sha256=gr1rXYw9vIAGOe60eg7LyMHP7QDXvNf4dJ5GTR_kj1Y,232
34
34
  cloudpss/job/TemplateCompiler.py,sha256=MuJDTQ54wRo5bGSvBJBJjXJ7u463dwpRkaLwIwm_hLE,9936
35
- cloudpss/job/TemplateManager.py,sha256=PYFWcnJMlvXsoqKh_GMMti72o0ajLWYssrOGUtknMwY,1099
35
+ cloudpss/job/TemplateManager.py,sha256=uOvctmE3P17aGWt_26d940FbRUSEs6iovFBb8T5xjd4,1115
36
36
  cloudpss/job/__init__.py,sha256=3UIFZYjJTzuckM61o8kim1c3PWt2SSHTL72jrGu5IzI,51
37
37
  cloudpss/job/job.py,sha256=ciphBMfRkIK1bvZ1zrbuISojXiixoNwQRlCzfEVWOa8,8240
38
38
  cloudpss/job/jobReceiver.py,sha256=PNYxcN33LiXZVyc4tzhPlpWxKnyWO_ElKjJ9wsxsroI,925
@@ -47,12 +47,12 @@ cloudpss/job/result/__init__.py,sha256=6zpp_s3Mcdi__FVfrBNLXw4Ee5ZBNgoZuYPJ8cqbj
47
47
  cloudpss/job/result/result.py,sha256=kNAQ0X605pKRVFZ0FGULZn177zoPCrMeXLE7eCAVjFA,4282
48
48
  cloudpss/model/__init__.py,sha256=SNq-bfwcQtDHtTNBYppfUEs8wkjfrQfGeywx7igmvOs,151
49
49
  cloudpss/model/jobDefinitions.py,sha256=uuTwpqStlg3YDmfxbU2PVi_Tf18opa0kYLCMGaOP-qA,3749
50
- cloudpss/model/model.py,sha256=gYMBf_jspoRSwb0QgARvJGXVtDlaQvQjp_B9QMYvXwE,27170
50
+ cloudpss/model/model.py,sha256=hS64Tb6JJvLDaCi4mBPUGbXvmzc-nQxlHtnh7OQpreo,27179
51
51
  cloudpss/model/revision.py,sha256=IFznBKirwpfqadyCNJWPGL7lTpQxbCmU1fxdI5AvoA4,4002
52
52
  cloudpss/model/topology.py,sha256=tKaOACAw9r9SppgxrhK-ZjMsG_jGLiNOzPnlIPLo964,2333
53
53
  cloudpss/model/implements/__init__.py,sha256=88L_wF9SSzxsbtqwStWIPH4LxaKq7TVcssHQ62YBnls,67
54
54
  cloudpss/model/implements/component.py,sha256=uNSpkZKChdXLiO40Ev4P3oQ1di2Hu4YjcBOb0I8Bf0c,734
55
- cloudpss/model/implements/diagram.py,sha256=25g40EhqcFsqNeTQYEG2mqxV_oG0B0kb3xT_NvN7ia8,4582
55
+ cloudpss/model/implements/diagram.py,sha256=ILBq7oZVb2ZThmm_HdwGmGX0sZPwetoT4SSVN0xFqzo,6053
56
56
  cloudpss/model/implements/implement.py,sha256=Uld96tjXVDbVUNV8xscyy_nZWLHr3iP2DqA6S3p-XJE,954
57
57
  cloudpss/project/__init__.py,sha256=fpskY-cJGmMcTg1naVzNPtJaRG1xmSc2CFjDTin64Cw,51
58
58
  cloudpss/project/project.py,sha256=uFhOnM8ngo1_ZYz2uArtORKZquYNdOIVLXU_q1MDFI4,17698
@@ -67,14 +67,14 @@ cloudpss/runner/result.py,sha256=GFpd7848gsLRuzhVcWbCwmAjR84Lhik_3pNCjOV8VOY,132
67
67
  cloudpss/runner/runner.py,sha256=pfidTchkoVTFUB9pUmZn9ulVDag9DLGo0pIxsD-nRu0,9168
68
68
  cloudpss/runner/storage.py,sha256=zFET_zwPIOF2Cnh9sgFiS0HFxV1OmVsU34bGUQ6PpkA,4162
69
69
  cloudpss/runner/transform.py,sha256=krOgTZiJSJAb5QSwerAqlbC4Ma0PKi__0WOZlAxw4O8,11613
70
- cloudpss/utils/IO.py,sha256=sm6p53AFgE1b56Bh0qt_E2TFP5tLr0WQDzIVRlsNgFA,5321
70
+ cloudpss/utils/IO.py,sha256=FsFp3V8I1-P0YiBGmjKwbMalBrVKMHUxTjFZFOtv0CQ,5357
71
71
  cloudpss/utils/__init__.py,sha256=jWVHSOqJQWU0fpg2UbWSEQoLCb2Uys-vH5Uqkb0ihNA,326
72
72
  cloudpss/utils/dataEncoder.py,sha256=5PUPb844eOGgFnYrMM8bdjdKH_MZz0lk-67uo8TvwEo,885
73
73
  cloudpss/utils/graphqlUtil.py,sha256=zGEhRZvy5JMipFKFxjDmbc-HQP3aPZ5noDwi-RTXWSk,280
74
74
  cloudpss/utils/httprequests.py,sha256=ZcCwS2KM7y2TwWTo0YRLNJVozih4h0F5ignn-CeBREU,1846
75
75
  cloudpss/utils/matlab.py,sha256=SLwVt790BjklJK2XNELt9R2n_1ej9Y8QsTIdFkKXLWE,795
76
76
  cloudpss/utils/yamlLoader.py,sha256=bv_vPDK_e0n_vZ5FwpDJ_NJWqMAwfU3AbhkvQIxPCy4,2677
77
- cloudpss-4.5.2.dist-info/METADATA,sha256=gew6nU4652E8_vPJY3PYXzzBHmtcP1p9NW78BqqMiDE,2401
78
- cloudpss-4.5.2.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
79
- cloudpss-4.5.2.dist-info/top_level.txt,sha256=wS9qPU4-aWM9ouzMOx34Nlq-GkdQKpr9vBskwut1BD8,9
80
- cloudpss-4.5.2.dist-info/RECORD,,
77
+ cloudpss-4.5.3.dist-info/METADATA,sha256=85B-9dgbPdsSS961DOPKWRoKeYn-8nYA2JJkSJRAJzM,2401
78
+ cloudpss-4.5.3.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
79
+ cloudpss-4.5.3.dist-info/top_level.txt,sha256=wS9qPU4-aWM9ouzMOx34Nlq-GkdQKpr9vBskwut1BD8,9
80
+ cloudpss-4.5.3.dist-info/RECORD,,