No project description provided
Project description
Prodot
A new way to deal with dictionaries and lists in python. Treat data like classes, or by reading/writing data with json paths
>>> from prodot import ProObject
>>> my_obj = ProObject({'foo':{'bar':['eggs']}})
>>> my_obj.foo.bar.n1.get_value()
'eggs'
>>> my_obj['$.foo.bar.[0]'].get_value()
'eggs
Getting started
install
pip install prodot
Usage
Import the pro object from the prodot library. You can create a new empty dictionary, or start with a filled one
# No parameters instances an empty dictionary
>>> my_new_obj = ProObject()
# The pro object can be initialized with a dictionary
>>> my_dict_obj = ProObject({"foo":["bar","eggs"]})
# The pro object can also initialize with a list
>>> my_list_obj = ProObject([ [1,2,3], ["a","b","c"], [{"foo":"bar"}, {"bar":"eggs"}] ])
Dot notation usage
By using the pro-object you can use the dictionary as a class
>>> my_json = {
... "userData": {
... "name": "John",
... "age": "38",
... "shoppingCart":[
... {"cellphone": 999.99},
... {"notebook": 2999.99},
... {"wireless keyboard": 299.99}
... ]
... }
... }
>>> my_new_obj = ProObject(my_json)
>>> shoppingCart = my_new_obj.userData.shoppingCart
The ProObject will return another instance of the ProObject with the main_object attribute as being the selected path.
>>> type(shoppingCart)
<class 'prodot.pro_object.ProObject'>
To get the raw value of the object, you can use the .get_value()
function.
>>> shoppingCart.get_value()
[{"cellphone": 999.99}, {"notebook": 2999.99}, {"wireless keyboard": 299.99}]
# or by using the get_value directly at the path
>>> my_new_obj.userData.shoppingCart.get_value()
[{"cellphone": 999.99}, {"notebook": 2999.99}, {"wireless keyboard": 299.99}]
>>> type(shoppingCart.get_value())
<class 'dict'>
You can also add new information to the instancied object
# n3 means list index 3 (will be added as 4th item)
>>> my_new_obj.userData.shoppingCart.n3 = {"monitor": 699.99}
>>> my_new_obj.userData.shoppingCart.get_value()
[{"cellphone": 999.99}, {"notebook": 2999.99}, {"wireless keyboard": 299.99}, {"monitor": 399.99}]
Python doesn't accept list indexes to be used as a class attribute. For solve this problem, list indexes start with the n
letter (like n0, n1, ...)
Json path usage
If you prefere or need to use json paths, it is possible to write and retrieve information using json path strings.
>>> my_new_obj['$.userData.shoppingCart[4]'] = {'FunStation 6 Series T':'699,99'}
>>> my_new_obj['$.userData.shoppingCart'].get_value()
[{"cellphone": 999.99}, {"notebook": 2999.99}, {"wireless keyboard": 299.99}, {"monitor": 399.99}, {'FunStation 6 Series T':'699,99'}]
Note that by using a json path string, list indexes must not have n
as their first value.
You can view all possible json_paths from object by using the get_all_paths
attribute.
>>> my_new_obj.get_all_paths()
<generator object PathObject.all_paths_from_main_object at 0x7f6a012b5c80>
>>> list(my_new_obj.get_all_paths())
['.userData', '.userData.name', '.userData.age', '.userData.shoppingCart', '.userData.shoppingCart[0]', '.userData.shoppingCart[0].cellphone', '.userData.shoppingCart[1]', '.userData.shoppingCart[1].notebook', '.userData.shoppingCart[2]', '.userData.shoppingCart[2].wireless keyboard', '.userData.shoppingCart[3]', '.userData.shoppingCart[3].monitor', '.userData.shoppingCart[4]', '.userData.shoppingCart[4].FunStation 6 Series T']
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
File details
Details for the file prodot-0.3.7.tar.gz
.
File metadata
- Download URL: prodot-0.3.7.tar.gz
- Upload date:
- Size: 19.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.4.1 CPython/3.11.2 Linux/5.15.90.1-microsoft-standard-WSL2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ff117c22d7885ebbf705d16b5d3eac07bd5f61c8c8d97562c0ba137a72a808c2 |
|
MD5 | 94707fc14c7ea8d1b920e2d28c994da6 |
|
BLAKE2b-256 | 0e6cadf11345ba4af6b3670597a3ad70be41f998a2ce2d769832924524421802 |
File details
Details for the file prodot-0.3.7-py3-none-any.whl
.
File metadata
- Download URL: prodot-0.3.7-py3-none-any.whl
- Upload date:
- Size: 21.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.4.1 CPython/3.11.2 Linux/5.15.90.1-microsoft-standard-WSL2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6b33ef75c7f2a1a3e7cc3d8359edd1896d55ebd676e7b6acff4b0712e4ef2a4a |
|
MD5 | 4b4fc497e7f9d7f9b0f5b73760098cc1 |
|
BLAKE2b-256 | 1055dd87338fbe23a80f0d0ea2ad50afd4e82760519eb83a5e0c798bec9036a1 |