|
40 | 40 | BitvavoAuthenticationService = None |
41 | 41 |
|
42 | 42 | from stonks_overwatch.services.brokers.bitvavo.services.deposit_service import DepositsService as BitvavoDepositService |
43 | | -from stonks_overwatch.services.brokers.bitvavo.services.dividends_service import ( |
44 | | - DividendsService as BitvavoDividendsService, |
45 | | -) |
46 | 43 | from stonks_overwatch.services.brokers.bitvavo.services.fee_service import FeeService as BitvavoFeeService |
47 | 44 | from stonks_overwatch.services.brokers.bitvavo.services.portfolio_service import ( |
48 | 45 | PortfolioService as BitvavoPortfolioService, |
|
80 | 77 | logger.warning(f"Could not import IbkrAuthenticationService: {e}") |
81 | 78 | IbkrAuthenticationService = None |
82 | 79 |
|
83 | | -from stonks_overwatch.services.brokers.ibkr.services.deposit_service import DepositsService as IbkrDepositService |
84 | 80 | from stonks_overwatch.services.brokers.ibkr.services.dividends import ( |
85 | 81 | DividendsService as IbkrDividendsService, |
86 | 82 | ) |
87 | | -from stonks_overwatch.services.brokers.ibkr.services.fee_service import FeeService as IbkrFeeService |
88 | 83 | from stonks_overwatch.services.brokers.ibkr.services.portfolio import ( |
89 | 84 | PortfolioService as IbkrPortfolioService, |
90 | 85 | ) |
|
105 | 100 | ServiceType.ACCOUNT: DeGiroAccountService, |
106 | 101 | ServiceType.AUTHENTICATION: DegiroAuthenticationService, |
107 | 102 | }, |
108 | | - "supports_complete_registration": True, |
109 | 103 | }, |
110 | 104 | BrokerName.BITVAVO: { |
111 | 105 | "config": BitvavoConfig, |
112 | 106 | "services": { |
113 | 107 | ServiceType.PORTFOLIO: BitvavoPortfolioService, |
114 | 108 | ServiceType.TRANSACTION: BitvavoTransactionService, |
115 | 109 | ServiceType.DEPOSIT: BitvavoDepositService, |
116 | | - ServiceType.DIVIDEND: BitvavoDividendsService, |
117 | 110 | ServiceType.FEE: BitvavoFeeService, |
118 | 111 | ServiceType.ACCOUNT: BitvavoAccountService, |
119 | 112 | ServiceType.AUTHENTICATION: BitvavoAuthenticationService, |
120 | 113 | }, |
121 | | - "supports_complete_registration": True, |
122 | 114 | }, |
123 | 115 | BrokerName.IBKR: { |
124 | 116 | "config": IbkrConfig, |
125 | 117 | "services": { |
126 | 118 | ServiceType.PORTFOLIO: IbkrPortfolioService, |
127 | 119 | ServiceType.TRANSACTION: IbkrTransactionService, |
128 | | - ServiceType.DEPOSIT: IbkrDepositService, |
129 | 120 | ServiceType.DIVIDEND: IbkrDividendsService, |
130 | | - ServiceType.FEE: IbkrFeeService, |
131 | 121 | ServiceType.ACCOUNT: IbkrAccountOverviewService, |
132 | 122 | ServiceType.AUTHENTICATION: IbkrAuthenticationService, |
133 | 123 | }, |
134 | | - "supports_complete_registration": True, # Now supports all required services |
135 | 124 | }, |
136 | 125 | } |
137 | 126 |
|
@@ -177,24 +166,15 @@ def register_all_brokers() -> None: |
177 | 166 | try: |
178 | 167 | config_class = broker_config["config"] |
179 | 168 | services = broker_config["services"] |
180 | | - supports_complete = broker_config.get("supports_complete_registration", False) |
181 | | - |
182 | | - if supports_complete: |
183 | | - # Use complete registration for brokers with all required services |
184 | | - registry.register_complete_broker( |
185 | | - broker_name, |
186 | | - config_class, |
187 | | - **{service_type.value: service_class for service_type, service_class in services.items()}, |
188 | | - ) |
189 | | - logger.debug(f"Registered {broker_name} broker using complete registration") |
190 | | - else: |
191 | | - # Use separate registration for brokers missing required services |
192 | | - registry.register_broker_config(broker_name, config_class) |
193 | | - registry.register_broker_services( |
194 | | - broker_name, |
195 | | - **{service_type.value: service_class for service_type, service_class in services.items()}, |
196 | | - ) |
197 | | - logger.debug(f"Registered {broker_name} broker using separate registration") |
| 169 | + |
| 170 | + # Register configuration and services together |
| 171 | + # This is cleaner and includes automatic rollback on failure |
| 172 | + registry.register_complete_broker( |
| 173 | + broker_name, |
| 174 | + config_class, |
| 175 | + **{service_type.value: service_class for service_type, service_class in services.items()}, |
| 176 | + ) |
| 177 | + logger.debug(f"Registered {broker_name} broker successfully") |
198 | 178 |
|
199 | 179 | successfully_registered.append(broker_name) |
200 | 180 |
|
@@ -256,22 +236,13 @@ def ensure_registry_initialized() -> None: |
256 | 236 | try: |
257 | 237 | config_class = broker_config["config"] |
258 | 238 | services = broker_config["services"] |
259 | | - supports_complete = broker_config.get("supports_complete_registration", False) |
260 | | - |
261 | | - if supports_complete: |
262 | | - registry.register_complete_broker( |
263 | | - broker_name, |
264 | | - config_class, |
265 | | - **{service_type.value: service_class for service_type, service_class in services.items()}, |
266 | | - ) |
267 | | - logger.debug(f"Registered {broker_name} broker successfully") |
268 | | - else: |
269 | | - registry.register_broker_config(broker_name, config_class) |
270 | | - registry.register_broker_services( |
271 | | - broker_name, |
272 | | - **{service_type.value: service_class for service_type, service_class in services.items()}, |
273 | | - ) |
274 | | - logger.debug(f"Registered {broker_name} broker successfully (separate registration)") |
| 239 | + |
| 240 | + registry.register_complete_broker( |
| 241 | + broker_name, |
| 242 | + config_class, |
| 243 | + **{service_type.value: service_class for service_type, service_class in services.items()}, |
| 244 | + ) |
| 245 | + logger.debug(f"Registered {broker_name} broker successfully") |
275 | 246 |
|
276 | 247 | except Exception as e: |
277 | 248 | logger.warning(f"Failed to register {broker_name}: {e}") |
|
0 commit comments