e6b92bec56
Whole-line matching broke on any content long enough to wrap, so compare against a whitespace-collapsed blob instead and check leftover header markers separately against the rendered lines. Verified against headers and body lines that wrap over 2-3 lines. Add an append regression: append_file re-renders the whole document, so put the markup that trips ReportLab in the appended half to exercise that path on its own. Both PDF tests fail without the escape fix. Also condense the stale three-line comment above the render loop.
Codebase Structure
The code structure inspired by https://github.com/Netflix/dispatch.
Very good structure on how to make a scalable codebase is also in this repo.
Just a brief document about how we should structure our backend codebase.
Code Structure
src/
/<service name>/
models.py
services.py
prompts.py
views.py
utils.py
routers.py
/_<subservice name>/
Service.py
Always a single file, except if it becomes too long - more than ~500 lines, split it into _subservices
Views.py
Always split the views into two parts
# All
...
# Requests
...
# Responses
...
If too long → split into multiple files
Prompts.py
Single file; if too long → split into multiple files (one prompt per file or so)
Routers.py
Never split into more than one file