| Name | type-bridge JSON |
| Version |
0.1.5
JSON |
| download |
| home_page | None |
| Summary | A modern, Pythonic ORM for TypeDB with an Attribute-based API |
| upload_time | 2025-10-31 03:53:39 |
| maintainer | None |
| docs_url | None |
| author | None |
| requires_python | >=3.13 |
| license | MIT |
| keywords |
database
graph-database
orm
typedb
typeql
|
| VCS |
 |
| bugtrack_url |
|
| requirements |
No requirements were recorded.
|
| Travis-CI |
No Travis.
|
| coveralls test coverage |
No coveralls.
|
# TypeBridge
A modern, Pythonic ORM for TypeDB with an Attribute-based API that aligns with TypeDB's type system.
## Features
- **True TypeDB Semantics**: Attributes are independent types that entities and relations own
- **Flag System**: Clean API for `@key`, `@unique`, and `@card` annotations
- **Flexible Cardinality**: Express any cardinality constraint with `Card(min, max)`
- **Pydantic Integration**: Built on Pydantic v2 for automatic validation, serialization, and type safety
- **Type-Safe**: Full Python type hints and IDE autocomplete support
- **Declarative Models**: Define entities and relations using Python classes
- **Automatic Schema Generation**: Generate TypeQL schemas from your Python models
- **Data Validation**: Automatic type checking and coercion via Pydantic
- **JSON Support**: Seamless JSON serialization/deserialization
- **CRUD Operations**: Simple managers for entity and relation operations
- **Query Builder**: Pythonic interface for building TypeQL queries
## Installation
```bash
# Clone the repository
git clone https://github.com/yourusername/type_bridge.git
cd type_bridge
# Install with uv
uv sync
# Or with pip
pip install -e .
```
## Quick Start
### 1. Define Attribute Types
```python
from type_bridge import String, Integer
class Name(String):
pass
class Age(Integer):
pass
```
### 2. Define Entities
```python
from typing import Optional
from type_bridge import Entity, EntityFlags, Flag, Key, Card
class Person(Entity):
flags = EntityFlags(type_name="person") # Optional, defaults to lowercase class name
# Use Flag() for key/unique markers and Card for cardinality
name: Name = Flag(Key) # @key (implies @card(1..1))
age: Optional[Age] # @card(0..1) - optional field
email: Email # @card(1..1) - default cardinality
tags: list[Tag] = Flag(Card(min=2)) # @card(2..) - two or more
```
### 3. Create Instances
```python
# Two ways to create instances:
# Option 1: Attribute instances (fully type-safe, zero pyright errors)
alice = Person(
name=Name("Alice"),
age=Age(30),
email=Email("alice@example.com")
)
# Option 2: Raw values (convenient, may show pyright warnings)
bob = Person(name="Bob", age=25, email=Email("bob@example.com"))
# Both work identically at runtime!
```
### 4. Work with Data
```python
from type_bridge import Database, SchemaManager, EntityManager
# Setup
db = Database(address="localhost:1729", database="mydb")
schema_manager = SchemaManager(db)
schema_manager.register(Person)
schema_manager.sync_schema(force=True)
# CRUD
person_manager = EntityManager(db, Person)
alice = person_manager.create(name="Alice", age=30)
all_people = person_manager.all()
```
### 4. Cardinality Constraints
```python
from typing import Optional
from type_bridge import Card, Flag
class Person(Entity):
flags = EntityFlags(type_name="person")
# Cardinality options:
name: Name # @card(1..1) - exactly one (default)
age: Optional[Age] # @card(0..1) - zero or one
tags: list[Tag] = Flag(Card(min=2)) # @card(2..) - two or more (unbounded)
skills: list[Skill] = Flag(Card(max=5)) # @card(0..5) - zero to five (min defaults to 0)
jobs: list[Job] = Flag(Card(1, 3)) # @card(1..3) - one to three
```
### 5. Define Relations
```python
from typing import ClassVar
from type_bridge import Relation, RelationFlags, Role
class Employment(Relation):
flags = RelationFlags(type_name="employment")
# Define roles with ClassVar
employee: ClassVar[Role] = Role("employee", Person)
employer: ClassVar[Role] = Role("employer", Company)
# Relations can own attributes too
position: Position # @card(1..1)
salary: Optional[Salary] # @card(0..1)
```
### 6. Using Python Inheritance
```python
class Animal(Entity):
flags = EntityFlags(abstract=True) # Abstract entity
name: Name
class Dog(Animal): # Automatically: dog sub animal in TypeDB
breed: Breed
```
## Documentation
See [ATTRIBUTE_API.md](ATTRIBUTE_API.md) for complete documentation.
## Pydantic Integration
TypeBridge is built on Pydantic v2, giving you powerful features out of the box:
```python
from typing import Optional
class Person(Entity):
flags = EntityFlags(type_name="person")
name: Name = Flag(Key)
age: Age = Age(0)
# Automatic validation
alice = Person(name="Alice", age="30") # String coerced to int
# JSON serialization
json_data = alice.model_dump_json()
# JSON deserialization
bob = Person.model_validate_json('{"name": "Bob", "age": 25}')
# Model copying
alice_copy = alice.model_copy(update={"age": 31})
```
## Running Examples
```bash
uv run python examples/basic_usage.py
uv run python examples/pydantic_features.py
```
## Running Tests
```bash
uv run pytest tests/ -v
```
## Requirements
- Python 3.13+
- TypeDB 2.x or 3.x
- typedb-driver==3.5.5
## License
MIT License
Raw data
{
"_id": null,
"home_page": null,
"name": "type-bridge",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.13",
"maintainer_email": null,
"keywords": "database, graph-database, orm, typedb, typeql",
"author": null,
"author_email": "ds1sqe <ds1sqe@mensakorea.org>",
"download_url": "https://files.pythonhosted.org/packages/dc/31/dbb4303fc73c6ef6a3764d85327c0b105a1cbd5485804b76ca0e524cbc50/type_bridge-0.1.5.tar.gz",
"platform": null,
"description": "# TypeBridge\n\nA modern, Pythonic ORM for TypeDB with an Attribute-based API that aligns with TypeDB's type system.\n\n## Features\n\n- **True TypeDB Semantics**: Attributes are independent types that entities and relations own\n- **Flag System**: Clean API for `@key`, `@unique`, and `@card` annotations\n- **Flexible Cardinality**: Express any cardinality constraint with `Card(min, max)`\n- **Pydantic Integration**: Built on Pydantic v2 for automatic validation, serialization, and type safety\n- **Type-Safe**: Full Python type hints and IDE autocomplete support\n- **Declarative Models**: Define entities and relations using Python classes\n- **Automatic Schema Generation**: Generate TypeQL schemas from your Python models\n- **Data Validation**: Automatic type checking and coercion via Pydantic\n- **JSON Support**: Seamless JSON serialization/deserialization\n- **CRUD Operations**: Simple managers for entity and relation operations\n- **Query Builder**: Pythonic interface for building TypeQL queries\n\n## Installation\n\n```bash\n# Clone the repository\ngit clone https://github.com/yourusername/type_bridge.git\ncd type_bridge\n\n# Install with uv\nuv sync\n\n# Or with pip\npip install -e .\n```\n\n## Quick Start\n\n### 1. Define Attribute Types\n\n```python\nfrom type_bridge import String, Integer\n\nclass Name(String):\n pass\n\nclass Age(Integer):\n pass\n```\n\n### 2. Define Entities\n\n```python\nfrom typing import Optional\nfrom type_bridge import Entity, EntityFlags, Flag, Key, Card\n\nclass Person(Entity):\n flags = EntityFlags(type_name=\"person\") # Optional, defaults to lowercase class name\n\n # Use Flag() for key/unique markers and Card for cardinality\n name: Name = Flag(Key) # @key (implies @card(1..1))\n age: Optional[Age] # @card(0..1) - optional field\n email: Email # @card(1..1) - default cardinality\n tags: list[Tag] = Flag(Card(min=2)) # @card(2..) - two or more\n```\n\n### 3. Create Instances\n\n```python\n# Two ways to create instances:\n\n# Option 1: Attribute instances (fully type-safe, zero pyright errors)\nalice = Person(\n name=Name(\"Alice\"),\n age=Age(30),\n email=Email(\"alice@example.com\")\n)\n\n# Option 2: Raw values (convenient, may show pyright warnings)\nbob = Person(name=\"Bob\", age=25, email=Email(\"bob@example.com\"))\n\n# Both work identically at runtime!\n```\n\n### 4. Work with Data\n\n```python\nfrom type_bridge import Database, SchemaManager, EntityManager\n\n# Setup\ndb = Database(address=\"localhost:1729\", database=\"mydb\")\nschema_manager = SchemaManager(db)\nschema_manager.register(Person)\nschema_manager.sync_schema(force=True)\n\n# CRUD\nperson_manager = EntityManager(db, Person)\nalice = person_manager.create(name=\"Alice\", age=30)\nall_people = person_manager.all()\n```\n\n### 4. Cardinality Constraints\n\n```python\nfrom typing import Optional\nfrom type_bridge import Card, Flag\n\nclass Person(Entity):\n flags = EntityFlags(type_name=\"person\")\n\n # Cardinality options:\n name: Name # @card(1..1) - exactly one (default)\n age: Optional[Age] # @card(0..1) - zero or one\n tags: list[Tag] = Flag(Card(min=2)) # @card(2..) - two or more (unbounded)\n skills: list[Skill] = Flag(Card(max=5)) # @card(0..5) - zero to five (min defaults to 0)\n jobs: list[Job] = Flag(Card(1, 3)) # @card(1..3) - one to three\n```\n\n### 5. Define Relations\n\n```python\nfrom typing import ClassVar\nfrom type_bridge import Relation, RelationFlags, Role\n\nclass Employment(Relation):\n flags = RelationFlags(type_name=\"employment\")\n\n # Define roles with ClassVar\n employee: ClassVar[Role] = Role(\"employee\", Person)\n employer: ClassVar[Role] = Role(\"employer\", Company)\n\n # Relations can own attributes too\n position: Position # @card(1..1)\n salary: Optional[Salary] # @card(0..1)\n```\n\n### 6. Using Python Inheritance\n\n```python\nclass Animal(Entity):\n flags = EntityFlags(abstract=True) # Abstract entity\n name: Name\n\nclass Dog(Animal): # Automatically: dog sub animal in TypeDB\n breed: Breed\n```\n\n## Documentation\n\nSee [ATTRIBUTE_API.md](ATTRIBUTE_API.md) for complete documentation.\n\n## Pydantic Integration\n\nTypeBridge is built on Pydantic v2, giving you powerful features out of the box:\n\n```python\nfrom typing import Optional\n\nclass Person(Entity):\n flags = EntityFlags(type_name=\"person\")\n name: Name = Flag(Key)\n age: Age = Age(0)\n\n# Automatic validation\nalice = Person(name=\"Alice\", age=\"30\") # String coerced to int\n\n# JSON serialization\njson_data = alice.model_dump_json()\n\n# JSON deserialization\nbob = Person.model_validate_json('{\"name\": \"Bob\", \"age\": 25}')\n\n# Model copying\nalice_copy = alice.model_copy(update={\"age\": 31})\n```\n\n## Running Examples\n\n```bash\nuv run python examples/basic_usage.py\nuv run python examples/pydantic_features.py\n```\n\n## Running Tests\n\n```bash\nuv run pytest tests/ -v\n```\n\n## Requirements\n\n- Python 3.13+\n- TypeDB 2.x or 3.x\n- typedb-driver==3.5.5\n\n## License\n\nMIT License\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A modern, Pythonic ORM for TypeDB with an Attribute-based API",
"version": "0.1.5",
"project_urls": {
"Documentation": "https://github.com/ds1sqe/type_bridge/blob/master/README.md",
"Homepage": "https://github.com/ds1sqe/type_bridge",
"Issues": "https://github.com/ds1sqe/type_bridge/issues",
"Repository": "https://github.com/ds1sqe/type_bridge"
},
"split_keywords": [
"database",
" graph-database",
" orm",
" typedb",
" typeql"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "b328f75b9fc94777a6d0d55a70f05fe9e3da350c5ffe21e8894d14c202ded9aa",
"md5": "78d3602007cbb34e7978c11231f5ca25",
"sha256": "647d21190e389f8eaefeed7bd1ccbda88e4684fff7be8b5309cc250a6438c62c"
},
"downloads": -1,
"filename": "type_bridge-0.1.5-py3-none-any.whl",
"has_sig": false,
"md5_digest": "78d3602007cbb34e7978c11231f5ca25",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.13",
"size": 29143,
"upload_time": "2025-10-31T03:53:37",
"upload_time_iso_8601": "2025-10-31T03:53:37.603587Z",
"url": "https://files.pythonhosted.org/packages/b3/28/f75b9fc94777a6d0d55a70f05fe9e3da350c5ffe21e8894d14c202ded9aa/type_bridge-0.1.5-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "dc31dbb4303fc73c6ef6a3764d85327c0b105a1cbd5485804b76ca0e524cbc50",
"md5": "e23a428d5be6492725f8708a0184e2d3",
"sha256": "9c7349528f86fbc9eb0017d30dbd29ae855815373bdca522c0c7938ec7fa8ab3"
},
"downloads": -1,
"filename": "type_bridge-0.1.5.tar.gz",
"has_sig": false,
"md5_digest": "e23a428d5be6492725f8708a0184e2d3",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.13",
"size": 54326,
"upload_time": "2025-10-31T03:53:39",
"upload_time_iso_8601": "2025-10-31T03:53:39.133121Z",
"url": "https://files.pythonhosted.org/packages/dc/31/dbb4303fc73c6ef6a3764d85327c0b105a1cbd5485804b76ca0e524cbc50/type_bridge-0.1.5.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-10-31 03:53:39",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "ds1sqe",
"github_project": "type_bridge",
"github_not_found": true,
"lcname": "type-bridge"
}