Skip to main content

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


Download files

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

Source Distribution

prodot-0.3.7.tar.gz (19.1 kB view details)

Uploaded Source

Built Distribution

prodot-0.3.7-py3-none-any.whl (21.9 kB view details)

Uploaded Python 3

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

Hashes for prodot-0.3.7.tar.gz
Algorithm Hash digest
SHA256 ff117c22d7885ebbf705d16b5d3eac07bd5f61c8c8d97562c0ba137a72a808c2
MD5 94707fc14c7ea8d1b920e2d28c994da6
BLAKE2b-256 0e6cadf11345ba4af6b3670597a3ad70be41f998a2ce2d769832924524421802

See more details on using hashes here.

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

Hashes for prodot-0.3.7-py3-none-any.whl
Algorithm Hash digest
SHA256 6b33ef75c7f2a1a3e7cc3d8359edd1896d55ebd676e7b6acff4b0712e4ef2a4a
MD5 4b4fc497e7f9d7f9b0f5b73760098cc1
BLAKE2b-256 1055dd87338fbe23a80f0d0ea2ad50afd4e82760519eb83a5e0c798bec9036a1

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