Skip to content

Commit 3add6a0

Browse files
committed
MINOR: Feature: Photosphere Model (#758)
* MINOR: feat(photosphere): add PHOTOSPHERE model type * MINOR: feat(photosphere): add create-photosphere route * MINOR: feat: add create-photospĥere-building route * fix: IsMetaBuilding perm classes + little opti in create-photosphere route * fix(ifc): merge 2 migrations into 1
1 parent 0c7c9cf commit 3add6a0

File tree

10 files changed

+566
-10
lines changed

10 files changed

+566
-10
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,8 @@ Class | Method | HTTP request | Description
362362
*ModelApi* | [**create_model_property_definition**](docs/ModelApi.md#create_model_property_definition) | **POST** /cloud/{cloud_pk}/project/{project_pk}/model/{model_pk}/propertydefinition | Create a PropertyDefinition on the model
363363
*ModelApi* | [**create_model_unit**](docs/ModelApi.md#create_model_unit) | **POST** /cloud/{cloud_pk}/project/{project_pk}/model/{model_pk}/unit | Create a Unit on a model
364364
*ModelApi* | [**create_multi_page_model**](docs/ModelApi.md#create_multi_page_model) | **POST** /cloud/{cloud_pk}/project/{project_pk}/model/{id}/create-multipage-model | Create a multi page model
365+
*ModelApi* | [**create_photosphere**](docs/ModelApi.md#create_photosphere) | **POST** /cloud/{cloud_pk}/project/{project_pk}/model/create-photosphere | Create a photopshere model from an image file
366+
*ModelApi* | [**create_photosphere_building**](docs/ModelApi.md#create_photosphere_building) | **POST** /cloud/{cloud_pk}/project/{project_pk}/model/create-photosphere-building | Create an empty Photosphere Building Model
365367
*ModelApi* | [**create_property_set**](docs/ModelApi.md#create_property_set) | **POST** /cloud/{cloud_pk}/project/{project_pk}/model/{model_pk}/propertyset | Create one or many PropertySet
366368
*ModelApi* | [**create_property_set_element_relations**](docs/ModelApi.md#create_property_set_element_relations) | **POST** /cloud/{cloud_pk}/project/{project_pk}/model/{model_pk}/propertyset-element | Create association between PropertySet and element
367369
*ModelApi* | [**create_raw_elements**](docs/ModelApi.md#create_raw_elements) | **POST** /cloud/{cloud_pk}/project/{project_pk}/model/{model_pk}/element/raw | Create elements in an optimized format

bimdata_api_client/api/collaboration_api.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8860,7 +8860,7 @@ def create_document(
88608860
):
88618861
"""Create a document # noqa: E501
88628862

8863-
Create a document. If the document is one of {'DXF', 'OBJ', 'DWG', 'IFC', 'GLTF', 'POINT_CLOUD'}, a model will be created and attached to this document Required scopes: document:write # noqa: E501
8863+
Create a document. If the document is one of {'DXF', 'POINT_CLOUD', 'OBJ', 'DWG', 'IFC', 'GLTF'}, a model will be created and attached to this document Required scopes: document:write # noqa: E501
88648864
This method makes a synchronous HTTP request by default. To make an
88658865
asynchronous HTTP request, please pass async_req=True
88668866

bimdata_api_client/api/model_api.py

Lines changed: 313 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2536,6 +2536,144 @@ def __init__(self, api_client=None):
25362536
},
25372537
api_client=api_client
25382538
)
2539+
self.create_photosphere_endpoint = _Endpoint(
2540+
settings={
2541+
'response_type': (Model,),
2542+
'auth': [
2543+
'ApiKey',
2544+
'BIMData_Connect',
2545+
'BIMData_Connect',
2546+
'Bearer'
2547+
],
2548+
'endpoint_path': '/cloud/{cloud_pk}/project/{project_pk}/model/create-photosphere',
2549+
'operation_id': 'create_photosphere',
2550+
'http_method': 'POST',
2551+
'servers': None,
2552+
},
2553+
params_map={
2554+
'all': [
2555+
'cloud_pk',
2556+
'project_pk',
2557+
'create_model_request',
2558+
],
2559+
'required': [
2560+
'cloud_pk',
2561+
'project_pk',
2562+
'create_model_request',
2563+
],
2564+
'nullable': [
2565+
],
2566+
'enum': [
2567+
],
2568+
'validation': [
2569+
]
2570+
},
2571+
root_map={
2572+
'validations': {
2573+
},
2574+
'allowed_values': {
2575+
},
2576+
'openapi_types': {
2577+
'cloud_pk':
2578+
(int,),
2579+
'project_pk':
2580+
(int,),
2581+
'create_model_request':
2582+
(CreateModelRequest,),
2583+
},
2584+
'attribute_map': {
2585+
'cloud_pk': 'cloud_pk',
2586+
'project_pk': 'project_pk',
2587+
},
2588+
'location_map': {
2589+
'cloud_pk': 'path',
2590+
'project_pk': 'path',
2591+
'create_model_request': 'body',
2592+
},
2593+
'collection_format_map': {
2594+
}
2595+
},
2596+
headers_map={
2597+
'accept': [
2598+
'application/json'
2599+
],
2600+
'content_type': [
2601+
'application/json',
2602+
'application/x-www-form-urlencoded',
2603+
'multipart/form-data'
2604+
]
2605+
},
2606+
api_client=api_client
2607+
)
2608+
self.create_photosphere_building_endpoint = _Endpoint(
2609+
settings={
2610+
'response_type': (Model,),
2611+
'auth': [
2612+
'ApiKey',
2613+
'BIMData_Connect',
2614+
'BIMData_Connect',
2615+
'Bearer'
2616+
],
2617+
'endpoint_path': '/cloud/{cloud_pk}/project/{project_pk}/model/create-photosphere-building',
2618+
'operation_id': 'create_photosphere_building',
2619+
'http_method': 'POST',
2620+
'servers': None,
2621+
},
2622+
params_map={
2623+
'all': [
2624+
'cloud_pk',
2625+
'project_pk',
2626+
'create_building_by_name_request',
2627+
],
2628+
'required': [
2629+
'cloud_pk',
2630+
'project_pk',
2631+
'create_building_by_name_request',
2632+
],
2633+
'nullable': [
2634+
],
2635+
'enum': [
2636+
],
2637+
'validation': [
2638+
]
2639+
},
2640+
root_map={
2641+
'validations': {
2642+
},
2643+
'allowed_values': {
2644+
},
2645+
'openapi_types': {
2646+
'cloud_pk':
2647+
(int,),
2648+
'project_pk':
2649+
(int,),
2650+
'create_building_by_name_request':
2651+
(CreateBuildingByNameRequest,),
2652+
},
2653+
'attribute_map': {
2654+
'cloud_pk': 'cloud_pk',
2655+
'project_pk': 'project_pk',
2656+
},
2657+
'location_map': {
2658+
'cloud_pk': 'path',
2659+
'project_pk': 'path',
2660+
'create_building_by_name_request': 'body',
2661+
},
2662+
'collection_format_map': {
2663+
}
2664+
},
2665+
headers_map={
2666+
'accept': [
2667+
'application/json'
2668+
],
2669+
'content_type': [
2670+
'application/json',
2671+
'application/x-www-form-urlencoded',
2672+
'multipart/form-data'
2673+
]
2674+
},
2675+
api_client=api_client
2676+
)
25392677
self.create_property_set_endpoint = _Endpoint(
25402678
settings={
25412679
'response_type': ([PropertySet],),
@@ -7449,6 +7587,8 @@ def __init__(self, api_client=None):
74497587
"METABUILDING": "METABUILDING",
74507588
"OBJ": "OBJ",
74517589
"PDF": "PDF",
7590+
"PHOTOSPHERE": "PHOTOSPHERE",
7591+
"PHOTOSPHERE_BUILDING": "PHOTOSPHERE_BUILDING",
74527592
"PNG": "PNG",
74537593
"POINT_CLOUD": "POINT_CLOUD"
74547594
},
@@ -14583,6 +14723,178 @@ def create_multi_page_model(
1458314723
create_multi_page_model_request
1458414724
return self.create_multi_page_model_endpoint.call_with_http_info(**kwargs)
1458514725

14726+
def create_photosphere(
14727+
self,
14728+
cloud_pk,
14729+
project_pk,
14730+
create_model_request,
14731+
**kwargs
14732+
):
14733+
"""Create a photopshere model from an image file # noqa: E501
14734+
14735+
Create a photosphere model to be used in BIMData services Required scopes: ifc:write, model:write # noqa: E501
14736+
This method makes a synchronous HTTP request by default. To make an
14737+
asynchronous HTTP request, please pass async_req=True
14738+
14739+
>>> thread = api.create_photosphere(cloud_pk, project_pk, create_model_request, async_req=True)
14740+
>>> result = thread.get()
14741+
14742+
Args:
14743+
cloud_pk (int):
14744+
project_pk (int):
14745+
create_model_request (CreateModelRequest):
14746+
14747+
Keyword Args:
14748+
_return_http_data_only (bool): response data without head status
14749+
code and headers. Default is True.
14750+
_preload_content (bool): if False, the urllib3.HTTPResponse object
14751+
will be returned without reading/decoding response data.
14752+
Default is True.
14753+
_request_timeout (int/float/tuple): timeout setting for this request. If
14754+
one number provided, it will be total request timeout. It can also
14755+
be a pair (tuple) of (connection, read) timeouts.
14756+
Default is None.
14757+
_check_input_type (bool): specifies if type checking
14758+
should be done one the data sent to the server.
14759+
Default is True.
14760+
_check_return_type (bool): specifies if type checking
14761+
should be done one the data received from the server.
14762+
Default is True.
14763+
_spec_property_naming (bool): True if the variable names in the input data
14764+
are serialized names, as specified in the OpenAPI document.
14765+
False if the variable names in the input data
14766+
are pythonic names, e.g. snake case (default)
14767+
_content_type (str/None): force body content-type.
14768+
Default is None and content-type will be predicted by allowed
14769+
content-types and body.
14770+
_host_index (int/None): specifies the index of the server
14771+
that we want to use.
14772+
Default is read from the configuration.
14773+
async_req (bool): execute request asynchronously
14774+
14775+
Returns:
14776+
Model
14777+
If the method is called asynchronously, returns the request
14778+
thread.
14779+
"""
14780+
kwargs['async_req'] = kwargs.get(
14781+
'async_req', False
14782+
)
14783+
kwargs['_return_http_data_only'] = kwargs.get(
14784+
'_return_http_data_only', True
14785+
)
14786+
kwargs['_preload_content'] = kwargs.get(
14787+
'_preload_content', True
14788+
)
14789+
kwargs['_request_timeout'] = kwargs.get(
14790+
'_request_timeout', None
14791+
)
14792+
kwargs['_check_input_type'] = kwargs.get(
14793+
'_check_input_type', True
14794+
)
14795+
kwargs['_check_return_type'] = kwargs.get(
14796+
'_check_return_type', True
14797+
)
14798+
kwargs['_spec_property_naming'] = kwargs.get(
14799+
'_spec_property_naming', False
14800+
)
14801+
kwargs['_content_type'] = kwargs.get(
14802+
'_content_type')
14803+
kwargs['_host_index'] = kwargs.get('_host_index')
14804+
kwargs['cloud_pk'] = \
14805+
cloud_pk
14806+
kwargs['project_pk'] = \
14807+
project_pk
14808+
kwargs['create_model_request'] = \
14809+
create_model_request
14810+
return self.create_photosphere_endpoint.call_with_http_info(**kwargs)
14811+
14812+
def create_photosphere_building(
14813+
self,
14814+
cloud_pk,
14815+
project_pk,
14816+
create_building_by_name_request,
14817+
**kwargs
14818+
):
14819+
"""Create an empty Photosphere Building Model # noqa: E501
14820+
14821+
Create an empty Photosphere Building Model Required scopes: ifc:write, model:write # noqa: E501
14822+
This method makes a synchronous HTTP request by default. To make an
14823+
asynchronous HTTP request, please pass async_req=True
14824+
14825+
>>> thread = api.create_photosphere_building(cloud_pk, project_pk, create_building_by_name_request, async_req=True)
14826+
>>> result = thread.get()
14827+
14828+
Args:
14829+
cloud_pk (int):
14830+
project_pk (int):
14831+
create_building_by_name_request (CreateBuildingByNameRequest):
14832+
14833+
Keyword Args:
14834+
_return_http_data_only (bool): response data without head status
14835+
code and headers. Default is True.
14836+
_preload_content (bool): if False, the urllib3.HTTPResponse object
14837+
will be returned without reading/decoding response data.
14838+
Default is True.
14839+
_request_timeout (int/float/tuple): timeout setting for this request. If
14840+
one number provided, it will be total request timeout. It can also
14841+
be a pair (tuple) of (connection, read) timeouts.
14842+
Default is None.
14843+
_check_input_type (bool): specifies if type checking
14844+
should be done one the data sent to the server.
14845+
Default is True.
14846+
_check_return_type (bool): specifies if type checking
14847+
should be done one the data received from the server.
14848+
Default is True.
14849+
_spec_property_naming (bool): True if the variable names in the input data
14850+
are serialized names, as specified in the OpenAPI document.
14851+
False if the variable names in the input data
14852+
are pythonic names, e.g. snake case (default)
14853+
_content_type (str/None): force body content-type.
14854+
Default is None and content-type will be predicted by allowed
14855+
content-types and body.
14856+
_host_index (int/None): specifies the index of the server
14857+
that we want to use.
14858+
Default is read from the configuration.
14859+
async_req (bool): execute request asynchronously
14860+
14861+
Returns:
14862+
Model
14863+
If the method is called asynchronously, returns the request
14864+
thread.
14865+
"""
14866+
kwargs['async_req'] = kwargs.get(
14867+
'async_req', False
14868+
)
14869+
kwargs['_return_http_data_only'] = kwargs.get(
14870+
'_return_http_data_only', True
14871+
)
14872+
kwargs['_preload_content'] = kwargs.get(
14873+
'_preload_content', True
14874+
)
14875+
kwargs['_request_timeout'] = kwargs.get(
14876+
'_request_timeout', None
14877+
)
14878+
kwargs['_check_input_type'] = kwargs.get(
14879+
'_check_input_type', True
14880+
)
14881+
kwargs['_check_return_type'] = kwargs.get(
14882+
'_check_return_type', True
14883+
)
14884+
kwargs['_spec_property_naming'] = kwargs.get(
14885+
'_spec_property_naming', False
14886+
)
14887+
kwargs['_content_type'] = kwargs.get(
14888+
'_content_type')
14889+
kwargs['_host_index'] = kwargs.get('_host_index')
14890+
kwargs['cloud_pk'] = \
14891+
cloud_pk
14892+
kwargs['project_pk'] = \
14893+
project_pk
14894+
kwargs['create_building_by_name_request'] = \
14895+
create_building_by_name_request
14896+
return self.create_photosphere_building_endpoint.call_with_http_info(**kwargs)
14897+
1458614898
def create_property_set(
1458714899
self,
1458814900
cloud_pk,
@@ -20592,7 +20904,7 @@ def get_models(
2059220904
Keyword Args:
2059320905
source (str): * `UPLOAD` - UPLOAD * `SPLIT` - SPLIT * `MERGE` - MERGE * `EXPORT` - EXPORT * `OPTIMIZED` - OPTIMIZED. [optional]
2059420906
status ([str]): * `C` - completed * `D` - deleted * `P` - pending * `W` - waiting * `I` - in process * `E` - errored * `X` - won't fix. [optional]
20595-
type ([str]): * `IFC` - IFC * `DWG` - DWG * `DXF` - DXF * `GLTF` - GLTF * `PDF` - PDF * `JPEG` - JPEG * `PNG` - PNG * `OBJ` - OBJ * `POINT_CLOUD` - POINT_CLOUD * `METABUILDING` - METABUILDING. [optional]
20907+
type ([str]): * `IFC` - IFC * `DWG` - DWG * `DXF` - DXF * `GLTF` - GLTF * `PDF` - PDF * `JPEG` - JPEG * `PNG` - PNG * `OBJ` - OBJ * `POINT_CLOUD` - POINT_CLOUD * `METABUILDING` - METABUILDING * `PHOTOSPHERE` - PHOTOSPHERE * `PHOTOSPHERE_BUILDING` - PHOTOSPHERE_BUILDING. [optional]
2059620908
_return_http_data_only (bool): response data without head status
2059720909
code and headers. Default is True.
2059820910
_preload_content (bool): if False, the urllib3.HTTPResponse object

bimdata_api_client/model/model.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@ class Model(ModelNormal):
7777
'OBJ': "OBJ",
7878
'POINT_CLOUD': "POINT_CLOUD",
7979
'METABUILDING': "METABUILDING",
80+
'PHOTOSPHERE': "PHOTOSPHERE",
81+
'PHOTOSPHERE_BUILDING': "PHOTOSPHERE_BUILDING",
8082
},
8183
('source',): {
8284
'UPLOAD': "UPLOAD",
@@ -232,7 +234,7 @@ def _from_openapi_data(cls, id, type, creator, status, created_at, updated_at, d
232234
233235
Args:
234236
id (int):
235-
type (str): * `IFC` - IFC * `DWG` - DWG * `DXF` - DXF * `GLTF` - GLTF * `PDF` - PDF * `JPEG` - JPEG * `PNG` - PNG * `OBJ` - OBJ * `POINT_CLOUD` - POINT_CLOUD * `METABUILDING` - METABUILDING
237+
type (str): * `IFC` - IFC * `DWG` - DWG * `DXF` - DXF * `GLTF` - GLTF * `PDF` - PDF * `JPEG` - JPEG * `PNG` - PNG * `OBJ` - OBJ * `POINT_CLOUD` - POINT_CLOUD * `METABUILDING` - METABUILDING * `PHOTOSPHERE` - PHOTOSPHERE * `PHOTOSPHERE_BUILDING` - PHOTOSPHERE_BUILDING
236238
creator (bool, date, datetime, dict, float, int, list, str, none_type):
237239
status (str):
238240
created_at (datetime):

bimdata_api_client/model/model_serializer_without_children.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ class ModelSerializerWithoutChildren(ModelNormal):
7575
'OBJ': "OBJ",
7676
'POINT_CLOUD': "POINT_CLOUD",
7777
'METABUILDING': "METABUILDING",
78+
'PHOTOSPHERE': "PHOTOSPHERE",
79+
'PHOTOSPHERE_BUILDING': "PHOTOSPHERE_BUILDING",
7880
},
7981
('source',): {
8082
'UPLOAD': "UPLOAD",
@@ -227,7 +229,7 @@ def _from_openapi_data(cls, id, type, creator, status, created_at, updated_at, d
227229
228230
Args:
229231
id (int):
230-
type (str): * `IFC` - IFC * `DWG` - DWG * `DXF` - DXF * `GLTF` - GLTF * `PDF` - PDF * `JPEG` - JPEG * `PNG` - PNG * `OBJ` - OBJ * `POINT_CLOUD` - POINT_CLOUD * `METABUILDING` - METABUILDING
232+
type (str): * `IFC` - IFC * `DWG` - DWG * `DXF` - DXF * `GLTF` - GLTF * `PDF` - PDF * `JPEG` - JPEG * `PNG` - PNG * `OBJ` - OBJ * `POINT_CLOUD` - POINT_CLOUD * `METABUILDING` - METABUILDING * `PHOTOSPHERE` - PHOTOSPHERE * `PHOTOSPHERE_BUILDING` - PHOTOSPHERE_BUILDING
231233
creator (bool, date, datetime, dict, float, int, list, str, none_type):
232234
status (str):
233235
created_at (datetime):

0 commit comments

Comments
 (0)