{"id":18568688,"url":"https://github.com/anxuae/pycups-notify","last_synced_at":"2025-08-19T05:12:49.857Z","repository":{"id":62579718,"uuid":"217392560","full_name":"anxuae/pycups-notify","owner":"anxuae","description":"Extension to add notifications system to the pycups library (https://github.com/OpenPrinting/pycups)","archived":false,"fork":false,"pushed_at":"2022-09-18T09:30:42.000Z","size":191,"stargazers_count":15,"open_issues_count":1,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-07-20T20:53:24.680Z","etag":null,"topics":["cups","notifications","printer","python"],"latest_commit_sha":null,"homepage":"","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/anxuae.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-10-24T20:46:49.000Z","updated_at":"2024-03-05T11:44:04.000Z","dependencies_parsed_at":"2022-11-03T20:49:40.775Z","dependency_job_id":null,"html_url":"https://github.com/anxuae/pycups-notify","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/anxuae/pycups-notify","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anxuae%2Fpycups-notify","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anxuae%2Fpycups-notify/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anxuae%2Fpycups-notify/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anxuae%2Fpycups-notify/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/anxuae","download_url":"https://codeload.github.com/anxuae/pycups-notify/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anxuae%2Fpycups-notify/sbom","scorecard":{"id":200423,"data":{"date":"2025-08-11","repo":{"name":"github.com/anxuae/pycups-notify","commit":"4f507cccdfb7e2f8b622425eba10ba6f9248514a"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.4,"checks":[{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/pythonpackage.yml:1","Warn: no topLevel permission defined: .github/workflows/pythonpublish.yml:1","Info: no jobLevel write permissions found"],"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":10,"reason":"no dangerous workflow patterns detected","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":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pythonpackage.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/anxuae/pycups-notify/pythonpackage.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pythonpackage.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/anxuae/pycups-notify/pythonpackage.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pythonpublish.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/anxuae/pycups-notify/pythonpublish.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pythonpublish.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/anxuae/pycups-notify/pythonpublish.yml/master?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/pythonpackage.yml:33","Warn: pipCommand not pinned by hash: .github/workflows/pythonpackage.yml:34","Warn: pipCommand not pinned by hash: .github/workflows/pythonpackage.yml:35","Warn: pipCommand not pinned by hash: .github/workflows/pythonpackage.yml:39","Warn: pipCommand not pinned by hash: .github/workflows/pythonpackage.yml:47","Warn: pipCommand not pinned by hash: .github/workflows/pythonpublish.yml:19","Warn: pipCommand not pinned by hash: .github/workflows/pythonpublish.yml:20","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   7 pipCommand dependencies pinned"],"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":"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":"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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE: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-16T22:43:15.010Z","repository_id":62579718,"created_at":"2025-08-16T22:43:15.010Z","updated_at":"2025-08-16T22:43:15.010Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271103202,"owners_count":24699646,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-19T02:00:09.176Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["cups","notifications","printer","python"],"created_at":"2024-11-06T22:29:59.802Z","updated_at":"2025-08-19T05:12:49.837Z","avatar_url":"https://github.com/anxuae.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n.. image:: https://raw.githubusercontent.com/anxuae/pycups-notify/master/docs/pycups-notify.png\n   :align: center\n   :alt: pycups-notify\n\n|PythonVersions| |PypiPackage| |Downloads|\n\nThe ``pycups-notify`` library is an extension to the `pycups \u003chttps://github.com/OpenPrinting/pycups\u003e`_\none. It enables subscription to CUPS RSS notifications.\n\nThis library implements the `Event notify \u003chttp://www.marco.panizza.name/dispenseTM/slides/exerc/eventNotifier/eventNotifier.html\u003e`_\npattern to match with the `design description \u003chttps://www.cups.org/doc/spec-design.html\u003e`_\nof the CUPS server.\n\n\nInstall\n-------\n\n::\n\n     $\u003e pip install pycups-notify\n\n\nUsage\n-----\n\n.. code-block:: python\n\n    import time\n    import cups\n    from cups_notify import Subscriber\n\n    def on_event(evt):\n        print(evt)\n\n    # Create a CUPS connection\n    conn = cups.Connection()\n\n    # Create a new subscriber\n    sub = Subscriber(conn)\n\n    # Subscribe the callback to all CUPS events\n    sub.subscribe(on_event)\n\n    try:\n        while True:\n            time.sleep(1)\n    except KeyboardInterrupt:\n        pass\n    finally:\n        sub.unsubscribe_all()\n\nThe ``CupsEvent`` class has the following attributes:\n\n============= ======== ===============================\nAttribute     type     Description\n============= ======== ===============================\nguid          int      Unique ID\ntitle         str      Title\ndescription   str      Description\nprinter       str      Printer name\naddress       tuple    Address of the CUPS server\ntimestamp     datetime Published date\n============= ======== ===============================\n\nIt is possible to define a list of event types on which the callback is binded:\n\n.. code-block:: python\n\n    import cups\n    from cups_notify import Subscriber, event\n\n    def my_callback(evt):\n        print(evt.title, evt.description)\n\n    # Create a new subscriber\n    sub = Subscriber(cups.Connection())\n\n    # Subscribe the callback\n    sub.subscribe(my_callback, [event.CUPS_EVT_JOB_CREATED,\n                                event.CUPS_EVT_JOB_COMPLETED,\n                                event.CUPS_EVT_JOB_STOPPED])\n\nThe list of existing event types is defined below:\n\n=============================== ==============================================================================\nType                            Description\n=============================== ==============================================================================\nCUPS_EVT_JOB_COMPLETED          Event when the job is completed\nCUPS_EVT_JOB_CONFIG_CHANGED     Event when the job is changed\nCUPS_EVT_JOB_CREATED            Event when a job is created\nCUPS_EVT_JOB_PROGRESS           Event for job progress\nCUPS_EVT_JOB_STATE_CHANGED      Event when the job-state changes\nCUPS_EVT_JOB_STOPPED            Event when the job is stopped\nCUPS_EVT_PRINTER_ADDED          Event when a printer is added\nCUPS_EVT_PRINTER_CHANGED        Event when a printer is changed\nCUPS_EVT_PRINTER_CONFIG_CHANGED Event when a printer's configuration is changed\nCUPS_EVT_PRINTER_DELETED        Event when a printer is deleted\nCUPS_EVT_PRINTER_MODIFIED       Event when a printer is modified\nCUPS_EVT_PRINTER_STATE_CHANGED  Event when the printer-state changes\nCUPS_EVT_PRINTER_STOPPED        Event when a printer is stopped\nCUPS_EVT_SERVER_AUDIT           Event when a bad request, security error, or authentication error occurs\nCUPS_EVT_SERVER_RESTARTED       Event when the server is restarted\nCUPS_EVT_SERVER_STARTED         Event when the server is initially started\nCUPS_EVT_SERVER_STOPPED         Event when the server is shutdown\n=============================== ==============================================================================\n\nIf the CUPS server is not running on the same computer as the subscriber application\none, the local IP address (same network than the CUPS server) have to be provided to\nthe subscriber class:\n\n.. code-block:: python\n\n    # Create a CUPS connection\n    cups.setServer('198.20.34.1')\n    conn = cups.Connection()\n\n    # Create a new subscriber\n    sub = Subscriber(conn, '198.20.34.26')\n\n\nRun\n---\n\nA simple listener can be started by typing the following command line::\n\n     $\u003e pycups-notify\n\n\n.. |PythonVersions| image:: https://img.shields.io/badge/python-2.7+ / 3.5+-red.svg\n   :target: https://www.python.org/downloads\n   :alt: Python 2.7+/3.5+\n\n.. |PypiPackage| image:: https://badge.fury.io/py/pycups-notify.svg\n   :target: https://pypi.org/project/pycups-notify\n   :alt: PyPi package\n\n.. |Downloads| image:: https://img.shields.io/pypi/dm/pycups-notify?color=purple\n   :target: https://pypi.org/project/pycups-notify\n   :alt: PyPi downloads\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanxuae%2Fpycups-notify","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanxuae%2Fpycups-notify","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanxuae%2Fpycups-notify/lists"}