A CLI tool to generate Python TypedDict models from a MongoDB database.
Project description
MongoDB TypeGen
A command-line tool to connect to a MongoDB database, inspect collections, and automatically generate Python TypedDict models. This brings static type checking to your MongoDB documents, helping you write safer, more maintainable code.
Key Features
- Automatic Schema Inference: Analyzes documents to infer field names and types.
- Robust
TypedDictGeneration: Creates PythonTypedDictclasses for each collection. - Powerful CLI: Offers multiple commands (
generate,list-collections,preview) for a streamlined workflow. - Handles Complex Schemas:
- Recursively generates
TypedDictclasses for nested documents. - Correctly identifies optional fields and fields with multiple
Uniontypes. - Preserves original field names, even those with spaces or special characters.
- Recursively generates
- Flexible & Configurable:
- Filter for specific collections to include or exclude.
- Customize the number of documents to sample for schema inference.
- Perform a "dry run" to see generated code without writing to a file.
Installation
pip install mongodb-typegen
Usage
The primary command is generate, which creates the Python models file.
mongodb-typegen generate --db <database_name>
You can also use other commands like list-collections and preview for a better workflow.
Commands
generate
Generate TypedDict models from your MongoDB collections.
| Argument | Alias | Default | Description |
|---|---|---|---|
--uri |
-u |
mongodb://localhost:27017/ |
MongoDB connection string. |
--db |
-d |
(Required) | Name of the MongoDB database. |
--out |
-o |
generated_models.py |
Output file path for generated models. |
--sample-size |
-s |
100 |
Number of documents to sample per collection. |
--collections |
-c |
Comma-separated list of collections to process. | |
--exclude |
-e |
Comma-separated list of collections to exclude. | |
--dry-run |
Show generated code without writing to a file. | ||
--verbose |
-v |
Enable verbose output. | |
--quiet |
-q |
Suppress all output except errors. |
Example:
# Generate models for all collections in the 'analytics' database
mongodb-typegen generate --db analytics
# Generate models for specific collections and save to a different file
mongodb-typegen generate --db ecommerce --collections users,products --out models/db_types.py
# Perform a dry run to preview the output for the 'logs' collection
mongodb-typegen generate --db app_logs --collections logs --dry-run
list-collections
List all collections in a specified database.
| Argument | Alias | Default | Description |
|---|---|---|---|
--uri |
-u |
mongodb://localhost:27017/ |
MongoDB connection string. |
--db |
-d |
(Required) | Name of the MongoDB database. |
Example:
mongodb-typegen list-collections --db my_app
preview
Preview the inferred schema and TypedDict for a single collection without generating a file. This is useful for quick inspection.
| Argument | Alias | Default | Description |
|---|---|---|---|
--uri |
-u |
mongodb://localhost:27017/ |
MongoDB connection string. |
--db |
-d |
(Required) | Name of the MongoDB database. |
COLLECTION_NAME |
(Required) | The name of the collection to preview. | |
--sample-size |
-s |
10 |
Number of documents to sample for the preview. |
Example:
mongodb-typegen preview --db my_app users
Example Output
Given a collection named users with documents like this:
{
"_id": ObjectId("60d5f3f7e8b4f6f8f8f8f8f8"),
"full name": "Alice",
"email": "alice@example.com",
"age": 30,
"is_active": true,
"profile": {
"bio": "Developer",
"website": "https://a.com"
}
}
The tool will generate the following TypedDict classes:
# This file was auto-generated by mongodb-typegen. Do not edit manually.
from typing import TypedDict, List, Optional, Union, Any
from datetime import datetime
from bson.objectid import ObjectId
UsersProfile = TypedDict("UsersProfile", {
'bio': str,
'website': str
})
Users = TypedDict("Users", {
'_id': ObjectId,
'age': int,
'email': str,
'full name': str,
'is_active': bool,
'profile': UsersProfile
})
License
This project is licensed under the MIT License. See the LICENSE file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mongodb_typegen-1.1.0.tar.gz.
File metadata
- Download URL: mongodb_typegen-1.1.0.tar.gz
- Upload date:
- Size: 39.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
df2763166b6e51ade4b8cc086616fa3b01e2c9af5892f7fb8821b2794b93dae9
|
|
| MD5 |
0a6f4281327651094d9772641b371b51
|
|
| BLAKE2b-256 |
4e5c4ea6fe2358a022c9a3606f46e74348201644e0634c2e6fed7a795418d645
|
File details
Details for the file mongodb_typegen-1.1.0-py3-none-any.whl.
File metadata
- Download URL: mongodb_typegen-1.1.0-py3-none-any.whl
- Upload date:
- Size: 9.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fac06c2c01aaad026565461232c02863c6a9effadbffb2fb277c179c2c3f409a
|
|
| MD5 |
034780212198bb7a11297a2b7e494d3b
|
|
| BLAKE2b-256 |
7587d3ecaf6100e3462344a0d5e73a4a2cd1340a4da6dbd2c9a2e875e91b7a77
|