cloudpss 4.1.1b8__py3-none-any.whl → 4.5.0__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.
- cloudpss/__init__.py +2 -3
- cloudpss/asyncio/__init__.py +8 -0
- cloudpss/asyncio/job/__init__.py +5 -0
- cloudpss/asyncio/job/job.py +116 -0
- cloudpss/asyncio/job/messageStreamReceiver.py +121 -0
- cloudpss/asyncio/job/messageStreamSender.py +45 -0
- cloudpss/asyncio/model/__init__.py +5 -0
- cloudpss/asyncio/model/model.py +257 -0
- cloudpss/asyncio/model/revision.py +41 -0
- cloudpss/asyncio/model/topology.py +34 -0
- cloudpss/asyncio/utils/__init__.py +6 -0
- cloudpss/{utils → asyncio/utils}/httpAsyncRequest.py +2 -2
- cloudpss/function/functionExecution.py +36 -3
- cloudpss/ieslab/DataManageModel.py +131 -9
- cloudpss/ieslab/EvaluationModel.py +80 -9
- cloudpss/ieslab/IESLabOpt.py +235 -0
- cloudpss/ieslab/IESLabPlan.py +82 -4
- cloudpss/ieslab/IESLabSimulation.py +59 -32
- cloudpss/ieslab/PlanModel.py +276 -33
- cloudpss/ieslab/__init__.py +2 -1
- cloudpss/job/job.py +136 -141
- cloudpss/job/jobReceiver.py +8 -2
- cloudpss/job/messageStreamReceiver.py +42 -99
- cloudpss/job/messageStreamSender.py +5 -42
- cloudpss/job/{view/EMTView.py → result/EMTResult.py} +11 -13
- cloudpss/job/result/IESLabSimulationResult.py +5 -0
- cloudpss/job/result/IESLabTypicalDayResult.py +136 -0
- cloudpss/job/{view/IESView.py → result/IESResult.py} +2 -2
- cloudpss/job/{view/PowerFlowView.py → result/PowerFlowResult.py} +2 -2
- cloudpss/job/result/__init__.py +39 -0
- cloudpss/job/{view/view.py → result/result.py} +37 -8
- cloudpss/model/implements/diagram.py +113 -0
- cloudpss/model/jobDefinitions.py +6 -6
- cloudpss/model/model.py +232 -209
- cloudpss/model/revision.py +30 -35
- cloudpss/model/topology.py +13 -15
- cloudpss/runner/IESLabEvaluationResult.py +14 -6
- cloudpss/runner/IESLabPlanResult.py +91 -35
- cloudpss/runner/IESLabTypicalDayResult.py +62 -50
- cloudpss/runner/MessageStreamReceiver.py +5 -100
- cloudpss/runner/result.py +6 -1
- cloudpss/runner/runner.py +77 -48
- cloudpss/utils/IO.py +1 -1
- cloudpss/utils/graphqlUtil.py +3 -2
- cloudpss/utils/httprequests.py +16 -8
- cloudpss/version.py +1 -1
- {cloudpss-4.1.1b8.dist-info → cloudpss-4.5.0.dist-info}/METADATA +2 -2
- cloudpss-4.5.0.dist-info/RECORD +70 -0
- cloudpss/dslab/__init__.py +0 -2
- cloudpss/dslab/dataManageModel.py +0 -275
- cloudpss/dslab/dslab.py +0 -210
- cloudpss/dslab/files/__init__.py +0 -2
- cloudpss/dslab/files/curveData.py +0 -140229
- cloudpss/dslab/files/files.py +0 -27
- cloudpss/dslab/financialAnalysisModel.py +0 -137
- cloudpss/job/jobMachine.py +0 -11
- cloudpss/job/jobPolicy.py +0 -129
- cloudpss/job/jobQueue.py +0 -14
- cloudpss/job/jobTres.py +0 -6
- cloudpss/job/view/IESLabSimulationView.py +0 -5
- cloudpss/job/view/IESLabTypicalDayView.py +0 -27
- cloudpss/job/view/__init__.py +0 -42
- cloudpss/runner/DSLabResult.py +0 -92
- cloudpss-4.1.1b8.dist-info/RECORD +0 -71
- /cloudpss/{utils → asyncio/utils}/AsyncIterable.py +0 -0
- {cloudpss-4.1.1b8.dist-info → cloudpss-4.5.0.dist-info}/WHEEL +0 -0
- {cloudpss-4.1.1b8.dist-info → cloudpss-4.5.0.dist-info}/top_level.txt +0 -0
| @@ -0,0 +1,70 @@ | |
| 1 | 
            +
            cloudpss/__init__.py,sha256=1RNmUBhoxYUutZiTS-XJ9yBoNGGh8Mpt1uY6ETlSBDc,825
         | 
| 2 | 
            +
            cloudpss/verify.py,sha256=KF4Gd59DGvCyIEkRD7rNnekWw22XxJpi3DW6keb6j4c,1498
         | 
| 3 | 
            +
            cloudpss/version.py,sha256=HaOseJV0nETY7vuc6nTB--QspPRY8EjMG1dfpPti9Do,22
         | 
| 4 | 
            +
            cloudpss/asyncio/__init__.py,sha256=CJGopQl_vz3z3fJsK7NjMX5uzkzfrJrbqKVhyYqlYWc,198
         | 
| 5 | 
            +
            cloudpss/asyncio/job/__init__.py,sha256=3UIFZYjJTzuckM61o8kim1c3PWt2SSHTL72jrGu5IzI,51
         | 
| 6 | 
            +
            cloudpss/asyncio/job/job.py,sha256=Bn2BEERw1J8YarFauTzVrGJK7nmaoMsdlrFUqiHRth4,3897
         | 
| 7 | 
            +
            cloudpss/asyncio/job/messageStreamReceiver.py,sha256=LIEBmum2IRgeME8dO460B7MyF9esQIFFAo7bSrhZI5o,3864
         | 
| 8 | 
            +
            cloudpss/asyncio/job/messageStreamSender.py,sha256=rrSWnvveG6cP0hmGGKOwSvJsXWhVE0k1u1Z2VlPZQGo,1594
         | 
| 9 | 
            +
            cloudpss/asyncio/model/__init__.py,sha256=SNq-bfwcQtDHtTNBYppfUEs8wkjfrQfGeywx7igmvOs,151
         | 
| 10 | 
            +
            cloudpss/asyncio/model/model.py,sha256=vso4en-pnV2kpzNiQ9d-LyqHyM0H6MUbC5vFdvzi_aw,8627
         | 
| 11 | 
            +
            cloudpss/asyncio/model/revision.py,sha256=pcKNErIzyftq4_1CCQxArx6OeCuNMGInJHH97EBQ1lA,1568
         | 
| 12 | 
            +
            cloudpss/asyncio/model/topology.py,sha256=jouPmteTxpTV6mFzUGy7CiSEnBrbtCu-1shimJvC2FA,1192
         | 
| 13 | 
            +
            cloudpss/asyncio/utils/AsyncIterable.py,sha256=AIWYrTnmjsIfOowE3asZlexdHNhpK2gm7aucfyyVoQw,781
         | 
| 14 | 
            +
            cloudpss/asyncio/utils/__init__.py,sha256=F-rCvgRAGcV-fFO7o-dsXwooyhcVpElWoBEQM67kO7c,84
         | 
| 15 | 
            +
            cloudpss/asyncio/utils/httpAsyncRequest.py,sha256=KIck-3uQwGcHMIJ6632_Zo0syc4GnNG2EoUXmQh54ck,2692
         | 
| 16 | 
            +
            cloudpss/function/__init__.py,sha256=TNzChB-gQF6oB62F423evpUlgcp6s03D4pKKs89Lz4Q,1629
         | 
| 17 | 
            +
            cloudpss/function/function.py,sha256=llomkfnTmKMiFJYJ2mKnmAEoIjTNVCnjCUUyiJMOV1s,29
         | 
| 18 | 
            +
            cloudpss/function/functionExecution.py,sha256=4SR2qJbXntOjjSOrUmbjvBqED1nJyhVpI6WZKUFs1lQ,15761
         | 
| 19 | 
            +
            cloudpss/function/job.py,sha256=LdzaTyjvBcMZIyLstSZnt79d2eREljx2HnNoilDp03A,13162
         | 
| 20 | 
            +
            cloudpss/ieslab/DataManageModel.py,sha256=PH5-V1TCJ8No2NIqXu-RYHhlqCimwuCSO0Qbg4OjDq8,25323
         | 
| 21 | 
            +
            cloudpss/ieslab/EvaluationModel.py,sha256=hGZmuaB8lL9LVti_TCG-qCfK_bA-HJgdxYt7oMmVrXY,9399
         | 
| 22 | 
            +
            cloudpss/ieslab/IESLabOpt.py,sha256=KMswh-q_RpM_HU8HtKLj05p-AKBwnNrc37zy7pq6cf8,9063
         | 
| 23 | 
            +
            cloudpss/ieslab/IESLabPlan.py,sha256=rEf1W2pT_J3C8-TFFHVm8Llli9ySSXbBeRpd6Yz9Glk,8345
         | 
| 24 | 
            +
            cloudpss/ieslab/IESLabSimulation.py,sha256=-EJFkhklN9ao-nbfk7Lz6JCHboFCSDcn5R2jr3_Z7_A,4046
         | 
| 25 | 
            +
            cloudpss/ieslab/PlanModel.py,sha256=WHvXWNFgi7fO_M-sL9empRgHR5riCj1jeThBRT-oqEc,14088
         | 
| 26 | 
            +
            cloudpss/ieslab/__init__.py,sha256=gr1rXYw9vIAGOe60eg7LyMHP7QDXvNf4dJ5GTR_kj1Y,232
         | 
| 27 | 
            +
            cloudpss/job/__init__.py,sha256=3UIFZYjJTzuckM61o8kim1c3PWt2SSHTL72jrGu5IzI,51
         | 
| 28 | 
            +
            cloudpss/job/job.py,sha256=ciphBMfRkIK1bvZ1zrbuISojXiixoNwQRlCzfEVWOa8,8240
         | 
| 29 | 
            +
            cloudpss/job/jobReceiver.py,sha256=PNYxcN33LiXZVyc4tzhPlpWxKnyWO_ElKjJ9wsxsroI,925
         | 
| 30 | 
            +
            cloudpss/job/messageStreamReceiver.py,sha256=VvrDewFjiZxMHZJUoMh2_CYC1bmcztY1TrNx0WSsQIU,4133
         | 
| 31 | 
            +
            cloudpss/job/messageStreamSender.py,sha256=MCgMP6Epgu2md_rhZhHeGv8q8sObF_wHfL3WpANoreM,2371
         | 
| 32 | 
            +
            cloudpss/job/result/EMTResult.py,sha256=xC9ws7bH-2nhpF8lqzZLqcOL-IcYS-JeBboEHgX96wk,6941
         | 
| 33 | 
            +
            cloudpss/job/result/IESLabSimulationResult.py,sha256=a47Ic1vvfHTK_vEokOZxJBnQReqYOWux_aePPic_Hrs,84
         | 
| 34 | 
            +
            cloudpss/job/result/IESLabTypicalDayResult.py,sha256=0u8FrxDUpujJvCWRk4jRtHzw-WHmvPR38nKj6-iccw4,7827
         | 
| 35 | 
            +
            cloudpss/job/result/IESResult.py,sha256=TLMTlDuvTUWnsJSUxXt8XTlXZGaVPmxZwia_JOcej88,3852
         | 
| 36 | 
            +
            cloudpss/job/result/PowerFlowResult.py,sha256=KoImlmsEEZyMriuoE_MSHBQu4k9MSDUuZ8E2SRLndWE,2097
         | 
| 37 | 
            +
            cloudpss/job/result/__init__.py,sha256=irh05EkRXewQz_khP5Da0h_GoNBE5Biyx_ycoXnI7Is,1502
         | 
| 38 | 
            +
            cloudpss/job/result/result.py,sha256=kNAQ0X605pKRVFZ0FGULZn177zoPCrMeXLE7eCAVjFA,4282
         | 
| 39 | 
            +
            cloudpss/model/__init__.py,sha256=SNq-bfwcQtDHtTNBYppfUEs8wkjfrQfGeywx7igmvOs,151
         | 
| 40 | 
            +
            cloudpss/model/jobDefinitions.py,sha256=uuTwpqStlg3YDmfxbU2PVi_Tf18opa0kYLCMGaOP-qA,3749
         | 
| 41 | 
            +
            cloudpss/model/model.py,sha256=gYMBf_jspoRSwb0QgARvJGXVtDlaQvQjp_B9QMYvXwE,27170
         | 
| 42 | 
            +
            cloudpss/model/revision.py,sha256=IFznBKirwpfqadyCNJWPGL7lTpQxbCmU1fxdI5AvoA4,4002
         | 
| 43 | 
            +
            cloudpss/model/topology.py,sha256=tKaOACAw9r9SppgxrhK-ZjMsG_jGLiNOzPnlIPLo964,2333
         | 
| 44 | 
            +
            cloudpss/model/implements/__init__.py,sha256=88L_wF9SSzxsbtqwStWIPH4LxaKq7TVcssHQ62YBnls,67
         | 
| 45 | 
            +
            cloudpss/model/implements/component.py,sha256=uNSpkZKChdXLiO40Ev4P3oQ1di2Hu4YjcBOb0I8Bf0c,734
         | 
| 46 | 
            +
            cloudpss/model/implements/diagram.py,sha256=25g40EhqcFsqNeTQYEG2mqxV_oG0B0kb3xT_NvN7ia8,4582
         | 
| 47 | 
            +
            cloudpss/model/implements/implement.py,sha256=Uld96tjXVDbVUNV8xscyy_nZWLHr3iP2DqA6S3p-XJE,954
         | 
| 48 | 
            +
            cloudpss/project/__init__.py,sha256=fpskY-cJGmMcTg1naVzNPtJaRG1xmSc2CFjDTin64Cw,51
         | 
| 49 | 
            +
            cloudpss/project/project.py,sha256=uFhOnM8ngo1_ZYz2uArtORKZquYNdOIVLXU_q1MDFI4,17698
         | 
| 50 | 
            +
            cloudpss/runner/IESLabEvaluationResult.py,sha256=rsKbSJ9zsgyMYP-oIWsJlSXGxs7Y-44rj45Fn6NJXMA,5998
         | 
| 51 | 
            +
            cloudpss/runner/IESLabPlanResult.py,sha256=pbUq2YCPBE01Sy9e9X5Wp8OZ4PJhUkUb-28b5CEzqxc,8874
         | 
| 52 | 
            +
            cloudpss/runner/IESLabTypicalDayResult.py,sha256=-9D0TRsXEYJIgGKYFPZHjR7URyPypN7jfPc1lohFJ0c,8175
         | 
| 53 | 
            +
            cloudpss/runner/MessageStreamReceiver.py,sha256=dT-rKslQbRt3bMTGXupa1YrocHl2zTWOCHlsXcbgfhs,2812
         | 
| 54 | 
            +
            cloudpss/runner/__init__.py,sha256=FxiYYmssbZgRjieySzi43yPiWEF6eNos2UsoFQeD2H8,341
         | 
| 55 | 
            +
            cloudpss/runner/receiver.py,sha256=QU0RsbCt0EK7sCLHzfj8_QQsuPNfqXxpZi5JKm6roxA,4162
         | 
| 56 | 
            +
            cloudpss/runner/result.py,sha256=GFpd7848gsLRuzhVcWbCwmAjR84Lhik_3pNCjOV8VOY,13291
         | 
| 57 | 
            +
            cloudpss/runner/runner.py,sha256=pfidTchkoVTFUB9pUmZn9ulVDag9DLGo0pIxsD-nRu0,9168
         | 
| 58 | 
            +
            cloudpss/runner/storage.py,sha256=zFET_zwPIOF2Cnh9sgFiS0HFxV1OmVsU34bGUQ6PpkA,4162
         | 
| 59 | 
            +
            cloudpss/runner/transform.py,sha256=krOgTZiJSJAb5QSwerAqlbC4Ma0PKi__0WOZlAxw4O8,11613
         | 
| 60 | 
            +
            cloudpss/utils/IO.py,sha256=sm6p53AFgE1b56Bh0qt_E2TFP5tLr0WQDzIVRlsNgFA,5321
         | 
| 61 | 
            +
            cloudpss/utils/__init__.py,sha256=jWVHSOqJQWU0fpg2UbWSEQoLCb2Uys-vH5Uqkb0ihNA,326
         | 
| 62 | 
            +
            cloudpss/utils/dataEncoder.py,sha256=5PUPb844eOGgFnYrMM8bdjdKH_MZz0lk-67uo8TvwEo,885
         | 
| 63 | 
            +
            cloudpss/utils/graphqlUtil.py,sha256=zGEhRZvy5JMipFKFxjDmbc-HQP3aPZ5noDwi-RTXWSk,280
         | 
| 64 | 
            +
            cloudpss/utils/httprequests.py,sha256=uUUNKlrcafLXCkRLv6hbtwJTlRtV7j_LSGCr4rVOR24,1863
         | 
| 65 | 
            +
            cloudpss/utils/matlab.py,sha256=SLwVt790BjklJK2XNELt9R2n_1ej9Y8QsTIdFkKXLWE,795
         | 
| 66 | 
            +
            cloudpss/utils/yamlLoader.py,sha256=bv_vPDK_e0n_vZ5FwpDJ_NJWqMAwfU3AbhkvQIxPCy4,2677
         | 
| 67 | 
            +
            cloudpss-4.5.0.dist-info/METADATA,sha256=HS9lbyPqjBi9ZOBW3EO6xv7VRdfX-d0pm86cTy8XwzU,2401
         | 
| 68 | 
            +
            cloudpss-4.5.0.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
         | 
| 69 | 
            +
            cloudpss-4.5.0.dist-info/top_level.txt,sha256=wS9qPU4-aWM9ouzMOx34Nlq-GkdQKpr9vBskwut1BD8,9
         | 
| 70 | 
            +
            cloudpss-4.5.0.dist-info/RECORD,,
         | 
    
        cloudpss/dslab/__init__.py
    DELETED
    
    
| @@ -1,275 +0,0 @@ | |
| 1 | 
            -
            from ..utils import request, fileLoad, graphql_request
         | 
| 2 | 
            -
            import json
         | 
| 3 | 
            -
            import time, datetime
         | 
| 4 | 
            -
            import copy
         | 
| 5 | 
            -
            import os 
         | 
| 6 | 
            -
            from cloudpss.dslab.files import getCurveData
         | 
| 7 | 
            -
             | 
| 8 | 
            -
            class DataManageModel(object):
         | 
| 9 | 
            -
                _weatherUrl = ''
         | 
| 10 | 
            -
                _baseUri = ''
         | 
| 11 | 
            -
                _kindUrlMap = {}
         | 
| 12 | 
            -
                _itemDataMap={}
         | 
| 13 | 
            -
                _kindItemDataMap={}
         | 
| 14 | 
            -
                _kindIdMap={}
         | 
| 15 | 
            -
             | 
| 16 | 
            -
                def __init__(self, resourceId):
         | 
| 17 | 
            -
                    self.resourceId = resourceId
         | 
| 18 | 
            -
                    self._fetchTypes()
         | 
| 19 | 
            -
                def _status(self):
         | 
| 20 | 
            -
                    '''
         | 
| 21 | 
            -
                        获取运行状态
         | 
| 22 | 
            -
             | 
| 23 | 
            -
                        :return: boolean 类型
         | 
| 24 | 
            -
                    '''
         | 
| 25 | 
            -
                    pass
         | 
| 26 | 
            -
                def _fetchTypes(self):
         | 
| 27 | 
            -
                    '''
         | 
| 28 | 
            -
                        获取所有数据项的类型
         | 
| 29 | 
            -
             | 
| 30 | 
            -
                        :return: list 类型,返回所有数据项的类型
         | 
| 31 | 
            -
                    '''
         | 
| 32 | 
            -
                    url = f"{self._baseUri}rest/types"
         | 
| 33 | 
            -
                    r = request('GET',url)
         | 
| 34 | 
            -
                    types = json.loads(r.text)
         | 
| 35 | 
            -
                    self._kindUrlMap = {kind['name']: f"api/dslab/rest/{kind['name']}" for kind in types}
         | 
| 36 | 
            -
                def _fetchItemData(self, url):
         | 
| 37 | 
            -
                    '''
         | 
| 38 | 
            -
                        私有方法,获取simu对应所有数据项的列表
         | 
| 39 | 
            -
                        :params: url string类型,request请求对应的url链接
         | 
| 40 | 
            -
                        
         | 
| 41 | 
            -
                        :return: list类型,返回该种类下所有数据项的的列表
         | 
| 42 | 
            -
                    '''
         | 
| 43 | 
            -
                    r = request('GET',
         | 
| 44 | 
            -
                                url,
         | 
| 45 | 
            -
                                params={
         | 
| 46 | 
            -
                                    "simu": self.resourceId,
         | 
| 47 | 
            -
                                })
         | 
| 48 | 
            -
                    return json.loads(r.text)
         | 
| 49 | 
            -
                
         | 
| 50 | 
            -
                def _saveItemData(self, url, data):
         | 
| 51 | 
            -
                    '''
         | 
| 52 | 
            -
                        私有方法,保存url链接对应的data数据
         | 
| 53 | 
            -
                        :params: url string类型,request请求对应的url链接
         | 
| 54 | 
            -
                        :params: data dict类型,表示添加的数据内容,其数据结构应满足对应数据项的结构要求
         | 
| 55 | 
            -
                        
         | 
| 56 | 
            -
                        :return: 无
         | 
| 57 | 
            -
                    '''
         | 
| 58 | 
            -
                    r = request('POST', url, data=json.dumps(data))
         | 
| 59 | 
            -
                    
         | 
| 60 | 
            -
             | 
| 61 | 
            -
                def _updateItemData(self, url, data):
         | 
| 62 | 
            -
                    '''
         | 
| 63 | 
            -
                        私有方法,更新url链接对应的data数据
         | 
| 64 | 
            -
                        :params: url string类型,request请求对应的url链接
         | 
| 65 | 
            -
                        :params: data dict类型,表示添加的数据内容,其数据结构应满足对应数据项的结构要求
         | 
| 66 | 
            -
                        
         | 
| 67 | 
            -
                        :return: 无
         | 
| 68 | 
            -
                    '''
         | 
| 69 | 
            -
                    r = request('PUT', url, data=json.dumps(data))
         | 
| 70 | 
            -
                
         | 
| 71 | 
            -
                def _deleteItemData(self, url):
         | 
| 72 | 
            -
                    '''
         | 
| 73 | 
            -
                        私有方法,删除url链接对应的数据
         | 
| 74 | 
            -
                        :params: url string类型,request请求对应的url链接
         | 
| 75 | 
            -
                        
         | 
| 76 | 
            -
                        :return: 无
         | 
| 77 | 
            -
                    '''
         | 
| 78 | 
            -
                    r = request('DELETE',url)
         | 
| 79 | 
            -
             | 
| 80 | 
            -
                def LocationGet(self):
         | 
| 81 | 
            -
                    '''
         | 
| 82 | 
            -
                        获取气象定位点数据
         | 
| 83 | 
            -
             | 
| 84 | 
            -
                        :return: list<dict>类型,为源数据的引用,包含id,经度坐标,纬度坐标,定位点名称
         | 
| 85 | 
            -
                    '''
         | 
| 86 | 
            -
                    url = f"{self._baseUri}rest/location"
         | 
| 87 | 
            -
                    r = request('GET',
         | 
| 88 | 
            -
                        url,
         | 
| 89 | 
            -
                        params={"simu": self.resourceId})
         | 
| 90 | 
            -
                    return json.loads(r.text)
         | 
| 91 | 
            -
             | 
| 92 | 
            -
                def LocationCreate(self, name=None, longitude=None, latitude=None):
         | 
| 93 | 
            -
                    '''
         | 
| 94 | 
            -
                        创建气象定位点
         | 
| 95 | 
            -
                        :param: name 定位点名称,可选
         | 
| 96 | 
            -
                        :params: longitude float类型,可选,表示经度,范围为气象数据源的经度范围
         | 
| 97 | 
            -
                        :params: latitude float类型,可选,表示纬度,范围为气象数据源的纬度范围
         | 
| 98 | 
            -
                
         | 
| 99 | 
            -
                        :return: 无
         | 
| 100 | 
            -
                    '''
         | 
| 101 | 
            -
                    url = f"{self._baseUri}rest/location"
         | 
| 102 | 
            -
                    r = request('POST',
         | 
| 103 | 
            -
                        url,
         | 
| 104 | 
            -
                        data=json.dumps({
         | 
| 105 | 
            -
                            "lat": latitude  if latitude is not None else '34.734492',
         | 
| 106 | 
            -
                            "lng": longitude if longitude is not None else '113.648906',
         | 
| 107 | 
            -
                            "simu": self.resourceId,
         | 
| 108 | 
            -
                            "name": name if name is not None else '定位点'
         | 
| 109 | 
            -
                        }))
         | 
| 110 | 
            -
                    d = json.loads(r.text)
         | 
| 111 | 
            -
                    
         | 
| 112 | 
            -
                def LocationUpdate(self, id, name, longitude, latitude):
         | 
| 113 | 
            -
                    '''
         | 
| 114 | 
            -
                        修改气象定位点
         | 
| 115 | 
            -
                        :param id: 定位点id
         | 
| 116 | 
            -
                        :param: name 定位点名称,可选
         | 
| 117 | 
            -
                        :params: longitude float类型,可选,表示经度,范围为气象数据源的经度范围
         | 
| 118 | 
            -
                        :params: latitude float类型,可选,表示纬度,范围为气象数据源的纬度范围
         | 
| 119 | 
            -
                
         | 
| 120 | 
            -
                        :return: 无
         | 
| 121 | 
            -
                    '''
         | 
| 122 | 
            -
                    if (float(longitude) > 180 or float(longitude) < -180
         | 
| 123 | 
            -
                        or float(latitude) > 90 or float(latitude) < -90):
         | 
| 124 | 
            -
                        raise Exception('经纬度坐标不存在')
         | 
| 125 | 
            -
                    else:
         | 
| 126 | 
            -
                        url = f"{self._baseUri}rest/location"
         | 
| 127 | 
            -
                        r = request('PUT',
         | 
| 128 | 
            -
                            url,
         | 
| 129 | 
            -
                            data=json.dumps({
         | 
| 130 | 
            -
                                "lat": latitude,
         | 
| 131 | 
            -
                                "lng": longitude,
         | 
| 132 | 
            -
                                "simu": self.resourceId,
         | 
| 133 | 
            -
                                "name": name,
         | 
| 134 | 
            -
                                "id": id
         | 
| 135 | 
            -
                            }))
         | 
| 136 | 
            -
                        
         | 
| 137 | 
            -
                def LocationDelete(self, id):
         | 
| 138 | 
            -
                    '''
         | 
| 139 | 
            -
                        删除气象定位点
         | 
| 140 | 
            -
                        :param id: 定位点id
         | 
| 141 | 
            -
             | 
| 142 | 
            -
                        :return: 无
         | 
| 143 | 
            -
                    '''
         | 
| 144 | 
            -
                    url = f"{self._baseUri}rest/location/{str(id)}"
         | 
| 145 | 
            -
                    r = request('DELETE',
         | 
| 146 | 
            -
                            url)
         | 
| 147 | 
            -
             | 
| 148 | 
            -
                def LoadWeather(self):
         | 
| 149 | 
            -
                    '''
         | 
| 150 | 
            -
                        加载气象数据
         | 
| 151 | 
            -
             | 
| 152 | 
            -
                        :return: 无
         | 
| 153 | 
            -
                    '''
         | 
| 154 | 
            -
                    url = f"{self._baseUri}rest/load_weather"
         | 
| 155 | 
            -
                    r = request('GET',
         | 
| 156 | 
            -
                        url,
         | 
| 157 | 
            -
                        params = {
         | 
| 158 | 
            -
                            "simu": self.resourceId,
         | 
| 159 | 
            -
                        })
         | 
| 160 | 
            -
                    
         | 
| 161 | 
            -
                def GetAtmosData(self, locationId, date):
         | 
| 162 | 
            -
                    '''
         | 
| 163 | 
            -
                        获取日期在date的气象数据
         | 
| 164 | 
            -
                        :params: locationId str类型,表示定位点id
         | 
| 165 | 
            -
                        :params: date dateTime类型,表示时间
         | 
| 166 | 
            -
                        
         | 
| 167 | 
            -
                        :return: list<dict>类型,为源数据的引用,返回当前项目位置对应时间范围内的气象数据序列,每个元素用字典进行表示,字典的key即区分不同的气象数据项(如风速、太阳辐照等)以及标识当前时间点
         | 
| 168 | 
            -
                    '''
         | 
| 169 | 
            -
                    rDate = datetime.date(*map(int, date.split('-')))
         | 
| 170 | 
            -
                    r = request('GET',
         | 
| 171 | 
            -
                                self._weatherUrl, 
         | 
| 172 | 
            -
                                params={
         | 
| 173 | 
            -
                                    "locationId": str(locationId),
         | 
| 174 | 
            -
                                    "date": rDate,
         | 
| 175 | 
            -
                                })
         | 
| 176 | 
            -
                    return json.loads(r.text)
         | 
| 177 | 
            -
                
         | 
| 178 | 
            -
                def AddDataItem(self, kind, data, extra=None):
         | 
| 179 | 
            -
                    '''
         | 
| 180 | 
            -
                        向kind类型的数据库中添加内容为data的数据项
         | 
| 181 | 
            -
                        :params: kind str类型,数据的种类标识,包含:光伏、光伏曲线、风机、风机曲线、燃气、燃气曲线、水电、水电曲线、火电、火电曲线、生物质发电、生物质发电曲线、垃圾电厂、垃圾电厂曲线、传输线、变压器、开关、负荷分类、负荷用户、储能设备、储能运行策略、上网电价、输配电价、常数电价、阶梯电价、分时电价、分时阶梯电价
         | 
| 182 | 
            -
                        :params: data dict类型,表示添加的数据内容,其数据结构应满足对应数据项的结构要求
         | 
| 183 | 
            -
                        :params extra list类型,表示添加的基准出力曲线、负荷曲线、策略曲线数据
         | 
| 184 | 
            -
                
         | 
| 185 | 
            -
                        :return: list<dict>类型,返回该种类下所有数据项的列表
         | 
| 186 | 
            -
                    '''
         | 
| 187 | 
            -
                    if extra is None or not extra:
         | 
| 188 | 
            -
                        curveData = getCurveData(kind)
         | 
| 189 | 
            -
                        if len(curveData) > 0:
         | 
| 190 | 
            -
                            r = {
         | 
| 191 | 
            -
                                'simu': self.resourceId,
         | 
| 192 | 
            -
                                'name': data.get('name', ''),
         | 
| 193 | 
            -
                                'extra': curveData,
         | 
| 194 | 
            -
                                'data': data.get('data', {}),
         | 
| 195 | 
            -
                            }
         | 
| 196 | 
            -
                            url = f"{self._baseUri}rest/{kind}"
         | 
| 197 | 
            -
                            self._saveItemData(url, r)
         | 
| 198 | 
            -
                            return self._fetchItemData(url)
         | 
| 199 | 
            -
                        else:
         | 
| 200 | 
            -
                            r = {
         | 
| 201 | 
            -
                                'simu': self.resourceId,
         | 
| 202 | 
            -
                                'name': data.get('name', ''),
         | 
| 203 | 
            -
                                'data': data.get('data', {}),
         | 
| 204 | 
            -
                            }
         | 
| 205 | 
            -
                            url = f"{self._baseUri}rest/{kind}"
         | 
| 206 | 
            -
                            self._saveItemData(url, r)
         | 
| 207 | 
            -
                            return self._fetchItemData(url)
         | 
| 208 | 
            -
                    else:
         | 
| 209 | 
            -
                        r = {
         | 
| 210 | 
            -
                            'simu': self.resourceId,
         | 
| 211 | 
            -
                            'name': data.get('name', ''),
         | 
| 212 | 
            -
                            'extra': extra,
         | 
| 213 | 
            -
                            'data': data.get('data', {}),
         | 
| 214 | 
            -
                        }
         | 
| 215 | 
            -
                        url = f"{self._baseUri}rest/{kind}"
         | 
| 216 | 
            -
                        self._saveItemData(url, r)
         | 
| 217 | 
            -
                        return self._fetchItemData(url)
         | 
| 218 | 
            -
             | 
| 219 | 
            -
                def DeleteDataItem(self, id, kind):
         | 
| 220 | 
            -
                    '''
         | 
| 221 | 
            -
                        获取kind类型对应所有数据项的列表
         | 
| 222 | 
            -
                        :params: id int类型,数据的id
         | 
| 223 | 
            -
                        :params: kind str类型,数据的种类标识,包含:光伏、光伏曲线、风机、风机曲线、燃气、燃气曲线、水电、水电曲线、火电、火电曲线、生物质发电、生物质发电曲线、垃圾电厂、垃圾电厂曲线、传输线、变压器、开关、负荷分类、负荷用户、储能设备、储能运行策略、上网电价、输配电价、常数电价、阶梯电价、分时电价、分时阶梯电价
         | 
| 224 | 
            -
                
         | 
| 225 | 
            -
                        :return: list<dict>类型,返回该种类下所有数据项的列表
         | 
| 226 | 
            -
                    '''
         | 
| 227 | 
            -
                    url = f"{self._baseUri}rest/id/{str(id)}"
         | 
| 228 | 
            -
                    self._deleteItemData(url)
         | 
| 229 | 
            -
                    return self._fetchItemData(f"{self._baseUri}rest/{kind}")
         | 
| 230 | 
            -
             | 
| 231 | 
            -
             | 
| 232 | 
            -
                def UpdateDataItem(self, kind, data):
         | 
| 233 | 
            -
                    '''
         | 
| 234 | 
            -
                        更新kind类型对应数据项
         | 
| 235 | 
            -
                        :params: kind str类型,数据的种类标识,包含:光伏、光伏曲线、风机、风机曲线、燃气、燃气曲线、水电、水电曲线、火电、火电曲线、生物质发电、生物质发电曲线、垃圾电厂、垃圾电厂曲线、传输线、变压器、开关、负荷分类、负荷用户、储能设备、储能运行策略、上网电价、输配电价、常数电价、阶梯电价、分时电价、分时阶梯电价
         | 
| 236 | 
            -
                        :params: data dict类型,表示添加的数据内容,其数据结构应满足对应数据项的结构要求
         | 
| 237 | 
            -
                
         | 
| 238 | 
            -
                        :return: list<dict>类型,返回该种类下所有数据项的列表
         | 
| 239 | 
            -
                    '''
         | 
| 240 | 
            -
                    url = f"{self._baseUri}rest/{kind}"
         | 
| 241 | 
            -
                    r = {
         | 
| 242 | 
            -
                        'id': data.get('id', ''),
         | 
| 243 | 
            -
                        'name': data.get('name', ''),
         | 
| 244 | 
            -
                        'data': data.get('data', {}),
         | 
| 245 | 
            -
                    }
         | 
| 246 | 
            -
                    self._updateItemData(url, r)
         | 
| 247 | 
            -
                    return self._fetchItemData(url)
         | 
| 248 | 
            -
             | 
| 249 | 
            -
                    
         | 
| 250 | 
            -
                def GetItemList(self, kind):
         | 
| 251 | 
            -
                    '''
         | 
| 252 | 
            -
                        获取kind类型对应所有数据项的列表
         | 
| 253 | 
            -
                        :params: kind str类型,数据的种类标识,包含:光伏、光伏曲线、风机、风机曲线、燃气、燃气曲线、水电、水电曲线、火电、火电曲线、生物质发电、生物质发电曲线、垃圾电厂、垃圾电厂曲线、传输线、变压器、开关、负荷分类、负荷用户、储能设备、储能运行策略、上网电价、输配电价、常数电价、阶梯电价、分时电价、分时阶梯电价
         | 
| 254 | 
            -
                
         | 
| 255 | 
            -
                        :return: list<dict>类型,返回该种类下所有数据项的列表
         | 
| 256 | 
            -
                    '''
         | 
| 257 | 
            -
                    url = f"{self._baseUri}rest/{kind}"
         | 
| 258 | 
            -
                    return self._fetchItemData(url)
         | 
| 259 | 
            -
                
         | 
| 260 | 
            -
                def GetItemExtra(self, kind, uuid):
         | 
| 261 | 
            -
                    '''
         | 
| 262 | 
            -
                        获取kind类型对应数据项的基准出力曲线、负荷曲线、策略曲线数据
         | 
| 263 | 
            -
                        :params: kind str类型,数据的类型
         | 
| 264 | 
            -
                        :params: uuid str类型,数据的unique id
         | 
| 265 | 
            -
                    '''
         | 
| 266 | 
            -
                    url = f"{self._baseUri}rest/id/{uuid}"
         | 
| 267 | 
            -
                    data = self._fetchItemData(url)
         | 
| 268 | 
            -
                    if data.get('extra', None) is None:
         | 
| 269 | 
            -
                        return None
         | 
| 270 | 
            -
                    return data.get('extra', None).get('data', None)
         | 
| 271 | 
            -
             | 
| 272 | 
            -
            class DSLabDataManageModel(DataManageModel):
         | 
| 273 | 
            -
                _baseUri = 'api/dslab/'
         | 
| 274 | 
            -
                _weatherUrl = 'api/dslab/rest/weather'
         | 
| 275 | 
            -
             | 
    
        cloudpss/dslab/dslab.py
    DELETED
    
    | @@ -1,210 +0,0 @@ | |
| 1 | 
            -
            import json
         | 
| 2 | 
            -
            from ..utils import request
         | 
| 3 | 
            -
            from ..model.model import Model
         | 
| 4 | 
            -
            from .dataManageModel import DSLabDataManageModel
         | 
| 5 | 
            -
            from .financialAnalysisModel import DSLabFinancialAnalysisModel
         | 
| 6 | 
            -
            from cloudpss.runner.DSLabResult import DSLabResult
         | 
| 7 | 
            -
            from cloudpss.runner.runner import Runner
         | 
| 8 | 
            -
            from cloudpss.runner.result import IESResult, EMTResult
         | 
| 9 | 
            -
             | 
| 10 | 
            -
            class DSLab(object):
         | 
| 11 | 
            -
                def __init__(self, project={}):
         | 
| 12 | 
            -
                    '''
         | 
| 13 | 
            -
                        初始化
         | 
| 14 | 
            -
                    '''
         | 
| 15 | 
            -
                    self.id = project.get('id', None)
         | 
| 16 | 
            -
                    self.resource = project.get('resource', None)
         | 
| 17 | 
            -
                    self.name = project.get('name', None)
         | 
| 18 | 
            -
                    self.__modelRid = project.get('model', None)
         | 
| 19 | 
            -
                    if self.__modelRid is not None:
         | 
| 20 | 
            -
                        self.model = Model.fetch(self.__modelRid)
         | 
| 21 | 
            -
                    self.dataManageModel = DSLabDataManageModel(self.resource)
         | 
| 22 | 
            -
                    self.financialAnalysisModel = DSLabFinancialAnalysisModel(self.resource)
         | 
| 23 | 
            -
                    self.currentEvaluationResult = DSLabResult(self.resource)
         | 
| 24 | 
            -
             | 
| 25 | 
            -
                @staticmethod
         | 
| 26 | 
            -
                def fetch(simulationId):
         | 
| 27 | 
            -
                    '''
         | 
| 28 | 
            -
                        获取算例信息
         | 
| 29 | 
            -
             | 
| 30 | 
            -
                        :params: simulationId string类型,代表数据项的算例id
         | 
| 31 | 
            -
             | 
| 32 | 
            -
                        :return: DSLab
         | 
| 33 | 
            -
                    '''
         | 
| 34 | 
            -
                    try:
         | 
| 35 | 
            -
                        r = request(
         | 
| 36 | 
            -
                            'GET', 'api/dslab/rest/simulation/{0}'.format(simulationId))
         | 
| 37 | 
            -
                        project = json.loads(r.text)
         | 
| 38 | 
            -
                        return DSLab(project)
         | 
| 39 | 
            -
                    except Exception as e:
         | 
| 40 | 
            -
                        if 'Unauthorized' in str(e): 
         | 
| 41 | 
            -
                            raise Exception('token 无效')
         | 
| 42 | 
            -
                        else:
         | 
| 43 | 
            -
                            raise Exception('未查询到当前算例')
         | 
| 44 | 
            -
             | 
| 45 | 
            -
                def run(self, job=None, name=None):
         | 
| 46 | 
            -
                    '''
         | 
| 47 | 
            -
                        调用仿真 
         | 
| 48 | 
            -
             | 
| 49 | 
            -
                        :params job:  调用仿真时使用的计算方案,不指定将使用算例保存时选中的计算方案
         | 
| 50 | 
            -
                        :params name:  任务名称,为空时使用项目的参数方案名称和计算方案名称
         | 
| 51 | 
            -
             | 
| 52 | 
            -
                        :return: 返回一个运行实例
         | 
| 53 | 
            -
                    '''
         | 
| 54 | 
            -
                    if job is None:
         | 
| 55 | 
            -
                        currentJob = self.model.context['currentJob']
         | 
| 56 | 
            -
                        job = self.model.jobs[currentJob]
         | 
| 57 | 
            -
             | 
| 58 | 
            -
                    job['args']['simulationId'] = self.resource
         | 
| 59 | 
            -
                    return self.model.run(job, name=name)
         | 
| 60 | 
            -
                
         | 
| 61 | 
            -
                def dsLabRun(self):
         | 
| 62 | 
            -
                    '''
         | 
| 63 | 
            -
                        生成方案优选算例
         | 
| 64 | 
            -
             | 
| 65 | 
            -
                        :return: 方案优选运行实例
         | 
| 66 | 
            -
                    '''
         | 
| 67 | 
            -
                pass
         | 
| 68 | 
            -
             | 
| 69 | 
            -
                def dsLabFinancialRun(self, planID):
         | 
| 70 | 
            -
                    '''
         | 
| 71 | 
            -
                        运行技术经济分析
         | 
| 72 | 
            -
                        :param planID int 类型,表示优化方案的ID,数值位于0~优化方案数量之间
         | 
| 73 | 
            -
             | 
| 74 | 
            -
                        :return: 技术经济分析实例
         | 
| 75 | 
            -
             | 
| 76 | 
            -
                    '''
         | 
| 77 | 
            -
                    return self.financialAnalysisModel.run(planID)
         | 
| 78 | 
            -
                
         | 
| 79 | 
            -
             | 
| 80 | 
            -
                def runIESLoadPrediction(self,job=None,name=None, **kwargs)->Runner[IESResult]:
         | 
| 81 | 
            -
                    '''
         | 
| 82 | 
            -
                        运行 负荷预测方案 内核,如果当前 model 没有创建  Job 时报错,默认使用第一个计算方案,进行仿真。
         | 
| 83 | 
            -
                        
         | 
| 84 | 
            -
                        :param: job 计算方案名称,可选,字符串类型或者字典类型,默认使用第一个计算方案,如果同名使用最靠前一个
         | 
| 85 | 
            -
                        :params name:  任务名称,为空时使用项目的参数方案名称和计算方案名称
         | 
| 86 | 
            -
             | 
| 87 | 
            -
                        :return: runner Runner[IESResult]
         | 
| 88 | 
            -
                    '''
         | 
| 89 | 
            -
                    if job is None:
         | 
| 90 | 
            -
                        currentJob = self.model.context['currentJob']
         | 
| 91 | 
            -
                        job = self.model.jobs[currentJob]
         | 
| 92 | 
            -
                        if job['rid'] != 'job-definition/ies/ies-load-prediction':
         | 
| 93 | 
            -
                            for j in self.model.jobs:
         | 
| 94 | 
            -
                                if j['rid'] == 'job-definition/ies/ies-load-prediction':
         | 
| 95 | 
            -
                                    job = j
         | 
| 96 | 
            -
                    if job is None:
         | 
| 97 | 
            -
                        raise Exception("找不到负荷预测方案内核运行的计算方案")
         | 
| 98 | 
            -
                    if job['rid'] != 'job-definition/ies/ies-load-prediction':
         | 
| 99 | 
            -
                        raise Exception("不是负荷预测方案内核运行生成算法的计算方案")
         | 
| 100 | 
            -
                    return self.run(job=job, name=name)
         | 
| 101 | 
            -
                
         | 
| 102 | 
            -
                def runIESPowerFlow(self,job=None,name=None, **kwargs)->Runner[IESResult]:
         | 
| 103 | 
            -
                    '''
         | 
| 104 | 
            -
                        运行 时序潮流方案 内核,如果当前 model 没有创建  Job 时报错,默认使用第一个计算方案,进行仿真。
         | 
| 105 | 
            -
                        
         | 
| 106 | 
            -
                        :param: job 计算方案名称,可选,字符串类型或者字典类型,默认使用第一个计算方案,如果同名使用最靠前一个
         | 
| 107 | 
            -
                        :params name:  任务名称,为空时使用项目的参数方案名称和计算方案名称
         | 
| 108 | 
            -
             | 
| 109 | 
            -
                        :return: runner Runner[IESResult]
         | 
| 110 | 
            -
                    '''
         | 
| 111 | 
            -
                    if job is None:
         | 
| 112 | 
            -
                        currentJob = self.model.context['currentJob']
         | 
| 113 | 
            -
                        job = self.model.jobs[currentJob]
         | 
| 114 | 
            -
                        if job['rid'] != 'job-definition/ies/ies-power-flow':
         | 
| 115 | 
            -
                            for j in self.model.jobs:
         | 
| 116 | 
            -
                                if j['rid'] == 'job-definition/ies/ies-power-flow':
         | 
| 117 | 
            -
                                    job = j
         | 
| 118 | 
            -
                    if job is None:
         | 
| 119 | 
            -
                        raise Exception("找不到时序潮流方案内核运行的计算方案")
         | 
| 120 | 
            -
                    if job['rid'] != 'job-definition/ies/ies-power-flow':
         | 
| 121 | 
            -
                        raise Exception("不是时序潮流方案内核运行生成算法的计算方案")
         | 
| 122 | 
            -
                    return self.run(job=job, name=name)
         | 
| 123 | 
            -
             | 
| 124 | 
            -
                def runIESEnergyStoragePlan(self,job=None,name=None, **kwargs)->Runner[IESResult]:
         | 
| 125 | 
            -
                    '''
         | 
| 126 | 
            -
                        运行 储能规划方案 内核,如果当前 model 没有创建  Job 时报错,默认使用第一个计算方案,进行仿真。
         | 
| 127 | 
            -
                        
         | 
| 128 | 
            -
                        :param: job 计算方案名称,可选,字符串类型或者字典类型,默认使用第一个计算方案,如果同名使用最靠前一个
         | 
| 129 | 
            -
                        :params name:  任务名称,为空时使用项目的参数方案名称和计算方案名称
         | 
| 130 | 
            -
             | 
| 131 | 
            -
                        :return: runner Runner[IESResult]
         | 
| 132 | 
            -
                    '''
         | 
| 133 | 
            -
                    if job is None:
         | 
| 134 | 
            -
                        currentJob = self.model.context['currentJob']
         | 
| 135 | 
            -
                        job = self.model.jobs[currentJob]
         | 
| 136 | 
            -
                        if job['rid'] != 'job-definition/ies/ies-energy-storage-plan':
         | 
| 137 | 
            -
                            for j in self.model.jobs:
         | 
| 138 | 
            -
                                if j['rid'] == 'job-definition/ies/ies-energy-storage-plan':
         | 
| 139 | 
            -
                                    job = j
         | 
| 140 | 
            -
                    if job is None:
         | 
| 141 | 
            -
                        raise Exception("找不到储能规划方案内核运行的计算方案")
         | 
| 142 | 
            -
                    if job['rid'] != 'job-definition/ies/ies-energy-storage-plan':
         | 
| 143 | 
            -
                        raise Exception("不是储能规划方案内核运行生成算法的计算方案")
         | 
| 144 | 
            -
                    return self.run(job=job, name=name)
         | 
| 145 | 
            -
             | 
| 146 | 
            -
                @staticmethod
         | 
| 147 | 
            -
                def createProjectGroup(name, description=None, createById=None):
         | 
| 148 | 
            -
                    '''
         | 
| 149 | 
            -
                        创建项目组
         | 
| 150 | 
            -
             | 
| 151 | 
            -
                        :params name: String 项目组名称 
         | 
| 152 | 
            -
                        :params description: String 项目组描述 可选参数
         | 
| 153 | 
            -
                        :params createById Int 父项目组id  可选参数,如果是从已有项目组导入的项目组,必填此项
         | 
| 154 | 
            -
             | 
| 155 | 
            -
                        :return: Int 返回创建的项目组id
         | 
| 156 | 
            -
                    '''
         | 
| 157 | 
            -
                    try:
         | 
| 158 | 
            -
                        if createById is None: 
         | 
| 159 | 
            -
                            isImport = 0
         | 
| 160 | 
            -
                        else:
         | 
| 161 | 
            -
                            isImport = 1
         | 
| 162 | 
            -
                        payload = {
         | 
| 163 | 
            -
                            'name': name,
         | 
| 164 | 
            -
                            'description': description,
         | 
| 165 | 
            -
                            'isImport': isImport,
         | 
| 166 | 
            -
                            'createById': createById,
         | 
| 167 | 
            -
                        }
         | 
| 168 | 
            -
                        r = request(
         | 
| 169 | 
            -
                            'POST', 'api/dslab/rest/group', data=json.dumps(payload))
         | 
| 170 | 
            -
                        if r.ok:
         | 
| 171 | 
            -
                            r = request('GET', 'api/dslab/rest/group')
         | 
| 172 | 
            -
                            groupList = json.loads(r.text)
         | 
| 173 | 
            -
                            id = groupList[len(groupList) -1].get('id', None)
         | 
| 174 | 
            -
                            return id
         | 
| 175 | 
            -
                    except Exception as e:
         | 
| 176 | 
            -
                        raise Exception('创建项目组失败')
         | 
| 177 | 
            -
                    
         | 
| 178 | 
            -
                @staticmethod
         | 
| 179 | 
            -
                def createProject(name, gid, description=None, initialTerm=None, build=None, operate=None, yearsInOperation=None):
         | 
| 180 | 
            -
                    '''
         | 
| 181 | 
            -
                        创建项目
         | 
| 182 | 
            -
             | 
| 183 | 
            -
                        :params name: String 项目名称 
         | 
| 184 | 
            -
                        :params gid: Int 父项目组id,
         | 
| 185 | 
            -
                        :params description: String 项目描述, 可选参数
         | 
| 186 | 
            -
                        :params initialTerm: String 项目起始年限,可选参数
         | 
| 187 | 
            -
                        :params build: String 项目建设期(年),可选参数
         | 
| 188 | 
            -
                        :params operate: String 项目生命周期(年),可选参数
         | 
| 189 | 
            -
                        :params yearsInOperation: String 已投运年限,可选参数
         | 
| 190 | 
            -
             | 
| 191 | 
            -
                        :return: Int 返回创建的项目id
         | 
| 192 | 
            -
                    '''
         | 
| 193 | 
            -
                    try:
         | 
| 194 | 
            -
                        payload = {
         | 
| 195 | 
            -
                            'name': name,
         | 
| 196 | 
            -
                            'gid': gid,
         | 
| 197 | 
            -
                            'description': description,
         | 
| 198 | 
            -
                            'config': {
         | 
| 199 | 
            -
                                'initialTerm': initialTerm,
         | 
| 200 | 
            -
                                'build': build,
         | 
| 201 | 
            -
                                'operate': operate,
         | 
| 202 | 
            -
                                'yearsInOperation': yearsInOperation,
         | 
| 203 | 
            -
                            }
         | 
| 204 | 
            -
                        }
         | 
| 205 | 
            -
                        r = request(
         | 
| 206 | 
            -
                            'POST', 'api/dslab/rest/simulation', data=json.dumps(payload))
         | 
| 207 | 
            -
                        project = json.loads(r.text)
         | 
| 208 | 
            -
                        return project.get('resource', None)
         | 
| 209 | 
            -
                    except Exception as e:
         | 
| 210 | 
            -
                        raise Exception('创建项目失败')
         | 
    
        cloudpss/dslab/files/__init__.py
    DELETED