{"id":26442150,"url":"https://github.com/pskd73/pydictable","last_synced_at":"2025-03-18T10:17:49.734Z","repository":{"id":41988520,"uuid":"353139019","full_name":"pskd73/pydictable","owner":"pskd73","description":"Python object serializer/deserializer and schema validator with extendability!","archived":false,"fork":false,"pushed_at":"2024-08-10T17:07:03.000Z","size":151,"stargazers_count":14,"open_issues_count":3,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-17T13:52:48.660Z","etag":null,"topics":["deserializer","json-schema","python","schema-validation","serializer"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pskd73.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-03-30T20:55:34.000Z","updated_at":"2025-03-09T11:36:21.000Z","dependencies_parsed_at":"2023-11-23T14:42:10.452Z","dependency_job_id":null,"html_url":"https://github.com/pskd73/pydictable","commit_stats":{"total_commits":89,"total_committers":5,"mean_commits":17.8,"dds":0.1685393258426966,"last_synced_commit":"bc368d1acc72b8aa92aae2f86bf7bfa33241a4f5"},"previous_names":[],"tags_count":41,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pskd73%2Fpydictable","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pskd73%2Fpydictable/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pskd73%2Fpydictable/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pskd73%2Fpydictable/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pskd73","download_url":"https://codeload.github.com/pskd73/pydictable/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244047561,"owners_count":20389203,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["deserializer","json-schema","python","schema-validation","serializer"],"created_at":"2025-03-18T10:17:49.178Z","updated_at":"2025-03-18T10:17:49.723Z","avatar_url":"https://github.com/pskd73.png","language":"Python","readme":"# pydictable\n![Coverage](./reports/coverage/badge.svg)\n\nA pure python, zero dependency solution for \n1. Schema (json/dict) validation\n2. Serialize/Deserialize to json\n\n### Installation\n```\npip install pydictable\n```\n\n### Example\n```python \n\nclass LatLng(DictAble):\n    lat: int\n    lng: int\n\nclass Address(DictAble):\n    pin_code: int\n    lat_lng: LatLng\n\nclass Person(DictAble):\n    name: str\n    address: Address\n\ninput_dict = {\n    'name': 'Pramod',\n    'address': {\n        'pin_code': 560032,\n        'lat_lng': {\n            'lat': 12345,\n            'lng': 67890\n        }\n    }\n}\n\np = Person(dict=input_dict) # Raises DataValidationError if not valid\np.name # Pramod\np.address # Address object\np.address.pin_code # 560032\n\np.to_dict() == input_dict # Serialize\n\np.address.pin_code = 518466 # You can change the values\n\n# you can initiate with named params too\np2 = Person(\n    name='Pramod',\n    address=Address(\n        pin_code=560032,\n        lat_lng=LatLng(\n            lat=12345,\n            lng=67890\n        )\n    )\n)\n\nPerson.get_input_schema() # Get the Schema spec as json!\n```\n\n### Extendability\nYou can quickly build your own fields as explained below\n```python\nclass PositiveIntField(IntField):\n    def validate_json(self, field_name: str, v):\n        assert v \u003e 0, 'Should be positive integer'\n\nclass Person(DictAble):\n    age: int = PositiveIntField()\n\nPerson(dict={'age': -1}) # Raises DataValidationError\n```\n\n### Polymorphism\nAuto converts multiple types\n```python\nclass Homo(DictAble):\n    name: str\n\nclass Neanderthal(Homo):\n    animals_killed: int\n\nclass Sapien(Homo):\n    words_spoken: int\n\nclass Human(DictAble):\n    species: Homo = MultiTypeField([Neanderthal, Sapien])\n\nhuman = Human(dict={\n    'species': {\n        'name': 'Mufasa',\n        'words_spoken': 1024,\n        '__type': 'Sapien'\n    }\n})\nassert human.species.name == 'Mufasa'\nassert isinstance(human.species, Sapien)\nassert human.species.words_spoken == 1024\n```\n\nFeel free to report bugs or push changes! Cheers!\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpskd73%2Fpydictable","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpskd73%2Fpydictable","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpskd73%2Fpydictable/lists"}