{"id":27359272,"url":"https://github.com/rackerlabs/simpl","last_synced_at":"2026-03-11T20:31:22.818Z","repository":{"id":28571658,"uuid":"32089421","full_name":"rackerlabs/simpl","owner":"rackerlabs","description":"common python libraries :point_right: https://simpl.readthedocs.org","archived":false,"fork":false,"pushed_at":"2023-08-14T21:37:03.000Z","size":624,"stargazers_count":6,"open_issues_count":13,"forks_count":9,"subscribers_count":14,"default_branch":"master","last_synced_at":"2026-02-11T02:28:44.819Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rackerlabs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2015-03-12T16:56:55.000Z","updated_at":"2024-11-10T19:47:04.000Z","dependencies_parsed_at":"2025-04-13T00:28:00.782Z","dependency_job_id":"810742ca-75d7-4ba0-8c74-3c3deb7b5162","html_url":"https://github.com/rackerlabs/simpl","commit_stats":null,"previous_names":["checkmate/simpl"],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/rackerlabs/simpl","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rackerlabs%2Fsimpl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rackerlabs%2Fsimpl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rackerlabs%2Fsimpl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rackerlabs%2Fsimpl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rackerlabs","download_url":"https://codeload.github.com/rackerlabs/simpl/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rackerlabs%2Fsimpl/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30399274,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-11T18:46:22.935Z","status":"ssl_error","status_checked_at":"2026-03-11T18:46:17.045Z","response_time":84,"last_error":"SSL_read: 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":[],"created_at":"2025-04-13T00:27:51.120Z","updated_at":"2026-03-11T20:31:22.776Z","avatar_url":"https://github.com/rackerlabs.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# simpl\n[![Build Status](https://travis-ci.org/rackerlabs/simpl.svg?branch=master)](https://travis-ci.org/rackerlabs/simpl)\n[![Coverage Status](https://coveralls.io/repos/checkmate/simpl/badge.svg?branch=master)](https://coveralls.io/r/checkmate/simpl?branch=master)\n\nCommon Python libraries for:\n\n- [Configuration](#config)\n- [Logging](#logging)\n- [Secrets](#secrets)\n- [Python Utilites](#python)\n- [Servers](#server)\n- [WSGI Middleware](#middleware)\n- [REST API Tooling](#rest)\n- [Date/Time (chronos)](#chronos)\n- [MongoDB Backend Wrapper](#mongo)\n\n## \u003ca name=\"config\"\u003e\u003c/a\u003eConfig\n\nSupports argparse-like configuration options with support for the following\nconfiguration methods:\n- command-line arguments\n- environment variables\n- keychain (OSX) and keyring (Linux)\n- ini/config files\n\n## \u003ca name=\"logging\"\u003e\u003c/a\u003eLogging (simpl.log)\n\nEncapsulates logging boilerplate code to initialize logging using the\n[config](#config) module.\n\n## \u003ca name=\"secrets\"\u003e\u003c/a\u003eSensitive Value Helpers\n\nHelpers for managing sensitive values.\n\n\n## \u003ca name=\"python\"\u003e\u003c/a\u003ePython Utilities\n\nCode we wished was built in to python (or was simpler to use):\n- dictionary and list merging\n- dictionary get/set/in by path\n\n\n## \u003ca name=\"server\"\u003e\u003c/a\u003eRunning a web service\n\n- Perform standard webserver configuration (address, port, server adapter, etc.) using the [config](#config) module\n- Run the bottle-based webservice using this configuration\n\n\n## \u003ca name=\"middleware\"\u003e\u003c/a\u003eWSGI middleware\n\nIncludes sample middleware for use with WSGI apps including bottle.\n\nMiddleware included:\n- CORS: handles CORS requests\n- Context: handles setting a threadlocal context and adds a transaction ID.\n- Errors: handles catching and formatting errors\n\n\n## \u003ca name=\"rest\"\u003e\u003c/a\u003eREST API Tooling\n\nHelper code for handling RESTful APIs using bottle.\n\nCode included:\n- body: a decorator that parses a call body and passes it to a route as an argument. The decorator can apply a schema (any callable including a voluptuous.Schema), return a default, and enforce that a body is required.\n- paginated: a decorator that returns paginated data with correct limit/offset validation and HTTP responses.\n- process_params: parses query parameters from bottle request\n\n## \u003ca name=\"chronos\"\u003e\u003c/a\u003eDate/Time Utilites\n\nProvides functions that consistently format date/time and timestamp data for use in APIs.\n\n## \u003ca name=\"mongo\"\u003e\u003c/a\u003eMongoDB Backend Wrapper\n\nImplements an opinionated wrapper for MongoDB databases and collections\nthat works with the [rest][#rest] module and supports query param filtering\n(including text search) and pagination of backend collections.\n\n## release\n[![latest](https://img.shields.io/pypi/v/simpl.svg)](https://pypi.python.org/pypi/simpl)\n\n## builds\n\n| Branch        | Status  |\n| ------------- | ------------- |\n| [master](https://github.com/rackerlabs/simpl/tree/master)  | [![Build Status](https://travis-ci.org/rackerlabs/simpl.svg?branch=master)](https://travis-ci.org/rackerlabs/simpl)  |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frackerlabs%2Fsimpl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frackerlabs%2Fsimpl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frackerlabs%2Fsimpl/lists"}