create_proposal.py
entry point
68 steps
HTTP Client
cli: __main__ guard
This script automates the creation of business proposals using PandaDoc. It gathers necessary client and project details, validates them, and then generates a new proposal document.
Flow
Click any step to see details
graph TB
n_create_proposal_19{"try/except block"}:::decision
n_create_proposal_28[["Transform: int()"]]:::transform
n_create_proposal_19 --> n_create_proposal_28
subgraph n_create_proposal___post_init__["__post_init__()"]
n_create_proposal_43{"if not self.client_email or '@' not in self.client_email"}:::decision
n_create_proposal_45{"if not self.project_title"}:::decision
n_create_proposal_43 --> n_create_proposal_45
end
n_create_proposal_validate_input_compact[["validate_input() — 12 steps (6 Transform, 5 API, 1 Decision)"]]:::compact
subgraph n_create_proposal_wait_for_document_ready["wait_for_document_ready()"]
n_create_proposal_128{"while time.time() - start_time #lt; max_wait"}:::decision
n_create_proposal_129{"try/except block"}:::decision
n_create_proposal_130["API: requests.get()"]:::api
n_create_proposal_133(["Output: logger.debug()"]):::output
n_create_proposal_135{"if status == 'document.uploaded'"}:::decision
n_create_proposal_137{"if status in ['document.error', 'document.deleted']"}:::decision
n_create_proposal_142(["Output: logger.warning()"]):::output
n_create_proposal_128 --> n_create_proposal_129
n_create_proposal_129 --> n_create_proposal_130
n_create_proposal_130 --> n_create_proposal_133
n_create_proposal_133 --> n_create_proposal_135
n_create_proposal_135 --> n_create_proposal_137
n_create_proposal_137 --> n_create_proposal_142
end
n_create_proposal_create_document_compact[["create_document() — 13 steps (6 Decision, 5 Output, 1 API, 1 Transform)"]]:::compact
n_create_proposal_main_compact[["main() — 32 steps (14 Transform, 11 Output, 5 Decision, 2 File I/O)"]]:::compact
click n_create_proposal_19 call showStepDetail("create_proposal.py", 19)
click n_create_proposal_28 call showStepDetail("create_proposal.py", 28)
click n_create_proposal_43 call showStepDetail("create_proposal.py", 43)
click n_create_proposal_45 call showStepDetail("create_proposal.py", 45)
click n_create_proposal_128 call showStepDetail("create_proposal.py", 128)
click n_create_proposal_129 call showStepDetail("create_proposal.py", 129)
click n_create_proposal_130 call showStepDetail("create_proposal.py", 130)
click n_create_proposal_133 call showStepDetail("create_proposal.py", 133)
click n_create_proposal_135 call showStepDetail("create_proposal.py", 135)
click n_create_proposal_137 call showStepDetail("create_proposal.py", 137)
click n_create_proposal_142 call showStepDetail("create_proposal.py", 142)
classDef api fill:#dbeafe,stroke:#2563eb,color:#1e3a5f
classDef fileio fill:#dcfce7,stroke:#16a34a,color:#14532d
classDef dbop fill:#f3e8ff,stroke:#9333ea,color:#3b0764
classDef decision fill:#ffedd5,stroke:#ea580c,color:#7c2d12
classDef output fill:#f3f4f6,stroke:#6b7280,color:#1f2937
classDef transform fill:#ccfbf1,stroke:#0d9488,color:#134e4a
classDef entry fill:#dcfce7,stroke:#16a34a,stroke-width:3px,color:#14532d
classDef compact fill:#f0f4ff,stroke:#6366f1,color:#312e81,stroke-width:2px
API Call
File I/O
Database
Decision
Output
Transform
All Steps
Step Detail
Select a step from the diagram or list to see its details.
Services
- HTTP Client (requests)
Secrets
- DEBUG
- PANDADOC_API_KEY
- PANDADOC_RECIPIENT_ROLE
- PANDADOC_TEMPLATE_UUID
- PANDADOC_TIMEOUT
Imports
External
- dataclasses
- dotenv
- json
- logging
- os
- re
- requests
- sys
- time
- typing