Skip to content

nkhitrov/arch-blueprint

Repository files navigation

Description

Generate modules import graph for python project. Using plantuml for render.

Installation

pip install arch-blueprint

Usage

Commands

python arch-blueprint --help
usage: arch-blueprint [-h] --modules [MODULES ...] [--format {puml,d2}] [--no-cycle-details] project_dir

Generate architecture diagrams for Python applications

positional arguments:
  project_dir           Path to root directory of target project

options:
  -h, --help            show this help message and exit
  --modules [MODULES ...], -m [MODULES ...]
                        Selected modules for rendering (examples: 'myapp.somemodule', 'myapp.somemodule.*', 'myapp.*.*.models.*', 'myapp.somemodule.**')
  --format {puml,d2}, -f {puml,d2}
                        Output format. Possible values: dict_keys(['puml', 'd2'])
  --no-cycle-details    Hide detailed module-level information for cyclic dependencies

Examples

FastAPI

Commit

Command:

arch-blueprint . -m 'fastapi.*'

Graph

Generated

@startuml
!theme amiga

top to bottom direction
hide empty members

class fastapi.params <<(M, #2ECC71)>>
class fastapi.exception_handlers <<(M, #2ECC71)>>
class fastapi.datastructures <<(M, #2ECC71)>>
class fastapi.testclient <<(M, #2ECC71)>>
class fastapi.types <<(M, #2ECC71)>>
class fastapi.routing <<(M, #2ECC71)>>
class fastapi.logger <<(M, #2ECC71)>>
class fastapi.param_functions <<(M, #2ECC71)>>
class fastapi.utils <<(M, #2ECC71)>>
class fastapi.exceptions <<(M, #2ECC71)>>
class fastapi.staticfiles <<(M, #2ECC71)>>
class fastapi.middleware <<(M, #2ECC71)>>
class fastapi.cli <<(M, #2ECC71)>>
class fastapi.applications <<(M, #2ECC71)>>
class fastapi.background <<(M, #2ECC71)>>
class fastapi.encoders <<(M, #2ECC71)>>
class fastapi.concurrency <<(M, #2ECC71)>>
class fastapi.templating <<(M, #2ECC71)>>
class fastapi._compat <<(M, #2ECC71)>>
class fastapi.dependencies <<(M, #2ECC71)>>
class fastapi.openapi <<(M, #2ECC71)>>
class fastapi.__main__ <<(M, #2ECC71)>>
class fastapi.responses <<(M, #2ECC71)>>
class fastapi.requests <<(M, #2ECC71)>>
class fastapi.security <<(M, #2ECC71)>>
class fastapi.websockets <<(M, #2ECC71)>>

fastapi.__main__ ---> fastapi.cli
fastapi._compat <-[#E74C3C,bold]-> fastapi.openapi
note on link
  **fastapi._compat -> fastapi.openapi:**
  - fastapi._compat → constants
  **fastapi.openapi -> fastapi._compat:**
  - fastapi.openapi → fastapi._compat
end note
fastapi._compat <-[#E74C3C,bold]-> fastapi.params
note on link
  **fastapi._compat -> fastapi.params:**
  - fastapi._compat → fastapi.params
  **fastapi.params -> fastapi._compat:**
  - fastapi.params → fastapi._compat
end note
fastapi._compat ---> fastapi.types
fastapi.applications ---> fastapi.datastructures
fastapi.applications ---> fastapi.exception_handlers
fastapi.applications ---> fastapi.exceptions
fastapi.applications ---> fastapi.logger
fastapi.applications ---> fastapi.middleware
fastapi.applications ---> fastapi.openapi
fastapi.applications ---> fastapi.params
fastapi.applications ---> fastapi.routing
fastapi.applications ---> fastapi.types
fastapi.applications ---> fastapi.utils
fastapi.datastructures ---> fastapi._compat
fastapi.dependencies ---> fastapi._compat
fastapi.dependencies ---> fastapi.background
fastapi.dependencies ---> fastapi.concurrency
fastapi.dependencies ---> fastapi.exceptions
fastapi.dependencies ---> fastapi.logger
fastapi.dependencies ---> fastapi.params
fastapi.dependencies ---> fastapi.security
fastapi.dependencies ---> fastapi.types
fastapi.dependencies ---> fastapi.utils
fastapi.encoders ---> fastapi._compat
fastapi.encoders ---> fastapi.exceptions
fastapi.encoders ---> fastapi.types
fastapi.exception_handlers ---> fastapi.encoders
fastapi.exception_handlers ---> fastapi.exceptions
fastapi.exception_handlers ---> fastapi.utils
fastapi.exception_handlers ---> fastapi.websockets
fastapi.openapi ---> fastapi.datastructures
fastapi.openapi ---> fastapi.dependencies
fastapi.openapi ---> fastapi.encoders
fastapi.openapi ---> fastapi.exceptions
fastapi.openapi ---> fastapi.logger
fastapi.openapi <-[#E74C3C,bold]-> fastapi.params
note on link
  **fastapi.openapi -> fastapi.params:**
  - fastapi.openapi → fastapi.params
  **fastapi.params -> fastapi.openapi:**
  - fastapi.params → models
end note
fastapi.openapi ---> fastapi.responses
fastapi.openapi ---> fastapi.routing
fastapi.openapi ---> fastapi.types
fastapi.openapi ---> fastapi.utils
fastapi.param_functions ---> fastapi._compat
fastapi.param_functions ---> fastapi.openapi
fastapi.param_functions ---> fastapi.params
fastapi.params ---> fastapi.exceptions
fastapi.routing ---> fastapi._compat
fastapi.routing ---> fastapi.datastructures
fastapi.routing ---> fastapi.dependencies
fastapi.routing ---> fastapi.encoders
fastapi.routing ---> fastapi.exceptions
fastapi.routing ---> fastapi.params
fastapi.routing ---> fastapi.types
fastapi.routing <-[#E74C3C,bold]-> fastapi.utils
note on link
  **fastapi.routing -> fastapi.utils:**
  - fastapi.routing → fastapi.utils
  **fastapi.utils -> fastapi.routing:**
  - fastapi.utils → fastapi.routing
end note
fastapi.security ---> fastapi.exceptions
fastapi.security ---> fastapi.openapi
fastapi.security ---> fastapi.param_functions
fastapi.utils ---> fastapi._compat
fastapi.utils ---> fastapi.datastructures
fastapi.utils ---> fastapi.exceptions
@enduml

Taskiq

Commit Command:

arch-blueprint . -m 'taskiq.*' '*.brokers.*' '*.scheduler.*'

Graph

taskiq_graph

@startuml
!theme amiga

top to bottom direction
hide empty members

class taskiq.scheduler.scheduler <<(M, #1ABC9C)>>
class taskiq.package <<(M, #2ECC71)>>
class taskiq.compat <<(M, #2ECC71)>>
class taskiq.__main__ <<(M, #2ECC71)>>
class taskiq.cli <<(M, #2ECC71)>>
class taskiq.state <<(M, #2ECC71)>>
class taskiq.schedule_sources <<(M, #2ECC71)>>
class taskiq.middlewares <<(M, #2ECC71)>>
class taskiq.brokers.shared_broker <<(M, #1ABC9C)>>
class taskiq.decor <<(M, #2ECC71)>>
class taskiq.kicker <<(M, #2ECC71)>>
class taskiq.utils <<(M, #2ECC71)>>
class taskiq.brokers.zmq_broker <<(M, #1ABC9C)>>
class taskiq.events <<(M, #2ECC71)>>
class taskiq.abc <<(M, #2ECC71)>>
class taskiq.serializers <<(M, #2ECC71)>>
class taskiq.message <<(M, #2ECC71)>>
class taskiq.api <<(M, #2ECC71)>>
class taskiq.context <<(M, #2ECC71)>>
class taskiq.result_backends <<(M, #2ECC71)>>
class taskiq.instrumentation <<(M, #2ECC71)>>
class taskiq.scheduler.merge_functions <<(M, #1ABC9C)>>
class taskiq.labels <<(M, #2ECC71)>>
class taskiq.warnings <<(M, #2ECC71)>>
class taskiq.funcs <<(M, #2ECC71)>>
class taskiq.formatters <<(M, #2ECC71)>>
class taskiq.task <<(M, #2ECC71)>>
class taskiq.serialization <<(M, #2ECC71)>>
class taskiq.brokers.inmemory_broker <<(M, #1ABC9C)>>
class taskiq.scheduler.created_schedule <<(M, #1ABC9C)>>
class taskiq.acks <<(M, #2ECC71)>>
class taskiq.exceptions <<(M, #2ECC71)>>
class taskiq.receiver <<(M, #2ECC71)>>
class taskiq.scheduler.scheduled_task <<(M, #1ABC9C)>>
class taskiq.result <<(M, #2ECC71)>>

taskiq.__main__ ---> taskiq.abc
taskiq.abc ---> taskiq.acks
taskiq.abc <-[#E74C3C,bold]-> taskiq.decor
note on link
  **taskiq.abc -> taskiq.decor:**
  - taskiq.abc → taskiq.decor
  **taskiq.decor -> taskiq.abc:**
  - taskiq.decor → broker
  - taskiq.decor → schedule_source
end note
taskiq.abc ---> taskiq.events
taskiq.abc ---> taskiq.exceptions
taskiq.abc <-[#E74C3C,bold]-> taskiq.formatters
note on link
  **taskiq.abc -> taskiq.formatters:**
  - taskiq.abc → proxy_formatter
  **taskiq.formatters -> taskiq.abc:**
  - taskiq.formatters → broker
  - taskiq.formatters → formatter
end note
taskiq.abc ---> taskiq.message
taskiq.abc ---> taskiq.result
taskiq.abc <-[#E74C3C,bold]-> taskiq.result_backends
note on link
  **taskiq.abc -> taskiq.result_backends:**
  - taskiq.abc → dummy
  **taskiq.result_backends -> taskiq.abc:**
  - taskiq.result_backends → result_backend
end note
taskiq.abc <-[#E74C3C,bold]-> taskiq.scheduler
note on link
  **taskiq.abc -> taskiq.scheduler:**
  - taskiq.abc → scheduled_task
  **taskiq.scheduler -> taskiq.abc:**
  - created_schedule → schedule_source
  - scheduler → broker
  - scheduler → schedule_source
end note
taskiq.abc <-[#E74C3C,bold]-> taskiq.serializers
note on link
  **taskiq.abc -> taskiq.serializers:**
  - taskiq.abc → json_serializer
  **taskiq.serializers -> taskiq.abc:**
  - taskiq.serializers → serializer
end note
taskiq.abc ---> taskiq.state
taskiq.abc ---> taskiq.utils
taskiq.abc ---> taskiq.warnings
taskiq.api ---> taskiq.abc
taskiq.api ---> taskiq.acks
taskiq.api ---> taskiq.cli
taskiq.api ---> taskiq.receiver
taskiq.api ---> taskiq.scheduler
taskiq.brokers ---> taskiq.abc
taskiq.brokers ---> taskiq.decor
taskiq.brokers ---> taskiq.events
taskiq.brokers ---> taskiq.exceptions
taskiq.brokers ---> taskiq.kicker
taskiq.brokers ---> taskiq.message
taskiq.brokers ---> taskiq.receiver
taskiq.brokers ---> taskiq.utils
taskiq.cli ---> taskiq.abc
taskiq.cli ---> taskiq.acks
taskiq.cli ---> taskiq.receiver
taskiq.cli ---> taskiq.scheduler
taskiq.context ---> taskiq.abc
taskiq.context ---> taskiq.exceptions
taskiq.context ---> taskiq.message
taskiq.context ---> taskiq.state
taskiq.decor ---> taskiq.kicker
taskiq.decor ---> taskiq.scheduler
taskiq.decor ---> taskiq.task
taskiq.formatters ---> taskiq.compat
taskiq.formatters ---> taskiq.message
taskiq.funcs ---> taskiq.exceptions
taskiq.funcs ---> taskiq.result
taskiq.funcs ---> taskiq.task
taskiq.instrumentation ---> taskiq.cli
taskiq.instrumentation ---> taskiq.middlewares
taskiq.kicker ---> taskiq.abc
taskiq.kicker ---> taskiq.compat
taskiq.kicker ---> taskiq.exceptions
taskiq.kicker ---> taskiq.labels
taskiq.kicker ---> taskiq.message
taskiq.kicker <-[#E74C3C,bold]-> taskiq.scheduler
note on link
  **taskiq.kicker -> taskiq.scheduler:**
  - taskiq.kicker → created_schedule
  - taskiq.kicker → scheduled_task
  **taskiq.scheduler -> taskiq.kicker:**
  - created_schedule → taskiq.kicker
  - scheduler → taskiq.kicker
end note
taskiq.kicker ---> taskiq.task
taskiq.kicker ---> taskiq.utils
taskiq.message ---> taskiq.labels
taskiq.middlewares ---> taskiq.abc
taskiq.middlewares ---> taskiq.compat
taskiq.middlewares ---> taskiq.exceptions
taskiq.middlewares ---> taskiq.kicker
taskiq.middlewares ---> taskiq.message
taskiq.middlewares ---> taskiq.result
taskiq.receiver ---> taskiq.abc
taskiq.receiver ---> taskiq.acks
taskiq.receiver ---> taskiq.compat
taskiq.receiver ---> taskiq.context
taskiq.receiver ---> taskiq.exceptions
taskiq.receiver ---> taskiq.message
taskiq.receiver ---> taskiq.result
taskiq.receiver ---> taskiq.state
taskiq.receiver ---> taskiq.utils
taskiq.result ---> taskiq.compat
taskiq.result ---> taskiq.serialization
taskiq.result_backends ---> taskiq.result
taskiq.schedule_sources ---> taskiq.abc
taskiq.schedule_sources ---> taskiq.scheduler
taskiq.scheduler ---> taskiq.exceptions
taskiq.scheduler ---> taskiq.task
taskiq.scheduler ---> taskiq.utils
taskiq.scheduler.created_schedule ---> taskiq.scheduler.scheduled_task
taskiq.scheduler.merge_functions ---> taskiq.scheduler.scheduled_task
taskiq.scheduler.scheduler ---> taskiq.scheduler.scheduled_task
taskiq.serialization ---> taskiq.compat
taskiq.serialization ---> taskiq.exceptions
taskiq.task ---> taskiq.abc
taskiq.task ---> taskiq.compat
taskiq.task ---> taskiq.exceptions
taskiq.task ---> taskiq.result
@enduml
@enduml

About

Render your project components automatically

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages