cloudpss 4.5.2__py3-none-any.whl → 4.5.4__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
  '''
@@ -17,7 +17,6 @@ class IESLabPlanModel(object):
17
17
  '''
18
18
  self.simulationId = simulationId
19
19
  self.optimizationInfo = self.GetOptimizationInfo()
20
- # self.OptimizationMode = OptimizationMode
21
20
 
22
21
  def _fetchItemData(self, url, params):
23
22
  '''
@@ -29,69 +28,31 @@ class IESLabPlanModel(object):
29
28
  data = json.loads(r.text)
30
29
  return data['results']
31
30
 
31
+
32
32
  def GetOptimizationInfo(self):
33
33
  '''
34
34
  获取当前算例的优化目标设置信息
35
35
 
36
- :return: Dict 类型,例如:{'OptimizationMode': <OptimizationMode.经济性: 0>, 'StoSen': 0.1}
36
+ :return: enum 类型,代表经济性优化和环保性优化的类型
37
37
  '''
38
38
  try:
39
- url = f'{self._baseUri}/simuOpt/'
40
- params = {"simu_id": self.simulationId}
41
- r = self._fetchItemData(url, params)
42
- if (len(r) == 0):
43
- return {
44
- "OptimizationMode": OptimizationMode['经济性'],
45
- "StoSen": 0.1
46
- }
47
- else:
48
- value = json.loads(r[0]['opt_params'])
49
- return {
50
- "OptimizationMode": OptimizationMode(value['OptimizationMode']),
51
- "StoSen": value['StoSen']
52
- }
39
+ data = self._fetchItemData(self._baseUri)
40
+ for e in OptimizationMode:
41
+ if (e.value == data['data']['optimizationpara']
42
+ ['OptimizationMode']):
43
+ return e
53
44
  except:
54
- raise Exception('获得优化目标设置失败')
45
+ return OptimizationMode['经济性']
55
46
 
56
- def SetOptimizationInfo(self, data: dict):
47
+ def SetOptimizationInfo(self, optType):
57
48
  '''
49
+ 无对应接口
58
50
  设置当前算例的优化目标
59
51
 
60
- :param data: dict 类型,例如:{'OptimizationMode': <OptimizationMode.经济性: 0>, 'StoSen': 0.1}
61
-
62
- :return: boolean 类型,为 True 则设置成功
52
+ :param optType: enum 类型,代表经济性优化和环保性优化的类型
63
53
  '''
64
- try:
65
- url = f'{self._baseUri}/simuOpt/'
66
- params = {"simu_id": self.simulationId}
67
- r = self._fetchItemData(url, params)
68
- opt_params = {
69
- "OptimizationMode": data.get('OptimizationMode', '').value,
70
- "StoSen": data.get('StoSen', ''),
71
- "ProjectPeriod": "20"
72
- }
73
- if(len(r) == 0):
74
- payload = {
75
- "simu_id": self.simulationId,
76
- "opt_params": json.dumps(opt_params)
77
- }
78
- r = request('POST',
79
- url,
80
- data=json.dumps(payload))
81
- return True
82
- else:
83
- url2 = f'{self._baseUri}/simuOpt/{r[0]["id"]}/'
84
- payload = {
85
- "simu_id": self.simulationId,
86
- "opt_params": json.dumps(opt_params),
87
- "id": r[0]["id"]
88
- }
89
- r = request('PUT',
90
- url2,
91
- data=json.dumps(payload))
92
- return True
93
- except:
94
- return False
54
+ self.optimizationInfo = optType
55
+ return True
95
56
 
96
57
  def run(self) -> HttpRunner[IESLabPlanResult]:
97
58
  '''
@@ -103,12 +64,9 @@ class IESLabPlanModel(object):
103
64
  if isRunning:
104
65
  raise Exception('该算例正在运行!请从浏览器算例页面点击结束运行或者调用IESPlan对象的kill接口终止计算后重试!')
105
66
  else:
106
- url = f'api/{self._runUri}/runOptimization'
107
- opt = {
108
- "OptimizationMode": self.optimizationInfo.get('OptimizationMode', 0).value,
109
- "ProjectPeriod": "20",
110
- "StoSen": self.optimizationInfo.get('StoSen', 0.1)
111
- }
67
+ url = f'{self._runUri}/runOptimization'
68
+ optType = self.optimizationInfo if self.optimizationInfo is not None else OptimizationMode.经济性
69
+ optTypeValue = optType.value if isinstance(optType, OptimizationMode) else 0
112
70
  try:
113
71
  r = request('GET',
114
72
  url,
@@ -116,7 +74,10 @@ class IESLabPlanModel(object):
116
74
  "simuid":
117
75
  self.simulationId,
118
76
  "optPara":
119
- json.dumps(opt)
77
+ json.dumps({
78
+ "OptimizationMode": optTypeValue,
79
+ "ProjectPeriod": "20"
80
+ })
120
81
  })
121
82
  data = json.loads(r.text)
122
83
  return HttpRunner({}, self.simulationId)
@@ -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/runner/runner.py CHANGED
@@ -15,7 +15,7 @@ from .IESLabEvaluationResult import IESLabEvaluationResult, IESLabPlanEvaluation
15
15
  from .IESLabTypicalDayResult import IESLabTypicalDayResult
16
16
  from .storage import Storage
17
17
  from ..utils import request
18
- from typing import TypeVar, Generic
18
+ from typing import TypeVar, Generic
19
19
  import re
20
20
 
21
21
  RECEIVER = {
@@ -35,6 +35,8 @@ IES_LAB_OPT_RESULT = {
35
35
  'function/ieslab/evaluation': IESLabOptEvaluationResult,
36
36
  }
37
37
 
38
+
39
+
38
40
  RESULT_DB = {
39
41
  'function/CloudPSS/emtp': EMTResult,
40
42
  'function/CloudPSS/emtps': EMTResult,
@@ -60,7 +62,11 @@ class Runner(Generic[T]):
60
62
  self.taskId = taskId
61
63
  self.db = Storage(taskId, name, job, config, revision, modelRid)
62
64
  rid =job['rid'].replace('job-definition/','function/').replace('/cloudpss/','/CloudPSS/')
63
- result = RESULT_DB.get(rid, Result)
65
+ resultClass = kwargs.get('RESULT_DB', None)
66
+ if resultClass is not None:
67
+ result = resultClass
68
+ else:
69
+ result = RESULT_DB.get(rid, Result)
64
70
  self.result: T = result(self.db)
65
71
  self.receiver = kwargs.get('receiver', None)
66
72
 
@@ -85,18 +91,25 @@ class Runner(Generic[T]):
85
91
  return self.receiver.status()
86
92
 
87
93
  def __listen(self, **kwargs):
88
-
89
94
  receiver = kwargs.get('RECEIVER', 'default')
90
- receiverclass = None
91
95
  if type(receiver) is str:
92
96
  if receiver not in RECEIVER:
93
- receiverclass = RECEIVER['default']
97
+ receiver = RECEIVER['default']
94
98
  else:
95
- receiverclass = RECEIVER[receiver]
96
- if receiverclass is None:
99
+ receiver = RECEIVER[receiver]
100
+ if receiver is None:
97
101
  raise Exception('not find receiver')
98
- self.receiver = receiverclass(self.taskId, self.db, **kwargs)
102
+ self.receiver = receiver(self.taskId, self.db, **kwargs)
99
103
  self.receiver.connect()
104
+ def statusCode(self):
105
+ query="mutation($_a:JobInput!){job(input:$_a){status}}"
106
+ variables= {
107
+ "_a": {
108
+ "id": self.jobId,
109
+ }
110
+ }
111
+
112
+ return graphql_request(query,variables=variables)
100
113
 
101
114
  def terminate(self):
102
115
  """
@@ -143,19 +156,21 @@ class Runner(Generic[T]):
143
156
  tres[k] = float(v) # type: ignore
144
157
  policy["tres"] = tres
145
158
  function = job["rid"].replace("job-definition/cloudpss/", "function/CloudPSS/")
146
- implement = kwargs.get("implement", None)
159
+ implement = kwargs.get("implement", kwargs.get("topology", None))
147
160
  debug = job["args"].get("@debug", None )
148
161
  debugargs={}
149
162
  if debug is not None:
150
163
  t= [ i.split('=') for i in re.split(r'\s+',debug) if i.find('=')>0]
151
164
  for i in t:
152
165
  debugargs[i[0]]=i[1]
153
-
166
+
154
167
  context= [
155
168
  function,
156
- rid,
169
+
157
170
  f"model/@sdk/{str(int(time.time() * random.random()))}",
158
171
  ]
172
+ if rid != '':
173
+ context.append(rid)
159
174
 
160
175
  PARENT_JOB_ID =kwargs.get("PARENT_JOB_ID",None)
161
176
  if PARENT_JOB_ID is not None:
@@ -240,7 +255,7 @@ class HttpRunner(Runner[T]):
240
255
  if self.__taskId is None:
241
256
  return False
242
257
  return self.result.status() # type: ignore
243
-
258
+
244
259
 
245
260
  class HttpOPTRunner(Runner[T]):
246
261
 
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.4'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cloudpss
3
- Version: 4.5.2
3
+ Version: 4.5.4
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=eJ8OYidXDfUgR7pcVdkRwEQu5YpveM95hNxT7NMWs1Y,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
@@ -29,10 +29,10 @@ cloudpss/ieslab/EvaluationModel.py,sha256=hGZmuaB8lL9LVti_TCG-qCfK_bA-HJgdxYt7oM
29
29
  cloudpss/ieslab/IESLabOpt.py,sha256=KMswh-q_RpM_HU8HtKLj05p-AKBwnNrc37zy7pq6cf8,9063
30
30
  cloudpss/ieslab/IESLabPlan.py,sha256=rEf1W2pT_J3C8-TFFHVm8Llli9ySSXbBeRpd6Yz9Glk,8345
31
31
  cloudpss/ieslab/IESLabSimulation.py,sha256=-EJFkhklN9ao-nbfk7Lz6JCHboFCSDcn5R2jr3_Z7_A,4046
32
- cloudpss/ieslab/PlanModel.py,sha256=WHvXWNFgi7fO_M-sL9empRgHR5riCj1jeThBRT-oqEc,14088
32
+ cloudpss/ieslab/PlanModel.py,sha256=fLWzVnRiyYRHchG2xsfUH-oCUmnF1uwbDuWNC750dWw,12612
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
@@ -64,17 +64,17 @@ cloudpss/runner/MessageStreamReceiver.py,sha256=dT-rKslQbRt3bMTGXupa1YrocHl2zTWO
64
64
  cloudpss/runner/__init__.py,sha256=FxiYYmssbZgRjieySzi43yPiWEF6eNos2UsoFQeD2H8,341
65
65
  cloudpss/runner/receiver.py,sha256=QU0RsbCt0EK7sCLHzfj8_QQsuPNfqXxpZi5JKm6roxA,4162
66
66
  cloudpss/runner/result.py,sha256=GFpd7848gsLRuzhVcWbCwmAjR84Lhik_3pNCjOV8VOY,13291
67
- cloudpss/runner/runner.py,sha256=pfidTchkoVTFUB9pUmZn9ulVDag9DLGo0pIxsD-nRu0,9168
67
+ cloudpss/runner/runner.py,sha256=SJkEjDnrmRPmq1t8sbZtIbYaq-wQblv6Yx9RnyWz4c8,9583
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.4.dist-info/METADATA,sha256=Dc5A9wx9LibDHiUKGW1e2w41ahE5okSTtlZ92UC_-pA,2401
78
+ cloudpss-4.5.4.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
79
+ cloudpss-4.5.4.dist-info/top_level.txt,sha256=wS9qPU4-aWM9ouzMOx34Nlq-GkdQKpr9vBskwut1BD8,9
80
+ cloudpss-4.5.4.dist-info/RECORD,,