Skip to main content

sendero - data filtering for humans

Project description

sendero

Data Filtering for Humans

why sendero?

"sendero" means footpath in Spanish

install

pip install sendero

basic usage

# in JSON-compatible format
data = {
  "agency": "GSA",
  "measurementType": {
    "method": "modules"
  },
  "version": "2.0.0",
  "releases": [
    {
      "name": "usasearch",
      "description": "System now maintained in open repo https://github.com/GSA/search-gov.",
      "permissions": {
        "licenses": None,
        "usageType": "governmentWideReuse"
      },
      "tags": [
        "GSA"
      ]
    },
    # ...
  ]
}
from sendero import list_paths, get

list_paths(data, 'agency')
[
    "agency",
    "measurementType.method",
    "releases.contact.email",
    "releases.description",
    # ...
]

get(data, 'agency')
["GSA"]

# get nested properties using dot syntax
get(data, 'releases.permissions.licenses.name')
["CC0 1.0 Universal", "PD", "agpl-3.0", ... ]

# get nested properties using double underscore syntax
get(data, 'releases__permissions__licenses__name')
["CC0 1.0 Universal", "PD", "agpl-3.0", ... ]

advanced usage

clean

Filter out None and empty strings.

from sendero import get

# dirty
get(data, "releases.license", clean=False)
[ null, 'https://creativecommons.org/publicdomain/zero/1.0', None, None, ... ]

# clean
get(data, "releases.license", clean=True)
[ 'https://creativecommons.org/publicdomain/zero/1.0', 'https://github.com/GSA/open.gsa.gov/blob/gh-pages/TERMS.md', ... ]

unique

If you only want unique results returned:

# default
get(data, 'releases.tags')
["GSA", "GSA", "GSA", ...]

# uniques only
get(data, 'releases.tags', unique=True)
["GSA","gsa","socialmedia", "mobileapps", ...]

sort

If you want your results sorted

get(data, 'releases.tags', sort=True)
["508", "API", "Bing", "DigitalGovSearch", ...]

delimiter

By default, sendero tries syntax where the steps are separted by "." or "__". If you'd like to restrict the syntax or use a custom delimiter:

get(data, 'releases--tags', delimiter='--')

# accepts releases--tags and releases__tags
get(data, 'releases--tags', delimiter=['--', '__'])

stringify

# converts numbers to strings
get(data, "releases.laborHours", stringify=True, unique=True)
["0", "200", "12345" ]

# convert objects to JSON strings
get(data, "releases.permissions", stringify=True, unique=True)
[
  '{"licenses":null,"usageType":"governmentWideReuse"}',
  '{"licenses":[{"URL":"http://choosealicense.com/licenses/mit/","name":"mit"}],"usageType":"openSource"}',
  '{"licenses":[{"URL":"http://choosealicense.com/licenses/gpl-3.0/","name":"gpl-3.0"}],"usageType":"openSource"}',
  '{"licenses":null,"usageType":"openSource"}',
  # ...
]

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

sendero-0.1.0.tar.gz (6.4 kB view hashes)

Uploaded Source

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