Skip to content
This repository was archived by the owner on Apr 2, 2025. It is now read-only.

Commit 490c526

Browse files
author
Phil Varner
authored
use StrEnum and ResultE types (#114)
1 parent 77a6aa6 commit 490c526

File tree

7 files changed

+47
-26
lines changed

7 files changed

+47
-26
lines changed

CHANGELOG.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,33 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
66
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
77

8+
## [unreleased]
9+
10+
### Added
11+
12+
none
13+
14+
### Changed
15+
16+
- OrderStatusCode and ProviderRole are now StrEnum instead of (str, Enum)
17+
- All types using `Result[A, Exception]` have been replace with the equivalent type `ResultE[A]`
18+
19+
### Deprecated
20+
21+
none
22+
23+
### Removed
24+
25+
none
26+
27+
### Fixed
28+
29+
none
30+
31+
### Security
32+
33+
none
34+
835
## [v0.2.0] - 2024-11-23
936

1037
### Added

bin/server.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
from fastapi import FastAPI, Request
55
from returns.maybe import Maybe
6-
from returns.result import Failure, Result, Success
6+
from returns.result import Failure, ResultE, Success
77

88
from stapi_fastapi.backends.product_backend import ProductBackend
99
from stapi_fastapi.backends.root_backend import RootBackend
@@ -38,15 +38,13 @@ class MockRootBackend(RootBackend):
3838
def __init__(self, orders: MockOrderDB) -> None:
3939
self._orders: MockOrderDB = orders
4040

41-
async def get_orders(self, request: Request) -> Result[OrderCollection, Exception]:
41+
async def get_orders(self, request: Request) -> ResultE[OrderCollection]:
4242
"""
4343
Show all orders.
4444
"""
4545
return Success(OrderCollection(features=list(self._orders.values())))
4646

47-
async def get_order(
48-
self, order_id: str, request: Request
49-
) -> Result[Maybe[Order], Exception]:
47+
async def get_order(self, order_id: str, request: Request) -> ResultE[Maybe[Order]]:
5048
"""
5149
Show details for order with `order_id`.
5250
"""
@@ -65,7 +63,7 @@ async def search_opportunities(
6563
product_router: ProductRouter,
6664
search: OpportunityRequest,
6765
request: Request,
68-
) -> Result[list[Opportunity], Exception]:
66+
) -> ResultE[list[Opportunity]]:
6967
try:
7068
return Success(
7169
[o.model_copy(update=search.model_dump()) for o in self._opportunities]
@@ -75,7 +73,7 @@ async def search_opportunities(
7573

7674
async def create_order(
7775
self, product_router: ProductRouter, payload: OrderRequest, request: Request
78-
) -> Result[Order, Exception]:
76+
) -> ResultE[Order]:
7977
"""
8078
Create a new order.
8179
"""

src/stapi_fastapi/backends/product_backend.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from typing import Protocol
44

55
from fastapi import Request
6-
from returns.result import Result
6+
from returns.result import ResultE
77

88
from stapi_fastapi.models.opportunity import Opportunity, OpportunityRequest
99
from stapi_fastapi.models.order import Order, OrderRequest
@@ -16,7 +16,7 @@ async def search_opportunities(
1616
product_router: ProductRouter,
1717
search: OpportunityRequest,
1818
request: Request,
19-
) -> Result[list[Opportunity], Exception]:
19+
) -> ResultE[list[Opportunity]]:
2020
"""
2121
Search for ordering opportunities for the given search parameters.
2222
@@ -29,7 +29,7 @@ async def create_order(
2929
product_router: ProductRouter,
3030
search: OrderRequest,
3131
request: Request,
32-
) -> Result[Order, Exception]:
32+
) -> ResultE[Order]:
3333
"""
3434
Create a new order.
3535

src/stapi_fastapi/backends/root_backend.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,19 @@
22

33
from fastapi import Request
44
from returns.maybe import Maybe
5-
from returns.result import Result
5+
from returns.result import ResultE
66

77
from stapi_fastapi.models.order import Order, OrderCollection
88

99

1010
class RootBackend(Protocol): # pragma: nocover
11-
async def get_orders(self, request: Request) -> Result[OrderCollection, Exception]:
11+
async def get_orders(self, request: Request) -> ResultE[OrderCollection]:
1212
"""
1313
Return a list of existing orders.
1414
"""
1515
...
1616

17-
async def get_order(
18-
self, order_id: str, request: Request
19-
) -> Result[Maybe[Order], Exception]:
17+
async def get_order(self, order_id: str, request: Request) -> ResultE[Maybe[Order]]:
2018
"""
2119
Get details for order with `order_id`.
2220

src/stapi_fastapi/models/order.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from enum import Enum
1+
from enum import StrEnum
22
from typing import Any, Generic, Literal, Optional, TypeVar
33

44
from geojson_pydantic import Feature, FeatureCollection
@@ -36,7 +36,7 @@ class OrderRequest(BaseModel, Generic[ORP]):
3636
model_config = ConfigDict(strict=True)
3737

3838

39-
class OrderStatusCode(str, Enum):
39+
class OrderStatusCode(StrEnum):
4040
received = "received"
4141
accepted = "accepted"
4242
rejected = "rejected"

src/stapi_fastapi/models/product.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from __future__ import annotations
22

3-
from enum import Enum
3+
from enum import StrEnum
44
from typing import TYPE_CHECKING, Literal, Optional, Self
55

66
from pydantic import AnyHttpUrl, BaseModel, Field
@@ -13,7 +13,7 @@
1313
from stapi_fastapi.backends.product_backend import ProductBackend
1414

1515

16-
class ProviderRole(str, Enum):
16+
class ProviderRole(StrEnum):
1717
licensor = "licensor"
1818
producer = "producer"
1919
processor = "processor"

tests/backends.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
from fastapi import Request
55
from returns.maybe import Maybe
6-
from returns.result import Failure, Result, Success
6+
from returns.result import Failure, ResultE, Success
77

88
from stapi_fastapi.backends.product_backend import ProductBackend
99
from stapi_fastapi.backends.root_backend import RootBackend
@@ -27,15 +27,13 @@ class MockRootBackend(RootBackend):
2727
def __init__(self, orders: MockOrderDB) -> None:
2828
self._orders = orders
2929

30-
async def get_orders(self, request: Request) -> Result[OrderCollection, Exception]:
30+
async def get_orders(self, request: Request) -> ResultE[OrderCollection]:
3131
"""
3232
Show all orders.
3333
"""
3434
return Success(OrderCollection(features=list(self._orders.values())))
3535

36-
async def get_order(
37-
self, order_id: str, request: Request
38-
) -> Result[Maybe[Order], Exception]:
36+
async def get_order(self, order_id: str, request: Request) -> ResultE[Maybe[Order]]:
3937
"""
4038
Show details for order with `order_id`.
4139
"""
@@ -53,7 +51,7 @@ async def search_opportunities(
5351
product_router: ProductRouter,
5452
search: OpportunityRequest,
5553
request: Request,
56-
) -> Result[list[Opportunity], Exception]:
54+
) -> ResultE[list[Opportunity]]:
5755
return Success(
5856
[o.model_copy(update=search.model_dump()) for o in self._opportunities]
5957
)
@@ -63,7 +61,7 @@ async def create_order(
6361
product_router: ProductRouter,
6462
payload: OrderRequest,
6563
request: Request,
66-
) -> Result[Order, Exception]:
64+
) -> ResultE[Order]:
6765
"""
6866
Create a new order.
6967
"""

0 commit comments

Comments
 (0)