Fixing docs and adding a boolean test.

modified:   README.rst
	modified:   setup.py
	modified:   test_lookup_api.py
This commit is contained in:
Russell Ballestrini 2021-02-09 20:51:26 -05:00
parent dd7bf5f043
commit 8e9e0b5a78
3 changed files with 48 additions and 43 deletions

View file

@ -1,7 +1,7 @@
nested_lookup nested_lookup
############# #############
.. image:: https://img.shields.io/badge/pypi-0.2.21-green.svg .. image:: https://img.shields.io/badge/pypi-0.2.22-green.svg
:target: https://pypi.python.org/pypi/nested-lookup :target: https://pypi.python.org/pypi/nested-lookup
.. image:: https://travis-ci.org/rameshrvr/nested-lookup.svg?branch=master .. image:: https://travis-ci.org/rameshrvr/nested-lookup.svg?branch=master
:target: https://travis-ci.org/rameshrvr/nested-lookup :target: https://travis-ci.org/rameshrvr/nested-lookup
@ -73,7 +73,7 @@ Before we start, let's define an example document to work on.
>>> document = [ { 'taco' : 42 } , { 'salsa' : [ { 'burrito' : { 'taco' : 69 } } ] } ] >>> document = [ { 'taco' : 42 } , { 'salsa' : [ { 'burrito' : { 'taco' : 69 } } ] } ]
First we will lookup a key from all layers of a document using ``nested_lookup``: First, we lookup a key from all layers of a document using ``nested_lookup``:
.. code-block:: python .. code-block:: python
@ -81,21 +81,19 @@ First we will lookup a key from all layers of a document using ``nested_lookup``
>>> print(nested_lookup('taco', document)) >>> print(nested_lookup('taco', document))
[42, 69] [42, 69]
As you can see we were returned a list of two integers, these integers are the values from the matched key lookups. As you can see the function returned a list of two integers, these integers are the values from the matched key lookups.
Next, we update a key and value from all layers of a document using ``nested_update``:
Next we will update a key and it's value from all layers of a document using ``nested_update``:
.. code-block:: python .. code-block:: python
>>> from nested_lookup import nested_update >>> from nested_lookup import nested_update
>>> nested_update(document, key='burrito', value='Test') >>> nested_update(document, key='burrito', value='test')
[{'taco': 42}, {'salsa': [{'burrito': 'Test'}]}] [{'taco': 42}, {'salsa': [{'burrito': 'test'}]}]
Here you see that the key ``burrito`` had it's value changed to the string ``'Test'``, like we asked. Here you see that the key ``burrito`` had it's value changed to the string ``'test'``, like we asked.
Finally, we try out a delete operation using ``nested_delete``:
Finally, lets test out a delete operation using ``nested_delete``:
.. code-block:: python .. code-block:: python
@ -106,9 +104,6 @@ Finally, lets test out a delete operation using ``nested_delete``:
Perfect, the returned document looks just like we expected! Perfect, the returned document looks just like we expected!
longer tutorial longer tutorial
====================== ======================
@ -129,21 +124,21 @@ For example, given the following document:
from nested_lookup import nested_lookup from nested_lookup import nested_lookup
my_document = { my_document = {
'name' : 'Russell Ballestrini', "name" : "Rocko Ballestrini",
'email_address' : 'test1@example.com', "email_address" : "test1@example.com",
'other' : { "other" : {
'secondary_email' : 'test2@example.com', "secondary_email" : "test2@example.com",
'EMAIL_RECOVERY' : 'test3@example.com', "EMAIL_RECOVERY" : "test3@example.com",
'email_address' : 'test4@example.com', "email_address" : "test4@example.com",
}, },
}, },
Next, we could act `wild` and find all the email addresses like this: Next, we could act ``wild`` and find all the email addresses like this:
.. code-block:: python .. code-block:: python
results = nested_lookup( results = nested_lookup(
key = 'mail', key = "mail",
document = my_document, document = my_document,
wild = True wild = True
) )
@ -152,14 +147,14 @@ Next, we could act `wild` and find all the email addresses like this:
.. code-block:: python .. code-block:: python
['test1@example.com', 'test4@example.com', 'test2@example.com', 'test3@example.com'] ["test1@example.com", "test4@example.com", "test2@example.com", "test3@example.com"]
Additionally, if you also needed the matched key names, you could do this: Additionally, if you also needed the matched key names, you could do this:
.. code-block:: python .. code-block:: python
results = nested_lookup( results = nested_lookup(
key = 'mail', key = "mail",
document = my_document, document = my_document,
wild = True, wild = True,
with_keys = True, with_keys = True,
@ -170,54 +165,57 @@ Additionally, if you also needed the matched key names, you could do this:
.. code-block:: python .. code-block:: python
{ {
'email_address': ['test1@example.com', 'test4@example.com'], "email_address": ["test1@example.com", "test4@example.com"],
'secondary_email': ['test2@example.com'], "secondary_email": ["test2@example.com"],
'EMAIL_RECOVERY': ['test3@example.com'] "EMAIL_RECOVERY": ["test3@example.com"]
} }
We do not mutate input, if we do you found a defect. Please open an issue.
To lookup, update, and delete a key->value pair in nested document Let's delete and update our deeply nested key / values and see the results:
.. code-block:: python .. code-block:: python
from nested_lookup import nested_update, nested_delete from nested_lookup import nested_update, nested_delete
# result => {'other': {'secondary_email': 'test2@example.com', 'email_address': 'test4@example.com'}, 'email_address': 'test1@example.com', 'name': 'Rocko Ballestrini'}
result = nested_delete(my_document, 'EMAIL_RECOVERY') result = nested_delete(my_document, 'EMAIL_RECOVERY')
print(result)
print(result) # result => {'other': {'secondary_email': 'test2@example.com', 'email_address': 'test4@example.com'}, 'email_address': 'test1@example.com', 'name': 'Russell Ballestrini'} # result => {'other': 'Test', 'email_address': 'test1@example.com', 'name': 'Rocko Ballestrini'}
result = nested_update(my_document, key='other', value='Test') result = nested_update(my_document, key='other', value='Test')
print(result)
print(result) # result => {'other': 'Test', 'email_address': 'test1@example.com', 'name': 'Russell Ballestrini'}
To get a list of every nested key in a document, run this: Now let's say we wanted to get a list of every nested key in a document, we could run this:
.. code-block:: python .. code-block:: python
from nested_lookup import get_all_keys from nested_lookup import get_all_keys
keys = get_all_keys(my_document) keys = get_all_keys(my_document)
print(keys) print(keys)
.. code-block:: python .. code-block:: python
['name', 'email_address', 'other', 'secondary_email', 'EMAIL_RECOVERY', 'email_address'] ['name', 'email_address', 'other', 'secondary_email', 'EMAIL_RECOVERY', 'email_address']
To get the number of occurrence of the given key/value Also, to get the number of times a key or value occurs in the document, try:
.. code-block:: python .. code-block:: python
from nested_lookup import get_occurrence_of_key, get_occurrence_of_value from nested_lookup import (
get_occurrence_of_key,
get_occurrence_of_value,
)
no_of_key_occurrence = get_occurrence_of_key(my_document, key='email_address') # result => 2
key_occurrence_count = get_occurrence_of_key(my_document, key='email_address')
print(no_of_key_occurrence)
print(no_of_key_occurrence) # result => 2 # result => 1
value_occurrence_count = get_occurrence_of_value(my_document, value='test2@example.com')
no_of_value_occurrence = get_occurrence_of_value(my_document, value='test2@example.com') print(no_of_value_occurrence)
print(no_of_value_occurrence) # result => 1
To get the number of occurrence and their respective values To get the number of occurrence and their respective values
@ -262,6 +260,8 @@ To get the number of occurrence and their respective values
nested_alter tutorial nested_alter tutorial
===================== =====================

View file

@ -23,7 +23,7 @@ print(requirements())
setup( setup(
name="nested-lookup", name="nested-lookup",
version="0.2.21", version="0.2.22",
description="Python functions for working with deeply nested documents (lists and dicts) ", description="Python functions for working with deeply nested documents (lists and dicts) ",
keywords="nested document dictionary dict list lookup schema json xml yaml", keywords="nested document dictionary dict list lookup schema json xml yaml",
long_description=open("README.rst").read(), long_description=open("README.rst").read(),
@ -43,6 +43,7 @@ setup(
"Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
], ],
) )

View file

@ -7,6 +7,7 @@ from nested_lookup import nested_delete, nested_alter
class BaseLookUpApi(TestCase): class BaseLookUpApi(TestCase):
def setUp(self): def setUp(self):
self.sample_data1 = { self.sample_data1 = {
"example_boolean": False,
"build_version": { "build_version": {
"model_name": "MacBook Pro", "model_name": "MacBook Pro",
"build_version": { "build_version": {
@ -118,6 +119,7 @@ class TestNestedDelete(BaseLookUpApi):
"os_details": {"product_version": "10.13.6"}, "os_details": {"product_version": "10.13.6"},
"name": "Test", "name": "Test",
"date": "YYYY-MM-DD HH:MM:SS", "date": "YYYY-MM-DD HH:MM:SS",
"example_boolean": False,
} }
self.assertEqual(result, nested_delete(self.sample_data1, "build_version")) self.assertEqual(result, nested_delete(self.sample_data1, "build_version"))
@ -162,6 +164,7 @@ class TestNestedUpdate(BaseLookUpApi):
"os_details": {"product_version": "10.13.6", "build_version": "Test1"}, "os_details": {"product_version": "10.13.6", "build_version": "Test1"},
"name": "Test", "name": "Test",
"date": "YYYY-MM-DD HH:MM:SS", "date": "YYYY-MM-DD HH:MM:SS",
"example_boolean": False,
} }
self.assertEqual( self.assertEqual(
result, nested_update(self.sample_data1, "build_version", "Test1") result, nested_update(self.sample_data1, "build_version", "Test1")
@ -176,6 +179,7 @@ class TestNestedUpdate(BaseLookUpApi):
}, },
"name": "Test", "name": "Test",
"date": "YYYY-MM-DD HH:MM:SS", "date": "YYYY-MM-DD HH:MM:SS",
"example_boolean": False,
} }
self.assertEqual( self.assertEqual(
@ -190,7 +194,7 @@ class TestNestedUpdate(BaseLookUpApi):
def test_nested_update_in_place_false(self): def test_nested_update_in_place_false(self):
""" """
ested_update should mutate and return a copy of the original document nested_update should mutate and return a copy of the original document
""" """
before_id = id(self.sample_data1) before_id = id(self.sample_data1)
result = nested_update( result = nested_update(