Fix Ruff UP006 (deprecated annotation symbols)

This commit is contained in:
Andrej
2025-06-09 10:00:26 +05:00
parent 6eb45917fe
commit 7d4176d105
39 changed files with 231 additions and 241 deletions
-1
View File
@@ -70,7 +70,6 @@ select = [
ignore = [ ignore = [
"FA100", # Conflicts with Blender using annotations for props definitions. "FA100", # Conflicts with Blender using annotations for props definitions.
# Maybe will enable later: # Maybe will enable later:
"UP006", # deprecated symbols
"UP007", # Optional to X | Y "UP007", # Optional to X | Y
"UP015", # Unnecessary mode argument "UP015", # Unnecessary mode argument
"UP028", # yield for -> yield from "UP028", # yield for -> yield from
+8 -8
View File
@@ -16,7 +16,7 @@
import sys import sys
from dataclasses import dataclass, field, fields from dataclasses import dataclass, field, fields
from typing import List, NamedTuple, Optional from typing import Optional
DATACLASS_KWARGS = {} if sys.version_info < (3, 10) else {"slots": True, "kw_only": True} DATACLASS_KWARGS = {} if sys.version_info < (3, 10) else {"slots": True, "kw_only": True}
@@ -27,7 +27,7 @@ class ExtensionsPriorities:
class Meta: class Meta:
global_type = False global_type = False
priority: List[str] = field( priority: list[str] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "Priority", "name": "Priority",
@@ -44,7 +44,7 @@ class ExtensionsSnippetTypes:
class Meta: class Meta:
global_type = False global_type = False
snippet_type: List[str] = field( snippet_type: list[str] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "SnippetType", "name": "SnippetType",
@@ -61,7 +61,7 @@ class ExtensionsStages:
class Meta: class Meta:
global_type = False global_type = False
stage: List[str] = field( stage: list[str] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "Stage", "name": "Stage",
@@ -78,7 +78,7 @@ class ExtensionsTopicLabels:
class Meta: class Meta:
global_type = False global_type = False
topic_label: List[str] = field( topic_label: list[str] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "TopicLabel", "name": "TopicLabel",
@@ -95,7 +95,7 @@ class ExtensionsTopicStatuses:
class Meta: class Meta:
global_type = False global_type = False
topic_status: List[str] = field( topic_status: list[str] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "TopicStatus", "name": "TopicStatus",
@@ -112,7 +112,7 @@ class ExtensionsTopicTypes:
class Meta: class Meta:
global_type = False global_type = False
topic_type: List[str] = field( topic_type: list[str] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "TopicType", "name": "TopicType",
@@ -129,7 +129,7 @@ class ExtensionsUsers:
class Meta: class Meta:
global_type = False global_type = False
user: List[str] = field( user: list[str] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "UserIdType", "name": "UserIdType",
+8 -8
View File
@@ -1,6 +1,6 @@
import sys import sys
from dataclasses import dataclass, field from dataclasses import dataclass, field
from typing import List, Optional from typing import Optional
from xsdata.models.datatype import XmlDateTime from xsdata.models.datatype import XmlDateTime
@@ -263,7 +263,7 @@ class Comment:
@dataclass(**DATACLASS_KWARGS) @dataclass(**DATACLASS_KWARGS)
class Header: class Header:
file: List[HeaderFile] = field( file: list[HeaderFile] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "File", "name": "File",
@@ -276,7 +276,7 @@ class Header:
@dataclass(**DATACLASS_KWARGS) @dataclass(**DATACLASS_KWARGS)
class Topic: class Topic:
reference_link: List[str] = field( reference_link: list[str] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "ReferenceLink", "name": "ReferenceLink",
@@ -308,7 +308,7 @@ class Topic:
"namespace": "", "namespace": "",
}, },
) )
labels: List[str] = field( labels: list[str] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "Labels", "name": "Labels",
@@ -388,7 +388,7 @@ class Topic:
"namespace": "", "namespace": "",
}, },
) )
document_reference: List[TopicDocumentReference] = field( document_reference: list[TopicDocumentReference] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "DocumentReference", "name": "DocumentReference",
@@ -396,7 +396,7 @@ class Topic:
"namespace": "", "namespace": "",
}, },
) )
related_topic: List[TopicRelatedTopic] = field( related_topic: list[TopicRelatedTopic] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "RelatedTopic", "name": "RelatedTopic",
@@ -446,7 +446,7 @@ class Markup:
"required": True, "required": True,
} }
) )
comment: List[Comment] = field( comment: list[Comment] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "Comment", "name": "Comment",
@@ -454,7 +454,7 @@ class Markup:
"namespace": "", "namespace": "",
}, },
) )
viewpoints: List[ViewPoint] = field( viewpoints: list[ViewPoint] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "Viewpoints", "name": "Viewpoints",
+8 -8
View File
@@ -1,7 +1,7 @@
import sys import sys
from dataclasses import dataclass, field from dataclasses import dataclass, field
from enum import Enum from enum import Enum
from typing import List, Optional from typing import Optional
DATACLASS_KWARGS = {} if sys.version_info < (3, 10) else {"slots": True, "kw_only": True} DATACLASS_KWARGS = {} if sys.version_info < (3, 10) else {"slots": True, "kw_only": True}
@@ -136,7 +136,7 @@ class ComponentColoringColor:
class Meta: class Meta:
global_type = False global_type = False
component: List[Component] = field( component: list[Component] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "Component", "name": "Component",
@@ -156,7 +156,7 @@ class ComponentColoringColor:
@dataclass(**DATACLASS_KWARGS) @dataclass(**DATACLASS_KWARGS)
class ComponentSelection: class ComponentSelection:
component: List[Component] = field( component: list[Component] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "Component", "name": "Component",
@@ -171,7 +171,7 @@ class ComponentVisibilityExceptions:
class Meta: class Meta:
global_type = False global_type = False
component: List[Component] = field( component: list[Component] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "Component", "name": "Component",
@@ -335,7 +335,7 @@ class VisualizationInfoBitmap:
@dataclass(**DATACLASS_KWARGS) @dataclass(**DATACLASS_KWARGS)
class ComponentColoring: class ComponentColoring:
color: List[ComponentColoringColor] = field( color: list[ComponentColoringColor] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "Color", "name": "Color",
@@ -368,7 +368,7 @@ class VisualizationInfoClippingPlanes:
class Meta: class Meta:
global_type = False global_type = False
clipping_plane: List[ClippingPlane] = field( clipping_plane: list[ClippingPlane] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "ClippingPlane", "name": "ClippingPlane",
@@ -382,7 +382,7 @@ class VisualizationInfoLines:
class Meta: class Meta:
global_type = False global_type = False
line: List[Line] = field( line: list[Line] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "Line", "name": "Line",
@@ -465,7 +465,7 @@ class VisualizationInfo:
"type": "Element", "type": "Element",
}, },
) )
bitmap: List[VisualizationInfoBitmap] = field( bitmap: list[VisualizationInfoBitmap] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "Bitmap", "name": "Bitmap",
+19 -19
View File
@@ -25,7 +25,7 @@ import urllib.parse
import uuid import uuid
import webbrowser import webbrowser
from re import A from re import A
from typing import Any, Optional, Tuple from typing import Any, Optional
import requests import requests
@@ -174,7 +174,7 @@ class BcfClient:
except requests.exceptions.HTTPError as e: except requests.exceptions.HTTPError as e:
print(f"message: {response.reason}' '{response.status_code}' '{ e }") print(f"message: {response.reason}' '{response.status_code}' '{ e }")
def post(self, endpoint: str, data: Any = None, params: Any = None) -> Tuple[int, str]: def post(self, endpoint: str, data: Any = None, params: Any = None) -> tuple[int, str]:
headers = { headers = {
"Authorization": f"Bearer {self.foundation_client.get_access_token()}", "Authorization": f"Bearer {self.foundation_client.get_access_token()}",
"Content-type": "application/json", "Content-type": "application/json",
@@ -192,7 +192,7 @@ class BcfClient:
print(f"message: {response.reason}' '{response.status_code}, {errh}") print(f"message: {response.reason}' '{response.status_code}, {errh}")
return response.status_code, response.reason return response.status_code, response.reason
def put(self, endpoint: str, data: Any = None, params: Any = None) -> Tuple[int, str]: def put(self, endpoint: str, data: Any = None, params: Any = None) -> tuple[int, str]:
headers = { headers = {
"Authorization": f"Bearer {self.foundation_client.get_access_token()}", "Authorization": f"Bearer {self.foundation_client.get_access_token()}",
"Content-type": "application/json", "Content-type": "application/json",
@@ -210,7 +210,7 @@ class BcfClient:
print(f"message: {response.reason}' '{response.status_code}, {errh}") print(f"message: {response.reason}' '{response.status_code}, {errh}")
return response.status_code, response.reason return response.status_code, response.reason
def delete(self, endpoint: str, params: Any = None) -> Tuple[int, str]: def delete(self, endpoint: str, params: Any = None) -> tuple[int, str]:
headers = { headers = {
"Authorization": f"Bearer {self.foundation_client.get_access_token()}", "Authorization": f"Bearer {self.foundation_client.get_access_token()}",
"Content-type": "application/json", "Content-type": "application/json",
@@ -237,7 +237,7 @@ class BcfClient:
}, },
) )
def update_project(self, project_id: str = "", data: Any = None) -> Tuple[int, str]: def update_project(self, project_id: str = "", data: Any = None) -> tuple[int, str]:
url = f"{self.baseurl}/projects/{project_id}" url = f"{self.baseurl}/projects/{project_id}"
headers = {"Authorization": f"Bearer {self.foundation_client.get_access_token()}"} headers = {"Authorization": f"Bearer {self.foundation_client.get_access_token()}"}
resp = requests.put(url, headers=headers, data=data) resp = requests.put(url, headers=headers, data=data)
@@ -276,16 +276,16 @@ class BcfClient:
}, },
) )
def create_topic(self, project_id: str = "", data: Any = None) -> Tuple[int, str]: def create_topic(self, project_id: str = "", data: Any = None) -> tuple[int, str]:
return self.post(f"/projects/{project_id}/topics", data=data) return self.post(f"/projects/{project_id}/topics", data=data)
def update_topic(self, project_id: str = "", topic_id: str = "", data: Any = None) -> Tuple[int, str]: def update_topic(self, project_id: str = "", topic_id: str = "", data: Any = None) -> tuple[int, str]:
return self.put(f"/projects/{project_id}/topics/{topic_id}", data=data) return self.put(f"/projects/{project_id}/topics/{topic_id}", data=data)
def delete_topic(self, project_id: str = "", topic_id: str = "") -> Tuple[int, str]: def delete_topic(self, project_id: str = "", topic_id: str = "") -> tuple[int, str]:
return self.delete(f"/projects/{project_id}/topics/{topic_id}") return self.delete(f"/projects/{project_id}/topics/{topic_id}")
def get_snippet(self, project_id: str = "", topic_id: str = "") -> Tuple[int, str]: def get_snippet(self, project_id: str = "", topic_id: str = "") -> tuple[int, str]:
headers = { headers = {
"Authorization": f"Bearer {self.foundation_client.get_access_token()}", "Authorization": f"Bearer {self.foundation_client.get_access_token()}",
"Content-type": "application/octet-stream", "Content-type": "application/octet-stream",
@@ -332,7 +332,7 @@ class BcfClient:
topic_id: str = "", topic_id: str = "",
data: Any = None, data: Any = None,
params: Any = None, params: Any = None,
) -> Tuple[int, str]: ) -> tuple[int, str]:
return self.put( return self.put(
f"/projects/{project_id}/topics/{topic_id}/files", f"/projects/{project_id}/topics/{topic_id}/files",
data=data, data=data,
@@ -347,7 +347,7 @@ class BcfClient:
topic_id: str = "", topic_id: str = "",
data: Any = None, data: Any = None,
params: Any = None, params: Any = None,
) -> Tuple[int, str]: ) -> tuple[int, str]:
return self.post( return self.post(
f"/projects/{project_id}/topics/{topic_id}/comments", f"/projects/{project_id}/topics/{topic_id}/comments",
data=data, data=data,
@@ -363,7 +363,7 @@ class BcfClient:
}, },
) )
def delete_comment(self, project_id: str = "", topic_id: str = "", comment_id: str = "") -> Tuple[int, str]: def delete_comment(self, project_id: str = "", topic_id: str = "", comment_id: str = "") -> tuple[int, str]:
return self.delete(f"/projects/{project_id}/topics/{topic_id}/comments/{comment_id}") return self.delete(f"/projects/{project_id}/topics/{topic_id}/comments/{comment_id}")
def update_comment( def update_comment(
@@ -372,7 +372,7 @@ class BcfClient:
topic_id: str = "", topic_id: str = "",
comment_id: str = "", comment_id: str = "",
data: Any = None, data: Any = None,
) -> Tuple[int, str]: ) -> tuple[int, str]:
return self.put( return self.put(
f"/projects/{project_id}/topics/{topic_id}/comments/{comment_id}", f"/projects/{project_id}/topics/{topic_id}/comments/{comment_id}",
data=data, data=data,
@@ -387,7 +387,7 @@ class BcfClient:
}, },
) )
def create_viewpoints(self, project_id: str = "", topic_id: str = "", data: Any = None) -> Tuple[int, str]: def create_viewpoints(self, project_id: str = "", topic_id: str = "", data: Any = None) -> tuple[int, str]:
return self.post( return self.post(
f"/projects/{project_id}/topics/{topic_id}/viewpoints", f"/projects/{project_id}/topics/{topic_id}/viewpoints",
data=data, data=data,
@@ -408,7 +408,7 @@ class BcfClient:
project_id: str = "", project_id: str = "",
topic_id: str = "", topic_id: str = "",
viewpoint_id: str = "", viewpoint_id: str = "",
) -> Tuple[int, str]: ) -> tuple[int, str]:
return self.delete( return self.delete(
f"/projects/{project_id}/topics/{topic_id}/viewpoints/{viewpoint_id}", f"/projects/{project_id}/topics/{topic_id}/viewpoints/{viewpoint_id}",
) )
@@ -478,7 +478,7 @@ class BcfClient:
project_id: str = "", project_id: str = "",
topic_id: str = "", topic_id: str = "",
data: Any = None, data: Any = None,
) -> Tuple[int, str]: ) -> tuple[int, str]:
return self.put( return self.put(
f"/projects/{project_id}/topics/{topic_id}/related_topics", f"/projects/{project_id}/topics/{topic_id}/related_topics",
data=data, data=data,
@@ -498,7 +498,7 @@ class BcfClient:
project_id: str = "", project_id: str = "",
topic_id: str = "", topic_id: str = "",
data: Any = None, data: Any = None,
) -> Tuple[int, str]: ) -> tuple[int, str]:
return self.post( return self.post(
f"/projects/{project_id}/topics/{topic_id}/document_references", f"/projects/{project_id}/topics/{topic_id}/document_references",
data=data, data=data,
@@ -510,7 +510,7 @@ class BcfClient:
topic_id: str = "", topic_id: str = "",
document_reference_id: str = "", document_reference_id: str = "",
data: Any = None, data: Any = None,
) -> Tuple[int, str]: ) -> tuple[int, str]:
return self.put( return self.put(
f"/projects/{project_id}/topics/{topic_id}/document_references/{document_reference_id}", f"/projects/{project_id}/topics/{topic_id}/document_references/{document_reference_id}",
data=data, data=data,
@@ -543,7 +543,7 @@ class BcfClient:
return response.status_code return response.status_code
def get_document(self, project_id: str = "", topic_id: str = "", document_id: str = "") -> Tuple[int, str]: def get_document(self, project_id: str = "", topic_id: str = "", document_id: str = "") -> tuple[int, str]:
headers = { headers = {
"Authorization": f"Bearer {self.foundation_client.get_access_token()}", "Authorization": f"Bearer {self.foundation_client.get_access_token()}",
"Content-type": "application/octet-stream", "Content-type": "application/octet-stream",
+2 -2
View File
@@ -1,6 +1,6 @@
import sys import sys
from dataclasses import dataclass, field from dataclasses import dataclass, field
from typing import List, Optional from typing import Optional
DATACLASS_KWARGS = {} if sys.version_info < (3, 10) else {"slots": True, "kw_only": True} DATACLASS_KWARGS = {} if sys.version_info < (3, 10) else {"slots": True, "kw_only": True}
@@ -42,7 +42,7 @@ class DocumentInfoDocuments:
class Meta: class Meta:
global_type = False global_type = False
document: List[Document] = field( document: list[Document] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "Document", "name": "Document",
+8 -8
View File
@@ -1,6 +1,6 @@
import sys import sys
from dataclasses import dataclass, field from dataclasses import dataclass, field
from typing import List, Optional from typing import Optional
DATACLASS_KWARGS = {} if sys.version_info < (3, 10) else {"slots": True, "kw_only": True} DATACLASS_KWARGS = {} if sys.version_info < (3, 10) else {"slots": True, "kw_only": True}
@@ -10,7 +10,7 @@ class ExtensionsPriorities:
class Meta: class Meta:
global_type = False global_type = False
priority: List[str] = field( priority: list[str] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "Priority", "name": "Priority",
@@ -27,7 +27,7 @@ class ExtensionsSnippetTypes:
class Meta: class Meta:
global_type = False global_type = False
snippet_type: List[str] = field( snippet_type: list[str] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "SnippetType", "name": "SnippetType",
@@ -44,7 +44,7 @@ class ExtensionsStages:
class Meta: class Meta:
global_type = False global_type = False
stage: List[str] = field( stage: list[str] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "Stage", "name": "Stage",
@@ -61,7 +61,7 @@ class ExtensionsTopicLabels:
class Meta: class Meta:
global_type = False global_type = False
topic_label: List[str] = field( topic_label: list[str] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "TopicLabel", "name": "TopicLabel",
@@ -78,7 +78,7 @@ class ExtensionsTopicStatuses:
class Meta: class Meta:
global_type = False global_type = False
topic_status: List[str] = field( topic_status: list[str] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "TopicStatus", "name": "TopicStatus",
@@ -95,7 +95,7 @@ class ExtensionsTopicTypes:
class Meta: class Meta:
global_type = False global_type = False
topic_type: List[str] = field( topic_type: list[str] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "TopicType", "name": "TopicType",
@@ -112,7 +112,7 @@ class ExtensionsUsers:
class Meta: class Meta:
global_type = False global_type = False
user: List[str] = field( user: list[str] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "User", "name": "User",
+8 -8
View File
@@ -1,6 +1,6 @@
import sys import sys
from dataclasses import dataclass, field from dataclasses import dataclass, field
from typing import List, Optional from typing import Optional
from xsdata.models.datatype import XmlDateTime from xsdata.models.datatype import XmlDateTime
@@ -165,7 +165,7 @@ class TopicLabels:
class Meta: class Meta:
global_type = False global_type = False
label: List[str] = field( label: list[str] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "Label", "name": "Label",
@@ -182,7 +182,7 @@ class TopicReferenceLinks:
class Meta: class Meta:
global_type = False global_type = False
reference_link: List[str] = field( reference_link: list[str] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "ReferenceLink", "name": "ReferenceLink",
@@ -320,7 +320,7 @@ class HeaderFiles:
class Meta: class Meta:
global_type = False global_type = False
file: List[File] = field( file: list[File] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "File", "name": "File",
@@ -335,7 +335,7 @@ class TopicDocumentReferences:
class Meta: class Meta:
global_type = False global_type = False
document_reference: List[DocumentReference] = field( document_reference: list[DocumentReference] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "DocumentReference", "name": "DocumentReference",
@@ -350,7 +350,7 @@ class TopicRelatedTopics:
class Meta: class Meta:
global_type = False global_type = False
related_topic: List[TopicRelatedTopicsRelatedTopic] = field( related_topic: list[TopicRelatedTopicsRelatedTopic] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "RelatedTopic", "name": "RelatedTopic",
@@ -365,7 +365,7 @@ class TopicViewpoints:
class Meta: class Meta:
global_type = False global_type = False
view_point: List[ViewPoint] = field( view_point: list[ViewPoint] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "ViewPoint", "name": "ViewPoint",
@@ -392,7 +392,7 @@ class TopicComments:
class Meta: class Meta:
global_type = False global_type = False
comment: List[Comment] = field( comment: list[Comment] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "Comment", "name": "Comment",
+8 -8
View File
@@ -1,7 +1,7 @@
import sys import sys
from dataclasses import dataclass, field from dataclasses import dataclass, field
from enum import Enum from enum import Enum
from typing import List, Optional from typing import Optional
DATACLASS_KWARGS = {} if sys.version_info < (3, 10) else {"slots": True, "kw_only": True} DATACLASS_KWARGS = {} if sys.version_info < (3, 10) else {"slots": True, "kw_only": True}
@@ -189,7 +189,7 @@ class ComponentColoringColorComponents:
class Meta: class Meta:
global_type = False global_type = False
component: List[Component] = field( component: list[Component] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "Component", "name": "Component",
@@ -201,7 +201,7 @@ class ComponentColoringColorComponents:
@dataclass(**DATACLASS_KWARGS) @dataclass(**DATACLASS_KWARGS)
class ComponentSelection: class ComponentSelection:
component: List[Component] = field( component: list[Component] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "Component", "name": "Component",
@@ -215,7 +215,7 @@ class ComponentVisibilityExceptions:
class Meta: class Meta:
global_type = False global_type = False
component: List[Component] = field( component: list[Component] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "Component", "name": "Component",
@@ -400,7 +400,7 @@ class VisualizationInfoBitmaps:
class Meta: class Meta:
global_type = False global_type = False
bitmap: List[Bitmap] = field( bitmap: list[Bitmap] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "Bitmap", "name": "Bitmap",
@@ -414,7 +414,7 @@ class VisualizationInfoClippingPlanes:
class Meta: class Meta:
global_type = False global_type = False
clipping_plane: List[ClippingPlane] = field( clipping_plane: list[ClippingPlane] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "ClippingPlane", "name": "ClippingPlane",
@@ -428,7 +428,7 @@ class VisualizationInfoLines:
class Meta: class Meta:
global_type = False global_type = False
line: List[Line] = field( line: list[Line] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "Line", "name": "Line",
@@ -439,7 +439,7 @@ class VisualizationInfoLines:
@dataclass(**DATACLASS_KWARGS) @dataclass(**DATACLASS_KWARGS)
class ComponentColoring: class ComponentColoring:
color: List[ComponentColoringColor] = field( color: list[ComponentColoringColor] = field(
default_factory=list, default_factory=list,
metadata={ metadata={
"name": "Color", "name": "Color",
+3 -3
View File
@@ -1,6 +1,6 @@
"""XML Parser and Serializer factories.""" """XML Parser and Serializer factories."""
from typing import Optional, Protocol, Type, TypeVar from typing import Optional, Protocol, TypeVar
from xsdata.formats.dataclass.context import XmlContext from xsdata.formats.dataclass.context import XmlContext
from xsdata.formats.dataclass.parsers import XmlParser from xsdata.formats.dataclass.parsers import XmlParser
@@ -29,7 +29,7 @@ T = TypeVar("T")
class AbstractXmlParserSerializer(Protocol): class AbstractXmlParserSerializer(Protocol):
"""XML Parser and serializer wrapper.""" """XML Parser and serializer wrapper."""
def parse(self, xml: bytes, clazz: Type[T]) -> T: def parse(self, xml: bytes, clazz: type[T]) -> T:
""" """
Parse an XML file to an object. Parse an XML file to an object.
@@ -61,7 +61,7 @@ class XmlParserSerializer:
self.parser = build_xml_parser(self.context) self.parser = build_xml_parser(self.context)
self.serializer = build_serializer(self.context) self.serializer = build_serializer(self.context)
def parse(self, xml: bytes, clazz: Type[T]) -> T: def parse(self, xml: bytes, clazz: type[T]) -> T:
""" """
Parse an XML file to an object. Parse an XML file to an object.
+2 -2
View File
@@ -34,7 +34,7 @@ import bonsai.tool as tool
from ifcopenshell.file import UndoSystemError from ifcopenshell.file import UndoSystemError
from pathlib import Path from pathlib import Path
from bonsai.tool.brick import BrickStore from bonsai.tool.brick import BrickStore
from typing import Set, Union, Optional, TypedDict, Callable, NotRequired, Literal from typing import Union, Optional, TypedDict, Callable, NotRequired, Literal
IFC_CONNECTED_TYPE = Union[bpy.types.Material, bpy.types.Object] IFC_CONNECTED_TYPE = Union[bpy.types.Material, bpy.types.Object]
@@ -69,7 +69,7 @@ class IfcStore:
cache_path: Optional[str] = None cache_path: Optional[str] = None
id_map: dict[int, IFC_CONNECTED_TYPE] = {} id_map: dict[int, IFC_CONNECTED_TYPE] = {}
guid_map: dict[str, IFC_CONNECTED_TYPE] = {} guid_map: dict[str, IFC_CONNECTED_TYPE] = {}
edited_objs: Set[bpy.types.Object] = set() edited_objs: set[bpy.types.Object] = set()
pset_template_path: str = "" pset_template_path: str = ""
pset_template_file: Optional[ifcopenshell.file] = None pset_template_file: Optional[ifcopenshell.file] = None
classification_path: str = "" classification_path: str = ""
+2 -2
View File
@@ -38,7 +38,7 @@ import ifcopenshell.util.shape
import bonsai.tool as tool import bonsai.tool as tool
from bonsai.bim.ifc import IfcStore, IFC_CONNECTED_TYPE from bonsai.bim.ifc import IfcStore, IFC_CONNECTED_TYPE
from bonsai.tool.loader import OBJECT_DATA_TYPE from bonsai.tool.loader import OBJECT_DATA_TYPE
from typing import Dict, Union, Optional, Any, Literal, Iterable from typing import Union, Optional, Any, Literal, Iterable
from ifcopenshell.util.shape import MatrixType from ifcopenshell.util.shape import MatrixType
@@ -47,7 +47,7 @@ class MaterialCreator:
obj: bpy.types.Object obj: bpy.types.Object
def __init__(self, ifc_import_settings: IfcImportSettings, ifc_importer: IfcImporter): def __init__(self, ifc_import_settings: IfcImportSettings, ifc_importer: IfcImporter):
self.styles: Dict[int, bpy.types.Material] = {} self.styles: dict[int, bpy.types.Material] = {}
self.parsed_meshes: set[str] = set() self.parsed_meshes: set[str] = set()
self.ifc_import_settings = ifc_import_settings self.ifc_import_settings = ifc_import_settings
self.ifc_importer = ifc_importer self.ifc_importer = ifc_importer
@@ -38,7 +38,7 @@ from bonsai.bim.module.drawing.shaders import add_verts_sequence, add_offsets
from bonsai.bim.module.drawing.helper import format_distance from bonsai.bim.module.drawing.helper import format_distance
from timeit import default_timer as timer from timeit import default_timer as timer
from functools import cache from functools import cache
from typing import Optional, Iterator, Type, Union from typing import Optional, Iterator, Union
UNSPECIAL_ELEMENT_COLOR = (0.2, 0.2, 0.2, 1) # GREY UNSPECIAL_ELEMENT_COLOR = (0.2, 0.2, 0.2, 1) # GREY
@@ -1895,7 +1895,7 @@ class CutDecorator:
class DecorationsHandler: class DecorationsHandler:
decorators_classes: list[Type[BaseDecorator]] = [ decorators_classes: list[type[BaseDecorator]] = [
DimensionDecorator, DimensionDecorator,
AngleDecorator, AngleDecorator,
GridDecorator, GridDecorator,
@@ -49,7 +49,7 @@ import bonsai.bim.export_ifc
from bpy_extras.io_utils import ImportHelper from bpy_extras.io_utils import ImportHelper
from bonsai.bim.module.drawing.decoration import CutDecorator from bonsai.bim.module.drawing.decoration import CutDecorator
from bonsai.bim.module.drawing.data import DecoratorData from bonsai.bim.module.drawing.data import DecoratorData
from typing import NamedTuple, List, Union, Optional, Literal, TYPE_CHECKING, Any, TypedDict from typing import NamedTuple, Union, Optional, Literal, TYPE_CHECKING, Any, TypedDict
from lxml import etree from lxml import etree
from math import radians from math import radians
from mathutils import Vector, Color, Matrix from mathutils import Vector, Color, Matrix
@@ -83,8 +83,8 @@ class profile:
class LineworkContexts(NamedTuple): class LineworkContexts(NamedTuple):
body: List[List[int]] body: list[list[int]]
annotation: List[List[int]] annotation: list[list[int]]
class AddAnnotationType(bpy.types.Operator, tool.Ifc.Operator): class AddAnnotationType(bpy.types.Operator, tool.Ifc.Operator):
+3 -3
View File
@@ -42,7 +42,7 @@ from mathutils import Vector, Euler
from math import radians from math import radians
from pathlib import Path from pathlib import Path
from collections import namedtuple from collections import namedtuple
from typing import List, Iterable, Union, TYPE_CHECKING from typing import Iterable, Union, TYPE_CHECKING
if TYPE_CHECKING: if TYPE_CHECKING:
from bonsai.bim.prop import MultipleFileSelect from bonsai.bim.prop import MultipleFileSelect
@@ -1219,7 +1219,7 @@ class ClippingPlaneCutWithCappings(bpy.types.Operator):
return {"FINISHED"} return {"FINISHED"}
def get_cutting_plane_data(self, cutting_planes: List[bpy.types.Object]) -> List[CuttingPlaneData]: def get_cutting_plane_data(self, cutting_planes: list[bpy.types.Object]) -> list[CuttingPlaneData]:
cutting_planes_data = [] cutting_planes_data = []
for obj in cutting_planes: for obj in cutting_planes:
@@ -1230,7 +1230,7 @@ class ClippingPlaneCutWithCappings(bpy.types.Operator):
return cutting_planes_data return cutting_planes_data
# NOTE: unused, will be used later for cutting boxes support # NOTE: unused, will be used later for cutting boxes support
def get_box_cutting_plane_data(self, obj: bpy.types.Object) -> List[CuttingPlaneData]: def get_box_cutting_plane_data(self, obj: bpy.types.Object) -> list[CuttingPlaneData]:
matrix_world = obj.matrix_world matrix_world = obj.matrix_world
rotation = matrix_world.to_quaternion() # avoid scale for normals rotation = matrix_world.to_quaternion() # avoid scale for normals
cutting_planes_data = [] cutting_planes_data = []
+1 -2
View File
@@ -63,7 +63,6 @@ from typing import (
Optional, Optional,
Literal, Literal,
Iterator, Iterator,
List,
TYPE_CHECKING, TYPE_CHECKING,
get_args, get_args,
Generator, Generator,
@@ -1927,7 +1926,7 @@ class Geometry(bonsai.core.tool.Geometry):
return new_item return new_item
@classmethod @classmethod
def split_by_loose_parts(cls, obj: bpy.types.Object) -> List[bpy.types.Mesh]: def split_by_loose_parts(cls, obj: bpy.types.Object) -> list[bpy.types.Mesh]:
# Before .copy() since it also copies the selection. # Before .copy() since it also copies the selection.
selection = tool.Blender.get_objects_selection(bpy.context) selection = tool.Blender.get_objects_selection(bpy.context)
+3 -3
View File
@@ -28,7 +28,7 @@ from dataclasses import dataclass, field
from lark import Lark, Transformer from lark import Lark, Transformer
from math import degrees, radians, sin, cos, tan from math import degrees, radians, sin, cos, tan
from mathutils import Vector, Matrix from mathutils import Vector, Matrix
from typing import Optional, Union, Literal, List from typing import Optional, Union, Literal
class Polyline(bonsai.core.tool.Polyline): class Polyline(bonsai.core.tool.Polyline):
@@ -41,7 +41,7 @@ class Polyline(bonsai.core.tool.Polyline):
_Y: str = "" _Y: str = ""
_Z: str = "" _Z: str = ""
_AREA: str = "0" _AREA: str = "0"
input_options: List[str] = field(default_factory=list) input_options: list[str] = field(default_factory=list)
def set_value(self, attribute_name, value): def set_value(self, attribute_name, value):
value = str(value) value = str(value)
@@ -94,7 +94,7 @@ class Polyline(bonsai.core.tool.Polyline):
input_type: "Polyline.InputType" = None input_type: "Polyline.InputType" = None
@classmethod @classmethod
def create_input_ui(cls, input_options: List[str] = []) -> PolylineUI: def create_input_ui(cls, input_options: list[str] = []) -> PolylineUI:
return cls.PolylineUI(input_options=input_options) return cls.PolylineUI(input_options=input_options)
@classmethod @classmethod
+2 -2
View File
@@ -42,7 +42,7 @@ import numpy as np
from math import pi from math import pi
from mathutils import Vector, Matrix from mathutils import Vector, Matrix
from shapely import Polygon from shapely import Polygon
from typing import Generator, Optional, Union, Literal, List, Any, Iterable, TYPE_CHECKING from typing import Generator, Optional, Union, Literal, Any, Iterable, TYPE_CHECKING
from collections import defaultdict from collections import defaultdict
from natsort import natsorted from natsort import natsorted
@@ -1267,7 +1267,7 @@ class Spatial(bonsai.core.tool.Spatial):
return None return None
@classmethod @classmethod
def get_selected_containers(cls) -> List[ifcopenshell.entity_instance]: def get_selected_containers(cls) -> list[ifcopenshell.entity_instance]:
results = [] results = []
for obj in tool.Blender.get_selected_objects(): for obj in tool.Blender.get_selected_objects():
if (element := tool.Ifc.get_entity(obj)) and tool.Root.is_spatial_element(element): if (element := tool.Ifc.get_entity(obj)) and tool.Root.is_spatial_element(element):
+5 -5
View File
@@ -18,7 +18,7 @@ import os
import re import re
from pathlib import Path from pathlib import Path
from dataclasses import dataclass, field from dataclasses import dataclass, field
from typing import Dict, List, Optional from typing import Optional
bl_info = { bl_info = {
"name": "Bonsai Translations", "name": "Bonsai Translations",
@@ -70,9 +70,9 @@ def rearrange_files_for_po_import(po_dir_path: Path, temp_directory: tempfile.Te
class Message: class Message:
msgid: str msgid: str
msgctxt: str | None msgctxt: str | None
sources: Optional[List[str]] = field(default_factory=list) sources: Optional[list[str]] = field(default_factory=list)
# mapping languages to translated strings # mapping languages to translated strings
translations: Optional[Dict[str, str]] = field(default_factory=dict) translations: Optional[dict[str, str]] = field(default_factory=dict)
def bonsai_strings_parse(addon_directory: Optional[Path] = None, po_directory: Optional[Path] = None): def bonsai_strings_parse(addon_directory: Optional[Path] = None, po_directory: Optional[Path] = None):
@@ -98,7 +98,7 @@ def bonsai_strings_parse(addon_directory: Optional[Path] = None, po_directory: O
r'\b_\("(.*?)"\)', # gettext called with `_` r'\b_\("(.*?)"\)', # gettext called with `_`
] ]
regexes = [re.compile(pattern) for pattern in patterns] regexes = [re.compile(pattern) for pattern in patterns]
matched_dict: Dict[str, Message] = dict() matched_dict: dict[str, Message] = dict()
# NOTE: currently there is no special handling same message with different contexts # NOTE: currently there is no special handling same message with different contexts
for root, dirs, files in os.walk(directory): for root, dirs, files in os.walk(directory):
@@ -151,7 +151,7 @@ def bonsai_strings_parse(addon_directory: Optional[Path] = None, po_directory: O
def update_translations_from_po(po_directory: Path, translations_module: Path): def update_translations_from_po(po_directory: Path, translations_module: Path):
translation_data: Dict[str, Message] = dict() translation_data: dict[str, Message] = dict()
def process_po_entry(language: str, current_chunk: list[str]) -> None: def process_po_entry(language: str, current_chunk: list[str]) -> None:
sources = [] sources = []
+3 -3
View File
@@ -3,14 +3,14 @@ import ifcopenshell
import ifcopenshell.util.element import ifcopenshell.util.element
import ifcopenshell.geom import ifcopenshell.geom
import multiprocessing import multiprocessing
from typing import NamedTuple, List from typing import NamedTuple
# python standalone_drawer.py model.ifc guid_of_drawing guids,of,bad,elements output.svg # python standalone_drawer.py model.ifc guid_of_drawing guids,of,bad,elements output.svg
class LineworkContexts(NamedTuple): class LineworkContexts(NamedTuple):
body: List[List[int]] body: list[list[int]]
annotation: List[List[int]] annotation: list[list[int]]
class Drawer: class Drawer:
+3 -3
View File
@@ -20,7 +20,7 @@ import sys
import json import json
import pytest import pytest
import bonsai.core.tool import bonsai.core.tool
from typing import Any, Optional, Type, Union, TypedDict, Literal from typing import Any, Optional, TypedDict, Literal
from typing_extensions import Self from typing_extensions import Self
@@ -277,9 +277,9 @@ class Prophecy:
- Ensure all predicted calls actually happened. - Ensure all predicted calls actually happened.
""" """
subject: Type subject: type
def __init__(self, cls: Type): def __init__(self, cls: type):
self.subject = cls self.subject = cls
self.predictions: list[Prediction] = [] self.predictions: list[Prediction] = []
self.calls: list[Call] = [] self.calls: list[Call] = []
+9 -10
View File
@@ -22,7 +22,6 @@ import os
import subprocess import subprocess
from copy import deepcopy from copy import deepcopy
from pathlib import Path from pathlib import Path
from typing import Dict, List
import ifcopenshell as ios import ifcopenshell as ios
@@ -96,7 +95,7 @@ class Ifc2CA:
self, self,
load_group: ios.entity_instance | None = None, load_group: ios.entity_instance | None = None,
element: ios.entity_instance | None = None, element: ios.entity_instance | None = None,
load_group_ids: List[int] | None = None, load_group_ids: list[int] | None = None,
): ):
if load_group is not None: if load_group is not None:
actions = [ actions = [
@@ -455,7 +454,7 @@ class Ifc2CA:
data["appliedCondition"] = self.parse_applied_condition(connection.AppliedCondition, data["geometry_type"]) data["appliedCondition"] = self.parse_applied_condition(connection.AppliedCondition, data["geometry_type"])
return data return data
def parse_element_connections(self, element: Dict, connections: List[Dict]): def parse_element_connections(self, element: dict, connections: list[dict]):
ifc_element = self.file.by_id(element["id"]) ifc_element = self.file.by_id(element["id"])
connection_ids = [c["id"] for c in connections] connection_ids = [c["id"] for c in connections]
rels = [rel for rel in ifc_element.ConnectedBy if rel.RelatedStructuralConnection.id() in connection_ids] rels = [rel for rel in ifc_element.ConnectedBy if rel.RelatedStructuralConnection.id() in connection_ids]
@@ -506,9 +505,9 @@ class Ifc2CA:
def parse_element_loads( def parse_element_loads(
self, self,
element: Dict, element: dict,
load_group_ids: List[int], load_group_ids: list[int],
load_cases: List[ios.entity_instance], load_cases: list[ios.entity_instance],
): ):
ifc_element = self.file.by_id(element["id"]) ifc_element = self.file.by_id(element["id"])
actions = self.get_actions(element=ifc_element, load_group_ids=load_group_ids) actions = self.get_actions(element=ifc_element, load_group_ids=load_group_ids)
@@ -574,10 +573,10 @@ class Ifc2CA:
def add_action_loads( def add_action_loads(
self, self,
element: Dict, element: dict,
action: ios.entity_instance, action: ios.entity_instance,
data: Dict, data: dict,
load_cases: List[ios.entity_instance], load_cases: list[ios.entity_instance],
): ):
load_group = self.get_load_group(action) load_group = self.get_load_group(action)
load_group_coeff = 1.0 if load_group.Coefficient is None else load_group.Coefficient load_group_coeff = 1.0 if load_group.Coefficient is None else load_group.Coefficient
@@ -695,7 +694,7 @@ class Ifc2CA:
for key, load in element["loads"]["loadsLC"].items(): for key, load in element["loads"]["loadsLC"].items():
element["loads"]["loadsCOMB"][key][iComb] = round(comb_factors.dot(load), 4) element["loads"]["loadsCOMB"][key][iComb] = round(comb_factors.dot(load), 4)
def get_combination_factors(self, load_combination, load_case_ids: List[int]): def get_combination_factors(self, load_combination, load_case_ids: list[int]):
comb_coeff = 1.0 if load_combination.Coefficient is None else load_combination.Coefficient comb_coeff = 1.0 if load_combination.Coefficient is None else load_combination.Coefficient
comb_factors = np.array([0.0 for _ in load_case_ids]) comb_factors = np.array([0.0 for _ in load_case_ids])
for assignment in self.get_combination_assignments(load_combination): for assignment in self.get_combination_assignments(load_combination):
+1 -2
View File
@@ -19,7 +19,6 @@
import itertools import itertools
import json import json
from pathlib import Path from pathlib import Path
from typing import Dict
import numpy as np import numpy as np
from jinja2 import Environment, FileSystemLoader from jinja2 import Environment, FileSystemLoader
@@ -30,7 +29,7 @@ includeZeroLength1DSprings = False
class CommandFileConstructor: class CommandFileConstructor:
def __init__(self, data: Dict): def __init__(self, data: dict):
self.data = data self.data = data
self.env = Environment(loader=FileSystemLoader(Path(__file__).parent / "templates")) self.env = Environment(loader=FileSystemLoader(Path(__file__).parent / "templates"))
+1 -2
View File
@@ -18,7 +18,6 @@
import datetime import datetime
from datetime import timedelta, date from datetime import timedelta, date
from typing import List
import ifcopenshell import ifcopenshell
import ifcopenshell.api import ifcopenshell.api
import ifcopenshell.util.date import ifcopenshell.util.date
@@ -26,7 +25,7 @@ import xml.etree.ElementTree as ET
class MSP2Ifc: class MSP2Ifc:
def __init__(self, optionalColumns: List[str] = []): def __init__(self, optionalColumns: list[str] = []):
self.xml = None self.xml = None
self.file = None self.file = None
self.ns = None self.ns = None
@@ -18,8 +18,6 @@
from fractions import Fraction from fractions import Fraction
from math import pi from math import pi
from typing import Any
from typing import Dict
from typing import Literal from typing import Literal
from typing import Optional from typing import Optional
from typing import Union from typing import Union
@@ -506,7 +504,7 @@ def get_property_unit(
def get_property_table_unit( def get_property_table_unit(
prop: ifcopenshell.entity_instance, ifc_file: Union[ifcopenshell.file, None], use_cache: bool = False prop: ifcopenshell.entity_instance, ifc_file: Union[ifcopenshell.file, None], use_cache: bool = False
) -> Dict[str, Union[ifcopenshell.entity_instance, None]]: ) -> dict[str, Union[ifcopenshell.entity_instance, None]]:
""" """
Gets the unit definition of a property table Gets the unit definition of a property table
@@ -20,8 +20,6 @@ import ifcopenshell
import ifcopenshell.util.element import ifcopenshell.util.element
import ifcopenshell.util.unit import ifcopenshell.util.unit
from logging import Logger from logging import Logger
from collections import defaultdict
from typing import List, Dict, Tuple, Optional
class Patcher: class Patcher:
@@ -97,7 +95,7 @@ class Patcher:
f"Fraction: {fraction:.4f}" f"Fraction: {fraction:.4f}"
) )
def get_element_quantities(self, element: ifcopenshell.entity_instance) -> Dict[str, float]: def get_element_quantities(self, element: ifcopenshell.entity_instance) -> dict[str, float]:
"""Get width quantities for an element.""" """Get width quantities for an element."""
qtos = [ qtos = [
v v
@@ -116,10 +114,10 @@ class Patcher:
def calculate_constituent_widths( def calculate_constituent_widths(
self, self,
constituents: List[ifcopenshell.entity_instance], constituents: list[ifcopenshell.entity_instance],
elements: set[ifcopenshell.entity_instance], elements: set[ifcopenshell.entity_instance],
unit_scale: float, unit_scale: float,
) -> Tuple[Dict[ifcopenshell.entity_instance, float], float]: ) -> tuple[dict[ifcopenshell.entity_instance, float], float]:
"""Calculate the widths of constituents based on associated quantities.""" """Calculate the widths of constituents based on associated quantities."""
if not elements: if not elements:
return {}, 0.0 return {}, 0.0
+4 -4
View File
@@ -38,7 +38,7 @@ from .facet import (
Cardinality, Cardinality,
FacetFailure, FacetFailure,
) )
from typing import List, Optional, Union, overload, Literal from typing import Optional, Union
cwd = os.path.dirname(os.path.realpath(__file__)) cwd = os.path.dirname(os.path.realpath(__file__))
schema = None schema = None
@@ -98,7 +98,7 @@ class Ids:
self.filepath: Optional[str] = None self.filepath: Optional[str] = None
self.filename: Optional[str] = None self.filename: Optional[str] = None
self.specifications: List[Specification] = [] self.specifications: list[Specification] = []
self.info = {} self.info = {}
self.info["title"] = title or "Untitled" self.info["title"] = title or "Untitled"
if copyright: if copyright:
@@ -187,8 +187,8 @@ class Specification:
instructions=None, instructions=None,
): ):
self.name = name or "Unnamed" self.name = name or "Unnamed"
self.applicability: List[Facet] = [] self.applicability: list[Facet] = []
self.requirements: List[Facet] = [] self.requirements: list[Facet] = []
self.minOccurs: Union[int, str] = minOccurs self.minOccurs: Union[int, str] = minOccurs
self.maxOccurs: Union[int, str] = maxOccurs self.maxOccurs: Union[int, str] = maxOccurs
self.ifcVersion = ifcVersion self.ifcVersion = ifcVersion
+17 -17
View File
@@ -44,7 +44,7 @@ router = APIRouter(route_class=LoggingRoute)
@router.get("/bcf/3.0/projects", tags=["projects_get"]) @router.get("/bcf/3.0/projects", tags=["projects_get"])
def projects_get(current_user: User = Depends(get_current_active_user)) -> List[ProjectGET]: def projects_get(current_user: User = Depends(get_current_active_user)) -> list[ProjectGET]:
projects_response = bcf_db.get_projects(current_user) projects_response = bcf_db.get_projects(current_user)
bcf_db.debug( bcf_db.debug(
endpoint="projects_get", endpoint="projects_get",
@@ -90,7 +90,7 @@ def project_extensions_get(project_id: UUID, current_user: User = Depends(get_cu
@router.get("/bcf/3.0/projects/{project_id}/topics", tags=["topics_get"]) @router.get("/bcf/3.0/projects/{project_id}/topics", tags=["topics_get"])
def topics_get(project_id: str, current_user: User = Depends(get_current_active_user)) -> List[TopicGET]: def topics_get(project_id: str, current_user: User = Depends(get_current_active_user)) -> list[TopicGET]:
topics_response = bcf_db.get_topics(project_id, current_user) topics_response = bcf_db.get_topics(project_id, current_user)
bcf_db.debug( bcf_db.debug(
endpoint="topics_get", endpoint="topics_get",
@@ -198,7 +198,7 @@ def bim_snippet_put(
@router.get("/bcf/3.0/projects/{project_id}/files_information", tags=["files_information_get"]) @router.get("/bcf/3.0/projects/{project_id}/files_information", tags=["files_information_get"])
def files_information_get( def files_information_get(
project_id: UUID, current_user: User = Depends(get_current_active_user) project_id: UUID, current_user: User = Depends(get_current_active_user)
) -> List[ProjectFileInformation]: ) -> list[ProjectFileInformation]:
files_information_response = bcf_db.get_files_information(project_id, current_user) files_information_response = bcf_db.get_files_information(project_id, current_user)
bcf_db.debug( bcf_db.debug(
endpoint="files_information_get", endpoint="files_information_get",
@@ -210,7 +210,7 @@ def files_information_get(
# Implemented # Implemented
@router.get("/bcf/3.0/projects/{project_id}/topics/{topic_id}/files", tags=["files_get"]) @router.get("/bcf/3.0/projects/{project_id}/topics/{topic_id}/files", tags=["files_get"])
def files_get(project_id: UUID, topic_id: UUID, current_user: User = Depends(get_current_active_user)) -> List[FileGET]: def files_get(project_id: UUID, topic_id: UUID, current_user: User = Depends(get_current_active_user)) -> list[FileGET]:
files_response = bcf_db.get_files(project_id, topic_id, current_user) files_response = bcf_db.get_files(project_id, topic_id, current_user)
bcf_db.debug( bcf_db.debug(
endpoint="files_get", endpoint="files_get",
@@ -223,8 +223,8 @@ def files_get(project_id: UUID, topic_id: UUID, current_user: User = Depends(get
# request body file = FilePUT # request body file = FilePUT
@router.put("/bcf/3.0/projects/{project_id}/topics/{topic_id}/files", tags=["files_put"], status_code=200) @router.put("/bcf/3.0/projects/{project_id}/topics/{topic_id}/files", tags=["files_put"], status_code=200)
def files_put( def files_put(
project_id: UUID, topic_id: UUID, files: List[FilePUT], current_user: User = Depends(get_current_active_user) project_id: UUID, topic_id: UUID, files: list[FilePUT], current_user: User = Depends(get_current_active_user)
) -> List[FileGET]: ) -> list[FileGET]:
files_response = bcf_db.put_files(project_id, topic_id, files, current_user) files_response = bcf_db.put_files(project_id, topic_id, files, current_user)
bcf_db.debug( bcf_db.debug(
endpoint="files_put", endpoint="files_put",
@@ -247,7 +247,7 @@ def files_put(
@router.get("/bcf/3.0/projects/{project_id}/topics/{topic_id}/comments", tags=["comments_get"]) @router.get("/bcf/3.0/projects/{project_id}/topics/{topic_id}/comments", tags=["comments_get"])
def comments_get( def comments_get(
project_id: UUID, topic_id: UUID, current_user: User = Depends(get_current_active_user) project_id: UUID, topic_id: UUID, current_user: User = Depends(get_current_active_user)
) -> List[CommentGET]: ) -> list[CommentGET]:
comments_response = bcf_db.get_comments(project_id, topic_id, current_user) comments_response = bcf_db.get_comments(project_id, topic_id, current_user)
bcf_db.debug( bcf_db.debug(
endpoint="comments_get", endpoint="comments_get",
@@ -331,7 +331,7 @@ def comment_delete(
@router.get("/bcf/3.0/projects/{project_id}/topics/{topic_id}/viewpoints", tags=["viewpoints_get"]) @router.get("/bcf/3.0/projects/{project_id}/topics/{topic_id}/viewpoints", tags=["viewpoints_get"])
def viewpoints_get( def viewpoints_get(
project_id: UUID, topic_id: UUID, current_user: User = Depends(get_current_active_user) project_id: UUID, topic_id: UUID, current_user: User = Depends(get_current_active_user)
) -> List[ViewpointGET]: ) -> list[ViewpointGET]:
viewpoints_response = bcf_db.get_viewpoints(project_id, topic_id, current_user) viewpoints_response = bcf_db.get_viewpoints(project_id, topic_id, current_user)
bcf_db.debug( bcf_db.debug(
endpoint="viewpoints_get", endpoint="viewpoints_get",
@@ -495,7 +495,7 @@ def viewpoint_delete(
@router.get("/bcf/3.0/projects/{project_id}/topics/{topic_id}/related_topics", tags=["related_topics_get"]) @router.get("/bcf/3.0/projects/{project_id}/topics/{topic_id}/related_topics", tags=["related_topics_get"])
def related_topics_get( def related_topics_get(
project_id: UUID, topic_id: UUID, current_user: User = Depends(get_current_active_user) project_id: UUID, topic_id: UUID, current_user: User = Depends(get_current_active_user)
) -> List[RelatedTopicGET]: ) -> list[RelatedTopicGET]:
related_topics_response = bcf_db.get_related_topics(project_id, topic_id, current_user) related_topics_response = bcf_db.get_related_topics(project_id, topic_id, current_user)
bcf_db.debug( bcf_db.debug(
endpoint="related_topics_get", endpoint="related_topics_get",
@@ -512,9 +512,9 @@ def related_topics_get(
def related_topics_put( def related_topics_put(
project_id: UUID, project_id: UUID,
topic_id: UUID, topic_id: UUID,
related_topics: List[RelatedTopicPUT], related_topics: list[RelatedTopicPUT],
current_user: User = Depends(get_current_active_user), current_user: User = Depends(get_current_active_user),
) -> List[RelatedTopicGET]: ) -> list[RelatedTopicGET]:
related_topics_response = bcf_db.put_related_topics(project_id, topic_id, related_topics, current_user) related_topics_response = bcf_db.put_related_topics(project_id, topic_id, related_topics, current_user)
bcf_db.debug( bcf_db.debug(
endpoint="related_topics_put", endpoint="related_topics_put",
@@ -539,7 +539,7 @@ def related_topics_put(
) )
def topic_document_references_get( def topic_document_references_get(
project_id: UUID, topic_id: UUID, current_user: User = Depends(get_current_active_user) project_id: UUID, topic_id: UUID, current_user: User = Depends(get_current_active_user)
) -> List[DocumentReferenceGET]: ) -> list[DocumentReferenceGET]:
topic_document_references_response = bcf_db.get_topic_document_references(project_id, topic_id, current_user) topic_document_references_response = bcf_db.get_topic_document_references(project_id, topic_id, current_user)
bcf_db.debug( bcf_db.debug(
endpoint="topic_document_references_get", endpoint="topic_document_references_get",
@@ -608,7 +608,7 @@ def topic_document_references_put(
@router.get("/bcf/3.0/projects/{project_id}/documents", tags=["documents_get"]) @router.get("/bcf/3.0/projects/{project_id}/documents", tags=["documents_get"])
def documents_get(project_id: UUID, current_user: User = Depends(get_current_active_user)) -> List[DocumentGET]: def documents_get(project_id: UUID, current_user: User = Depends(get_current_active_user)) -> list[DocumentGET]:
documents_response = bcf_db.get_documents(project_id, current_user) documents_response = bcf_db.get_documents(project_id, current_user)
bcf_db.debug( bcf_db.debug(
endpoint="documents_get", endpoint="documents_get",
@@ -649,7 +649,7 @@ def document_get(
# ... # ...
@router.get("/bcf/3.0/projects/{project_id}/topics/events", tags=["topics_events_get"]) @router.get("/bcf/3.0/projects/{project_id}/topics/events", tags=["topics_events_get"])
def topics_events_get(project_id: UUID, current_user: User = Depends(get_current_active_user)) -> List[TopicEventGET]: def topics_events_get(project_id: UUID, current_user: User = Depends(get_current_active_user)) -> list[TopicEventGET]:
topic_events_response = bcf_db.get_topics_events(project_id, current_user) topic_events_response = bcf_db.get_topics_events(project_id, current_user)
bcf_db.debug( bcf_db.debug(
endpoint="topics_events_get", endpoint="topics_events_get",
@@ -662,7 +662,7 @@ def topics_events_get(project_id: UUID, current_user: User = Depends(get_current
@router.get("/bcf/3.0/projects/{project_id}/topics/{topic_id}/events", tags=["topic_events_get"]) @router.get("/bcf/3.0/projects/{project_id}/topics/{topic_id}/events", tags=["topic_events_get"])
def topic_events_get( def topic_events_get(
project_id: UUID, topic_id: UUID, current_user: User = Depends(get_current_active_user) project_id: UUID, topic_id: UUID, current_user: User = Depends(get_current_active_user)
) -> List[TopicEventGET]: ) -> list[TopicEventGET]:
topic_events_response = bcf_db.get_topic_events(project_id, topic_id, current_user) topic_events_response = bcf_db.get_topic_events(project_id, topic_id, current_user)
bcf_db.debug( bcf_db.debug(
endpoint="topic_events_get", endpoint="topic_events_get",
@@ -681,7 +681,7 @@ def topic_events_get(
@router.get("/bcf/3.0/projects/{project_id}/topics/comments/events", tags=["comments_events_get"]) @router.get("/bcf/3.0/projects/{project_id}/topics/comments/events", tags=["comments_events_get"])
def comments_events_get( def comments_events_get(
project_id: UUID, current_user: User = Depends(get_current_active_user) project_id: UUID, current_user: User = Depends(get_current_active_user)
) -> List[CommentEventGET]: ) -> list[CommentEventGET]:
comments_events_response = bcf_db.get_comments_events(project_id, current_user) comments_events_response = bcf_db.get_comments_events(project_id, current_user)
bcf_db.debug( bcf_db.debug(
endpoint="comments_events_get", endpoint="comments_events_get",
@@ -696,7 +696,7 @@ def comments_events_get(
) )
def comment_events_get( def comment_events_get(
project_id: UUID, topic_id: UUID, comment_id: UUID, current_user: User = Depends(get_current_active_user) project_id: UUID, topic_id: UUID, comment_id: UUID, current_user: User = Depends(get_current_active_user)
) -> List[CommentEventGET]: ) -> list[CommentEventGET]:
comment_events_response = bcf_db.get_comment_events(project_id, topic_id, comment_id, current_user) comment_events_response = bcf_db.get_comment_events(project_id, topic_id, comment_id, current_user)
bcf_db.debug( bcf_db.debug(
endpoint="comment_events_get", endpoint="comment_events_get",
+2 -2
View File
@@ -415,8 +415,8 @@ def upload_cancellation(upload_session: str, current_user: User = Depends(get_cu
@router.post("/documents/1.0/document-versions", tags=[""]) @router.post("/documents/1.0/document-versions", tags=[""])
def document_versions_post( def document_versions_post(
document_ids: List[UUID], current_user: User = Depends(get_current_active_user) document_ids: list[UUID], current_user: User = Depends(get_current_active_user)
) -> List[DocumentVersion]: ) -> list[DocumentVersion]:
document_versions = list() document_versions = list()
for document_id in document_ids: for document_id in document_ids:
@@ -1,5 +1,5 @@
from pydantic import BaseModel from pydantic import BaseModel
from typing import List, Optional from typing import Optional
from enum import Enum from enum import Enum
@@ -72,7 +72,7 @@ class Component(BaseModel):
class Coloring(BaseModel): class Coloring(BaseModel):
color: Optional[str] = None color: Optional[str] = None
components: Optional[List[Component]] = None components: Optional[list[Component]] = None
class ViewSetupHints(BaseModel): class ViewSetupHints(BaseModel):
@@ -83,5 +83,5 @@ class ViewSetupHints(BaseModel):
class Visibility(BaseModel): class Visibility(BaseModel):
default_visibility: Optional[bool] = False default_visibility: Optional[bool] = False
exceptions: Optional[List[Component]] = None exceptions: Optional[list[Component]] = None
view_setup_hints: Optional[ViewSetupHints] = None view_setup_hints: Optional[ViewSetupHints] = None
+10 -10
View File
@@ -1,5 +1,5 @@
from pydantic import BaseModel from pydantic import BaseModel
from typing import List, Optional from typing import Optional
from models.bcf_common import BimSnippet, BitmapType, Location, Direction, SnapshotType, Component from models.bcf_common import BimSnippet, BitmapType, Location, Direction, SnapshotType, Component
from models.bcf_common import Coloring, OrthogonalCamera, Visibility, PerspectiveCamera, Line, ClippingPlane from models.bcf_common import Coloring, OrthogonalCamera, Visibility, PerspectiveCamera, Line, ClippingPlane
@@ -12,11 +12,11 @@ class TopicPOST(BaseModel):
guid: Optional[str] = None guid: Optional[str] = None
topic_type: Optional[str] = None topic_type: Optional[str] = None
topic_status: Optional[str] = None topic_status: Optional[str] = None
reference_links: Optional[List[str]] = None reference_links: Optional[list[str]] = None
title: str title: str
priority: Optional[str] = None priority: Optional[str] = None
index: Optional[int] = None index: Optional[int] = None
labels: Optional[List[str]] = None labels: Optional[list[str]] = None
assigned_to: Optional[str] = None assigned_to: Optional[str] = None
stage: Optional[str] = None stage: Optional[str] = None
description: Optional[str] = None description: Optional[str] = None
@@ -27,11 +27,11 @@ class TopicPOST(BaseModel):
class TopicPUT(BaseModel): class TopicPUT(BaseModel):
topic_type: Optional[str] = None topic_type: Optional[str] = None
topic_status: Optional[str] = None topic_status: Optional[str] = None
reference_links: Optional[List[str]] = None reference_links: Optional[list[str]] = None
title: str title: str
priority: Optional[str] = None priority: Optional[str] = None
index: Optional[int] = None index: Optional[int] = None
labels: Optional[List[str]] = None labels: Optional[list[str]] = None
assigned_to: Optional[str] = None assigned_to: Optional[str] = None
stage: Optional[str] = None stage: Optional[str] = None
description: Optional[str] = None description: Optional[str] = None
@@ -74,8 +74,8 @@ class SnapshotPOST(BaseModel):
class Components(BaseModel): class Components(BaseModel):
selection: Optional[List[Component]] = None selection: Optional[list[Component]] = None
coloring: Optional[List[Coloring]] = None coloring: Optional[list[Coloring]] = None
visibility: Optional[Visibility] = None visibility: Optional[Visibility] = None
@@ -84,9 +84,9 @@ class ViewpointPOST(BaseModel):
index: Optional[int] = None index: Optional[int] = None
orthogonal_camera: Optional[OrthogonalCamera] = None orthogonal_camera: Optional[OrthogonalCamera] = None
perspective_camera: Optional[PerspectiveCamera] = None perspective_camera: Optional[PerspectiveCamera] = None
lines: Optional[List[Line]] = None lines: Optional[list[Line]] = None
clipping_planes: Optional[List[ClippingPlane]] = None clipping_planes: Optional[list[ClippingPlane]] = None
bitmaps: Optional[List[BitmapPOST]] = None bitmaps: Optional[list[BitmapPOST]] = None
snapshot: Optional[SnapshotPOST] = None snapshot: Optional[SnapshotPOST] = None
components: Optional[Components] = None components: Optional[Components] = None
@@ -8,7 +8,7 @@ class ProjectAction(Enum):
class ProjectGETAuthorization(BaseModel): class ProjectGETAuthorization(BaseModel):
project_actions: Optional[List[ProjectAction]] = None project_actions: Optional[list[ProjectAction]] = None
class ProjectGET(BaseModel): class ProjectGET(BaseModel):
@@ -34,22 +34,22 @@ class CommentAction(Enum):
class ExtensionsGET(BaseModel): class ExtensionsGET(BaseModel):
topic_type: List[str] topic_type: list[str]
custom_information: List[str] custom_information: list[str]
topic_status: List[str] topic_status: list[str]
topic_label: List[str] topic_label: list[str]
snippet_type: List[str] snippet_type: list[str]
priority: List[str] priority: list[str]
users: List[str] users: list[str]
stage: List[str] stage: list[str]
project_actions: Optional[List[str]] = None project_actions: Optional[list[str]] = None
topic_actions: Optional[List[str]] = None topic_actions: Optional[list[str]] = None
comment_actions: Optional[List[str]] = None comment_actions: Optional[list[str]] = None
class TopicGETAuthorization(BaseModel): class TopicGETAuthorization(BaseModel):
topic_actions: Optional[List[TopicAction]] = None topic_actions: Optional[list[TopicAction]] = None
topic_status: Optional[List[str]] = None topic_status: Optional[list[str]] = None
class TopicGET(BaseModel): class TopicGET(BaseModel):
@@ -57,11 +57,11 @@ class TopicGET(BaseModel):
server_assigned_id: str server_assigned_id: str
topic_type: Optional[str] = None topic_type: Optional[str] = None
topic_status: Optional[str] = None topic_status: Optional[str] = None
reference_links: Optional[List[str]] = None reference_links: Optional[list[str]] = None
title: str title: str
priority: Optional[str] = None priority: Optional[str] = None
index: Optional[int] = None index: Optional[int] = None
labels: Optional[List[str]] = None labels: Optional[list[str]] = None
creation_date: str creation_date: str
creation_author: str creation_author: str
modified_date: Optional[str] = None modified_date: Optional[str] = None
@@ -88,12 +88,12 @@ class FileGET(BaseModel):
class ProjectFileInformation(BaseModel): class ProjectFileInformation(BaseModel):
display_information: Optional[List[ProjectFileDisplayInformation]] = None display_information: Optional[list[ProjectFileDisplayInformation]] = None
file: Optional[FileGET] = None file: Optional[FileGET] = None
class CommentGETAuthorization(BaseModel): class CommentGETAuthorization(BaseModel):
comment_actions: Optional[List[CommentAction]] = None comment_actions: Optional[list[CommentAction]] = None
class CommentGET(BaseModel): class CommentGET(BaseModel):
@@ -127,7 +127,7 @@ class ViewpointAction(Enum):
class ViewpointGETAuthorization(BaseModel): class ViewpointGETAuthorization(BaseModel):
viewpoint_actions: Optional[List[ViewpointAction]] = None viewpoint_actions: Optional[list[ViewpointAction]] = None
class ViewpointGET(BaseModel): class ViewpointGET(BaseModel):
@@ -135,19 +135,19 @@ class ViewpointGET(BaseModel):
guid: str guid: str
orthogonal_camera: Optional[OrthogonalCamera] = None orthogonal_camera: Optional[OrthogonalCamera] = None
perspective_camera: Optional[PerspectiveCamera] = None perspective_camera: Optional[PerspectiveCamera] = None
lines: Optional[List[Line]] = None lines: Optional[list[Line]] = None
clipping_planes: Optional[List[ClippingPlane]] = None clipping_planes: Optional[list[ClippingPlane]] = None
bitmaps: Optional[List[BitmapGET]] = None bitmaps: Optional[list[BitmapGET]] = None
snapshot: Optional[SnapshotGET] = None snapshot: Optional[SnapshotGET] = None
authorization: Optional[ViewpointGETAuthorization] = None authorization: Optional[ViewpointGETAuthorization] = None
class ColoringGET(BaseModel): class ColoringGET(BaseModel):
coloring: Optional[List[Coloring]] = None coloring: Optional[list[Coloring]] = None
class SelectionGET(BaseModel): class SelectionGET(BaseModel):
selection: Optional[List[Component]] = None selection: Optional[list[Component]] = None
class VisibilityGET(BaseModel): class VisibilityGET(BaseModel):
@@ -176,7 +176,7 @@ class TopicEventGET(BaseModel):
author: str author: str
# actions: Optional[List[EventAction]] = Field(None, min_items=1) # actions: Optional[list[EventAction]] = Field(None, min_items=1)
class CommentEventGET(BaseModel): class CommentEventGET(BaseModel):
@@ -186,7 +186,7 @@ class CommentEventGET(BaseModel):
author: str author: str
# actions: Optional[List[EventAction]] = Field(None, min_items=1) # actions: Optional[list[EventAction]] = Field(None, min_items=1)
# ---- maybe not necessary now # ---- maybe not necessary now
@@ -1,5 +1,5 @@
from pydantic import BaseModel, Field, constr from pydantic import BaseModel, Field, constr
from typing import List, Optional from typing import Optional
# This file contains models used in both requests and responses during upload and download of documents. # This file contains models used in both requests and responses during upload and download of documents.
@@ -80,7 +80,7 @@ class Document(BaseModel):
example="908e1cd4-2e09-11ee-be56-0242ac120003", example="908e1cd4-2e09-11ee-be56-0242ac120003",
) )
file_description: FileDescription file_description: FileDescription
parts: Optional[List[str]] parts: Optional[list[str]]
class DocumentVersion(Document): class DocumentVersion(Document):
@@ -1,4 +1,4 @@
from typing import List, Optional from typing import Optional
from pydantic import BaseModel from pydantic import BaseModel
from models.documents_common import Document, DocumentVersion from models.documents_common import Document, DocumentVersion
@@ -10,7 +10,7 @@ from models.documents_common import Document, DocumentVersion
class DocumentQuery(BaseModel): class DocumentQuery(BaseModel):
document_ids: List[str] document_ids: list[str]
class DocumentUpload(Document): class DocumentUpload(Document):
@@ -19,8 +19,8 @@ class DocumentUpload(Document):
class MetadataForDocumentsSaved(BaseModel): class MetadataForDocumentsSaved(BaseModel):
documents: Optional[List[str]] documents: Optional[list[str]]
class DocumentQueryResult(BaseModel): class DocumentQueryResult(BaseModel):
versions: List[DocumentVersion] versions: list[DocumentVersion]
@@ -1,5 +1,5 @@
from pydantic import BaseModel, Field from pydantic import BaseModel, Field
from typing import List, Optional from typing import Optional
from models.documents_common import CallbackLink, Document from models.documents_common import CallbackLink, Document
from models.documents_request import FileToUpload, DocumentMetadataEntry from models.documents_request import FileToUpload, DocumentMetadataEntry
@@ -24,23 +24,23 @@ class DataForUploadDocuments(BaseModel):
"and folder the user was on. If the client provides the `server_context` in subsequent calls then " "and folder the user was on. If the client provides the `server_context` in subsequent calls then "
"the CDE will attemp to load the UI at the same place." "the CDE will attemp to load the UI at the same place."
) )
documents: List[FileToUpload] documents: list[FileToUpload]
callback: Optional[CallbackLink] callback: Optional[CallbackLink]
current_user: Optional[User] current_user: Optional[User]
projects: List[ProjectOnly] projects: list[ProjectOnly]
# ---- DOWNLOAD MODELS ---- # ---- DOWNLOAD MODELS ----
class DocumentMetadataEntries(BaseModel): class DocumentMetadataEntries(BaseModel):
metadata: List[DocumentMetadataEntry] = Field(description="An array of metadata entries") metadata: list[DocumentMetadataEntry] = Field(description="An array of metadata entries")
class Project(BaseModel): class Project(BaseModel):
project_id: str project_id: str
name: str name: str
documents: Optional[List[Document]] = Field( documents: Optional[list[Document]] = Field(
description="An array containing all the documents selected by the user" description="An array containing all the documents selected by the user"
) )
@@ -51,7 +51,7 @@ class DataForDocumentSelection(BaseModel):
"and folder the user was on. If the client provides the `server_context` in subsequent calls then " "and folder the user was on. If the client provides the `server_context` in subsequent calls then "
"the CDE will attemp to load the UI at the same place." "the CDE will attemp to load the UI at the same place."
) )
projects: List[Project] projects: list[Project]
callback: Optional[CallbackLink] callback: Optional[CallbackLink]
current_user: Optional[User] current_user: Optional[User]
@@ -1,5 +1,5 @@
from pydantic import BaseModel, Field, constr from pydantic import BaseModel, Field, constr
from typing import List, Optional from typing import Optional
from enum import Enum from enum import Enum
from models.documents_common import CallbackLink from models.documents_common import CallbackLink
@@ -32,7 +32,7 @@ class UploadDocuments(BaseModel):
"and folder the user was on. If the client provides the `server_context` in subsequent calls then " "and folder the user was on. If the client provides the `server_context` in subsequent calls then "
"the CDE will attemp to load the UI at the same place." "the CDE will attemp to load the UI at the same place."
) )
files: List[FileToUpload] files: list[FileToUpload]
class UploadFileDetail(BaseModel): class UploadFileDetail(BaseModel):
@@ -44,7 +44,7 @@ class UploadFileDetail(BaseModel):
class UploadFileDetails(BaseModel): class UploadFileDetails(BaseModel):
files: List[UploadFileDetail] files: list[UploadFileDetail]
# ---- DOWNLOAD MODELS ---- # ---- DOWNLOAD MODELS ----
@@ -57,7 +57,7 @@ class SelectDocuments(BaseModel):
"and folder the user was on. If the client provides the `server_context` in subsequent calls then " "and folder the user was on. If the client provides the `server_context` in subsequent calls then "
"the CDE will attemp to load the UI at the same place." "the CDE will attemp to load the UI at the same place."
) )
supported_file_extensions: Optional[List[str]] = Field( supported_file_extensions: Optional[list[str]] = Field(
description="The client may optionally provide an array of accepted file extensions that should be opened " description="The client may optionally provide an array of accepted file extensions that should be opened "
"during this flow. The CDE server UI should make an attempt to only show files matching these " "during this flow. The CDE server UI should make an attempt to only show files matching these "
"extensions to the user for the download selection or help the user in selecting the desired " "extensions to the user for the download selection or help the user in selecting the desired "
@@ -80,5 +80,5 @@ class DataType(Enum):
class DocumentMetadataEntry(BaseModel): class DocumentMetadataEntry(BaseModel):
name: constr(min_length=1) = Field(description="The name of the metadata property") name: constr(min_length=1) = Field(description="The name of the metadata property")
value: List[constr(min_length=1)] = Field(description="The value of the metadata property, can be a list") value: list[constr(min_length=1)] = Field(description="The value of the metadata property, can be a list")
data_type: DataType = Field(description="The data type of the items in the value array") data_type: DataType = Field(description="The data type of the items in the value array")
@@ -1,5 +1,5 @@
from pydantic import BaseModel, Field, constr from pydantic import BaseModel, Field, constr
from typing import List, Optional from typing import Optional
from enum import Enum from enum import Enum
from models.documents_common import DocumentVersion, LinkData from models.documents_common import DocumentVersion, LinkData
@@ -33,7 +33,7 @@ class HeaderValue(BaseModel):
class Headers(BaseModel): class Headers(BaseModel):
values: List[HeaderValue] values: list[HeaderValue]
class MultipartFormData(BaseModel): class MultipartFormData(BaseModel):
@@ -65,7 +65,7 @@ class DocumentToUpload(BaseModel):
description="A client-provided identifier that allows matching the specification with the correct file on the " description="A client-provided identifier that allows matching the specification with the correct file on the "
"user's machine" "user's machine"
) )
upload_file_parts: List[UploadFilePartInstruction] = Field( upload_file_parts: list[UploadFilePartInstruction] = Field(
description="An array of request specifications detailing how to split the file to parts and upload each part " description="An array of request specifications detailing how to split the file to parts and upload each part "
"to the CDE" "to the CDE"
# min_length=1, # min_length=1,
@@ -80,7 +80,7 @@ class DocumentsToUpload(BaseModel):
"and folder the user was on. If the client provides the `server_context` in subsequent calls then " "and folder the user was on. If the client provides the `server_context` in subsequent calls then "
"the CDE will attemp to load the UI at the same place." "the CDE will attemp to load the UI at the same place."
) )
documents_to_upload: Optional[List[DocumentToUpload]] documents_to_upload: Optional[list[DocumentToUpload]]
# ---- DOWNLOAD MODELS ---- # ---- DOWNLOAD MODELS ----
@@ -95,7 +95,7 @@ class DocumentDiscoverySessionInitialization(BaseModel):
class DocumentsMarkedAsSelected(BaseModel): class DocumentsMarkedAsSelected(BaseModel):
documents: Optional[List[str]] documents: Optional[list[str]]
class SelectedDocuments(BaseModel): class SelectedDocuments(BaseModel):
@@ -104,7 +104,7 @@ class SelectedDocuments(BaseModel):
"and folder the user was on. If the client provides the `server_context` in subsequent calls then " "and folder the user was on. If the client provides the `server_context` in subsequent calls then "
"the CDE will attemp to load the UI at the same place." "the CDE will attemp to load the UI at the same place."
) )
documents: List[DocumentVersion] = Field(description="An array containing all the documents selected by the user") documents: list[DocumentVersion] = Field(description="An array containing all the documents selected by the user")
class DocumentMetadata(BaseModel): class DocumentMetadata(BaseModel):
@@ -124,4 +124,4 @@ class DocumentMetadata(BaseModel):
class DocumentVersions(BaseModel): class DocumentVersions(BaseModel):
documents: List[DocumentVersion] documents: list[DocumentVersion]
+1 -2
View File
@@ -1,6 +1,5 @@
from __future__ import annotations from __future__ import annotations
from pydantic import BaseModel from pydantic import BaseModel
from typing import List
class Token(BaseModel): class Token(BaseModel):
@@ -10,7 +9,7 @@ class Token(BaseModel):
class TokenData(BaseModel): class TokenData(BaseModel):
username: str | None = None username: str | None = None
scopes: List[str] = [] scopes: list[str] = []
expires: str | None = None expires: str | None = None
+28 -28
View File
@@ -16,8 +16,8 @@ from models.request import *
class BCFDB(MyDB): class BCFDB(MyDB):
# implemented # implemented
def get_projects(self, current_user: User) -> List[ProjectGET]: def get_projects(self, current_user: User) -> list[ProjectGET]:
def get_projects_work(tx) -> List[ProjectGET]: def get_projects_work(tx) -> list[ProjectGET]:
cypher = """ cypher = """
MATCH (u:User)-[r1:HAS_ACTIONS_ON]->(p:Project) MATCH (u:User)-[r1:HAS_ACTIONS_ON]->(p:Project)
WHERE u.username = $username WHERE u.username = $username
@@ -103,8 +103,8 @@ class BCFDB(MyDB):
# implemented # implemented
# returns a collection # returns a collection
def get_topics(self, project_id: str, current_user: User) -> List[TopicGET]: def get_topics(self, project_id: str, current_user: User) -> list[TopicGET]:
def get_topics_work(tx) -> List[TopicGET]: def get_topics_work(tx) -> list[TopicGET]:
cypher = """ cypher = """
MATCH (u:User)-[r1:HAS_ACTIONS_ON]->(p:Project)-[r2:HAS]->(t:Topic) MATCH (u:User)-[r1:HAS_ACTIONS_ON]->(p:Project)-[r2:HAS]->(t:Topic)
WHERE u.username = $username WHERE u.username = $username
@@ -296,8 +296,8 @@ class BCFDB(MyDB):
# implemented # implemented
# returns a collection # returns a collection
def get_files_information(self, project_id: UUID, current_user: User) -> List[ProjectFileInformation]: def get_files_information(self, project_id: UUID, current_user: User) -> list[ProjectFileInformation]:
def get_files_information_work(tx) -> List[ProjectFileInformation]: def get_files_information_work(tx) -> list[ProjectFileInformation]:
cypher = """ cypher = """
MATCH (u:User)-[r1:HAS_ACTIONS_ON]->(p:Project)-[r2:CONTAINS]->(d:Document) MATCH (u:User)-[r1:HAS_ACTIONS_ON]->(p:Project)-[r2:CONTAINS]->(d:Document)
WHERE u.username = $username WHERE u.username = $username
@@ -363,7 +363,7 @@ class BCFDB(MyDB):
# clients can retrieve metadata and the binary content of the file. # clients can retrieve metadata and the binary content of the file.
# #
# class ProjectFileInformation(BaseModel): # class ProjectFileInformation(BaseModel):
# display_information: Optional[List[ProjectFileDisplayInformation]] = None # display_information: Optional[list[ProjectFileDisplayInformation]] = None
# file: Optional[FileGET] = None # file: Optional[FileGET] = None
# #
# class ProjectFileDisplayInformation(BaseModel): # class ProjectFileDisplayInformation(BaseModel):
@@ -383,8 +383,8 @@ class BCFDB(MyDB):
# implemented # implemented
# returns a collection # returns a collection
def get_files(self, project_id: UUID, topic_id: UUID, current_user: User) -> List[FileGET]: def get_files(self, project_id: UUID, topic_id: UUID, current_user: User) -> list[FileGET]:
def get_files_work(tx) -> List[FileGET]: def get_files_work(tx) -> list[FileGET]:
cypher = """ cypher = """
MATCH (u:User)-[r1:HAS_ACTIONS_ON]->(p:Project)-[r2:HAS]->(t:Topic)-[r3:REFERS_TO]->(f:Document:Model) MATCH (u:User)-[r1:HAS_ACTIONS_ON]->(p:Project)-[r2:HAS]->(t:Topic)-[r3:REFERS_TO]->(f:Document:Model)
WHERE u.username = $username WHERE u.username = $username
@@ -405,7 +405,7 @@ class BCFDB(MyDB):
return session.execute_read(get_files_work) return session.execute_read(get_files_work)
# implemented # implemented
def put_files(self, project_id: UUID, topic_id: UUID, files: List[FilePUT], current_user: User) -> List[FileGET]: def put_files(self, project_id: UUID, topic_id: UUID, files: list[FilePUT], current_user: User) -> list[FileGET]:
def put_files_work(tx) -> bool: def put_files_work(tx) -> bool:
cypher_delete_references = """ cypher_delete_references = """
MATCH (u:User)-[r1:HAS_ACTIONS_ON]->(p:Project)-[r2:HAS]->(t:Topic)-[r3:REFERS_TO]->(f:Document:Model) MATCH (u:User)-[r1:HAS_ACTIONS_ON]->(p:Project)-[r2:HAS]->(t:Topic)-[r3:REFERS_TO]->(f:Document:Model)
@@ -458,8 +458,8 @@ class BCFDB(MyDB):
return self.get_files(project_id, topic_id, current_user) return self.get_files(project_id, topic_id, current_user)
# implemented # implemented
def get_comments(self, project_id: UUID, topic_id: UUID, current_user: User) -> List[CommentGET]: def get_comments(self, project_id: UUID, topic_id: UUID, current_user: User) -> list[CommentGET]:
def get_comments_work(tx) -> List[CommentGET]: def get_comments_work(tx) -> list[CommentGET]:
cypher = """ cypher = """
MATCH (u:User)-[r1:HAS_ACTIONS_ON]->(p:Project)-[r2:HAS]->(t:Topic)-[r3:HAS]->(c:Comment) MATCH (u:User)-[r1:HAS_ACTIONS_ON]->(p:Project)-[r2:HAS]->(t:Topic)-[r3:HAS]->(c:Comment)
WHERE u.username = $username WHERE u.username = $username
@@ -970,8 +970,8 @@ class BCFDB(MyDB):
# implemented # implemented
# returns a collection # returns a collection
def get_viewpoints(self, project_id: UUID, topic_id: UUID, current_user: User) -> List[ViewpointGET]: def get_viewpoints(self, project_id: UUID, topic_id: UUID, current_user: User) -> list[ViewpointGET]:
def get_viewpoints_work(tx) -> List[ViewpointGET]: def get_viewpoints_work(tx) -> list[ViewpointGET]:
cypher = """ cypher = """
MATCH (u:User)-[r1:HAS_ACTIONS_ON]->(p:Project)-[r2:HAS]->(t:Topic)-[r3:HAS]->(v:Viewpoint) MATCH (u:User)-[r1:HAS_ACTIONS_ON]->(p:Project)-[r2:HAS]->(t:Topic)-[r3:HAS]->(v:Viewpoint)
WHERE u.username = $username WHERE u.username = $username
@@ -1053,8 +1053,8 @@ class BCFDB(MyDB):
def get_viewpoint_lines( def get_viewpoint_lines(
self, project_id: UUID, topic_id: UUID, viewpoint_id: UUID, current_user: User self, project_id: UUID, topic_id: UUID, viewpoint_id: UUID, current_user: User
) -> List[Line]: ) -> list[Line]:
def get_viewpoint_lines_work(tx) -> List[Line]: def get_viewpoint_lines_work(tx) -> list[Line]:
cypher = """ cypher = """
MATCH (u:User)-[r1:HAS_ACTIONS_ON]->(p:Project)-[r2:HAS]->(t:Topic)-[r3:HAS]->(v:Viewpoint)-[r4:HAS]->(l:Line) MATCH (u:User)-[r1:HAS_ACTIONS_ON]->(p:Project)-[r2:HAS]->(t:Topic)-[r3:HAS]->(v:Viewpoint)-[r4:HAS]->(l:Line)
WHERE u.username = $username WHERE u.username = $username
@@ -1084,8 +1084,8 @@ class BCFDB(MyDB):
def get_viewpoint_clipping_planes( def get_viewpoint_clipping_planes(
self, project_id: UUID, topic_id: UUID, viewpoint_id: UUID, current_user: User self, project_id: UUID, topic_id: UUID, viewpoint_id: UUID, current_user: User
) -> List[ClippingPlane]: ) -> list[ClippingPlane]:
def get_viewpoint_clipping_planes_work(tx) -> List[ClippingPlane]: def get_viewpoint_clipping_planes_work(tx) -> list[ClippingPlane]:
cypher = """ cypher = """
MATCH (u:User)-[r1:HAS_ACTIONS_ON]->(p:Project)-[r2:HAS]->(t:Topic)-[r3:HAS]->(v:Viewpoint)-[r4:HAS]->(cp:ClippingPlane) MATCH (u:User)-[r1:HAS_ACTIONS_ON]->(p:Project)-[r2:HAS]->(t:Topic)-[r3:HAS]->(v:Viewpoint)-[r4:HAS]->(cp:ClippingPlane)
WHERE u.username = $username WHERE u.username = $username
@@ -1114,8 +1114,8 @@ class BCFDB(MyDB):
def get_viewpoint_bitmaps( def get_viewpoint_bitmaps(
self, project_id: UUID, topic_id: UUID, viewpoint_id: UUID, current_user: User self, project_id: UUID, topic_id: UUID, viewpoint_id: UUID, current_user: User
) -> List[BitmapGET]: ) -> list[BitmapGET]:
def get_viewpoint_bitmaps_work(tx) -> List[BitmapGET]: def get_viewpoint_bitmaps_work(tx) -> list[BitmapGET]:
cypher = """ cypher = """
MATCH (u:User)-[r1:HAS_ACTIONS_ON]->(p:Project)-[r2:HAS]->(t:Topic)-[r3:HAS]->(v:Viewpoint)-[r4:HAS]->(b:Bitmap) MATCH (u:User)-[r1:HAS_ACTIONS_ON]->(p:Project)-[r2:HAS]->(t:Topic)-[r3:HAS]->(v:Viewpoint)-[r4:HAS]->(b:Bitmap)
WHERE u.username = $username WHERE u.username = $username
@@ -1361,8 +1361,8 @@ class BCFDB(MyDB):
# implemented # implemented
# returns a collection # returns a collection
def get_related_topics(self, project_id: UUID, topic_id: UUID, current_user: User) -> List[TopicGET]: def get_related_topics(self, project_id: UUID, topic_id: UUID, current_user: User) -> list[TopicGET]:
def get_related_topics_work(tx) -> List[TopicGET]: def get_related_topics_work(tx) -> list[TopicGET]:
cypher = """ cypher = """
MATCH (u:User)-[r1:HAS_ACTIONS_ON]->(p:Project)-[r2:HAS]->(t1:Topic)-[r3:RELATED_TO]->(t2:Topic) MATCH (u:User)-[r1:HAS_ACTIONS_ON]->(p:Project)-[r2:HAS]->(t1:Topic)-[r3:RELATED_TO]->(t2:Topic)
WHERE u.username = $username WHERE u.username = $username
@@ -1384,8 +1384,8 @@ class BCFDB(MyDB):
return session.execute_read(get_related_topics_work) return session.execute_read(get_related_topics_work)
def put_related_topics( def put_related_topics(
self, project_id: UUID, topic_id: UUID, related_topics: List[RelatedTopicPUT], current_user: User self, project_id: UUID, topic_id: UUID, related_topics: list[RelatedTopicPUT], current_user: User
) -> List[TopicGET]: ) -> list[TopicGET]:
def put_related_topics_work(tx) -> bool: def put_related_topics_work(tx) -> bool:
for related_topic in related_topics: for related_topic in related_topics:
cypher = """ cypher = """
@@ -1415,8 +1415,8 @@ class BCFDB(MyDB):
# returns a collection # returns a collection
def get_topic_document_references( def get_topic_document_references(
self, project_id: UUID, topic_id: UUID, current_user: User self, project_id: UUID, topic_id: UUID, current_user: User
) -> List[DocumentReferenceGET]: ) -> list[DocumentReferenceGET]:
def get_topic_document_references_work(tx) -> List[DocumentReferenceGET]: def get_topic_document_references_work(tx) -> list[DocumentReferenceGET]:
cypher = """ cypher = """
MATCH (u:User)-[r1:HAS_ACTIONS_ON]->(p:Project)-[r2:HAS]->(t:Topic)-[r3:REFERS_TO]->(d:Document) MATCH (u:User)-[r1:HAS_ACTIONS_ON]->(p:Project)-[r2:HAS]->(t:Topic)-[r3:REFERS_TO]->(d:Document)
WHERE u.username = $username WHERE u.username = $username
@@ -1441,7 +1441,7 @@ class BCFDB(MyDB):
def post_topic_document_reference( def post_topic_document_reference(
self, project_id: UUID, topic_id: UUID, document_reference: DocumentReferencePOST, current_user: User self, project_id: UUID, topic_id: UUID, document_reference: DocumentReferencePOST, current_user: User
) -> List[DocumentReferenceGET]: ) -> list[DocumentReferenceGET]:
def post_topic_document_reference_work(tx) -> bool: def post_topic_document_reference_work(tx) -> bool:
if document_reference.guid is None: if document_reference.guid is None:
document_reference.guid = uuid4() document_reference.guid = uuid4()
@@ -1494,7 +1494,7 @@ class BCFDB(MyDB):
reference_id: UUID, reference_id: UUID,
document_reference: DocumentReferencePUT, document_reference: DocumentReferencePUT,
current_user: User, current_user: User,
) -> List[DocumentReferenceGET]: ) -> list[DocumentReferenceGET]:
document_reference.guid = reference_id document_reference.guid = reference_id
document_reference_post = DocumentReferencePOST(document_reference) document_reference_post = DocumentReferencePOST(document_reference)
topic_document_references_response = self.post_topic_document_reference( topic_document_references_response = self.post_topic_document_reference(