{"id":37082820,"url":"https://github.com/ericcrosson/stump","last_synced_at":"2026-01-14T10:00:41.337Z","repository":{"id":57471998,"uuid":"51708804","full_name":"EricCrosson/stump","owner":"EricCrosson","description":"Stump, another log utility for python","archived":true,"fork":false,"pushed_at":"2018-11-11T15:01:32.000Z","size":27,"stargazers_count":2,"open_issues_count":5,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-10-01T16:33:23.806Z","etag":null,"topics":["logging","pip","python"],"latest_commit_sha":null,"homepage":"https://pypi.python.org/pypi/stump","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/EricCrosson.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-02-14T19:06:10.000Z","updated_at":"2023-01-27T19:34:38.000Z","dependencies_parsed_at":"2022-08-30T15:11:54.899Z","dependency_job_id":null,"html_url":"https://github.com/EricCrosson/stump","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/EricCrosson/stump","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EricCrosson%2Fstump","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EricCrosson%2Fstump/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EricCrosson%2Fstump/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EricCrosson%2Fstump/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/EricCrosson","download_url":"https://codeload.github.com/EricCrosson/stump/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EricCrosson%2Fstump/sbom","scorecard":{"id":46392,"data":{"date":"2025-08-11","repo":{"name":"github.com/EricCrosson/stump","commit":"eb4d9f0dbe2642f86d47ca1b5f51fb7801bb09ab"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Maintained","score":0,"reason":"project is archived","details":["Warn: Repository is archived."],"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: MIT License: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}}]},"last_synced_at":"2025-08-14T22:52:38.531Z","repository_id":57471998,"created_at":"2025-08-14T22:52:38.531Z","updated_at":"2025-08-14T22:52:38.531Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28416487,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T08:38:59.149Z","status":"ssl_error","status_checked_at":"2026-01-14T08:38:43.588Z","response_time":107,"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":["logging","pip","python"],"created_at":"2026-01-14T10:00:27.787Z","updated_at":"2026-01-14T10:00:41.319Z","avatar_url":"https://github.com/EricCrosson.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"Stump\n=====\n\n.. image:: https://travis-ci.org/EricCrosson/stump.svg?branch=master\n   :target: https://travis-ci.org/EricCrosson/stump\n   :alt: Travis-CI Build Status\n.. image:: https://img.shields.io/pypi/v/stump.svg\n   :target: https://github.com/EricCrosson/stump\n   :alt: Current Version\n.. image:: https://img.shields.io/pypi/l/stump.svg\n   :target: https://github.com/EricCrosson/stump\n   :alt: License\n\n-  `What is stump?`_\n\n-  `Installation`_\n\n-  `Usage`_\n\n   -  `API`_\n\n   -  `Examples`_\n\n-  `License`_\n\n.. role:: python(code)\n   :language: python\n\nWhat is stump?\n--------------\n\n**Stump:**\n\n*n.* the lower end of a tree or plant left after the main part is\nremoved\n\n**Log:**\n\n*n.* a portion or length of the trunk or of a large limb of a felled\ntree\n\n:python:`stump` is a **logging utility for Python** that uses the `standard\nlogging module`_ under the covers. However, a stump is a different part of a\ntree than a log and as such should be utilized differently. :Python:`stump`\noffers various `method decorators`_ that really cover all the bases of logging\nfor debugging. :Python:`stump`’s method decorators are flexible and concise, act\nas additional documentation, don’t clutter the main code of the method body and\naccept a natural format string that is easy to form and read.\n\nInstallation\n------------\n\nInstall from `pip`_\n\n.. code-block:: bash\n\n   pip install stump\n\nAlternatively, clone this repo and install from your local copy\n\n.. code-block:: bash\n\n   git clone https://github.com/EricCrosson/stump\n   cd stump\n   python setup.py install\n\n\nUsage\n-----\n\nOnce installed simply :python:`import stump` and pass a logger to\n:python:`stump.configure`, as demonstrated in the `Examples`_ section.\n\nThe different :python:`stump` decorators all inherit the same functionality,\nwith minor behavioral differences. Each decorator accepts a logging string as\nthe first argument. This string may contain the values of the decorated method's\nparameters. For example, to log the values of parameters passed to\n:python:`accelerate` the following format string could be used\n\n.. code-block:: python\n\n       @stump.put('Object is {weight} lbs with {gravity} m/s^2 acceleration')\n       def accelerate(weight, gravity):\n           work()\n\n\nIf invoked by :python:`accelerate(42, 9.8)` the logs generated would be\n\n.. code-block:: text\n\n       INFO:accelerate:Object is 42 lbs with 9.8 m/s^2 acceleration...\n       INFO:accelerate:Object is 42 lbs with 9.8 m/s^2 acceleration...done\n\nAPI\n~~~\n\nThe standard decorator, :python:`stump.put`, prints a message upon entering and\nexiting a method. The below table describes the public api exposed by :python:`stump`.\n\n:python:`stump.put`\n        Print a message upon entering and exiting the method\n\n:python:`stump.pre`\n        Print a message only upon entering the method\n\n:python:`stump.post`\n        Print a message only upon exiting the method\n\n:python:`stump.date`\n        Like :python:`stump.put`, but include a date- and time- stamp\n\n:python:`stump.ret`\n        Like :python:`stump.put`, but include the method's return value\n\n\nExamples\n~~~~~~~~\n\nImport the :python:`stump` library and configure the :python:`stump` logger\n\n.. code-block:: python\n\n      #!/usr/bin/env python\n      import stump\n\n      # configure a logger for stump\n      import sys\n      import logging\n      logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)\n      logger = logging.getLogger()\n\n      stump.configure(logger)\n\nAnd decorate some methods. :Python:`stump` allows you to interpolate a string\nrepresentation of the parameter values to decorated methods by simply\nwrapping the parameter name in curly braces.\n\n.. code-block:: python\n\n      @stump.post('Using nitrous')\n      def use_nitrous():\n          raise NoNitrousException('You never installed nitrous!')\n\n      @stump.ret('\"Calculating\" boost for car {car}')\n      def car_boost(car):\n          try:\n              use_nitrous()\n          except:\n              return random.random() * 100\n\n      @stump.pre()\n      def ready():\n          light = 'red'\n\n      @stump.pre()\n      def set():\n          light = 'yellow'\n\n      @stump.post()\n      def go():\n          light = 'green'\n\n      @stump.date('Racing {car}', print_return=True)\n      def race(car):\n          luck = car_boost(car)\n          return random.randint(1, round(luck))\n\n      ready()\n      set()\n      go()\n      race('wacky')\n\nThis example logs the following events\n\n.. code:: text\n\n      INFO:root:ready...\n      INFO:root:set...\n      INFO:root:go...done\n      INFO:root:race:2016-02-14 23:33:37:Racing wacky...\n      INFO:root:car_boost:\"Calculating\" boost for car wacky...\n      INFO:root:use_nitrous:Using nitrous...\n      INFO:root:use_nitrous:Using nitrous...threw exception NoNitrousException with message You never installed nitrous!\n      INFO:root:car_boost:\"Calculating\" boost for car wacky...done (returning 56.138089977332776)\n      INFO:root:race:2016-02-14 23:33:37:Racing wacky...done (returning 2)\n\nLicense\n-------\n\nThis code is released under the MIT license.\n\n.. _What is stump?: #what-is-stump\n.. _Installation: #installation\n.. _Usage: #usage\n.. _License: #license\n.. _API: #api\n.. _Examples: #examples\n.. _standard logging module: https://docs.python.org/3/library/logging.html\n.. _method decorators: https://www.python.org/dev/peps/pep-0318/\n.. _pip: https://pypi.python.org/pypi/pip\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fericcrosson%2Fstump","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fericcrosson%2Fstump","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fericcrosson%2Fstump/lists"}