Skip to main content

Generate schema code from model definitions for both Python and MATLAB

Project description

PyPI PyPI - Status PyPI - Python Version

datajoint-babel

Generate schema code from model definitions for both Python and MATLAB (and eventually vice versa).

Say you're a lab that uses both Python and MATLAB, this lets you declare your models once and then generate both Python and MATLAB versions of them, rather than having two potentially mutually contradictory sets of models. Keep explicit structure and avoid implicit model recreation from the database <3.

More generally a pythonic adapter interface from an explicit data model (thanks pydantic!) to datajoint models so other tools can patch in more easily!

So far just a single afternoon project, but will be the means by which autopilot interfaces directly with datajoint :)

Example

Source a model from a string

>>> from datajoint_babel.model import Table
>>> from pprint import pprint
>>> tab = Table.from_definition(name='User', tier='Manual', definition="""
    # database users
    username : varchar(20)   # unique user name
    ---
    first_name : varchar(30)
    last_name  : varchar(30)
    role : enum('admin', 'contributor', 'viewer')
    """
)
>>> tab.dict()
{'name': 'User',
 'tier': 'Manual',
 'comment': {'comment': 'database users'},
 'keys': [{'name': 'username',
   'datatype': {'datatype': 'varchar', 'args': 20, 'unsigned': False},
   'comment': 'unique user name',
   'default': None}],
 'attributes': [{'name': 'first_name',
   'datatype': {'datatype': 'varchar', 'args': 30, 'unsigned': False},
   'comment': '',
   'default': None},
  {'name': 'last_name',
   'datatype': {'datatype': 'varchar', 'args': 30, 'unsigned': False},
   'comment': '',
   'default': None},
  {'name': 'role',
   'datatype': {'datatype': 'enum',
    'args': ["'admin'", " 'contributor'", " 'viewer'"],
    'unsigned': False},
   'comment': '',
   'default': None}]}

>>> pprint(tab.__dict__)
{'attributes': [Attribute(name='first_name', datatype=DJ_Type(datatype='varchar', args=30, unsigned=False), comment='', default=None),
                Attribute(name='last_name', datatype=DJ_Type(datatype='varchar', args=30, unsigned=False), comment='', default=None),
                Attribute(name='role', datatype=DJ_Type(datatype='enum', args=["'admin'", " 'contributor'", " 'viewer'"], unsigned=False), comment='', default=None)],
 'comment': Comment(comment='database users'),
 'keys': [Attribute(name='username', datatype=DJ_Type(datatype='varchar', args=20, unsigned=False), comment='unique user name', default=None)],
 'name': 'User',
 'tier': 'Manual'}

Export to python...

>>> print(tab.make(lang='python'))

@schema
class User(dj.Manual):
    definition = """
    # database users
    username : varchar(20) # unique user name
    ---
    first_name : varchar(30)
    last_name : varchar(30)
    role : enum('admin', 'contributor', 'viewer')

And to MATLAB

>>> print(tab.make(lang='matlab'))

%{
# # database users
# username : varchar(20) # unique user name
---
# first_name : varchar(30)
# last_name : varchar(30)
# role : enum('admin', 'contributor', 'viewer')
%}
classdef User < dj.Manual
end

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

datajoint-babel-0.1.9.tar.gz (12.6 kB view details)

Uploaded Source

Built Distribution

datajoint_babel-0.1.9-py3-none-any.whl (13.1 kB view details)

Uploaded Python 3

File details

Details for the file datajoint-babel-0.1.9.tar.gz.

File metadata

  • Download URL: datajoint-babel-0.1.9.tar.gz
  • Upload date:
  • Size: 12.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.13 CPython/3.9.1 Darwin/21.4.0

File hashes

Hashes for datajoint-babel-0.1.9.tar.gz
Algorithm Hash digest
SHA256 472b9ea78d204f98d9b14e9b9f3d218289f8dd0d63ed52eff54d549633493def
MD5 9c0032ecb1b79f95e69b89c21bda9dd6
BLAKE2b-256 3ac36ad3363fe42a309491b6b486dd0fe205569de7b24f4d4767892df1794b6e

See more details on using hashes here.

File details

Details for the file datajoint_babel-0.1.9-py3-none-any.whl.

File metadata

  • Download URL: datajoint_babel-0.1.9-py3-none-any.whl
  • Upload date:
  • Size: 13.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.13 CPython/3.9.1 Darwin/21.4.0

File hashes

Hashes for datajoint_babel-0.1.9-py3-none-any.whl
Algorithm Hash digest
SHA256 8ab29a49d19acca43b5b57f8a85c489adbbf629e626f3fa4df653efac36b8e70
MD5 d9fcbec0c14fc7a16b516634ae9fed5f
BLAKE2b-256 3a4aea03e4717d119be47048bc0759bea1cac0d2166acfe0b2cd0b73cd24c5eb

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page