Skip to content

Commit cf29e01

Browse files
Fix circular imports and flake8 linting issues
1 parent f721614 commit cf29e01

6 files changed

Lines changed: 28 additions & 18 deletions

File tree

projectx_sdk/client.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -223,10 +223,18 @@ def request(
223223

224224
# Check for API-level errors
225225
if not data.get("success", True):
226-
error_code = data.get("errorCode", 0) if data else 0 # type: ignore
227-
error_message = data.get("errorMessage", "Unknown error") if data else "Unknown error" # type: ignore
226+
# Handle response data that might be None
227+
if data is None:
228+
error_code = 0
229+
error_message = "Unknown error"
230+
else:
231+
error_code = data.get("errorCode", 0)
232+
error_message = data.get("errorMessage", "Unknown error")
233+
228234
raise ProjectXError(
229-
f"API error {error_code}: {error_message}", error_code=error_code, response=data
235+
f"API error {error_code}: {error_message}",
236+
error_code=error_code,
237+
response=data
230238
)
231239

232240
return data # type: ignore

projectx_sdk/endpoints/__init__.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,6 @@
22

33
from abc import ABC
44

5-
from projectx_sdk.endpoints.account import AccountService
6-
from projectx_sdk.endpoints.contract import ContractService
7-
from projectx_sdk.endpoints.history import HistoryService, TimeUnit
8-
from projectx_sdk.endpoints.order import OrderService
9-
from projectx_sdk.endpoints.position import PositionService
10-
from projectx_sdk.endpoints.trade import TradeService
11-
125

136
class BaseService(ABC):
147
"""
@@ -27,7 +20,16 @@ def __init__(self, client):
2720
self._client = client
2821

2922

23+
# Import service classes after BaseService is defined to avoid circular imports
24+
from projectx_sdk.endpoints.account import AccountService # noqa: E402
25+
from projectx_sdk.endpoints.contract import ContractService # noqa: E402
26+
from projectx_sdk.endpoints.history import HistoryService, TimeUnit # noqa: E402
27+
from projectx_sdk.endpoints.order import OrderService # noqa: E402
28+
from projectx_sdk.endpoints.position import PositionService # noqa: E402
29+
from projectx_sdk.endpoints.trade import TradeService # noqa: E402
30+
3031
__all__ = [
32+
"BaseService",
3133
"AccountService",
3234
"ContractService",
3335
"HistoryService",

projectx_sdk/models/account.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"""Account models for the ProjectX Gateway API."""
22

3-
from typing import List, Optional
3+
from typing import List
44

55
from projectx_sdk.models import BaseModel
66
from projectx_sdk.models.base import BaseResponse
@@ -62,7 +62,7 @@ def to_dict(self):
6262

6363
def __repr__(self):
6464
"""
65-
String representation of the account.
65+
Return string representation of the account.
6666
6767
Returns:
6868
str: String representation

projectx_sdk/models/base.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
"""Base model implementations for ProjectX SDK."""
22

3-
import json
4-
from dataclasses import dataclass, field
5-
from datetime import datetime, timezone
6-
from typing import Any, Dict, List, Optional, Type, TypeVar
3+
from typing import Optional
74

85
from pydantic import BaseModel, Field
96

projectx_sdk/models/contract.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from typing import List
44

5-
from pydantic import BaseModel, Field, model_validator
5+
from pydantic import BaseModel, Field
66

77
from projectx_sdk.models.base import BaseResponse
88

projectx_sdk/realtime/__init__.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,10 @@ def is_connected(self) -> bool:
6666
Returns:
6767
True if both user and market connections are active
6868
"""
69-
return self._user_connection.is_connected() and self._market_connection.is_connected() # type: ignore
69+
# Cast the result to bool to satisfy mypy
70+
user_connected = bool(self._user_connection.is_connected())
71+
market_connected = bool(self._market_connection.is_connected())
72+
return user_connected and market_connected
7073

7174
def reconnect_subscriptions(self):
7275
"""

0 commit comments

Comments
 (0)