drf-to-mkdoc 0.2.3__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.

Files changed (40) hide show
  1. drf_to_mkdoc/conf/defaults.py +1 -0
  2. drf_to_mkdoc/conf/settings.py +1 -0
  3. drf_to_mkdoc/management/commands/build_model_docs.py +10 -1
  4. drf_to_mkdoc/static/drf-to-mkdoc/javascripts/field-sections-loader.js +29 -0
  5. drf_to_mkdoc/static/drf-to-mkdoc/javascripts/query-parameters-loader.js +16 -0
  6. drf_to_mkdoc/static/drf-to-mkdoc/javascripts/try-out/field-extractor.js +200 -0
  7. drf_to_mkdoc/static/drf-to-mkdoc/javascripts/try-out/form-manager.js +307 -14
  8. drf_to_mkdoc/static/drf-to-mkdoc/javascripts/try-out/main.js +39 -11
  9. drf_to_mkdoc/static/drf-to-mkdoc/javascripts/try-out/modal.js +298 -18
  10. drf_to_mkdoc/static/drf-to-mkdoc/javascripts/try-out/query-parameters-extractor.js +94 -0
  11. drf_to_mkdoc/static/drf-to-mkdoc/javascripts/try-out/request-executor.js +278 -62
  12. drf_to_mkdoc/static/drf-to-mkdoc/javascripts/try-out/response-modal.js +173 -0
  13. drf_to_mkdoc/static/drf-to-mkdoc/javascripts/try-out/suggestions.js +59 -152
  14. drf_to_mkdoc/static/drf-to-mkdoc/javascripts/try-out/tabs.js +52 -9
  15. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/badges.css +13 -5
  16. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/theme-toggle.css +297 -25
  17. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/try-out/fab.css +204 -0
  18. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/try-out/response.css +323 -0
  19. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/try-out/variables.css +139 -0
  20. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/field-sections.css +136 -0
  21. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/try-out/form.css +539 -0
  22. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/try-out/modal.css +239 -17
  23. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/try-out/response.css +503 -43
  24. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/try-out/tabs.css +71 -19
  25. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/try-out/variables.css +71 -15
  26. drf_to_mkdoc/templates/endpoints/detail/request_body.html +2 -0
  27. drf_to_mkdoc/templates/er_diagrams/app.html +26 -0
  28. drf_to_mkdoc/templates/er_diagrams/index.html +14 -0
  29. drf_to_mkdoc/templates/er_diagrams/main.html +22 -0
  30. drf_to_mkdoc/templates/try-out/fab.html +67 -3
  31. drf_to_mkdoc/templates/try-out/form.html +221 -74
  32. drf_to_mkdoc/templates/try-out/modal.html +75 -7
  33. drf_to_mkdoc/templates/try-out/response-modal.html +138 -9
  34. drf_to_mkdoc/utils/endpoint_detail_generator.py +1 -0
  35. drf_to_mkdoc/utils/er_diagram_generator.py +230 -0
  36. {drf_to_mkdoc-0.2.3.dist-info → drf_to_mkdoc-0.3.0.dist-info}/METADATA +89 -10
  37. {drf_to_mkdoc-0.2.3.dist-info → drf_to_mkdoc-0.3.0.dist-info}/RECORD +40 -27
  38. {drf_to_mkdoc-0.2.3.dist-info → drf_to_mkdoc-0.3.0.dist-info}/WHEEL +0 -0
  39. {drf_to_mkdoc-0.2.3.dist-info → drf_to_mkdoc-0.3.0.dist-info}/licenses/LICENSE +0 -0
  40. {drf_to_mkdoc-0.2.3.dist-info → drf_to_mkdoc-0.3.0.dist-info}/top_level.txt +0 -0
@@ -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.3
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,7 +55,10 @@ 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
60
+ - **Try-it-out**: Interactive API testing directly in the documentation with request/response examples
61
+ - **AI-powered**: Optional AI-generated documentation with custom field generators(Wait for it...)
59
62
  - **DRF-native**: Works with DRF Spectacular; no custom schema wiring needed
60
63
  - **MkDocs Material**: Looks great out of the box with the Material theme
61
64
 
@@ -76,7 +79,7 @@ INSTALLED_APPS = [
76
79
 
77
80
  # Required for OpenAPI schema generation
78
81
  REST_FRAMEWORK = {
79
- 'DEFAULT_SCHEMA_CLASS': 'drf_to_mkdoc.utils.schema.AutoSchema', # Use our custom AutoSchema
82
+ 'DEFAULT_SCHEMA_CLASS': 'drf_to_mkdoc.utils.schema.AutoSchema',
80
83
  }
81
84
 
82
85
  SPECTACULAR_SETTINGS = {
@@ -94,16 +97,25 @@ DRF_TO_MKDOC = {
94
97
  'inventory',
95
98
  ],
96
99
  # Optional: Override default paths
97
- # 'DOCS_DIR': 'docs',
100
+ # 'DOCS_DIR': 'docs', # Base directory for all generated docs
98
101
  # 'CONFIG_DIR': 'docs/configs',
102
+ # 'ER_DIAGRAMS_DIR': 'er_diagrams', # Directory for ER diagrams (relative to DOCS_DIR)
99
103
  # 'MODEL_DOCS_FILE': 'docs/model-docs.json',
100
104
  # 'DOC_CONFIG_FILE': 'docs/configs/doc_config.json',
101
105
  # 'CUSTOM_SCHEMA_FILE': 'docs/configs/custom_schema.json',
106
+ # 'FIELD_GENERATORS': {
107
+ # 'email': 'faker.email',
108
+ # 'name': 'faker.name',
109
+ # 'created_at': 'datetime.now',
110
+ # },
111
+ # 'ENABLE_AI_DOCS': False,
102
112
  }
103
113
  ```
104
114
 
105
115
  2. **Create MkDocs configuration**:
106
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.
107
119
 
108
120
  3. **Build documentation**:
109
121
 
@@ -111,18 +123,61 @@ DRF_TO_MKDOC = {
111
123
  python manage.py build_docs --settings=docs_settings
112
124
  ```
113
125
 
126
+ ### Configuration Options
127
+
128
+ The `DRF_TO_MKDOC` setting supports several configuration options:
129
+
130
+ - **`DJANGO_APPS`** (required): List of Django app names to process
131
+ - **`DOCS_DIR`**: Base directory where docs will be generated (default: `docs`)
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`)
134
+ - **`FIELD_GENERATORS`**: Custom field value generators for better examples
135
+ - **`ENABLE_AI_DOCS`**: Enable AI-powered documentation features (default: `False`)
136
+ - **`PATH_PARAM_SUBSTITUTE_FUNCTION`**: Custom function for path parameter substitution
137
+ - **`PATH_PARAM_SUBSTITUTE_MAPPING`**: Mapping for path parameter substitution
138
+
114
139
  ## Available Commands
115
140
 
116
141
  - `build_docs`: Build the complete documentation site with MkDocs
117
142
  - `build_endpoint_docs`: Build endpoint documentation from OpenAPI schema
118
143
  - `build_model_docs`: Build model documentation from model JSON data
119
144
  - `extract_model_data`: Extract model data from Django model introspection and save as JSON
145
+ - `generate_doc_json`: Generate JSON context for new API endpoints to be documented
120
146
  - `update_doc_schema`: Update the final schema by copying the documented schema
121
147
 
122
148
  ## What you get
123
149
 
124
150
  See a detailed overview of generated files in `docs/structure.md` and a feature breakdown in `docs/features.md`.
125
151
 
152
+ ## Key Features
153
+
154
+ ### 🚀 Interactive API Testing (Try-Out)
155
+ - **Live API testing**: Test endpoints directly from the documentation
156
+ - **Request builder**: Interactive forms for parameters, headers, and request body
157
+ - **Response viewer**: Real-time response display with syntax highlighting
158
+ - **Floating action button**: Easy access to testing interface
159
+ - **Multiple examples**: Support for both empty and populated response examples
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
+
167
+ ### 🤖 AI-Powered Documentation
168
+ - **Custom field generators**: Define custom value generators for specific fields
169
+ - **AI documentation**: Optional AI-generated documentation with context analysis
170
+ - **Smart examples**: Enhanced example generation for better API understanding
171
+
172
+ ### 📊 Advanced Filtering & Search
173
+ - **Multi-criteria filtering**: Filter by app, HTTP method, path, and search terms
174
+ - **Real-time search**: Instant search across all endpoints
175
+ - **Smart suggestions**: Auto-complete for query parameters and field names
176
+
177
+ ### 🎨 Beautiful UI
178
+ - **Material Design**: Modern, responsive interface with dark/light themes
179
+ - **Interactive elements**: Hover effects, animations, and smooth transitions
180
+ - **Mobile-friendly**: Fully responsive design for all devices
126
181
 
127
182
  ## How it works
128
183
 
@@ -167,13 +222,33 @@ drf-to-mkdoc/
167
222
  │ │ ├── build_endpoint_docs.py # Build endpoint documentation
168
223
  │ │ ├── build_model_docs.py # Build model documentation
169
224
  │ │ ├── extract_model_data.py # Extract model data from Django
225
+ │ │ ├── generate_doc_json.py # Generate JSON context for AI docs
170
226
  │ │ └── update_doc_schema.py # Schema updates
227
+ │ ├── static/
228
+ │ │ └── drf-to-mkdoc/
229
+ │ │ ├── javascripts/
230
+ │ │ │ ├── try-out/ # Interactive API testing
231
+ │ │ │ └── endpoints-filter.js # Endpoint filtering
232
+ │ │ └── stylesheets/ # CSS for styling
233
+ │ ├── templates/
234
+ │ │ ├── endpoints/ # Endpoint documentation templates
235
+ │ │ ├── model_detail/ # Model documentation templates
236
+ │ │ └── try-out/ # Interactive testing templates
171
237
  │ └── utils/
172
- │ ├── common.py # Shared utilities
173
- │ ├── endpoint_generator.py # Endpoint documentation
174
- │ ├── model_generator.py # Model documentation
175
- └── extractors/ # Query parameter extraction
176
- ├── pyproject.toml # Project configuration
238
+ │ ├── ai_tools/ # AI-powered documentation features
239
+ │ ├── commons/ # Shared utilities
240
+ │ ├── extractors/ # Query parameter extraction
241
+ ├── endpoint_detail_generator.py
242
+ ├── endpoint_list_generator.py
243
+ │ ├── model_detail_generator.py
244
+ │ ├── model_list_generator.py
245
+ │ └── schema.py
246
+ ├── docs/ # Generated documentation
247
+ │ ├── endpoints/ # API endpoint documentation
248
+ │ ├── models/ # Model documentation
249
+ │ ├── er_diagrams/ # Entity-Relationship diagrams
250
+ │ └── configs/ # Configuration files
251
+ ├── pyproject.toml # Project configuration
177
252
  └── README.md
178
253
  ```
179
254
 
@@ -191,6 +266,7 @@ To avoid committing generated files to your repository, add the following to you
191
266
  # Documentation
192
267
  /docs/endpoints/
193
268
  /docs/models/
269
+ /docs/er_diagrams/
194
270
  /docs/configs/doc-schema.yaml
195
271
 
196
272
  # Build artifacts
@@ -227,10 +303,13 @@ your-project/
227
303
  ├── docs_settings.py # Documentation-specific settings
228
304
  ├── mkdocs.yml # MkDocs configuration
229
305
  ├── docs/ # Generated documentation (gitignored)
306
+ │ ├── endpoints/ # API endpoint docs
307
+ │ ├── models/ # Model documentation
308
+ │ ├── er_diagrams/ # ER diagrams
309
+ │ └── configs/ # Configuration files
230
310
  └── site/ # Built site (gitignored)
231
311
  ```
232
312
 
233
313
  ## Contributing
234
314
 
235
- See [CONTRIBUTING.md](CONTRIBUTING.md) for detailed contribution guidelines.
236
- This will ensure that only the source configuration and scripts are versioned, while the generated documentation is excluded.
315
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for detailed contribution guidelines.
@@ -1,26 +1,32 @@
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
14
14
  drf_to_mkdoc/static/drf-to-mkdoc/javascripts/endpoints-filter.js,sha256=KtfWroqsXg-wwmk36hpoH--M9WIW85EFNGeswMjFu4g,6138
15
- drf_to_mkdoc/static/drf-to-mkdoc/javascripts/try-out/form-manager.js,sha256=QUzoAHGt1g72eLpZOv2crzyBs3VjRzqI8KJP4Z4wtt4,5702
16
- drf_to_mkdoc/static/drf-to-mkdoc/javascripts/try-out/main.js,sha256=_kXQhucJexV0_AuOJPQiNda-ACUI0ZyUep-vYXlsvsM,898
17
- drf_to_mkdoc/static/drf-to-mkdoc/javascripts/try-out/modal.js,sha256=3jbjFoizmZmeiV3uGeQyzcLzUUrRecw3qCw-wxwEH44,2585
18
- drf_to_mkdoc/static/drf-to-mkdoc/javascripts/try-out/request-executor.js,sha256=hIApsQ6gaXqNjgCyghZF3F6YqLHuLvG56AyLDzoVtjk,4150
19
- drf_to_mkdoc/static/drf-to-mkdoc/javascripts/try-out/suggestions.js,sha256=J3YskiK24jTDkO2sY5ye4AsLM79F5_AriE1G5NqndPw,7883
20
- drf_to_mkdoc/static/drf-to-mkdoc/javascripts/try-out/tabs.js,sha256=mlaZ3vYze3-XXNT6XlgUwOXR8uvyylePXSfmHFDu6Is,1107
15
+ drf_to_mkdoc/static/drf-to-mkdoc/javascripts/field-sections-loader.js,sha256=kSR_CDZTjRtsow1dDd6JN5I5rJjvnv10XmTItExdGas,1001
16
+ drf_to_mkdoc/static/drf-to-mkdoc/javascripts/query-parameters-loader.js,sha256=W_ITwF2UwvODJBzcSQBdJ--upVFYXcOler8i0jqsabI,635
17
+ drf_to_mkdoc/static/drf-to-mkdoc/javascripts/try-out/field-extractor.js,sha256=f_QTpuQgJprmoVqyT5HfnfFTH4q5rWzio3Rt0wYsHNE,8580
18
+ drf_to_mkdoc/static/drf-to-mkdoc/javascripts/try-out/form-manager.js,sha256=6KIedOp1OSazcPLYbj7Zu4xtXBWu0XMcobTo3pTJbDY,16269
19
+ drf_to_mkdoc/static/drf-to-mkdoc/javascripts/try-out/main.js,sha256=W0Vv9jdCturToACs_wapZ37ux0nRXy1d3GqfXq-0NuI,1821
20
+ drf_to_mkdoc/static/drf-to-mkdoc/javascripts/try-out/modal.js,sha256=IUg33Er2cF6qzIbxgnvlj8C_fSjNariyfFd3zswu3wU,14238
21
+ drf_to_mkdoc/static/drf-to-mkdoc/javascripts/try-out/query-parameters-extractor.js,sha256=3b6XshRFdf5TeZNktgxEBenEFWTTEsKjYZll0xMUv3Q,3542
22
+ drf_to_mkdoc/static/drf-to-mkdoc/javascripts/try-out/request-executor.js,sha256=CsIusYZ5RIJXQFN3eh3ZcTLgf6hoZJ7E9BP1_EGsSiA,11904
23
+ drf_to_mkdoc/static/drf-to-mkdoc/javascripts/try-out/response-modal.js,sha256=D8Xd9rEAJpMPExVxSmJ7PaQXCmIfRPhyv6t93A0AP0w,5671
24
+ drf_to_mkdoc/static/drf-to-mkdoc/javascripts/try-out/suggestions.js,sha256=WOXppK1HgYFDbVkCvchBKxL8rc_974roJAxZE2EBdDo,4396
25
+ drf_to_mkdoc/static/drf-to-mkdoc/javascripts/try-out/tabs.js,sha256=WwAjbisNap0lOQ3pZyWkW0G7hXvy_gFjHMCCPUu50a8,2791
26
+ drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/field-sections.css,sha256=-EAXNd0h6OHMo0kViUfUxMp3uBdQrbb6YOphSLnlfXo,2654
21
27
  drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/accessibility.css,sha256=DwCGPoaxaUvyifryrKqmkFDH06XBNf65kYsflMTbi0M,494
22
28
  drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/animations.css,sha256=61m9SLAbatVUNuFeTUTxktoMu9SskYcwFjTsHYbsCRo,393
23
- drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/badges.css,sha256=kUlUcf72uRw6x6Gn7cUq_aTuSGBbhumZ4Us-eBDM7DM,1251
29
+ drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/badges.css,sha256=gti54y-IoZEpK5xUn92OD55sDqwvWUa0HjsHvoEHmKM,1438
24
30
  drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/base.css,sha256=K9lEjO-TEaUsFCaiuBwqDGrrjIJP8oBDh7igBGRTD3g,1839
25
31
  drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/endpoint-content.css,sha256=1EKHfDeOSpNJe6l3mHzsBlLqLVCJn_1TKtEVfV7Dp88,3452
26
32
  drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/endpoints-grid.css,sha256=Ct4H_ma3tC_1ogw9IeSNmUDZFJwzQWjCM6GomNXV8ig,4115
@@ -32,8 +38,11 @@ drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/responsive.css,sha256=mzR
32
38
  drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/sections.css,sha256=xdrO6vUpthFFN1ESummoGuG5MPtE2d2lPsBOWuv-T6o,705
33
39
  drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/stats.css,sha256=0cDD8s63r6zQid_O1schNvfIwys1Y526xO6-B6s4Lxc,667
34
40
  drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/tags.css,sha256=dOw13qsvVjx9cibzgzXlOutXVosNp6LzFfEFKvumG8w,1785
35
- drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/theme-toggle.css,sha256=j1P5xDQDfos8jeVYz5s1jjEeujMlZtLi39OC6VeuMcA,1034
41
+ drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/theme-toggle.css,sha256=kaG0KZXa2uYmyIJfl4hd30Tj4pvDijJKthUXQ9WovJs,7839
36
42
  drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/variables.css,sha256=Sg2vcQOHdpmEFDn43OeZcMIKxtr5EOEI_wISkCmtcSU,1895
43
+ drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/try-out/fab.css,sha256=y3lhPO09oFaGeBywhd9C2d3LolX0xhbYTD-gIvmM24I,4505
44
+ drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/try-out/response.css,sha256=QiYLRVT8mb5rCMh-CJEOsrG20BqY-sFtNtsTsKm4tRo,7807
45
+ drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/try-out/variables.css,sha256=bzjsnT-GQ_30cQz-CUKLYKELWYakhyaQ9a6b8EmpcXI,5350
37
46
  drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/models/animations.css,sha256=IrqN9vJKgaHAWk2PBRKKmFHgH-lQlw5YZvEOGDqYk_g,656
38
47
  drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/models/base.css,sha256=qdXDVScWoEvFbSRfjDlnxvQZBy2JFX9yXPngMWNSZ7o,1849
39
48
  drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/models/model-cards.css,sha256=IppCOptBoFeQCz2sc-exPrnxvsdDxcwYGM-foQrZoVU,2779
@@ -42,18 +51,18 @@ drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/models/responsive.css,sha256=ygqyUt
42
51
  drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/models/variables.css,sha256=2HvyjnJrygSzdzpE-FYpo6FGhrYhmZ7NwDFAkADXQNg,1094
43
52
  drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/try-out/buttons.css,sha256=dqQVg-_TtT84aitXZAOC3eq8MvuWP3NMf_Ub63wK2mg,1771
44
53
  drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/try-out/fab.css,sha256=dWUODpavNQq-LkjKb-E7iEiPYd45tuRPME_w1bq5Nic,1060
45
- drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/try-out/form.css,sha256=vwk2Y-BznJkic3_07Izk-NfL7uYWgGhXbVmyuh9Ml9w,3093
54
+ drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/try-out/form.css,sha256=-XIgZ99XIpiqh_h5wu4Yo7S1UTpP87LHRz129K-IWaY,15908
46
55
  drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/try-out/key-value.css,sha256=dldQo9OZh5-9n0Xa9eaL8FA5ggKSBsXslOnxbtp39RE,3844
47
56
  drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/try-out/main.css,sha256=i5-b7eUAqw35AavIe-kSeMPz1RejEaA9S7ZFHtITjsA,938
48
- drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/try-out/modal.css,sha256=xPTJoGm2FrM1aqJ8S6abF58aA93S0sKuGm0N0PyfXys,2425
49
- drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/try-out/response.css,sha256=RJLs1BAyVBaqds1EgQiZGWG8patHzT4QPk8cVv3oDQM,3751
50
- drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/try-out/tabs.css,sha256=i-Z-teVEVmLWzHY5b7DdrVROyNjRoQ4EjOsSkGJP2ig,1215
51
- drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/try-out/variables.css,sha256=tWw8GDrLQv70IIIIiDSMBU9n22cg_civnTSM2dmSXDk,1110
57
+ drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/try-out/modal.css,sha256=LD9dzn-4DDtw1xNb8NRJ8PJMYf2Am3ldoDh3DF2mV-g,7371
58
+ drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/try-out/response.css,sha256=C8zJj_L0BFZR8tFumQxtvRsPfh2YPZTuPTXA43f1CuM,14133
59
+ drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/try-out/tabs.css,sha256=lN17XT5XBX-_M7M9jm-IQkIaKVI4nAVeKvzXhZdb95E,2340
60
+ drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/try-out/variables.css,sha256=hU-nKNdVpD6a6tpSzhSJIMk8gOUA7G_EDsTBksrmlXY,3117
52
61
  drf_to_mkdoc/templates/models_index.html,sha256=A_Lu3wFMG2Nf8Bv4zttz3e0gZpxBcvDjSvX_rfOYdeI,837
53
62
  drf_to_mkdoc/templates/endpoints/detail/base.html,sha256=HdLdl-OEkpcF56vK5pvduWZbqdzjmrehI2_B8KYf6y0,857
54
63
  drf_to_mkdoc/templates/endpoints/detail/path_parameters.html,sha256=M7OPUg88e3bw01rZpZUVahZzlq3JFaxZDsnDx2Xizx8,310
55
64
  drf_to_mkdoc/templates/endpoints/detail/query_parameters.html,sha256=PlkL3HDiyvwEcDC-QFTc4xunV32TzGX5yyqhSS0YyOY,879
56
- drf_to_mkdoc/templates/endpoints/detail/request_body.html,sha256=-9wacJIQOS-lC2zE31rPaeGs_SkOVm1tAJvebLW6zME,149
65
+ drf_to_mkdoc/templates/endpoints/detail/request_body.html,sha256=oDMymuZyAbWF2aDAvd-jyrRxTLM3fOZgYM3UpTRDbKo,235
57
66
  drf_to_mkdoc/templates/endpoints/detail/responses.html,sha256=j5TayLw3r3BCM2ZN0lvO4Tv9Wf-xViG6a-c8-LzeeUI,297
58
67
  drf_to_mkdoc/templates/endpoints/list/base.html,sha256=l4A4VmDvDkMKim15feh0DoJkCf2V83EoI4wISUjf4Kc,602
59
68
  drf_to_mkdoc/templates/endpoints/list/endpoint_card.html,sha256=PesI9Dlt2kAU1AKcMNGUzIA3lzGcncX-Na0HYiwbR28,1114
@@ -62,21 +71,25 @@ drf_to_mkdoc/templates/endpoints/list/filters/app.html,sha256=vjY0GGg1UGKKb2JAIa
62
71
  drf_to_mkdoc/templates/endpoints/list/filters/method.html,sha256=B9WHuuScIF45QRGv1wZVocCKMPUvyuEDg_gMaE02NXc,410
63
72
  drf_to_mkdoc/templates/endpoints/list/filters/path.html,sha256=ZKq50BJu9AYdjiY2TXxhM8c8ivz6M8J_aZIC_q2gVvE,180
64
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
65
77
  drf_to_mkdoc/templates/model_detail/base.html,sha256=uJaGnFwfv68uJgWJA85Svs7MXPQ-dXi3-SJgR9GfiNM,731
66
78
  drf_to_mkdoc/templates/model_detail/choices.html,sha256=-DAbUpr5jXL_e8r--KkdRXGZuF94_TuVmN17WQDltk0,304
67
79
  drf_to_mkdoc/templates/model_detail/fields.html,sha256=dOYhfwFJThAuG65r8i6_A9budCTNsZ1pQRCGgAKdFAc,1163
68
80
  drf_to_mkdoc/templates/model_detail/meta.html,sha256=idbnQhV1dT_zLQDD3jZ21vXqLjCxLXIk4rdCiWHm04s,109
69
81
  drf_to_mkdoc/templates/model_detail/methods.html,sha256=QZzp8sGKxuyM6_6GXDNnpKUJw0n_cF5CljklduyALTo,143
70
82
  drf_to_mkdoc/templates/model_detail/relationships.html,sha256=GK7mip_-_4qxxM7MGmV3HXqiV6X9QkeBtz7oy4xZs4Q,796
71
- drf_to_mkdoc/templates/try-out/fab.html,sha256=lkC40-0ww9H1peKhMIbr0HhstpJy7N0q95sVyRb5c58,194
72
- drf_to_mkdoc/templates/try-out/form.html,sha256=U_InNi18IMAxLdIrLE5pksj0xliF7kb5Tag_pFrpe_4,4555
83
+ drf_to_mkdoc/templates/try-out/fab.html,sha256=_LdcSS0kroedCrWDg44frNIAA1x2RCYa8RHgZiKL434,2158
84
+ drf_to_mkdoc/templates/try-out/form.html,sha256=WmdP6V89awfN1OQc3yUHOzhkLkwRNQSogGVboEv0-KA,11211
73
85
  drf_to_mkdoc/templates/try-out/main.html,sha256=SbSS989mhcJ46DwAKePjdCnpL1KuCDG8LcuERvRgh1U,144
74
- drf_to_mkdoc/templates/try-out/modal.html,sha256=KuIMp6Y_PvOgAMp_Qloa8zAlG0JdGmwPf_A3KYM8ZAc,566
75
- drf_to_mkdoc/templates/try-out/response-modal.html,sha256=o-sLhsKL9Rh23kJ93VTBmXfxONqDuMDfWvkmQrkyH2s,895
86
+ drf_to_mkdoc/templates/try-out/modal.html,sha256=G3Ye6DntMVVYUnmbwkrf-YcYmw7AxtCAzPUZUFlsUe8,2782
87
+ drf_to_mkdoc/templates/try-out/response-modal.html,sha256=mjt1bud07Y3BXp7716mQMlrv8xGRaQr4W2XRNKJWwGA,5980
76
88
  drf_to_mkdoc/templatetags/custom_filters.py,sha256=b_0ExGgBKUIlNkJ8nXlc6mrhhiUUxtdq9thXH-yzEq4,3761
77
89
  drf_to_mkdoc/utils/__init__.py,sha256=6dFTb07S6yIf-INMy0Mlgf5purNir687ZU9WZtITh4k,68
78
- drf_to_mkdoc/utils/endpoint_detail_generator.py,sha256=7G1NXiCBFU0Pm5j4E7wM-scYYNhyGbQuEttlwYv5TKA,28322
90
+ drf_to_mkdoc/utils/endpoint_detail_generator.py,sha256=qYFM84KuiygNMNGQ_aiT6nxVexWtM8mZb3WfFrV8zVU,28375
79
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
80
93
  drf_to_mkdoc/utils/model_detail_generator.py,sha256=_ac2PYSzSwRUgUn-J-nmg7mfQGn8SU_4vkMpMRIxgEU,2619
81
94
  drf_to_mkdoc/utils/model_list_generator.py,sha256=Ki-CwIYKmUbPm3_jUPLPosPfppyVLrZMkqbuPPO3Ycw,1988
82
95
  drf_to_mkdoc/utils/schema.py,sha256=sDhVITdIFp1TJYnqCd4wF69i-lwXGlTsNJ2-ngXkccc,10070
@@ -96,8 +109,8 @@ drf_to_mkdoc/utils/commons/path_utils.py,sha256=Pi9g1xXDPsRzmn4kTeNSVtXG9v6n1h2Z
96
109
  drf_to_mkdoc/utils/commons/schema_utils.py,sha256=1mQxzo08J6tlVmTIJ0hCQ6wCZUWMuV82POhLWUfOYtI,7567
97
110
  drf_to_mkdoc/utils/extractors/__init__.py,sha256=BvC8gKOPVI9gU1Piw0jRhKQ2ER5s1moAxgq7ZYkJWNI,86
98
111
  drf_to_mkdoc/utils/extractors/query_parameter_extractors.py,sha256=xELPYI6tcqfkxOa475JPMaxRzRGUX--Z9oYRlKgXb7w,7964
99
- drf_to_mkdoc-0.2.3.dist-info/licenses/LICENSE,sha256=3n9_ckIREsH8ogCxWW6dFsw_WfGcluG2mHcgl9i_UU0,1068
100
- drf_to_mkdoc-0.2.3.dist-info/METADATA,sha256=4yYOErLRQKonE5Z73pKOwhYU1V09TY5VYE1e0dkr7YM,7563
101
- drf_to_mkdoc-0.2.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
102
- drf_to_mkdoc-0.2.3.dist-info/top_level.txt,sha256=ZzJecR6j_tvLZiubUBEgawHflozC4DQy9ooNf1yDJ3Q,13
103
- drf_to_mkdoc-0.2.3.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,,