Skip to content

Commit 12b9602

Browse files
authored
Merge pull request #397 from specklesystems/gergo/nostringcase
chore: remove stringcase as a dependency
2 parents 6c33c61 + d6e31a9 commit 12b9602

File tree

9 files changed

+726
-706
lines changed

9 files changed

+726
-706
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
.envrc
33
reports/
44

5+
.volumes/
6+
57
# Byte-compiled / optimized / DLL files
68
__pycache__/
79
*.py[cod]

docker-compose.yml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ services:
1313
POSTGRES_USER: speckle
1414
POSTGRES_PASSWORD: speckle
1515
volumes:
16-
- postgres-data:/var/lib/postgresql/data/
16+
- ./.volumes/postgres-data:/var/lib/postgresql/data/
1717
healthcheck:
1818
# the -U user has to match the POSTGRES_USER value
1919
test: ["CMD-SHELL", "pg_isready -U speckle"]
@@ -25,7 +25,7 @@ services:
2525
image: "redis:6.0-alpine"
2626
restart: always
2727
volumes:
28-
- redis-data:/data
28+
- ./.volumes/redis-data:/data
2929
healthcheck:
3030
test: ["CMD", "redis-cli", "--raw", "incr", "ping"]
3131
interval: 5s
@@ -37,7 +37,7 @@ services:
3737
command: server /data --console-address ":9001"
3838
restart: always
3939
volumes:
40-
- minio-data:/data
40+
- ./.volumes/minio-data:/data
4141
healthcheck:
4242
test:
4343
[
@@ -109,6 +109,7 @@ services:
109109
POSTGRES_PASSWORD: "speckle"
110110
POSTGRES_DB: "speckle"
111111
ENABLE_MP: "false"
112+
FRONTEND_ORIGIN: "http://127.0.0.1:8080"
112113

113114
networks:
114115
default:

poetry.lock

Lines changed: 650 additions & 645 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ repository = "https://github.com/specklesystems/speckle-py"
99
documentation = "https://speckle.guide/dev/py-examples.html"
1010
homepage = "https://speckle.systems/"
1111
packages = [
12-
{ include = "specklepy", from = "src" },
13-
{ include = "speckle_automate", from = "src" },
12+
{ include = "specklepy", from = "src" },
13+
{ include = "speckle_automate", from = "src" },
1414
]
1515

1616

@@ -21,7 +21,6 @@ appdirs = "^1.4.4"
2121
gql = { extras = ["requests", "websockets"], version = "^3.3.0" }
2222
ujson = "^5.3.0"
2323
Deprecated = "^1.2.13"
24-
stringcase = "^1.2.0"
2524
attrs = "^23.1.0"
2625
httpx = "^0.25.0"
2726

src/speckle_automate/schema.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44
from typing import Any, Dict, List, Literal, Optional
55

66
from pydantic import BaseModel, ConfigDict, Field
7-
from stringcase import camelcase
7+
from pydantic.alias_generators import to_camel
88

99

1010
class AutomateBase(BaseModel):
1111
"""Use this class as a base model for automate related DTO."""
1212

13-
model_config = ConfigDict(alias_generator=camelcase, populate_by_name=True)
13+
model_config = ConfigDict(alias_generator=to_camel, populate_by_name=True)
1414

1515

1616
class VersionCreationTriggerPayload(AutomateBase):
@@ -39,7 +39,7 @@ class AutomationRunData(BaseModel):
3939
triggers: List[VersionCreationTrigger]
4040

4141
model_config = ConfigDict(
42-
alias_generator=camelcase, populate_by_name=True, protected_namespaces=()
42+
alias_generator=to_camel, populate_by_name=True, protected_namespaces=()
4343
)
4444

4545

@@ -52,7 +52,7 @@ class TestAutomationRunData(BaseModel):
5252
triggers: List[VersionCreationTrigger]
5353

5454
model_config = ConfigDict(
55-
alias_generator=camelcase, populate_by_name=True, protected_namespaces=()
55+
alias_generator=to_camel, populate_by_name=True, protected_namespaces=()
5656
)
5757

5858

src/specklepy/core/api/enums.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
class ProjectVisibility(str, Enum):
55
PRIVATE = "PRIVATE"
66
PUBLIC = "PUBLIC"
7-
UNLISTEd = "UNLISTED"
7+
UNLISTED = "UNLISTED"
88

99

1010
class UserProjectsUpdatedMessageType(str, Enum):

src/specklepy/objects/base.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
)
1717
from warnings import warn
1818

19-
from stringcase import pascalcase
19+
from pydantic.alias_generators import to_pascal
2020

2121
from specklepy.logging.exceptions import SpeckleException, SpeckleInvalidUnitException
2222
from specklepy.objects.units import Units
@@ -148,7 +148,7 @@ def _full_name(cls) -> str:
148148
# convert the module names to PascalCase to match c# namespace naming convention
149149
# also drop specklepy from the beginning
150150
namespace = ".".join(
151-
pascalcase(m)
151+
to_pascal(m)
152152
for m in filter(lambda name: name != "specklepy", cls.__module__.split("."))
153153
)
154154
return f"{namespace}.{cls.__name__}"

tests/integration/client/current/test_project_resource.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ def test_project(self, client: SpeckleClient) -> Project:
2727
"name, description, visibility",
2828
[
2929
("Very private project", "My secret project", ProjectVisibility.PRIVATE),
30+
("Very discoverable project", None, ProjectVisibility.UNLISTED),
3031
("Very public project", None, ProjectVisibility.PUBLIC),
3132
],
3233
)
@@ -48,7 +49,11 @@ def test_project_create(
4849
assert result.id is not None
4950
assert result.name == name
5051
assert result.description == (description or "")
51-
assert result.visibility == visibility
52+
# we've disabled creation of public projects for now, they fall back to unlisted
53+
if visibility == ProjectVisibility.PUBLIC:
54+
assert result.visibility == ProjectVisibility.UNLISTED
55+
else:
56+
assert result.visibility == visibility
5257

5358
def test_project_get(self, client: SpeckleClient, test_project: Project):
5459
result = client.project.get(test_project.id)
@@ -78,7 +83,11 @@ def test_project_update(self, client: SpeckleClient, test_project: Project):
7883
assert updated_project.id == test_project.id
7984
assert updated_project.name == new_name
8085
assert updated_project.description == new_description
81-
assert updated_project.visibility == new_visibility
86+
# we've disabled creation of public projects for now, they fall back to unlisted
87+
if new_visibility == ProjectVisibility.PUBLIC:
88+
assert updated_project.visibility == ProjectVisibility.UNLISTED
89+
else:
90+
assert updated_project.visibility == new_visibility
8291

8392
def test_project_delete(self, client: SpeckleClient):
8493
"""Test deleting a project."""

tests/integration/client/deprecated/test_server.py

Lines changed: 50 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -4,49 +4,53 @@
44
from specklepy.api.models import ServerInfo
55

66

7-
class TestServer:
8-
@pytest.fixture(scope="module")
9-
def token_info(self):
10-
return {
11-
"token": None,
12-
"name": "super secret token",
13-
"scopes": ["streams:read", "streams:write"],
14-
"lifespan": 9001,
15-
}
16-
17-
def test_server_get(self, client: SpeckleClient):
18-
server = client.server.get()
19-
20-
assert isinstance(server, ServerInfo)
21-
assert isinstance(server.frontend2, bool)
22-
23-
def test_server_version(self, client: SpeckleClient):
24-
version = client.server.version()
25-
26-
assert isinstance(version, tuple)
27-
if len(version) == 1:
28-
assert version[0] == "dev"
29-
else:
30-
assert isinstance(version[0], int)
31-
assert len(version) >= 3
32-
33-
def test_server_apps(self, client: SpeckleClient):
34-
apps = client.server.apps()
35-
36-
assert isinstance(apps, list)
37-
assert len(apps) >= 1
38-
assert any(app["name"] == "Speckle Web Manager" for app in apps)
39-
40-
def test_server_create_token(self, client, token_info):
41-
token_info["token"] = client.server.create_token(
42-
name=token_info["name"],
43-
scopes=token_info["scopes"],
44-
lifespan=token_info["lifespan"],
45-
)
46-
47-
assert isinstance(token_info["token"], str)
48-
49-
def test_server_revoke_token(self, client, token_info):
50-
revoked = client.server.revoke_token(token=token_info["token"])
51-
52-
assert revoked is True
7+
@pytest.fixture(scope="module")
8+
def token_info():
9+
return {
10+
"token": None,
11+
"name": "super secret token",
12+
"scopes": ["streams:read", "streams:write"],
13+
"lifespan": 9001,
14+
}
15+
16+
17+
def test_server_get(client: SpeckleClient):
18+
server = client.server.get()
19+
20+
assert isinstance(server, ServerInfo)
21+
assert isinstance(server.frontend2, bool)
22+
23+
24+
def test_server_version(client: SpeckleClient):
25+
version = client.server.version()
26+
27+
assert isinstance(version, tuple)
28+
if len(version) == 1:
29+
assert version[0] == "dev"
30+
else:
31+
assert isinstance(version[0], int)
32+
assert len(version) >= 3
33+
34+
35+
def test_server_apps(client: SpeckleClient):
36+
apps = client.server.apps()
37+
38+
assert isinstance(apps, list)
39+
assert len(apps) >= 1
40+
assert any(app["name"] == "Speckle Web Manager" for app in apps)
41+
42+
43+
def test_server_create_token(client, token_info):
44+
token_info["token"] = client.server.create_token(
45+
name=token_info["name"],
46+
scopes=token_info["scopes"],
47+
lifespan=token_info["lifespan"],
48+
)
49+
50+
assert isinstance(token_info["token"], str)
51+
52+
53+
def test_server_revoke_token(client, token_info):
54+
revoked = client.server.revoke_token(token=token_info["token"])
55+
56+
assert revoked is True

0 commit comments

Comments
 (0)