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
Send push notifications to mobile devices through GCM or APNS in Django.

django-push-notifications A minimal Django app that implements Device models that can send messages through APNS, FCM/GCM and WNS. The app implements

Jazzband 2k Dec 26, 2022
These scripts send notifications to a Webex space when a new IP is banned by Expressway, and allow to request more info or change the ban status

Spam Call and Toll Fraud Mitigation Cisco Expressway release X14 is able to mitigate spam calls and toll fraud attempts by jailing the spam IP address

Luca Pellegrini 6 Aug 5, 2022
Send Informative, Concise Slack Notifications With Minimal Effort

slack-templates Send Informative, Concise Slack Notifications With Minimal Effort slack-templates Slack Integration Available Templates Usage Report t

null 9 Nov 3, 2022
ClamNotif: A tool to send you ClamAV notifications

A tool to forward notifications to different recipients categorised by two severity levels of the regular health reports produced by `clamscan` bundled with the ClamAV antivirus engine.

PiSoft Company Ltd. 1 Nov 15, 2021
A self-bot for discord, written in Python, which will send you notifications to your desktop if it detects an intruder on your discord server

A self-bot for discord, written in Python, which will send you notifications to your desktop if it detects an intruder on your discord server

LevPrav 1 Jan 11, 2022
A Python wrapper around the Pushbullet API to send different types of push notifications to your phone or/and computer.

pushbullet-python A Python wrapper around the Pushbullet API to send different types of push notifications to your phone or/and computer. Installation

Janu Lingeswaran 1 Jan 14, 2022
A simple python bot that serves to send some notifications about GitHub events to Slack.

github alerts slack bot ?? What is it? ?? This is a simple bot that serves to send some notifications about GitHub events to Slack channels. These are

Jackson Alves 10 Dec 10, 2022
Send notifications created in Frappe or ERPNext as push notication via Firebase Cloud Message(FCM)

FCM Notification for ERPNext Send notifications created in Frappe or ERPNext as push notication via Firebase Cloud Message(FCM) Steps to use the app:

Tridz 9 Nov 14, 2022
A python script that can send notifications to your phone via SMS text

Discord SMS Notification A python script that help you send text message to your phone one of your desire discord channel have a new message. The proj

null 2 Apr 25, 2022
Automatically send commands to send Twitch followers to any Twitch account.

Automatically send commands to send Twitch followers to any Twitch account. You just need to be in a Twitch follow bot Discord server!

Thomas Keig 6 Nov 27, 2022
NetMiaou is an crossplatform hacking tool that can do reverse shells, send files, create an http server or send and receive tcp packet

NetMiaou is an crossplatform hacking tool that can do reverse shells, send files, create an http server or send and receive tcp packet

TRIKKSS 5 Oct 5, 2022
This program will brute force any Instagram account you send it its way given a list of proxies.

Instagram Bruter This program will brute force any Instagram account you send it its way given a list of proxies. NOTICE I'm no longer maintaining thi

null 1 Nov 15, 2021
The best way to send tokens into a specific server, which can be used for discord bots, and some tools..

XTRA420 The simplified version of sending tokens into a server, the basic and fastest way.. When using this, you have the option to use proxies (http)

07v 1 Nov 30, 2021
A python software that can help blind people find things like laptops, phones, etc the same way a guide dog guides a blind person in finding his way.

GuidEye A python software that can help blind people find things like laptops, phones, etc the same way a guide dog guides a blind person in finding h

Munal Jain 0 Aug 9, 2022
A simple scheduler tool that provides desktop notifications about classes and opens their meet links in the browser automatically at the start of the class.

This application provides desktop notifications about classes and opens their meet links in browser automatically at the start of the class.

Anshit 14 Jun 29, 2022
universal messaging & notifications api

Pronounced "boat-shahft" What is botschaft? Botschaft is unified messaging & notifications appliance. Want to text yourself when a long-running task c

Tyler M. Kontra 25 Aug 16, 2022
Receive notifications/alerts on the most recent disclosed CVE's.

Receive notifications on the most recent disclosed CVE's.

Ameliorate 7 Nov 24, 2022
Motion detector, Full body detection, Upper body detection, Cat face detection, Smile detection, Face detection (haar cascade), Silverware detection, Face detection (lbp), and Sending email notifications

Security camera running OpenCV for object and motion detection. The camera will send email with image of any objects it detects. It also runs a server that provides web interface with live stream video.

Peace 10 Jun 30, 2021
Mailrise is an SMTP server that converts the emails it receives into Apprise notifications

Mailrise is an SMTP server that converts the emails it receives into Apprise notifications. The intended use case is as an email relay for a home lab or network. By accepting ordinary email, Mailrise enables Linux servers, Internet of Things devices, surveillance systems, and outdated software to gain access to the full suite of 60+ notification services supported by Apprise, from Matrix to Nextcloud to your desktop or mobile device.

Ryan Young 293 Jan 7, 2023