-
Notifications
You must be signed in to change notification settings - Fork 19
Model code generation #4
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
To add a "third" option: keep the dynamic aspect (no code generation) but model the entity class like a data class and use additional annotations. This would be in line with other languages supported by ObjectBox already. I could image that modelling more "as-is" could have other advantages as well; e.g. use additional tooling on it. E.g. PEP 557 mentions static type checkers. I could also imagine the "more static typing" could be of advantage in compiled approaches like Mojo, but that's just a wild guess. A first step could simply move the model info into annotations, e.g.: @Entity(id=1, uid=1)
class Person:
@Property(id=1, uid=1001)
id: int
@Property(id=2, uid=1002)
first_name: str
@Property(id=3, uid=1003)
last_name: str Next step after that could be to move ids/uids into a model json and manage that file via some (no need for standard annotations anymore at that point). I think that, at that point, the best thing about this approach becomes visible: the definitions will look quite simple and intuitive: @Entity
class Person:
id: int
first_name: str
last_name: str Of course, we still need the annotations for certain mappings, e.g. (conceptually): @Property(type=DateNano)
creation_time: int Or (as-is): creation_time: Property(int, type=DateNano) Maybe there are other ways to add metainformation to attributes in Python too? Maybe there is some tooling like we use in Swift that e.g. relies on comments. E.g. conceptually: // objectbox: type=date_nano
creation_time: int Some research at other similar tools in the Python world could be useful. E.g. SQLAlchemy and Django rather take the initial approach. |
Also don't branch on list types in get_value.
Support vector types #4 See merge request objectbox/objectbox-python!5
@vaind I don't know of a
@greenrobot This is a very good note! In the modern Python world DTOs are usually implemented using In Domain Driven FastAPI and Django domain model aggregates, entities and value objects are implemented with one of those libs as well instead. It would be incredible helpful if those domain models could be reused as To be most valuable to the Python world the design should allow to use or generate data persistency (objectbox models in memory/on disk) <-> domain models (objectbox = pydantic models) <-> local-DTOs (objectbox = pydantic models) <-> serialized non-local DTOs (serialized objectbox = pydantic models) <-> frontend. |
Currently, the model is declared directly by constructing python objects:
This is a little cumbersome to write and update and thus opens up room for hard to find errors.
It would be nicer if we could generate the model similar to other ObjectBox bindings. There are two ways we do that, e.g. with a language-specific build process integration (e.g. in java, swift, dart/flutter) or with a standalone tool that does code generation (go, c, c++).
Is there something like dart source_gen that would help with easy-to-use python code generation?
If there isn't, then adding "FBS->python" generation support to objectbox-generator would be an option as well.
The text was updated successfully, but these errors were encountered: