{"id":28646747,"url":"https://github.com/harisekhon/pylib","last_synced_at":"2026-03-06T16:30:50.995Z","repository":{"id":46300577,"uuid":"45047814","full_name":"HariSekhon/pylib","owner":"HariSekhon","description":"Python / Jython Utility Library for my other repos","archived":false,"fork":false,"pushed_at":"2026-02-03T08:01:29.000Z","size":1736,"stargazers_count":13,"open_issues_count":20,"forks_count":8,"subscribers_count":3,"default_branch":"master","last_synced_at":"2026-02-03T21:08:16.584Z","etag":null,"topics":["cli","hacktoberfest","hbase","library","nagios-plugins","nosql","python","rest","tools","unit-test","unit-testing","unit-tests"],"latest_commit_sha":null,"homepage":"https://www.linkedin.com/in/HariSekhon","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/HariSekhon.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2015-10-27T14:47:50.000Z","updated_at":"2026-02-03T08:01:38.000Z","dependencies_parsed_at":"2026-01-10T20:07:28.973Z","dependency_job_id":null,"html_url":"https://github.com/HariSekhon/pylib","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/HariSekhon/pylib","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HariSekhon%2Fpylib","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HariSekhon%2Fpylib/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HariSekhon%2Fpylib/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HariSekhon%2Fpylib/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HariSekhon","download_url":"https://codeload.github.com/HariSekhon/pylib/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HariSekhon%2Fpylib/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30185418,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-06T14:42:24.748Z","status":"ssl_error","status_checked_at":"2026-03-06T14:42:14.925Z","response_time":250,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["cli","hacktoberfest","hbase","library","nagios-plugins","nosql","python","rest","tools","unit-test","unit-testing","unit-tests"],"created_at":"2025-06-13T02:06:48.481Z","updated_at":"2026-03-06T16:30:50.987Z","avatar_url":"https://github.com/HariSekhon.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Hari Sekhon - Python / Jython Library\n\n[![GitHub stars](https://img.shields.io/github/stars/harisekhon/pylib?logo=github)](https://github.com/HariSekhon/pylib/stargazers)\n[![GitHub forks](https://img.shields.io/github/forks/harisekhon/pylib?logo=github)](https://github.com/HariSekhon/pylib/network)\n[![LineCount](https://sloc.xyz/github/HariSekhon/pylib/?badge-bg-color=2081C2)](https://github.com/boyter/scc/)\n[![Cocomo](https://sloc.xyz/github/HariSekhon/pylib/?badge-bg-color=2081C2\u0026category=cocomo)](https://github.com/boyter/scc/)\n[![License](https://img.shields.io/github/license/HariSekhon/pylib)](https://github.com/HariSekhon/pylib/blob/master/LICENSE)\n[![My LinkedIn](https://img.shields.io/badge/LinkedIn%20Profile-HariSekhon-blue?logo=data:image/svg%2bxml;base64,PHN2ZyByb2xlPSJpbWciIGZpbGw9IiNmZmZmZmYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+TGlua2VkSW48L3RpdGxlPjxwYXRoIGQ9Ik0yMC40NDcgMjAuNDUyaC0zLjU1NHYtNS41NjljMC0xLjMyOC0uMDI3LTMuMDM3LTEuODUyLTMuMDM3LTEuODUzIDAtMi4xMzYgMS40NDUtMi4xMzYgMi45Mzl2NS42NjdIOS4zNTFWOWgzLjQxNHYxLjU2MWguMDQ2Yy40NzctLjkgMS42MzctMS44NSAzLjM3LTEuODUgMy42MDEgMCA0LjI2NyAyLjM3IDQuMjY3IDUuNDU1djYuMjg2ek01LjMzNyA3LjQzM2MtMS4xNDQgMC0yLjA2My0uOTI2LTIuMDYzLTIuMDY1IDAtMS4xMzguOTItMi4wNjMgMi4wNjMtMi4wNjMgMS4xNCAwIDIuMDY0LjkyNSAyLjA2NCAyLjA2MyAwIDEuMTM5LS45MjUgMi4wNjUtMi4wNjQgMi4wNjV6bTEuNzgyIDEzLjAxOUgzLjU1NVY5aDMuNTY0djExLjQ1MnpNMjIuMjI1IDBIMS43NzFDLjc5MiAwIDAgLjc3NCAwIDEuNzI5djIwLjU0MkMwIDIzLjIyNy43OTIgMjQgMS43NzEgMjRoMjAuNDUxQzIzLjIgMjQgMjQgMjMuMjI3IDI0IDIyLjI3MVYxLjcyOUMyNCAuNzc0IDIzLjIgMCAyMi4yMjIgMGguMDAzeiIvPjwvc3ZnPgo=)](https://www.linkedin.com/in/HariSekhon/)\n[![GitHub Last Commit](https://img.shields.io/github/last-commit/HariSekhon/pylib?logo=github)](https://github.com/HariSekhon/pylib/commits/master)\n\u003c!-- doesn't include /tests?/ or comments\n[![Lines of Code](https://sonarcloud.io/api/project_badges/measure?project=HariSekhon_pylib\u0026metric=ncloc)](https://sonarcloud.io/dashboard?id=HariSekhon_pylib)\n--\u003e\n\n[![Codacy](https://app.codacy.com/project/badge/Grade/cfc553fcdbc94491b3c8c56797dcd189)](https://www.codacy.com/gh/HariSekhon/pylib/dashboard)\n[![CodeFactor](https://www.codefactor.io/repository/github/harisekhon/pylib/badge/master)](https://www.codefactor.io/repository/github/harisekhon/pylib/overview/master)\n[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=HariSekhon_pylib\u0026metric=alert_status)](https://sonarcloud.io/dashboard?id=HariSekhon_pylib)\n[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=HariSekhon_pylib\u0026metric=sqale_rating)](https://sonarcloud.io/dashboard?id=HariSekhon_pylib)\n[![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=HariSekhon_pylib\u0026metric=reliability_rating)](https://sonarcloud.io/dashboard?id=HariSekhon_pylib)\n[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=HariSekhon_pylib\u0026metric=security_rating)](https://sonarcloud.io/dashboard?id=HariSekhon_pylib)\n[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=HariSekhon_pylib\u0026metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=HariSekhon_pylib)\n[![Coverage Status](https://coveralls.io/repos/HariSekhon/pylib/badge.svg?branch=master\u0026service=github)](https://coveralls.io/github/HariSekhon/pylib?branch=master)\n\n\u003c!-- site broken\n[![PyUp](https://pyup.io/repos/github/HariSekhon/pylib/shield.svg)](https://pyup.io/account/repos/github/HariSekhon/pylib/)\n[![Python 3](https://pyup.io/repos/github/HariSekhon/pylib/python-3-shield.svg)](https://pyup.io/repos/github/HariSekhon/pylib/)\n--\u003e\n\n[![Linux](https://img.shields.io/badge/OS-Linux-blue?logo=linux)](https://github.com/HariSekhon/pylib#hari-sekhon---python--jython-library)\n[![Mac](https://img.shields.io/badge/OS-Mac-blue?logo=apple)](https://github.com/HariSekhon/pylib#hari-sekhon---python--jython-library)\n[![Docker](https://img.shields.io/badge/container-Docker-blue?logo=docker\u0026logoColor=white)](https://hub.docker.com/r/harisekhon/github/)\n[![Dockerfile](https://img.shields.io/badge/repo-Dockerfiles-blue?logo=docker\u0026logoColor=white)](https://github.com/HariSekhon/Dockerfiles)\n[![DockerHub Pulls](https://img.shields.io/docker/pulls/harisekhon/centos-github?label=DockerHub%20pulls\u0026logo=docker\u0026logoColor=white)](https://hub.docker.com/r/harisekhon/github)\n[![DockerHub Build Automated](https://img.shields.io/docker/automated/harisekhon/centos-github?logo=docker\u0026logoColor=white)](https://hub.docker.com/r/harisekhon/centos-github)\n\u003c!-- these badges don't work any more\n[![Docker Build Status](https://img.shields.io/docker/cloud/build/harisekhon/centos-github?logo=docker\u0026logoColor=white)](https://hub.docker.com/r/harisekhon/centos-github/builds)\n[![MicroBadger](https://images.microbadger.com/badges/image/harisekhon/github.svg)](http://microbadger.com/#/images/harisekhon/github)\n--\u003e\n\n[![CI Builds Overview](https://img.shields.io/badge/CI%20Builds-Overview%20Page-blue?logo=circleci)](https://harisekhon.github.io/CI-CD/)\n[![Jenkins](https://img.shields.io/badge/Jenkins-ready-blue?logo=jenkins\u0026logoColor=white)](https://github.com/HariSekhon/pylib/blob/master/Jenkinsfile)\n[![Concourse](https://img.shields.io/badge/Concourse-ready-blue?logo=concourse)](https://github.com/HariSekhon/pylib/blob/master/cicd/.concourse.yml)\n[![GoCD](https://img.shields.io/badge/GoCD-ready-blue?logo=go)](https://github.com/HariSekhon/pylib/blob/master/cicd/.gocd.yml)\n[![TeamCity](https://img.shields.io/badge/TeamCity-ready-blue?logo=teamcity)](https://github.com/HariSekhon/TeamCity-CI)\n\n[![CircleCI](https://circleci.com/gh/HariSekhon/pylib.svg?style=svg)](https://circleci.com/gh/HariSekhon/pylib)\n[![BuildKite](https://img.shields.io/buildkite/7cc15b95df0f0478ccecd598dffa756d1460f68914b6d3083d/master?label=BuildKite\u0026logo=buildkite)](https://buildkite.com/hari-sekhon/pylib)\n[![AppVeyor](https://img.shields.io/appveyor/build/harisekhon/pylib/master?logo=appveyor\u0026label=AppVeyor)](https://ci.appveyor.com/project/HariSekhon/pylib/branch/master)\n[![Drone](https://img.shields.io/drone/build/HariSekhon/pylib/master?logo=drone\u0026label=Drone)](https://cloud.drone.io/HariSekhon/pylib)\n[![Codefresh](https://g.codefresh.io/api/badges/pipeline/harisekhon/GitHub%2Fpylib?branch=master\u0026key=eyJhbGciOiJIUzI1NiJ9.NWU1MmM5OGNiM2FiOWUzM2Y3ZDZmYjM3.O69674cW7vYom3v5JOGKXDbYgCVIJU9EWhXUMHl3zwA\u0026type=cf-1)](https://g.codefresh.io/pipelines/edit/new/builds?id=5e58e2f89604d74f0c95ee24\u0026pipeline=pylib\u0026projects=GitHub\u0026projectId=5e52ca8ea284e00f882ea992\u0026context=github\u0026filter=page:1;pageSize:10;timeFrameStart:week)\n[![Cirrus CI](https://img.shields.io/cirrus/github/HariSekhon/pylib/master?logo=Cirrus%20CI\u0026label=Cirrus%20CI)](https://cirrus-ci.com/github/HariSekhon/pylib)\n[![Semaphore](https://harisekhon.semaphoreci.com/badges/pylib.svg)](https://harisekhon.semaphoreci.com/projects/pylib)\n[![Buddy](https://img.shields.io/badge/Buddy-ready-1A86FD?logo=buddy)](https://github.com/HariSekhon/pylib/blob/master/buddy.yml)\n[![Shippable](https://img.shields.io/badge/Shippable-legacy-lightgrey?logo=jfrog\u0026label=Shippable)](https://github.com/HariSekhon/pylib/blob/master/shippable.yml)\n[![Travis CI](https://img.shields.io/badge/TravisCI-ready-blue?logo=travis\u0026label=Travis%20CI)](https://github.com/HariSekhon/pylib/blob/master/.travis.yml)\n\n[![Azure DevOps Pipeline](https://dev.azure.com/harisekhon/GitHub/_apis/build/status/HariSekhon.pylib?branchName=master)](https://dev.azure.com/harisekhon/GitHub/_build/latest?definitionId=4\u0026branchName=master)\n[![GitLab Pipeline](https://img.shields.io/badge/GitLab%20CI-legacy-lightgrey?logo=gitlab)](https://gitlab.com/HariSekhon/pylib/pipelines)\n[![BitBucket Pipeline](https://img.shields.io/badge/Bitbucket%20CI-legacy-lightgrey?logo=bitbucket)](https://bitbucket.org/harisekhon/pylib/addon/pipelines/home#!/)\n[![AWS CodeBuild](https://img.shields.io/badge/AWS%20CodeBuild-ready-blue?logo=amazon%20aws)](https://github.com/HariSekhon/pylib/blob/master/cicd/buildspec.yml)\n[![GCP Cloud Build](https://img.shields.io/badge/GCP%20Cloud%20Build-ready-blue?logo=google%20cloud\u0026logoColor=white)](https://github.com/HariSekhon/pylib/blob/master/cicd/cloudbuild.yaml)\n\n[![Repo on GitHub](https://img.shields.io/badge/repo-GitHub-2088FF?logo=github)](https://github.com/HariSekhon/pylib)\n[![Repo on GitLab](https://img.shields.io/badge/repo-GitLab-FCA121?logo=gitlab)](https://gitlab.com/HariSekhon/pylib)\n[![Repo on Azure DevOps](https://img.shields.io/badge/repo-Azure%20DevOps-0078D7?logo=azure%20devops)](https://dev.azure.com/harisekhon/GitHub/_git/pylib)\n[![Repo on BitBucket](https://img.shields.io/badge/repo-BitBucket-0052CC?logo=bitbucket)](https://bitbucket.org/HariSekhon/pylib)\n\n[![FOSSA Status](https://app.fossa.com/api/projects/custom%2B16526%2Fgithub.com%2FHariSekhon%2Fpylib.svg?type=shield)](https://app.fossa.com/projects/custom%2B16526%2Fgithub.com%2FHariSekhon%2Fpylib?ref=badge_shield)\n[![ShellCheck](https://github.com/HariSekhon/pylib/actions/workflows/shellcheck.yaml/badge.svg)](https://github.com/HariSekhon/pylib/actions/workflows/shellcheck.yaml)\n[![JSON](https://github.com/HariSekhon/pylib/actions/workflows/json.yaml/badge.svg)](https://github.com/HariSekhon/pylib/actions/workflows/json.yaml)\n[![YAML](https://github.com/HariSekhon/pylib/actions/workflows/yaml.yaml/badge.svg)](https://github.com/HariSekhon/pylib/actions/workflows/yaml.yaml)\n[![XML](https://github.com/HariSekhon/pylib/actions/workflows/xml.yaml/badge.svg)](https://github.com/HariSekhon/pylib/actions/workflows/xml.yaml)\n[![Markdown](https://github.com/HariSekhon/pylib/actions/workflows/markdown.yaml/badge.svg)](https://github.com/HariSekhon/pylib/actions/workflows/markdown.yaml)\n[![Validation](https://github.com/HariSekhon/pylib/actions/workflows/validate.yaml/badge.svg)](https://github.com/HariSekhon/pylib/actions/workflows/validate.yaml)\n[![Kics](https://github.com/HariSekhon/pylib/actions/workflows/kics.yaml/badge.svg)](https://github.com/HariSekhon/pylib/actions/workflows/kics.yaml)\n[![Grype](https://github.com/HariSekhon/pylib/actions/workflows/grype.yaml/badge.svg)](https://github.com/HariSekhon/pylib/actions/workflows/grype.yaml)\n[![Semgrep](https://github.com/HariSekhon/pylib/actions/workflows/semgrep.yaml/badge.svg)](https://github.com/HariSekhon/pylib/actions/workflows/semgrep.yaml)\n[![Semgrep Cloud](https://github.com/HariSekhon/pylib/actions/workflows/semgrep-cloud.yaml/badge.svg)](https://github.com/HariSekhon/pylib/actions/workflows/semgrep-cloud.yaml)\n[![Trivy](https://github.com/HariSekhon/pylib/actions/workflows/trivy.yaml/badge.svg)](https://github.com/HariSekhon/pylib/actions/workflows/trivy.yaml)\n\n[![GitHub Actions Ubuntu](https://github.com/HariSekhon/pylib/workflows/GitHub%20Actions%20Ubuntu/badge.svg)](https://github.com/HariSekhon/pylib/actions?query=workflow%3A%22GitHub+Actions+Ubuntu%22)\n[![Mac](https://github.com/HariSekhon/pylib/actions/workflows/mac.yaml/badge.svg)](https://github.com/HariSekhon/pylib/actions/workflows/mac.yaml)\n[![Mac 11](https://github.com/HariSekhon/pylib/actions/workflows/mac_11.yaml/badge.svg)](https://github.com/HariSekhon/pylib/actions/workflows/mac_11.yaml)\n[![Mac 12](https://github.com/HariSekhon/pylib/actions/workflows/mac_12.yaml/badge.svg)](https://github.com/HariSekhon/pylib/actions/workflows/mac_12.yaml)\n[![Ubuntu](https://github.com/HariSekhon/pylib/workflows/Ubuntu/badge.svg)](https://github.com/HariSekhon/pylib/actions?query=workflow%3A%22Ubuntu%22)\n[![Ubuntu 20.04](https://github.com/HariSekhon/pylib/workflows/Ubuntu%2020.04/badge.svg)](https://github.com/HariSekhon/pylib/actions?query=workflow%3A%22Ubuntu+20.04%22)\n[![Ubuntu 22.04](https://github.com/HariSekhon/pylib/workflows/Ubuntu%2022.04/badge.svg)](https://github.com/HariSekhon/pylib/actions?query=workflow%3A%22Ubuntu+22.04%22)\n[![Debian](https://github.com/HariSekhon/pylib/workflows/Debian/badge.svg)](https://github.com/HariSekhon/pylib/actions?query=workflow%3A%22Debian%22)\n[![Debian 10](https://github.com/HariSekhon/pylib/workflows/Debian%2010/badge.svg)](https://github.com/HariSekhon/pylib/actions?query=workflow%3A%22Debian+10%22)\n[![Debian 11](https://github.com/HariSekhon/pylib/workflows/Debian%2011/badge.svg)](https://github.com/HariSekhon/pylib/actions?query=workflow%3A%22Debian+11%22)\n[![Debian 12](https://github.com/HariSekhon/pylib/workflows/Debian%2012/badge.svg)](https://github.com/HariSekhon/pylib/actions?query=workflow%3A%22Debian+12%22)\n[![CentOS](https://github.com/HariSekhon/pylib/workflows/CentOS/badge.svg)](https://github.com/HariSekhon/pylib/actions?query=workflow%3A%22CentOS%22)\n[![CentOS 7](https://github.com/HariSekhon/pylib/workflows/CentOS%207/badge.svg)](https://github.com/HariSekhon/pylib/actions?query=workflow%3A%22CentOS+7%22)\n[![CentOS 8](https://github.com/HariSekhon/pylib/workflows/CentOS%208/badge.svg)](https://github.com/HariSekhon/pylib/actions?query=workflow%3A%22CentOS+8%22)\n[![Fedora](https://github.com/HariSekhon/pylib/workflows/Fedora/badge.svg)](https://github.com/HariSekhon/pylib/actions?query=workflow%3A%22Fedora%22)\n[![Alpine](https://github.com/HariSekhon/pylib/workflows/Alpine/badge.svg)](https://github.com/HariSekhon/pylib/actions?query=workflow%3A%22Alpine%22)\n[![Alpine 3](https://github.com/HariSekhon/pylib/workflows/Alpine%203/badge.svg)](https://github.com/HariSekhon/pylib/actions?query=workflow%3A%22Alpine+3%22)\n\n[![Python versions](https://img.shields.io/badge/Python-2.7+-3776AB?logo=python\u0026logoColor=white)](https://github.com/HariSekhon/pylib)\n[![Python 3.7](https://github.com/HariSekhon/pylib/workflows/Python%203.7/badge.svg)](https://github.com/HariSekhon/pylib/actions?query=workflow%3A%22Python+3.7%22)\n[![Python 3.8](https://github.com/HariSekhon/pylib/workflows/Python%203.8/badge.svg)](https://github.com/HariSekhon/pylib/actions?query=workflow%3A%22Python+3.8%22)\n[![Python 3.9](https://github.com/HariSekhon/pylib/workflows/Python%203.9/badge.svg)](https://github.com/HariSekhon/pylib/actions?query=workflow%3A%22Python+3.9%22)\n[![Python 3.10](https://github.com/HariSekhon/pylib/workflows/Python%203.10/badge.svg)](https://github.com/HariSekhon/pylib/actions?query=workflow%3A%22Python+3.10%22)\n[![Python 3.11](https://github.com/HariSekhon/pylib/workflows/Python%203.11/badge.svg)](https://github.com/HariSekhon/pylib/actions?query=workflow%3A%22Python+3.11%22)\n\n[git.io/python-lib](https://git.io/pylib)\n\nPython library, full of lots of validation code and utility functions.\n\nHari Sekhon\n\nCloud \u0026 Big Data Contractor, United Kingdom\n\n[![My LinkedIn](https://img.shields.io/badge/LinkedIn%20Profile-HariSekhon-blue?logo=data:image/svg%2bxml;base64,PHN2ZyByb2xlPSJpbWciIGZpbGw9IiNmZmZmZmYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+TGlua2VkSW48L3RpdGxlPjxwYXRoIGQ9Ik0yMC40NDcgMjAuNDUyaC0zLjU1NHYtNS41NjljMC0xLjMyOC0uMDI3LTMuMDM3LTEuODUyLTMuMDM3LTEuODUzIDAtMi4xMzYgMS40NDUtMi4xMzYgMi45Mzl2NS42NjdIOS4zNTFWOWgzLjQxNHYxLjU2MWguMDQ2Yy40NzctLjkgMS42MzctMS44NSAzLjM3LTEuODUgMy42MDEgMCA0LjI2NyAyLjM3IDQuMjY3IDUuNDU1djYuMjg2ek01LjMzNyA3LjQzM2MtMS4xNDQgMC0yLjA2My0uOTI2LTIuMDYzLTIuMDY1IDAtMS4xMzguOTItMi4wNjMgMi4wNjMtMi4wNjMgMS4xNCAwIDIuMDY0LjkyNSAyLjA2NCAyLjA2MyAwIDEuMTM5LS45MjUgMi4wNjUtMi4wNjQgMi4wNjV6bTEuNzgyIDEzLjAxOUgzLjU1NVY5aDMuNTY0djExLjQ1MnpNMjIuMjI1IDBIMS43NzFDLjc5MiAwIDAgLjc3NCAwIDEuNzI5djIwLjU0MkMwIDIzLjIyNy43OTIgMjQgMS43NzEgMjRoMjAuNDUxQzIzLjIgMjQgMjQgMjMuMjI3IDI0IDIyLjI3MVYxLjcyOUMyNCAuNzc0IDIzLjIgMCAyMi4yMjIgMGguMDAzeiIvPjwvc3ZnPgo=)](https://www.linkedin.com/in/HariSekhon/)\n\u003cbr\u003e*(you're welcome to connect with me on LinkedIn)*\n\n## Build + Unit Tests\n\n```shell\nmake \u0026\u0026\nmake test\n```\n\n[Continuous Integration](https://travis-ci.org/HariSekhon/pylib) is run on this repo to build and test it (around 450 unit tests, plus custom tests).\n\n### Configuration\n\nStrict validations include host/domain/FQDNs using TLDs which are populated from the official IANA list, a snapshot of which is shipped as part of this project.\n\nTo update the bundled official IANA TLD list with the latest valid TLDs do\n\n```shell\nmake tld\n```\n\n#### Custom TLDs\n\nIf using bespoke internal domains such as `.local`, `.intranet`, `.vm`, `.cloud` etc. that aren't part of the official IANA TLD list then this is additionally supported via a custom configuration file ```resources/custom_tlds.txt``` containing one TLD per line, with support for # comment prefixes. Just add your bespoke internal TLD to the file and it will then pass the host/domain/fqdn validations.\n\n## Related Repositories\n\n- [Java version of this library](https://github.com/HariSekhon/lib-java)\n- [Perl version of this library](https://github.com/HariSekhon/lib)\n\n[git.io/python-lib](https://git.io/python-lib)\n\n[git.io/pylib](https://git.io/pylib)\n\n## More Core Repos\n\n\u003c!-- OTHER_REPOS_START --\u003e\n\n### Knowledge\n\n[![Knowledge-Base](https://github-readme-stats-fast.vercel.app/api/pin/?username=HariSekhon\u0026repo=Knowledge-Base\u0026theme=ambient_gradient\u0026description_lines_count=3)](https://github.com/HariSekhon/Knowledge-Base)\n[![Diagrams-as-Code](https://github-readme-stats-fast.vercel.app/api/pin/?username=HariSekhon\u0026repo=Diagrams-as-Code\u0026theme=ambient_gradient\u0026description_lines_count=3)](https://github.com/HariSekhon/Diagrams-as-Code)\n\n\u003c!--\n\nNot support on GitHub Markdown:\n\n\u003ciframe src=\"https://raw.githubusercontent.com/HariSekhon/HariSekhon/main/knowledge.md\" width=\"100%\" height=\"500px\"\u003e\u003c/iframe\u003e\n\nDoes nothing:\n\n\u003cembed src=\"https://raw.githubusercontent.com/HariSekhon/HariSekhon/main/knowledge.md\" width=\"100%\" height=\"500px\" /\u003e\n\n--\u003e\n\n### DevOps Code\n\n[![DevOps-Bash-tools](https://github-readme-stats-fast.vercel.app/api/pin/?username=HariSekhon\u0026repo=DevOps-Bash-tools\u0026theme=ambient_gradient\u0026description_lines_count=3)](https://github.com/HariSekhon/DevOps-Bash-tools)\n[![DevOps-Python-tools](https://github-readme-stats-fast.vercel.app/api/pin/?username=HariSekhon\u0026repo=DevOps-Python-tools\u0026theme=ambient_gradient\u0026description_lines_count=3)](https://github.com/HariSekhon/DevOps-Python-tools)\n[![DevOps-Perl-tools](https://github-readme-stats-fast.vercel.app/api/pin/?username=HariSekhon\u0026repo=DevOps-Perl-tools\u0026theme=ambient_gradient\u0026description_lines_count=3)](https://github.com/HariSekhon/DevOps-Perl-tools)\n[![DevOps-Golang-tools](https://github-readme-stats-fast.vercel.app/api/pin/?username=HariSekhon\u0026repo=DevOps-Golang-tools\u0026theme=ambient_gradient\u0026description_lines_count=3)](https://github.com/HariSekhon/DevOps-Golang-tools)\n\n\u003c!--\n[![Gist Card](https://github-readme-stats-fast.vercel.app/api/gist?id=f8f551332440f1ca8897ff010e363e03)](https://gist.github.com/HariSekhon/f8f551332440f1ca8897ff010e363e03)\n--\u003e\n\n### Containerization\n\n[![Kubernetes-configs](https://github-readme-stats-fast.vercel.app/api/pin/?username=HariSekhon\u0026repo=Kubernetes-configs\u0026theme=ambient_gradient\u0026description_lines_count=3)](https://github.com/HariSekhon/Kubernetes-configs)\n[![Dockerfiles](https://github-readme-stats-fast.vercel.app/api/pin/?username=HariSekhon\u0026repo=Dockerfiles\u0026theme=ambient_gradient\u0026description_lines_count=3)](https://github.com/HariSekhon/Dockerfiles)\n\n### CI/CD\n\n[![GitHub-Actions](https://github-readme-stats-fast.vercel.app/api/pin/?username=HariSekhon\u0026repo=GitHub-Actions\u0026theme=ambient_gradient\u0026description_lines_count=3)](https://github.com/HariSekhon/GitHub-Actions)\n[![Jenkins](https://github-readme-stats-fast.vercel.app/api/pin/?username=HariSekhon\u0026repo=Jenkins\u0026theme=ambient_gradient\u0026description_lines_count=3)](https://github.com/HariSekhon/Jenkins)\n\n### Databases - DBA - SQL\n\n[![SQL-scripts](https://github-readme-stats-fast.vercel.app/api/pin/?username=HariSekhon\u0026repo=SQL-scripts\u0026theme=ambient_gradient\u0026description_lines_count=3)](https://github.com/HariSekhon/SQL-scripts)\n\n### DevOps Reloaded\n\n[![HAProxy-configs](https://github-readme-stats-fast.vercel.app/api/pin/?username=HariSekhon\u0026repo=HAProxy-configs\u0026theme=ambient_gradient\u0026description_lines_count=3)](https://github.com/HariSekhon/HAProxy-configs)\n[![Terraform](https://github-readme-stats-fast.vercel.app/api/pin/?username=HariSekhon\u0026repo=Terraform\u0026theme=ambient_gradient\u0026description_lines_count=3)](https://github.com/HariSekhon/Terraform)\n[![Packer](https://github-readme-stats-fast.vercel.app/api/pin/?username=HariSekhon\u0026repo=Packer\u0026theme=ambient_gradient\u0026description_lines_count=3)](https://github.com/HariSekhon/Packer)\n[![Ansible](https://github-readme-stats-fast.vercel.app/api/pin/?username=HariSekhon\u0026repo=Ansible\u0026theme=ambient_gradient\u0026description_lines_count=3)](https://github.com/HariSekhon/Ansible)\n[![Environments](https://github-readme-stats-fast.vercel.app/api/pin/?username=HariSekhon\u0026repo=Environments\u0026theme=ambient_gradient\u0026description_lines_count=3)](https://github.com/HariSekhon/Environments)\n\n### Monitoring\n\n[![Nagios-Plugins](https://github-readme-stats-fast.vercel.app/api/pin/?username=HariSekhon\u0026repo=Nagios-Plugins\u0026theme=ambient_gradient\u0026description_lines_count=3)](https://github.com/HariSekhon/Nagios-Plugins)\n[![Nagios-Plugin-Kafka](https://github-readme-stats-fast.vercel.app/api/pin/?username=HariSekhon\u0026repo=Nagios-Plugin-Kafka\u0026theme=ambient_gradient\u0026description_lines_count=3)](https://github.com/HariSekhon/Nagios-Plugin-Kafka)\n[![Prometheus](https://github-readme-stats-fast.vercel.app/api/pin/?username=HariSekhon\u0026repo=Prometheus\u0026theme=ambient_gradient\u0026description_lines_count=3)](https://github.com/HariSekhon/Prometheus)\n\n### Templates\n\n[![Templates](https://github-readme-stats-fast.vercel.app/api/pin/?username=HariSekhon\u0026repo=Templates\u0026theme=ambient_gradient\u0026description_lines_count=3)](https://github.com/HariSekhon/Templates)\n[![Template-repo](https://github-readme-stats-fast.vercel.app/api/pin/?username=HariSekhon\u0026repo=Template-repo\u0026theme=ambient_gradient\u0026description_lines_count=3)](https://github.com/HariSekhon/Template-repo)\n\n### Desktop\n\n[![TamperMonkey](https://github-readme-stats-fast.vercel.app/api/pin/?username=HariSekhon\u0026repo=TamperMonkey\u0026theme=ambient_gradient\u0026description_lines_count=3)](https://github.com/HariSekhon/TamperMonkey)\n[![Hammerspoon](https://github-readme-stats-fast.vercel.app/api/pin/?username=HariSekhon\u0026repo=Hammerspoon\u0026theme=ambient_gradient\u0026description_lines_count=3)](https://github.com/HariSekhon/Hammerspoon)\n[![MPV-Scripts](https://github-readme-stats-fast.vercel.app/api/pin/?username=HariSekhon\u0026repo=MPV-Scripts\u0026theme=ambient_gradient\u0026description_lines_count=3)](https://github.com/HariSekhon/MPV-Scripts)\n\n### Spotify\n\n[![Spotify-tools](https://github-readme-stats-fast.vercel.app/api/pin/?username=HariSekhon\u0026repo=Spotify-tools\u0026theme=ambient_gradient\u0026description_lines_count=3)](https://github.com/HariSekhon/Spotify-tools)\n[![Spotify-playlists](https://github-readme-stats-fast.vercel.app/api/pin/?username=HariSekhon\u0026repo=Spotify-playlists\u0026theme=ambient_gradient\u0026description_lines_count=3)](https://github.com/HariSekhon/Spotify-playlists)\n\nThe rest of my original source repos are\n[here](https://github.com/HariSekhon?tab=repositories\u0026q=\u0026type=source\u0026language=\u0026sort=stargazers).\n\nPre-built Docker images are available on my [DockerHub](https://hub.docker.com/u/harisekhon/)\nand can be re-generated using the my [Dockerfiles](https://github.com/HariSekhon/Dockerfiles) repo.\n\n\u003c!-- OTHER_REPOS_END --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fharisekhon%2Fpylib","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fharisekhon%2Fpylib","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fharisekhon%2Fpylib/lists"}