The easy way to send notifications

Overview

Full logo

Build StatusCodecov image PyPi version Supported Python versions License Status Docker build RTD Paypal Downloads Twitter Follow Code style: black Dependabot Status pre-commit

See changelog for recent changes

Got an app or service and you want to enable your users to use notifications with their provider of choice? Working on a script and you want to receive notification based on its output? You don't need to implement a solution yourself, or use individual provider libs. A one stop shop for all notification providers with a unified and simple interface.

Supported providers

Pushover, SimplePush, Slack, Gmail, Email (SMTP), Telegram, Gitter, Pushbullet, Join, Hipchat, Zulip, Twilio, Pagerduty, Mailgun, PopcornNotify, StatusPage.io

Advantages

  • Spend your precious time on your own code base, instead of chasing down 3rd party provider APIs. That's what we're here for!
  • With a minimal set of well known and stable dependencies (requests, jsonschema and click) you're better off than installing 3rd party SDKs.
  • A unified interface means that you already support any new providers that will be added, no more work needed!
  • Thorough testing means protection against any breaking API changes. We make sure your code your notifications will always get delivered!

Installation

Via pip:

$ pip install notifiers

Via homebrew:

$ brew install notifiers

Or Dockerhub:

$ docker pull liiight/notifiers

Basic Usage

>>> from notifiers import get_notifier
>>> p = get_notifier('pushover')
>>> p.required
{'required': ['user', 'message', 'token']}
>>> p.notify(user='foo', token='bar', message='test')
<NotificationResponse,provider=Pushover,status=Success>

Or:

>>> from notifiers import notify
>>> notify('pushover', user='foo', token='bar', message='test')
<NotificationResponse,provider=Pushover,status=Success>

From CLI

$ notifiers pushover notify --user foo --token baz "This is so easy!"

As a logger

Directly add to your existing stdlib logging:

>>> import logging
>>> from notifiers.logging import NotificationHandler

>>> log = logging.getLogger(__name__)

>>> defaults = {
        'token': 'foo',
        'user': 'bar'
    }
>>> hdlr = NotificationHandler('pushover', defaults=defaults)
>>> hdlr.setLevel(logging.ERROR)

>>> log.addHandler(hdlr)
>>> log.error('And just like that, you get notified about all your errors!')

Mentions

Road map

  • Many more providers!
  • Low level providers (Amazon SNS, Google FCM, OS Toast messages) via extra dependencies

See Docs for more information

Donations

If you like this and want to buy me a cup of coffee, please click the donation button above or click this link

Code of Conduct

Everyone interacting in the Notifiers project's codebases, issue trackers and chat rooms is expected to follow the PyPA Code of Conduct.

Comments
  • SendGrid integration

    SendGrid integration

    Adds a 'sendgrid' provider and accompanying tests. The SG API is very complex, even when it comes to setting the 'from' and 'to' on a message, so I set it up for those to allow plain strings instead of the JSON objects they usually require. Tested the schema pretty in depth as well. The CLI also is working for me.

    I noticed an issue in how json schema errors are rendered during this. It only renders the top-level error in the exception, not the full path to the variable in question. Other APIs seem to be pretty simple, so maybe this isn't a big deal for them, but SG is very intricate and tracking down errors without the schema path to the problem variable is a pain. I'll log a separate ticket to fix this (it doesn't look like it'll be that hard).

    opened by mostfunkyduck 12
  • add Dockerfile

    add Dockerfile

    changes

    I've added a fairly basic Dockerfile that is based on python:alpine3.6

    usage

    1. docker build .
    2. docker run <image> <notifiers command args>

    Ideally the image would be uploaded to docker hub via a automated build, but travis ci would also work.

    I don't see the workflow to publish notifiers to pypi, so if it makes more sense to build from source I'm happy to update the PR with:

    FROM python:alpine3.6
    
    ADD . /notifiers
    WORKDIR /notifiers
    
    RUN pip install --upgrade pip setuptools
    RUN pip install -e .
    RUN pip install -r requirements.txt
    
    ENTRYPOINT ["notifiers"]
    

    Thanks! Jordan

    opened by JordanSussman 11
  • Add homebrew installation method instruction

    Add homebrew installation method instruction

    Closes #78

    I just used the GitHub's release tarball first instead of the PyPI's tarball to make this PR to the homebrew-core repo: https://github.com/Homebrew/homebrew-core/pull/44926

    But for the next version, please see my comment in #308 so that we can use the PyPI's tarball instead the one in GitHub.

    PS: Please wait for the PR to the homebrew-core to be merged.

    opened by exequiel09 9
  • pip install notifiers fails with FileNotFoundError

    pip install notifiers fails with FileNotFoundError

    Describe the bug Attempting to install notifiers via pip results in a file not found error - raised whilst attempting to access README.MD from setup.py:

    command: /usr/local/bin/python -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-pv6vufd1/notifiers/setup.py'"'"'; __file__='"'"'/tmp/pip-install-pv6vufd1/notifiers/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base pip-egg-info
             cwd: /tmp/pip-install-pv6vufd1/notifiers/
        Complete output (11 lines):
        Traceback (most recent call last):
          File "<string>", line 1, in <module>
          File "/tmp/pip-install-pv6vufd1/notifiers/setup.py", line 5, in <module>
            long_description = Path("README.MD").read_text()
          File "/usr/local/lib/python3.7/pathlib.py", line 1206, in read_text
            with self.open(mode='r', encoding=encoding, errors=errors) as f:
          File "/usr/local/lib/python3.7/pathlib.py", line 1193, in open
            opener=self._opener)
          File "/usr/local/lib/python3.7/pathlib.py", line 1046, in _opener
            return self._accessor.open(self, flags, mode)
        FileNotFoundError: [Errno 2] No such file or directory: 'README.MD'
    

    To Reproduce

    Attempt to install notitifiers using pip

    Expected behavior That notifiers should successfully install

    Additional context Python version: 3.7 OS: Alpine (during build of docker container)

    Note

    I checked inside the archive for notifiers on pypi, and there is no README.MD in the same directory as setup.py.

    bug 
    opened by classic-paul 9
  • EMAIL provider - stalling connect

    EMAIL provider - stalling connect

    Describe the bug Various SMTP(EMAIL) providers, even local happen to stall in SMTP server connection phase when interacted by with notifiers. Could be down to/linked to or caused underlying SMTP library issue reported earlier (https://bugs.python.org/issue37572).

    It was made sure not underlying, ostensible networking culprit is in way. The transport flow path is reported open by e.g. nmap.

    To Reproduce On pristine runtime with freshly installed notifiers via cli, with dbg traces activated in notifiers:

    
    # notifiers email notify
            --from [email protected]
            --to   [email protected]
            --subject "TEST"
            --host smtp.mail.de
            --port 465
            --username <YOUR_USR>@mail.de
            --password <YOUR_PW> 
            "SOME"
    

    Does end in stalling at: [...] connect: ('smtp.mail.de', 465) connect: to ('smtp.mail.de', 465) None

    Expected behavior Swift delivery of msg, without hanging/stalling.

    Additional context Python version: 3.6-3.7 OS: latest fedora/ubuntu

    bug help wanted 
    opened by cherusk 9
  • 'from' can't be used as a keyword argument in the email notifier.

    'from' can't be used as a keyword argument in the email notifier.

    Trying to use the optional 'from' argument as a keyword argument to the notify method for the email notifier is a syntax error when used from code (it works just fine from the CLI interface).

    Maybe 'from' should be renamed to avoid the problem. A work-around is calling notify with dictionary unpacking. But that should probably be documented.

    >>> from notifiers import get_notfier >>> p = get_notifier('email') <Provider:[Email]> >>> p.notify(to='[email protected]', message='Will not work', from='[email protected]')

    File "<stdin>", line 1 p.notify(to='[email protected]', message='Will not work', from='[email protected]') ...............................................................^ SyntaxError: invalid syntax

    >>> p.notify(**{'to':'[email protected]', 'message':'Will work', 'from':'[email protected]'}) <Response,provider=Email,status=Success>

    bug 
    opened by astoddard 8
  • Bump pytest from 4.6.3 to 5.0.1

    Bump pytest from 4.6.3 to 5.0.1

    Bumps pytest from 4.6.3 to 5.0.1.

    Changelog

    Sourced from pytest's changelog.

    pytest 5.0.1 (2019-07-04)

    Bug Fixes

    • #5479: Improve quoting in raises match failure message.
    • #5523: Fixed using multiple short options together in the command-line (for example -vs) in Python 3.8+.
    • #5547: --step-wise now handles xfail(strict=True) markers properly.

    Improved Documentation

    • #5517: Improve "Declaring new hooks" section in chapter "Writing Plugins"

    pytest 5.0.0 (2019-06-28)

    Important

    This release is a Python3.5+ only release.

    For more details, see our Python 2.7 and 3.4 support plan.

    Removals

    • #1149: Pytest no longer accepts prefixes of command-line arguments, for example typing pytest --doctest-mod inplace of --doctest-modules. This was previously allowed where the ArgumentParser thought it was unambiguous, but this could be incorrect due to delayed parsing of options for plugins. See for example issues #1149, #3413, and #4009.

    • #5402: PytestDeprecationWarning are now errors by default.

      Following our plan to remove deprecated features with as little disruption as possible, all warnings of type PytestDeprecationWarning now generate errors instead of warning messages.

      The affected features will be effectively removed in pytest 5.1, so please consult the Deprecations and Removals section in the docs for directions on how to update existing code.

      In the pytest 5.0.X series, it is possible to change the errors back into warnings as a stop gap measure by adding this to your pytest.ini file:

      [pytest]
      filterwarnings =
          ignore::pytest.PytestDeprecationWarning
      

      But this will stop working when pytest 5.1 is released.

      If you have concerns about the removal of a specific feature, please add a comment to #5402.

    • #5412: ExceptionInfo objects (returned by pytest.raises) now have the same str representation as repr, which avoids some confusion when users use print(e) to inspect the object.

    Deprecations

    ... (truncated)
    Commits
    • bb29f31 Preparing release version 5.0.1
    • b1928f8 Handle xfail(strict=True) properly in --step-wise mode (#5555)
    • 8651d88 Handle xfail(strict=True) properly in --step-wise mode
    • 95824c5 Improve quoting in raises match failure message (#5553)
    • caa08eb Improve quoting in raises match failure message
    • b08ae44 Add docs about Tidelift and OpenCollective (#5527)
    • 776a632 Merge pull request #5540 from bazcrown/yml2yaml
    • d74a975 remove documentation about setuptools integration Refs #5534 Fi… (#5546)
    • 2b9522e remove documentation about setuptools integration Refs #5534
    • 528ee3e Add upcoming trainings (#5544)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot ignore this [patch|minor|major] version will close this PR and stop Dependabot creating any more for this minor/major version (unless you reopen the PR or upgrade to it). To ignore the version in this PR you can just close it
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Automerge options (never/patch/minor, and dev/runtime dependencies)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)

    Finally, you can contact us by mentioning @dependabot.

    dependencies 
    opened by dependabot-preview[bot] 7
  • [Security] Bump urllib3 from 1.23 to 1.24.2

    [Security] Bump urllib3 from 1.23 to 1.24.2

    Bumps urllib3 from 1.23 to 1.24.2. This update includes security fixes.

    Vulnerabilities fixed

    Sourced from The GitHub Security Advisory Database.

    High severity vulnerability that affects urllib3 The urllib3 library before 1.24.2 for Python mishandles certain cases where the desired set of CA certificates is different from the OS store of CA certificates, which results in SSL connections succeeding in situations where a verification failure is the correct outcome. This is related to use of the ssl_context, ca_certs, or ca_certs_dir argument.

    Affected versions: < 1.24.2

    Changelog

    Sourced from urllib3's changelog.

    1.24.2 (2019-04-17)

    • Don't load system certificates by default when any other ca_certs, ca_certs_dir or ssl_context parameters are specified.
    • Remove Authorization header regardless of case when redirecting to cross-site. (Issue #1510)
    • Add support for IPv6 addresses in subjectAltName section of certificates. (Issue #1269)

    1.24.1 (2018-11-02)

    • Remove quadratic behavior within GzipDecoder.decompress() (Issue #1467)
    • Restored functionality of ciphers parameter for create_urllib3_context(). (Issue #1462)

    1.24 (2018-10-16)

    • Allow key_server_hostname to be specified when initializing a PoolManager to allow custom SNI to be overridden. (Pull #1449)
    • Test against Python 3.7 on AppVeyor. (Pull #1453)
    • Early-out ipv6 checks when running on App Engine. (Pull #1450)
    • Change ambiguous description of backoff_factor (Pull #1436)
    • Add ability to handle multiple Content-Encodings (Issue #1441 and Pull #1442)
    • Skip DNS names that can't be idna-decoded when using pyOpenSSL (Issue #1405).
    • Add a server_hostname parameter to HTTPSConnection which allows for overriding the SNI hostname sent in the handshake. (Pull #1397)
    • Drop support for EOL Python 2.6 (Pull #1429 and Pull #1430)
    • Fixed bug where responses with header Content-Type: message/* erroneously raised HeaderParsingError, resulting in a warning being logged. (Pull #1439)
    • Move urllib3 to src/urllib3 (Pull #1409)
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot ignore this [patch|minor|major] version will close this PR and stop Dependabot creating any more for this minor/major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Automerge options (never/patch/minor, and dev/runtime dependencies)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)

    Finally, you can contact us by mentioning @dependabot.

    dependencies security 
    opened by dependabot-preview[bot] 7
  • Email Attachments

    Email Attachments

    Additions:

    • Updated Response to include the errors as well as status and provider.
    • Added attachments functionality
      • Schema
      • _add_attachments(email, data) function
      • added attachment test
    • Address #91
    opened by grabear 7
  • notifiers 1.3.2 doesn't run

    notifiers 1.3.2 doesn't run

    Describe the bug notifiers entry point does not run

    To Reproduce

    $ pip install notifiers==1.3.2
    $ notifiers 
    Traceback (most recent call last):
      File "/usr/local/bin/notifiers", line 5, in <module>
        from notifiers_cli.core import entry_point
    ModuleNotFoundError: No module named 'notifiers_cli'
    

    Expected behavior Not to error

    Additional context Python version: 3.10 OS: any

    bug 
    opened by dtrodrigues 6
  • Cannot install notifiers in a conda activated Python environment (Windows & Ubuntu)

    Cannot install notifiers in a conda activated Python environment (Windows & Ubuntu)

    Describe the bug Notifiers fails to install in a conda environment due to an issue with this error raised:

    Installing collected packages: idna, urllib3, rfc3987, certifi, click, notifiers
      Found existing installation: idna 2.8
        Uninstalling idna-2.8:
          Successfully uninstalled idna-2.8
      Found existing installation: urllib3 1.24.1
        Uninstalling urllib3-1.24.1:
          Successfully uninstalled urllib3-1.24.1
      Found existing installation: certifi 2019.3.9
    Cannot uninstall 'certifi'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
    
    

    To Reproduce run pip install notifiers in a conda activated Python environment.

    Expected behaviour Expected notifiers to install without any issue

    Additional context Python version: 3.7.3 & 3.6.7 OS: Windows 10 & Ubuntu 18.04

    help wanted Hacktoberfest 
    opened by PyDataBlog 6
  • Bump certifi from 2021.10.8 to 2022.12.7

    Bump certifi from 2021.10.8 to 2022.12.7

    Bumps certifi from 2021.10.8 to 2022.12.7.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the Security Alerts page.
    dependencies 
    opened by dependabot[bot] 0
  • Bump jsonschema from 4.4.0 to 4.8.0

    Bump jsonschema from 4.4.0 to 4.8.0

    Bumps jsonschema from 4.4.0 to 4.8.0.

    Release notes

    Sourced from jsonschema's releases.

    v4.8.0

    Full Changelog: https://github.com/python-jsonschema/jsonschema/compare/v4.7.2...v4.8.0

    v4.7.2

    Full Changelog: https://github.com/python-jsonschema/jsonschema/compare/v4.7.1...v4.7.2

    v4.7.1

    Full Changelog: https://github.com/python-jsonschema/jsonschema/compare/v4.7.0...v4.7.1

    v4.7.0

    What's Changed

    Full Changelog: https://github.com/python-jsonschema/jsonschema/compare/v4.6.2...v4.7.0

    v4.6.2

    What's Changed

    New Contributors

    Full Changelog: https://github.com/python-jsonschema/jsonschema/compare/v4.6.1...v4.6.2

    v4.6.1

    What's Changed

    Full Changelog: https://github.com/python-jsonschema/jsonschema/compare/v4.6.0...v4.6.1

    v4.6.0

    What's Changed

    New Contributors

    Full Changelog: https://github.com/python-jsonschema/jsonschema/compare/v4.5.1...v4.6.0

    v4.5.1

    Full Changelog: https://github.com/python-jsonschema/jsonschema/compare/v4.5.0...v4.5.1

    ... (truncated)

    Changelog

    Sourced from jsonschema's changelog.

    v4.8.0

    • best_match no longer traverses into anyOf and oneOf when all of the errors within them seem equally applicable. This should lead to clearer error messages in some cases where no branches were matched.

    v4.7.2

    • Also have best_match handle cases where the type validator is an array.

    v4.7.1

    • Minor tweak of the PyPI hyperlink names

    v4.7.0

    • Enhance best_match to prefer errors from branches of the schema which match the instance's type (#728)

    v4.6.2

    • Fix a number of minor typos in docstrings, mostly private ones (#969)

    v4.6.1

    • Gut the (incomplete) implementation of recursiveRef on draft 2019. It needs completing, but for now can lead to recursion errors (e.g. #847).

    v4.6.0

    • Fix unevaluatedProperties and unevaluatedItems for types they should ignore (#949)
    • jsonschema now uses hatch <https://hatch.pypa.io/>_ for its build process. This should be completely transparent to end-users (and only matters to contributors).

    v4.5.1

    • Revert changes to $dynamicRef which caused a performance regression in v4.5.0

    ... (truncated)

    Commits
    • 5891be0 v4.8.0 -> CHANGELOG
    • bd5ea73 Don't let best_match traverse into applicators with equally bad sub-errors.
    • 8e090fb Micro-optimize an oft-called lambda to a methodcaller call.
    • e9e9019 Just allow passing extra args directly to perf from tox.
    • e0ebb6d Minor tweaks to differentiate between perf tox envs.
    • 3ca05dc Merge commit '999ff68a38729aaebe8b5b772b789b97dc145820'
    • 999ff68 Squashed 'json/' changes from 69acf529..fd9bcfbd
    • 72c3200 Fix best_match's type matching when it's an array.
    • 8819f46 Minor case correction for PyPI links.
    • c09578b Squashed 'json/' changes from b7d13f4b..69acf529
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Bump sphinx from 5.0.2 to 5.1.0

    Bump sphinx from 5.0.2 to 5.1.0

    Bumps sphinx from 5.0.2 to 5.1.0.

    Release notes

    Sourced from sphinx's releases.

    v5.1.0

    Changelog: https://www.sphinx-doc.org/en/master/changes.html

    Changelog

    Sourced from sphinx's changelog.

    Release 5.1.0 (released Jul 24, 2022)

    Dependencies

    • #10656: Support Docutils 0.19_. Patch by Adam Turner.

    .. _Docutils 0.19: https://docutils.sourceforge.io/RELEASE-NOTES.html#release-0-19-2022-07-05

    Deprecated

    • #10467: Deprecated sphinx.util.stemmer in favour of snowballstemmer. Patch by Adam Turner.
    • #9856: Deprecated sphinx.ext.napoleon.iterators.

    Features added

    • #10444: html theme: Allow specifying multiple CSS files through the stylesheet setting in theme.conf or by setting html_style to an iterable of strings.
    • #10366: std domain: Add support for emphasising placeholders in :rst:dir:option directives through a new :confval:option_emphasise_placeholders configuration option.
    • #10439: std domain: Use the repr of some variables when displaying warnings, making whitespace issues easier to identify.
    • #10571: quickstart: Reduce content in the generated conf.py file. Patch by Pradyun Gedam.
    • #10648: LaTeX: CSS-named-alike additional :ref:'sphinxsetup' <latexsphinxsetup> keys allow to configure four separate border-widths, four paddings, four corner radii, a shadow (possibly inset), colours for border, background, shadow for each of the code-block, topic, attention, caution, danger, error and warning directives.
    • #10655: LaTeX: Explain non-standard encoding in LatinRules.xdy
    • #10599: HTML Theme: Wrap consecutive footnotes in an <aside> element when using Docutils 0.18 or later, to allow for easier styling. This matches the behaviour introduced in Docutils 0.19. Patch by Adam Turner.
    • #10518: config: Add include_patterns as the opposite of exclude_patterns. Patch by Adam Turner.

    Bugs fixed

    • #10594: HTML Theme: field term colons are doubled if using Docutils 0.18+
    • #10596: Build failure if Docutils version is 0.18 (not 0.18.1) due to missing Node.findall()
    • #10506: LaTeX: build error if highlighting inline code role in figure caption (refs: #10251)
    • #10634: Make -P (pdb) option work better with exceptions triggered from events

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Bump requests from 2.27.1 to 2.28.1

    Bump requests from 2.27.1 to 2.28.1

    Bumps requests from 2.27.1 to 2.28.1.

    Release notes

    Sourced from requests's releases.

    v2.28.1

    2.28.1 (2022-06-29)

    Improvements

    • Speed optimization in iter_content with transition to yield from. (#6170)

    Dependencies

    • Added support for chardet 5.0.0 (#6179)
    • Added support for charset-normalizer 2.1.0 (#6169)

    New Contributors

    Full Changelog: https://github.com/psf/requests/blob/main/HISTORY.md#2281-2022-06-29

    v2.28.0

    2.28.0 (2022-06-09)

    Deprecations

    • ⚠️ Requests has officially dropped support for Python 2.7. ⚠️ (#6091)
    • Requests has officially dropped support for Python 3.6 (including pypy3). (#6091)

    Improvements

    • Wrap JSON parsing issues in Request's JSONDecodeError for payloads without an encoding to make json() API consistent. (#6097)
    • Parse header components consistently, raising an InvalidHeader error in all invalid cases. (#6154)
    • Added provisional 3.11 support with current beta build. (#6155)
    • Requests got a makeover and we decided to paint it black. (#6095)

    Bugfixes

    • Fixed bug where setting CURL_CA_BUNDLE to an empty string would disable cert verification. All Requests 2.x versions before 2.28.0 are affected. (#6074)
    • Fixed urllib3 exception leak, wrapping urllib3.exceptions.SSLError with requests.exceptions.SSLError for content and iter_content. (#6057)
    • Fixed issue where invalid Windows registry entires caused proxy resolution to raise an exception rather than ignoring the entry. (#6149)
    • Fixed issue where entire payload could be included in the error message for JSONDecodeError. (#6079)

    New Contributors

    ... (truncated)

    Changelog

    Sourced from requests's changelog.

    2.28.1 (2022-06-29)

    Improvements

    • Speed optimization in iter_content with transition to yield from. (#6170)

    Dependencies

    • Added support for chardet 5.0.0 (#6179)
    • Added support for charset-normalizer 2.1.0 (#6169)

    2.28.0 (2022-06-09)

    Deprecations

    • ⚠️ Requests has officially dropped support for Python 2.7. ⚠️ (#6091)
    • Requests has officially dropped support for Python 3.6 (including pypy3.6). (#6091)

    Improvements

    • Wrap JSON parsing issues in Request's JSONDecodeError for payloads without an encoding to make json() API consistent. (#6097)
    • Parse header components consistently, raising an InvalidHeader error in all invalid cases. (#6154)
    • Added provisional 3.11 support with current beta build. (#6155)
    • Requests got a makeover and we decided to paint it black. (#6095)

    Bugfixes

    • Fixed bug where setting CURL_CA_BUNDLE to an empty string would disable cert verification. All Requests 2.x versions before 2.28.0 are affected. (#6074)
    • Fixed urllib3 exception leak, wrapping urllib3.exceptions.SSLError with requests.exceptions.SSLError for content and iter_content. (#6057)
    • Fixed issue where invalid Windows registry entires caused proxy resolution to raise an exception rather than ignoring the entry. (#6149)
    • Fixed issue where entire payload could be included in the error message for JSONDecodeError. (#6036)
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
Releases(1.3.0)
  • 1.3.0(Aug 23, 2021)

  • 1.2.0(Jul 25, 2019)

    • Added ability to cancel login to SMTP/GMAIL if credentials are used (#210, #266)
    • Loosened dependencies (#209, #271)
    • Added mimetype guessing for email (#239, #272)
    Source code(tar.gz)
    Source code(zip)
  • v0.6.4(Jan 18, 2018)

    • Major refactor, reintroduced provider resources:
    >>> from notifiers import get_notifier
    >>> telegram = get_notifier('telegram')
    >>> telegram.resources
    ['updates']
    >>> telegram.updates
    <ProviderResource,provider=telegram,resource=updates>
    >>> telegram.updates()
    Traceback (most recent call last):
      File "<input>", line 1, in <module>
      File "/Users/orcarmi/PycharmProjects/notifiers/notifiers/core.py", line 278, in __call__
        data = self._process_data(**kwargs)
      File "/Users/orcarmi/PycharmProjects/notifiers/notifiers/core.py", line 204, in _process_data
        self._validate_data(data, validator)
      File "/Users/orcarmi/PycharmProjects/notifiers/notifiers/core.py", line 175, in _validate_data
        raise BadArguments(validation_error=msg, provider=self.name, data=data)
    notifiers.exceptions.BadArguments: Error with sent data: 'token' is a required property
    >>> telegram.updates(token='foo')
    
    • Major CLI refactor, validates command options via type (as opposed to keyword=value as it was, which was always string. Yuck)
    $ notifiers --help
    Usage: notifiers [OPTIONS] COMMAND [ARGS]...
    
      Notifiers CLI operation
    
    Options:
      --version          Show the version and exit.
      --env-prefix TEXT  Set a custom prefix for env vars usage
      --help             Show this message and exit.
    
    Commands:
      email       Options for 'email'
      gitter      Options for 'gitter'
      gmail       Options for 'gmail'
      hipchat     Options for 'hipchat'
      join        Options for 'join'
      providers   Shows all available providers
      pushbullet  Options for 'pushbullet'
      pushover    Options for 'pushover'
      simplepush  Options for 'simplepush'
      slack       Options for 'slack'
      telegram    Options for 'telegram'
      zulip       Options for 'zulip'
    
    $ notifiers telegram notify --help
    Usage: notifiers telegram notify [OPTIONS] [MESSAGE]
    
      Send Telegram notifications
    
    Options:
      --token TEXT                    Bot token
      --chat-id TEXT
      --parse-mode [markdown|html]    Send markdown or html, if you want telegram
                                      apps to show bold, italic, fixed-width text
                                      or inline urls in your bot's message.
      --disable-web-page-preview / --no-disable-web-page-preview
                                      Disables link previews for links in this
                                      message
      --disable-notification / --no-disable-notification
                                      Sends the message silently. users will
                                      receive a notification with no sound.
      --reply-to-message-id INTEGER   If the message is a reply, id of the
                                      original message
      --help                          Show this message and exit.
    

    See docs for details.

    Source code(tar.gz)
    Source code(zip)
  • v0.6.2(Dec 31, 2017)

  • v0.6.1(Dec 28, 2017)

    New providers

    • Zulip (https://github.com/liiight/notifiers/issues/61)

    Improvements

    • Friendlier schema error message on complex schema errors (https://github.com/liiight/notifiers/issues/62)
    • Added title and events to simplepush notifier (#60)
    • Some refactoring
    Source code(tar.gz)
    Source code(zip)
Owner
Or Carmi
Building and breaking stuff
Or Carmi
Multi-processing capable print-like logger for Python

MPLogger Multi-processing capable print-like logger for Python Requirements and Installation Python 3.8+ is required Pip pip install mplogger Manual P

Eötvös Loránd University Department of Digital Humanities 1 Jan 28, 2022
A basic logging library for Python.

log.py 📖 About: A basic logging library for Python with the capability to: save to files. have custom formats. have custom levels. be used instantiat

Sebastiaan Bij 1 Jan 19, 2022
The easy way to send notifications

See changelog for recent changes Got an app or service and you want to enable your users to use notifications with their provider of choice? Working o

Or Carmi 2.4k Dec 25, 2022
A watchdog and logger to Discord for hosting ScPrime servers.

ScpDog A watchdog and logger to Discord for hosting ScPrime servers. Designed to work on Linux servers. This is only capable of sending the logs from

Keagan Landfried 3 Jan 10, 2022
A Python library that tees the standard output & standard error from the current process to files on disk, while preserving terminal semantics

A Python library that tees the standard output & standard error from the current process to files on disk, while preserving terminal semantics (so breakpoint(), etc work as normal)

Greg Brockman 7 Nov 30, 2022
Beautifully colored, quick and simple Python logging

Python Quick Logging | QLogging Beautifully colored, quick and simple Python logging. This logger is based on Python logging package Screenshots: Term

45 Sep 25, 2022
Token Logger with python

Oxy Token Stealer Features Grabs discord tokens Grabs chrome passwords Grabs edge passwords Nothing else, I don't feel like releasing full on malware

oxy 1 Feb 12, 2022
A demo of Prometheus+Grafana for monitoring an ML model served with FastAPI.

ml-monitoring Jeremy Jordan This repository provides an example setup for monitoring an ML system deployed on Kubernetes.

Jeremy Jordan 176 Jan 01, 2023
Greppin' Logs: Leveling Up Log Analysis

This repo contains sample code and example datasets from Jon Stewart and Noah Rubin's presentation at the 2021 SANS DFIR Summit titled Greppin' Logs. The talk was centered around the idea that Forens

Stroz Friedberg 20 Sep 14, 2022
Robust and effective logging for Python 2 and 3.

Robust and effective logging for Python 2 and 3.

Chris Hager 1k Jan 04, 2023
Monitor creation, deletion and changes to LDAP objects live during your pentest or system administration!

LDAP Monitor Monitor creation, deletion and changes to LDAP objects live during your pentest or system administration! With this tool you can quickly

Podalirius 500 Dec 28, 2022
A new kind of Progress Bar, with real time throughput, eta and very cool animations!

alive-progress :) A new kind of Progress Bar, with real-time throughput, eta and very cool animations! Ever found yourself in a remote ssh session, do

Rogério Sampaio de Almeida 4k Dec 30, 2022
Integrates a UPS monitored by NUT into OctoPrint

OctoPrint UPS This OctoPrint plugin interfaces with a UPS monitored by NUT (Network UPS Tools). Requirements NUT must be configured by the user. This

Shawn Bruce 11 Jul 05, 2022
Logging system for the TPC software.

tpc_logger Logging system for the TPC software. The TPC Logger class provides a singleton for logging information within C++ code or in the python API

UC Davis Machine Learning 1 Jan 10, 2022
Monitor and log Network and Disks statistics in MegaBytes per second.

iometrics Monitor and log Network and Disks statistics in MegaBytes per second. Install pip install iometrics Usage Pytorch-lightning integration from

Leo Gallucci 17 May 03, 2022
Python script to scan log files/system for unauthorized access around system

checkLogs Python script to scan log files/system for unauthorized access around Linux systems Table of contents General info Getting started Usage Gen

James Kelly 1 Feb 25, 2022
A python logging library

logi v1.3.4 instolation the lib works on python 3x versions pip install logi examples import import logi log = logger(path='C:/file path', timestamp=T

2 Jul 06, 2022
Command-line tool that instantly fetches Stack Overflow results when an exception is thrown

rebound Rebound is a command-line tool that instantly fetches Stack Overflow results when an exception is thrown. Just use the rebound command to exec

Jonathan Shobrook 3.9k Jan 03, 2023
Fancy console logger and wise assistant within your python projects

Fancy console logger and wise assistant within your python projects. Made to save tons of hours for common routines.

BoB 5 Apr 01, 2022
Python logging made (stupidly) simple

Loguru is a library which aims to bring enjoyable logging in Python. Did you ever feel lazy about configuring a logger and used print() instead?... I

13.7k Jan 02, 2023