drf-to-mkdoc 0.2.4__py3-none-any.whl → 0.3.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of drf-to-mkdoc might be problematic. Click here for more details.

@@ -2,6 +2,7 @@ DEFAULTS = {
2
2
  # Path configurations with defaults
3
3
  "DOCS_DIR": "docs", # Directory where docs will be generated
4
4
  "CONFIG_DIR": "docs/configs", # Directory for configuration files
5
+ "ER_DIAGRAMS_DIR": "er_diagrams", # Directory for ER diagrams (relative to DOCS_DIR)
5
6
  "MODEL_DOCS_FILE": "docs/model-docs.json", # Path to model documentation JSON file
6
7
  "DOC_CONFIG_FILE": "docs/configs/doc_config.json", # Path to documentation configuration file
7
8
  "CUSTOM_SCHEMA_FILE": "docs/configs/custom_schema.json", # Path to custom schema file
@@ -22,6 +22,7 @@ class DRFToMkDocSettings:
22
22
 
23
23
  path_settings = {
24
24
  "CONFIG_DIR",
25
+ "ER_DIAGRAMS_DIR",
25
26
  "MODEL_DOCS_FILE",
26
27
  "DOC_CONFIG_FILE",
27
28
  "CUSTOM_SCHEMA_FILE",
@@ -4,6 +4,7 @@ from django.core.management.base import BaseCommand
4
4
 
5
5
  from drf_to_mkdoc.conf.settings import drf_to_mkdoc_settings
6
6
  from drf_to_mkdoc.utils.commons.file_utils import load_json_data
7
+ from drf_to_mkdoc.utils.er_diagram_generator import generate_er_diagrams
7
8
  from drf_to_mkdoc.utils.model_detail_generator import generate_model_docs
8
9
  from drf_to_mkdoc.utils.model_list_generator import create_models_index
9
10
 
@@ -42,9 +43,17 @@ class Command(BaseCommand):
42
43
  self.stdout.write("📋 Generating model documentation...")
43
44
 
44
45
  try:
46
+ # Generate model detail pages
45
47
  generate_model_docs(models_data)
48
+ self.stdout.write(self.style.SUCCESS("✅ Model detail pages generated"))
49
+
50
+ # Generate ER diagrams
51
+ generate_er_diagrams(models_data, docs_dir)
52
+ self.stdout.write(self.style.SUCCESS("✅ ER diagrams generated"))
53
+
54
+ # Create models index page
46
55
  create_models_index(models_data, docs_dir)
47
- self.stdout.write(self.style.SUCCESS("✅ Model documentation generated"))
56
+ self.stdout.write(self.style.SUCCESS("✅ Models index page generated"))
48
57
  except Exception as e:
49
58
  self.stdout.write(self.style.WARNING(f"⚠️ Failed to generate model docs: {e}"))
50
59
  raise
@@ -0,0 +1,26 @@
1
+ # {{ app_name|title|cut:"_"|safe }} Models
2
+
3
+ ```mermaid
4
+ erDiagram
5
+ {% for entity in app_entities %}
6
+ {{ entity.model_name }} {
7
+ {% for field in entity.fields %}
8
+ {{ field.name }} {{ field.type }}{% if field.is_pk %} "PK"{% elif field.nullable %} "NULLABLE"{% endif %}
9
+ {% endfor %}
10
+ }
11
+ {% endfor %}
12
+ {% for entity in related_entities %}
13
+ {{ entity.model_name }} {
14
+ id AutoField "PK"
15
+ }
16
+ {% endfor %}
17
+ {% for relationship in relationships %}
18
+ {{ relationship.source_model }} {{ relationship.type }} {{ relationship.target_model }} : "{{ relationship.description }}"
19
+ {% endfor %}
20
+
21
+ ```
22
+
23
+ ## Models
24
+
25
+ {% for entity in app_entities %}- [{{ entity.model_name }}](../../models/{{ entity.app_name }}/{{ entity.table_name }}/)
26
+ {% endfor %}
@@ -0,0 +1,14 @@
1
+ # Entity-Relationship Diagrams
2
+
3
+ This section contains Entity-Relationship (ER) diagrams for all Django models in the system.
4
+
5
+ ## [Complete System Diagram](main.md)
6
+
7
+ View the complete ER diagram showing all models and their relationships.
8
+
9
+ ## Application Diagrams
10
+
11
+ | Application | Models
12
+ |------------|--------|
13
+ {% for app in apps %}| [{{ app.name|title|cut:"_"|safe }}]({{ app.name }}.md) | {{ app.model_count }} |
14
+ {% endfor %}
@@ -0,0 +1,22 @@
1
+ # Complete Entity-Relationship Diagram
2
+
3
+ ```mermaid
4
+ erDiagram
5
+ {% for entity in entities %}
6
+ {{ entity.model_name }} {
7
+ {% for field in entity.fields %}
8
+ {{ field.name }} {{ field.type }}{% if field.is_pk %} "PK"{% elif field.nullable %} "NULLABLE"{% endif %}
9
+ {% endfor %}
10
+ }
11
+ {% endfor %}
12
+ {% for relationship in relationships %}
13
+ {{ relationship.source_model }} {{ relationship.type }} {{ relationship.target_model }} : "{{ relationship.description }}"
14
+ {% endfor %}
15
+
16
+ ```
17
+
18
+ <div class="er-diagram-controls">
19
+ <button class="zoom-in">Zoom In</button>
20
+ <button class="zoom-out">Zoom Out</button>
21
+ <button class="reset-zoom">Reset</button>
22
+ </div>
@@ -0,0 +1,230 @@
1
+ from pathlib import Path
2
+ from typing import Any
3
+
4
+ from django.template.loader import render_to_string
5
+
6
+ from drf_to_mkdoc.conf.settings import drf_to_mkdoc_settings
7
+
8
+ from .commons.file_utils import write_file
9
+
10
+
11
+ def _get_relationship_type_and_description(rel_type_class: str) -> tuple[str, str] | None:
12
+ """Map Django relationship type to Mermaid ER diagram syntax and description."""
13
+ mapping = {
14
+ "ForeignKey": ("}o--||", "many to 1"),
15
+ "OneToOneField": ("||--||", "1 to 1"),
16
+ "OneToOneRel": ("||--||", "1 to 1"),
17
+ "ManyToManyField": ("}o--o{", "many to many"),
18
+ "ManyToManyRel": ("}o--o{", "many to many"),
19
+ "ManyToOneRel": ("||--o{", "1 to many"),
20
+ }
21
+ return mapping.get(rel_type_class)
22
+
23
+
24
+ def _create_entity_from_model(
25
+ app_name: str, model_name: str, model_info: dict[str, Any], include_fields: bool = False
26
+ ) -> dict[str, Any]:
27
+ """Create entity dictionary from model data, optionally including field details."""
28
+ table_name = model_info.get("table_name", model_name)
29
+ entity_id = f"{app_name}__{table_name}"
30
+
31
+ entity = {
32
+ "id": entity_id,
33
+ "app_name": app_name,
34
+ "model_name": model_name,
35
+ "table_name": table_name,
36
+ "fields": [],
37
+ }
38
+
39
+ if include_fields:
40
+ fields = []
41
+ has_pk = False
42
+
43
+ for field_name, field_info in model_info.get("column_fields", {}).items():
44
+ field_type = field_info.get("type", "")
45
+ is_pk = field_info.get("primary_key", False)
46
+ nullable = field_info.get("null", False) or field_info.get("blank", False)
47
+
48
+ fields.append({
49
+ "name": field_name,
50
+ "type": field_type,
51
+ "is_pk": is_pk,
52
+ "nullable": nullable
53
+ })
54
+
55
+ if is_pk:
56
+ has_pk = True
57
+
58
+ if not has_pk:
59
+ fields.insert(0, {
60
+ "name": "id",
61
+ "type": "AutoField",
62
+ "is_pk": True,
63
+ "nullable": False
64
+ })
65
+
66
+ entity["fields"] = fields
67
+
68
+ return entity
69
+
70
+
71
+ def _process_model_relationships(
72
+ source_entity_id: str,
73
+ source_model_name: str,
74
+ model_info: dict[str, Any],
75
+ all_models_data: dict[str, Any]
76
+ ) -> list[dict[str, Any]]:
77
+ """Extract and process model relationships, returning Mermaid-compatible relationship data."""
78
+ relationships = []
79
+
80
+ for rel_name, rel_info in model_info.get("relationships", {}).items():
81
+ if not isinstance(rel_info, dict):
82
+ continue
83
+
84
+ related_model_label = rel_info.get("related_model", "")
85
+ if not related_model_label or "." not in related_model_label:
86
+ continue
87
+
88
+ target_app, target_model = related_model_label.split(".", 1)
89
+
90
+ target_table_name = rel_info.get("table_name", target_model.lower())
91
+ if target_app in all_models_data and target_model in all_models_data[target_app]:
92
+ target_table_name = all_models_data[target_app][target_model].get(
93
+ "table_name", target_model.lower()
94
+ )
95
+
96
+ target_entity_id = f"{target_app}__{target_table_name}"
97
+
98
+ rel_type_class = rel_info.get("type", "")
99
+ type_info = _get_relationship_type_and_description(rel_type_class)
100
+ if not type_info:
101
+ continue
102
+
103
+ rel_type, description = type_info
104
+
105
+ relationships.append({
106
+ "source": source_entity_id,
107
+ "target": target_entity_id,
108
+ "source_model": source_model_name,
109
+ "target_model": target_model,
110
+ "type": rel_type,
111
+ "label": rel_name,
112
+ "description": description,
113
+ })
114
+
115
+ return relationships
116
+
117
+
118
+ def generate_er_diagrams(models_data: dict[str, Any], docs_dir: Path) -> None:
119
+ """Generate main ER diagram, app-specific diagrams, and index page from model data."""
120
+ generate_main_er_diagram(models_data, docs_dir)
121
+
122
+ for app_name, models in models_data.items():
123
+ if not isinstance(models, dict):
124
+ continue
125
+ generate_app_er_diagram(app_name, models, models_data, docs_dir)
126
+
127
+ generate_er_diagrams_index(models_data, docs_dir)
128
+
129
+
130
+ def generate_main_er_diagram(models_data: dict[str, Any], _docs_dir: Path) -> None:
131
+ """Create main ER diagram showing all models and their relationships."""
132
+ entities = []
133
+ relationships = []
134
+
135
+ for app_name, models in models_data.items():
136
+ if not isinstance(models, dict):
137
+ continue
138
+
139
+ for model_name, model_info in models.items():
140
+ if not isinstance(model_info, dict):
141
+ continue
142
+
143
+ entity = _create_entity_from_model(app_name, model_name, model_info, include_fields=False)
144
+ entities.append(entity)
145
+
146
+ model_relationships = _process_model_relationships(
147
+ entity["id"], model_name, model_info, models_data
148
+ )
149
+ relationships.extend(model_relationships)
150
+
151
+ content = render_to_string(
152
+ "er_diagrams/main.html", {"entities": entities, "relationships": relationships}
153
+ )
154
+
155
+ write_file(f"{drf_to_mkdoc_settings.ER_DIAGRAMS_DIR}/main.md", content)
156
+
157
+
158
+ def generate_app_er_diagram(
159
+ app_name: str, app_models: dict[str, Any], all_models_data: dict[str, Any], _docs_dir: Path
160
+ ) -> None:
161
+ """Create app-specific ER diagram with detailed fields and related models."""
162
+ app_entities = []
163
+ related_entities = []
164
+ relationships = []
165
+ related_entity_ids = set()
166
+
167
+ for model_name, model_info in app_models.items():
168
+ if not isinstance(model_info, dict):
169
+ continue
170
+
171
+ entity = _create_entity_from_model(app_name, model_name, model_info, include_fields=True)
172
+ app_entities.append(entity)
173
+
174
+ model_relationships = _process_model_relationships(
175
+ entity["id"], model_name, model_info, all_models_data
176
+ )
177
+
178
+ for relationship in model_relationships:
179
+ target_entity_id = relationship["target"]
180
+ target_model = relationship["target_model"]
181
+ target_app = target_entity_id.split("__")[0]
182
+
183
+ if target_app != app_name and target_entity_id not in related_entity_ids:
184
+ if target_app in all_models_data and target_model in all_models_data[target_app]:
185
+ target_model_info = all_models_data[target_app][target_model]
186
+ related_entity = _create_entity_from_model(
187
+ target_app, target_model, target_model_info, include_fields=False
188
+ )
189
+ related_entities.append(related_entity)
190
+ related_entity_ids.add(target_entity_id)
191
+
192
+ relationships.append(relationship)
193
+
194
+ content = render_to_string(
195
+ "er_diagrams/app.html",
196
+ {
197
+ "app_name": app_name,
198
+ "app_entities": app_entities,
199
+ "related_entities": related_entities,
200
+ "relationships": relationships,
201
+ },
202
+ )
203
+
204
+ write_file(f"{drf_to_mkdoc_settings.ER_DIAGRAMS_DIR}/{app_name}.md", content)
205
+
206
+
207
+ def generate_er_diagrams_index(models_data: dict[str, Any], _docs_dir: Path) -> None:
208
+ """Create index page listing all available ER diagrams with app summaries."""
209
+ apps = []
210
+
211
+ for app_name in sorted(models_data.keys()):
212
+ if not isinstance(models_data[app_name], dict):
213
+ continue
214
+
215
+ model_count = len([
216
+ m for m in models_data[app_name]
217
+ if isinstance(models_data[app_name][m], dict)
218
+ ])
219
+
220
+ model_names = []
221
+ for model_name, model_info in models_data[app_name].items():
222
+ if isinstance(model_info, dict):
223
+ model_names.append(model_name)
224
+ if len(model_names) >= 3:
225
+ break
226
+
227
+ apps.append({"name": app_name, "model_count": model_count})
228
+
229
+ content = render_to_string("er_diagrams/index.html", {"apps": apps})
230
+ write_file(f"{drf_to_mkdoc_settings.ER_DIAGRAMS_DIR}/index.md", content)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: drf-to-mkdoc
3
- Version: 0.2.4
3
+ Version: 0.3.0
4
4
  Summary: Generate Markdown API docs from Django/DRF OpenAPI schema for MkDocs
5
5
  Author-email: Hossein Shayesteh <shayestehhs1@gmail.com>
6
6
  Maintainer-email: Hossein Shayesteh <shayestehhs1@gmail.com>
@@ -55,6 +55,7 @@ Generate beautiful, interactive Markdown API documentation from Django REST Fram
55
55
 
56
56
  - **Zero-hassle docs**: Beautiful, always-in-sync API docs straight from your codebase
57
57
  - **Model deep dive**: Auto-generated model pages with fields, relationships, and choices
58
+ - **ER Diagrams**: Entity-Relationship diagrams showing model relationships
58
59
  - **Lightning-fast discovery**: Interactive endpoint index with powerful filters and search
59
60
  - **Try-it-out**: Interactive API testing directly in the documentation with request/response examples
60
61
  - **AI-powered**: Optional AI-generated documentation with custom field generators(Wait for it...)
@@ -96,8 +97,9 @@ DRF_TO_MKDOC = {
96
97
  'inventory',
97
98
  ],
98
99
  # Optional: Override default paths
99
- # 'DOCS_DIR': 'docs',
100
+ # 'DOCS_DIR': 'docs', # Base directory for all generated docs
100
101
  # 'CONFIG_DIR': 'docs/configs',
102
+ # 'ER_DIAGRAMS_DIR': 'er_diagrams', # Directory for ER diagrams (relative to DOCS_DIR)
101
103
  # 'MODEL_DOCS_FILE': 'docs/model-docs.json',
102
104
  # 'DOC_CONFIG_FILE': 'docs/configs/doc_config.json',
103
105
  # 'CUSTOM_SCHEMA_FILE': 'docs/configs/custom_schema.json',
@@ -112,6 +114,8 @@ DRF_TO_MKDOC = {
112
114
 
113
115
  2. **Create MkDocs configuration**:
114
116
  Copy the [`docs/mkdocs.yml`](docs/mkdocs.yml) file to your project root and customize it as needed.
117
+
118
+ **Note**: If you change the `ER_DIAGRAMS_DIR` setting, update the navigation path in `mkdocs.yml` accordingly.
115
119
 
116
120
  3. **Build documentation**:
117
121
 
@@ -124,8 +128,9 @@ python manage.py build_docs --settings=docs_settings
124
128
  The `DRF_TO_MKDOC` setting supports several configuration options:
125
129
 
126
130
  - **`DJANGO_APPS`** (required): List of Django app names to process
127
- - **`DOCS_DIR`**: Directory where docs will be generated (default: `docs`)
131
+ - **`DOCS_DIR`**: Base directory where docs will be generated (default: `docs`)
128
132
  - **`CONFIG_DIR`**: Directory for configuration files (default: `docs/configs`)
133
+ - **`ER_DIAGRAMS_DIR`**: Directory for ER diagrams (default: `er_diagrams`, relative to `DOCS_DIR`)
129
134
  - **`FIELD_GENERATORS`**: Custom field value generators for better examples
130
135
  - **`ENABLE_AI_DOCS`**: Enable AI-powered documentation features (default: `False`)
131
136
  - **`PATH_PARAM_SUBSTITUTE_FUNCTION`**: Custom function for path parameter substitution
@@ -153,6 +158,12 @@ See a detailed overview of generated files in `docs/structure.md` and a feature
153
158
  - **Floating action button**: Easy access to testing interface
154
159
  - **Multiple examples**: Support for both empty and populated response examples
155
160
 
161
+ ### 📊 Entity-Relationship Diagrams
162
+ - **Visual model relationships**: Interactive ER diagrams showing all model connections
163
+ - **App-specific views**: Detailed diagrams for each Django app with field information
164
+ - **Mermaid-powered**: Clean, professional diagrams with zoom and navigation controls
165
+ - **Auto-generated**: Automatically created from your Django model relationships
166
+
156
167
  ### 🤖 AI-Powered Documentation
157
168
  - **Custom field generators**: Define custom value generators for specific fields
158
169
  - **AI documentation**: Optional AI-generated documentation with context analysis
@@ -233,6 +244,10 @@ drf-to-mkdoc/
233
244
  │ ├── model_list_generator.py
234
245
  │ └── schema.py
235
246
  ├── docs/ # Generated documentation
247
+ │ ├── endpoints/ # API endpoint documentation
248
+ │ ├── models/ # Model documentation
249
+ │ ├── er_diagrams/ # Entity-Relationship diagrams
250
+ │ └── configs/ # Configuration files
236
251
  ├── pyproject.toml # Project configuration
237
252
  └── README.md
238
253
  ```
@@ -251,6 +266,7 @@ To avoid committing generated files to your repository, add the following to you
251
266
  # Documentation
252
267
  /docs/endpoints/
253
268
  /docs/models/
269
+ /docs/er_diagrams/
254
270
  /docs/configs/doc-schema.yaml
255
271
 
256
272
  # Build artifacts
@@ -287,6 +303,10 @@ your-project/
287
303
  ├── docs_settings.py # Documentation-specific settings
288
304
  ├── mkdocs.yml # MkDocs configuration
289
305
  ├── docs/ # Generated documentation (gitignored)
306
+ │ ├── endpoints/ # API endpoint docs
307
+ │ ├── models/ # Model documentation
308
+ │ ├── er_diagrams/ # ER diagrams
309
+ │ └── configs/ # Configuration files
290
310
  └── site/ # Built site (gitignored)
291
311
  ```
292
312
 
@@ -1,13 +1,13 @@
1
1
  drf_to_mkdoc/__init__.py,sha256=IbTW5uKQvJRG9ncHRuk_AGKHPn4ruxs5LqDpUFgUhws,180
2
2
  drf_to_mkdoc/apps.py,sha256=-NrC_dRr6GmLmNQhkNh819B7V1SS4DYDv5JOR0TtuJM,560
3
3
  drf_to_mkdoc/conf/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- drf_to_mkdoc/conf/defaults.py,sha256=mE9c42NqWnEpR5hxhDSdDewgKbvqcU3v1DI0ge_xao0,1014
5
- drf_to_mkdoc/conf/settings.py,sha256=3f268CZzyf9KYab6EvsjIVXP6KBik1k_B4JyJpXDwrU,5456
4
+ drf_to_mkdoc/conf/defaults.py,sha256=69z61GT02PqaBvo4W-wuyI9Xrdgph_qIbGrzx0EG5gg,1104
5
+ drf_to_mkdoc/conf/settings.py,sha256=5oGHe3du6W4zQtfO3D2RWopLm7OqZQ11ftRUqiJcaS4,5483
6
6
  drf_to_mkdoc/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
7
  drf_to_mkdoc/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
8
  drf_to_mkdoc/management/commands/build_docs.py,sha256=k2N8i7sNWPJGVzUSdkDu47FleCSjIxClRq1dWBHwhjQ,4057
9
9
  drf_to_mkdoc/management/commands/build_endpoint_docs.py,sha256=UcKoHFzmsEhs90kHMRvRe2XWx6xigrGAnwA5iEs839s,2450
10
- drf_to_mkdoc/management/commands/build_model_docs.py,sha256=8d7UjwwIsEsReIH4b93nTqFnrZO8kPHXdQaSTYudUGw,1926
10
+ drf_to_mkdoc/management/commands/build_model_docs.py,sha256=xVrsDXBG5FXviGPwr0t8atc6MibUxHRNu2rT3jBgyco,2336
11
11
  drf_to_mkdoc/management/commands/extract_model_data.py,sha256=XoMO4C22ZPKQ99bh1WskEUT1JkA3GpDN5wb3_D5cN0I,13583
12
12
  drf_to_mkdoc/management/commands/generate_doc_json.py,sha256=mWdYgMbSeLP4iQZeUm2DxwYQmdGy8w05XTEfbT_nOJo,19833
13
13
  drf_to_mkdoc/management/commands/update_doc_schema.py,sha256=TtHVQxnVpB_VELRkVcdsDXDU5zXdguFleB1mXCDMAbg,2009
@@ -71,6 +71,9 @@ drf_to_mkdoc/templates/endpoints/list/filters/app.html,sha256=vjY0GGg1UGKKb2JAIa
71
71
  drf_to_mkdoc/templates/endpoints/list/filters/method.html,sha256=B9WHuuScIF45QRGv1wZVocCKMPUvyuEDg_gMaE02NXc,410
72
72
  drf_to_mkdoc/templates/endpoints/list/filters/path.html,sha256=ZKq50BJu9AYdjiY2TXxhM8c8ivz6M8J_aZIC_q2gVvE,180
73
73
  drf_to_mkdoc/templates/endpoints/list/filters/search.html,sha256=NbndD69M-iwFf-BXMo7rsHh1lrZnf6hiZGkPtGF1hU4,280
74
+ drf_to_mkdoc/templates/er_diagrams/app.html,sha256=4ptCVDrKKNMfW0mJbSQPYpe_wvJuNoRiL-uAg4uEYVc,749
75
+ drf_to_mkdoc/templates/er_diagrams/index.html,sha256=KxIpF-Krbbs6fIDdx52AS84sMs7L_pRjlnYklKNrD6s,429
76
+ drf_to_mkdoc/templates/er_diagrams/main.html,sha256=w0mA8Czb--B7FbQOyW6VCeGm1phMOzz2P9CAB4KK0po,657
74
77
  drf_to_mkdoc/templates/model_detail/base.html,sha256=uJaGnFwfv68uJgWJA85Svs7MXPQ-dXi3-SJgR9GfiNM,731
75
78
  drf_to_mkdoc/templates/model_detail/choices.html,sha256=-DAbUpr5jXL_e8r--KkdRXGZuF94_TuVmN17WQDltk0,304
76
79
  drf_to_mkdoc/templates/model_detail/fields.html,sha256=dOYhfwFJThAuG65r8i6_A9budCTNsZ1pQRCGgAKdFAc,1163
@@ -86,6 +89,7 @@ drf_to_mkdoc/templatetags/custom_filters.py,sha256=b_0ExGgBKUIlNkJ8nXlc6mrhhiUUx
86
89
  drf_to_mkdoc/utils/__init__.py,sha256=6dFTb07S6yIf-INMy0Mlgf5purNir687ZU9WZtITh4k,68
87
90
  drf_to_mkdoc/utils/endpoint_detail_generator.py,sha256=qYFM84KuiygNMNGQ_aiT6nxVexWtM8mZb3WfFrV8zVU,28375
88
91
  drf_to_mkdoc/utils/endpoint_list_generator.py,sha256=yVX7qVUTuKF3TPFgm6FI-vVsVZQ7XHMXmZZalgSN8pk,3579
92
+ drf_to_mkdoc/utils/er_diagram_generator.py,sha256=9X4L2XPVSKwxHZQspOSMg7TacAzImeXGgYPzhlsL-U8,7962
89
93
  drf_to_mkdoc/utils/model_detail_generator.py,sha256=_ac2PYSzSwRUgUn-J-nmg7mfQGn8SU_4vkMpMRIxgEU,2619
90
94
  drf_to_mkdoc/utils/model_list_generator.py,sha256=Ki-CwIYKmUbPm3_jUPLPosPfppyVLrZMkqbuPPO3Ycw,1988
91
95
  drf_to_mkdoc/utils/schema.py,sha256=sDhVITdIFp1TJYnqCd4wF69i-lwXGlTsNJ2-ngXkccc,10070
@@ -105,8 +109,8 @@ drf_to_mkdoc/utils/commons/path_utils.py,sha256=Pi9g1xXDPsRzmn4kTeNSVtXG9v6n1h2Z
105
109
  drf_to_mkdoc/utils/commons/schema_utils.py,sha256=1mQxzo08J6tlVmTIJ0hCQ6wCZUWMuV82POhLWUfOYtI,7567
106
110
  drf_to_mkdoc/utils/extractors/__init__.py,sha256=BvC8gKOPVI9gU1Piw0jRhKQ2ER5s1moAxgq7ZYkJWNI,86
107
111
  drf_to_mkdoc/utils/extractors/query_parameter_extractors.py,sha256=xELPYI6tcqfkxOa475JPMaxRzRGUX--Z9oYRlKgXb7w,7964
108
- drf_to_mkdoc-0.2.4.dist-info/licenses/LICENSE,sha256=3n9_ckIREsH8ogCxWW6dFsw_WfGcluG2mHcgl9i_UU0,1068
109
- drf_to_mkdoc-0.2.4.dist-info/METADATA,sha256=utbuKPyj_A2eYjnpTln_O1CzjC-OPfzGcaxoZWz1ryY,10652
110
- drf_to_mkdoc-0.2.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
111
- drf_to_mkdoc-0.2.4.dist-info/top_level.txt,sha256=ZzJecR6j_tvLZiubUBEgawHflozC4DQy9ooNf1yDJ3Q,13
112
- drf_to_mkdoc-0.2.4.dist-info/RECORD,,
112
+ drf_to_mkdoc-0.3.0.dist-info/licenses/LICENSE,sha256=3n9_ckIREsH8ogCxWW6dFsw_WfGcluG2mHcgl9i_UU0,1068
113
+ drf_to_mkdoc-0.3.0.dist-info/METADATA,sha256=Qdnb11wv-MfHGoC0oGA160pjaNXUzcwL6J_noRbi-8c,11950
114
+ drf_to_mkdoc-0.3.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
115
+ drf_to_mkdoc-0.3.0.dist-info/top_level.txt,sha256=ZzJecR6j_tvLZiubUBEgawHflozC4DQy9ooNf1yDJ3Q,13
116
+ drf_to_mkdoc-0.3.0.dist-info/RECORD,,