Skip to content

Commit b89257c

Browse files
authored
Merge pull request #66 from grillazz/3-add-patch-to-update-document
3 add patch to update document
2 parents d54141e + ced64e8 commit b89257c

File tree

14 files changed

+244
-31
lines changed

14 files changed

+244
-31
lines changed

.github/workflows/build-and-test.yml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,14 @@ jobs:
2323
UP: up
2424
DOWN: down
2525
WEB_SERVER: web_server
26-
MONGODB_HOST: mongodb
26+
MONGODB_HOST: 127.0.0.1
2727
MONGODB_PORT: 27017
2828
MONGODB_USER: farmer
2929
MONGODB_PASSWORD: tractor
3030
MONGODB_DATABASE: greenhouse
3131
MONGODB_COLLECTION: greens
3232
MONGODB_TEST: farmland
33-
MONGODB_PARAMS: retryWrites=true&w=majority
34-
MONGO_URL: mongodb://farmer:[email protected]:27017/?retryWrites=true&w=majority
33+
MONGODB_PARAMS: ?authSource=admin&authMechanism=SCRAM-SHA-1&retryWrites=true&w=majority
3534

3635
services:
3736
mongodb:

Makefile

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ down: ## Reset project containers with compose
1818
test: ## Run project tests
1919
docker-compose run --rm web pytest -vv
2020

21+
.PHONY: test-snapshot
22+
test-snapshot: ## Run project tests
23+
docker-compose run --rm web pytest -vv --inline-snapshot=create
24+
2125
.PHONY: mypy
2226
mypy: ## mypy check.
2327
mypy --ignore-missing-imports .
@@ -33,4 +37,9 @@ safety: ## apply safety check in project.
3337
.PHONY: format
3438
format: ## format project code.
3539
black --line-length=120 .
36-
isort -rc -m 3 --tc .
40+
isort -rc -m 3 --tc .
41+
42+
.PHONY: clean
43+
clean: ## Clean Reset project containers and volumes with compose
44+
docker-compose down -v --remove-orphans | true
45+
docker-compose rm -f

docker-compose.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ services:
1919
- mongodb
2020

2121
mongodb:
22-
image: mongo:latest
22+
image: mongo:7.0.8
2323
env_file:
2424
- .env
2525
ports:

greens/config.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@
77

88
class Settings(BaseSettings):
99
"""Settings for the application"""
10+
1011
environment: str = os.getenv("ENVIRONMENT", "local")
1112
testing: str = os.getenv("TESTING", "0")
1213
up: str = os.getenv("UP", "up")
1314
down: str = os.getenv("DOWN", "down")
1415
web_server: str = os.getenv("WEB_SERVER", "web_server")
1516

16-
db_url: str = os.getenv("MONGO_URL", "")
1717
mongodb_database: str = os.getenv("MONGODB_DATABASE", "")
1818
mongodb_collection: str = os.getenv("MONGODB_COLLECTION", "")
1919
mongodb_test: str = os.getenv("MONGODB_TEST", "")
@@ -33,8 +33,7 @@ def mongodb_url(self) -> MongoDsn:
3333
port=self.MONGODB_PORT,
3434
username=self.MONGODB_USER,
3535
password=self.MONGODB_PASSWORD,
36-
37-
path=self.MONGODB_PARAMS
36+
path=self.MONGODB_PARAMS,
3837
)
3938

4039

greens/main.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,20 @@
1515
async def lifespan(app: FastAPI):
1616
app.state.logger = get_logger(__name__)
1717
app.state.logger.info("Starting greens on your farmland...mmm")
18-
app.state.mongo_client, app.state.mongo_db, app.state.mongo_collection = await init_mongo(
19-
global_settings.mongodb_database, global_settings.mongodb_url, global_settings.mongodb_collection
18+
app.state.mongo_client, app.state.mongo_db, app.state.mongo_collection = (
19+
await init_mongo(
20+
global_settings.mongodb_database,
21+
global_settings.mongodb_url.unicode_string(),
22+
global_settings.mongodb_collection,
23+
)
2024
)
2125
try:
2226
yield
2327
finally:
2428
app.state.logger.info("Parking tractors in garage...")
2529

2630

27-
app = FastAPI(lifespan=lifespan, title="Greens API", version="0.4.0")
31+
app = FastAPI(lifespan=lifespan, title="Greens API", version="0.5.0")
2832

2933
app.include_router(v1, prefix="/api/v1")
3034

greens/routers/v1/vegs.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,5 @@ async def get_document(object_id: ObjectIdField):
4747
except (ValueError, TypeError) as exception:
4848
raise NotFoundHTTPException(msg=str(exception)) from exception
4949

50+
5051
# TODO: PUT for replace aka set PATCH for update ?

greens/services/repository.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ async def retrieve_document(document_id: str, collection: str) -> dict:
1919
:return:
2020
"""
2121
document_filter = {"_id": ObjectId(document_id)}
22-
if document := await greens.app.state.mongo_collection[collection].find_one(document_filter):
22+
if document := await greens.app.state.mongo_collection[collection].find_one(
23+
document_filter
24+
):
2325
return await document_id_helper(document)
2426
else:
2527
raise ValueError(f"No document found for {document_id=} in {collection=}")
@@ -33,8 +35,9 @@ async def create_document(document, collection: str) -> InsertOneResult:
3335
:return:
3436
"""
3537
try:
36-
document: InsertOneResult = await greens.app.state.mongo_collection[collection].insert_one(
37-
document.model_dump())
38+
document: InsertOneResult = await greens.app.state.mongo_collection[
39+
collection
40+
].insert_one(document.model_dump())
3841
return document
3942
except WriteError as e:
4043
# TODO: this not make sense as id from mongo will be always unique if we not pass it
@@ -45,6 +48,12 @@ async def get_mongo_meta() -> dict:
4548
list_databases = await greens.app.state.mongo_client.list_database_names()
4649
list_of_collections = {}
4750
for db in list_databases:
48-
list_of_collections[db] = await greens.app.state.mongo_client[db].list_collection_names()
51+
list_of_collections[db] = await greens.app.state.mongo_client[
52+
db
53+
].list_collection_names()
4954
mongo_meta = await greens.app.state.mongo_client.server_info()
50-
return {"version": mongo_meta["version"], "databases": list_databases, "collections": list_of_collections}
55+
return {
56+
"version": mongo_meta["version"],
57+
"databases": list_databases,
58+
"collections": list_of_collections,
59+
}

greens/utils.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,14 @@ def get_logger(module_name):
1919
2020
"""
2121
logger = logging.getLogger(module_name)
22-
handler = RichHandler(rich_tracebacks=True, console=console, tracebacks_show_locals=True)
23-
handler.setFormatter(logging.Formatter("%(name)s - [ %(threadName)s:%(funcName)s:%(lineno)d ] - %(message)s"))
22+
handler = RichHandler(
23+
rich_tracebacks=True, console=console, tracebacks_show_locals=True
24+
)
25+
handler.setFormatter(
26+
logging.Formatter(
27+
"%(name)s - [ %(threadName)s:%(funcName)s:%(lineno)d ] - %(message)s"
28+
)
29+
)
2430
logger.addHandler(handler)
2531
logger.setLevel(logging.DEBUG)
2632
return logger

poetry.lock

Lines changed: 166 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "fastapi-mongodb"
3-
version = "0.4.0"
3+
version = "0.5.0"
44
description = ""
55
authors = ["Jakub Miazek <[email protected]>"]
66
readme = "README.md"
@@ -20,6 +20,7 @@ rich = "^13.7.1"
2020
uvloop = "^0.19.0"
2121
httptools = "^0.6.1"
2222
ruff = "^0.3.7"
23+
inline-snapshot = "^0.8.0"
2324

2425
[build-system]
2526
requires = ["poetry-core>=1.0.0"]

0 commit comments

Comments
 (0)