How to use the apprise.common.NotifyFormat function in apprise

To help you get started, we’ve selected a few apprise examples, based on popular ways it is used in public projects.

Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.

github caronc / apprise / test / test_rest_plugins.py View on Github external
def notify(self, *args, **kwargs):
            # Pretend everything is okay
            return True

    # Load our object
    obj = TestNotification(overflow=OverflowMode.TRUNCATE)
    assert obj is not None

    # Verify that we break the title to a max length of our title_max
    # and that the body remains untouched

    obj.notify_format = NotifyFormat.HTML
    chunks = obj._apply_overflow(body=body, title=title)
    assert len(chunks) == 1

    obj.notify_format = NotifyFormat.MARKDOWN
    chunks = obj._apply_overflow(body=body, title=title)
    assert len(chunks) == 1

    obj.notify_format = NotifyFormat.TEXT
    chunks = obj._apply_overflow(body=body, title=title)
    assert len(chunks) == 1

    # The below line should be read carefully... We're actually testing to see
    # that our title is matched against our body. Behind the scenes, the title
    # was appended to the body. The body was then truncated to the maxlen.
    # The thing is, since the title is so large, all of the body was lost
    # and a good chunk of the title was too.  The message sent will just be a
    # small portion of the title
    assert len(chunks[0].get('body')) == TestNotification.body_maxlen
    assert title[0:TestNotification.body_maxlen] == chunks[0].get('body')
github caronc / apprise / apprise / plugins / NotifyEmail.py View on Github external
"""

    # The default descriptive name associated with the Notification
    service_name = 'E-Mail'

    # The default simple (insecure) protocol
    protocol = 'mailto'

    # The default secure protocol
    secure_protocol = 'mailtos'

    # A URL that takes you to the setup/help of the specific protocol
    setup_url = 'https://github.com/caronc/apprise/wiki/Notify_email'

    # Default Notify Format
    notify_format = NotifyFormat.HTML

    # Default Non-Encryption Port
    default_port = 25

    # Default Secure Port
    default_secure_port = 587

    # Default Secure Mode
    default_secure_mode = SecureMailMode.STARTTLS

    # Default SMTP Timeout (in seconds)
    connect_timeout = 15

    # Define object templates
    templates = (
        '{schema}://{user}:{password}@{host}',
github caronc / apprise / apprise / plugins / NotifyTelegram.py View on Github external
'Content-Type': 'application/json',
        }

        # error tracking (used for function return)
        has_error = False

        url = '%s%s/%s' % (
            self.notify_url,
            self.bot_token,
            'sendMessage'
        )

        payload = {}

        # Prepare Email Message
        if self.notify_format == NotifyFormat.MARKDOWN:
            payload['parse_mode'] = 'MARKDOWN'

        else:
            # Either TEXT or HTML; if TEXT we'll make it HTML
            payload['parse_mode'] = 'HTML'

            # HTML Spaces ( ) and tabs ( ) aren't supported
            # See https://core.telegram.org/bots/api#html-style
            body = re.sub(' ?', ' ', body, re.I)

            # Tabs become 3 spaces
            body = re.sub(' ?', '   ', body, re.I)

            if title:
                # HTML Spaces ( ) and tabs ( ) aren't supported
                # See https://core.telegram.org/bots/api#html-style
github caronc / apprise / apprise / plugins / NotifyMyAndroid.py View on Github external
"""

        headers = {
            'User-Agent': self.app_id,
        }

        # prepare JSON Object
        payload = {
            'apikey': self.apikey,
            'application': self.app_id,
            'event': title,
            'description': body,
            'priority': self.priority,
        }

        if self.notify_format == NotifyFormat.HTML:
            payload['content-type'] = 'text/html'

        if self.devapikey:
            payload['developerkey'] = self.devapikey

        self.logger.debug('NMA POST URL: %s (cert_verify=%r)' % (
            self.notify_url, self.verify_certificate,
        ))
        self.logger.debug('NMA Payload: %s' % str(payload))
        try:
            r = requests.post(
                self.notify_url,
                data=payload,
                headers=headers,
                verify=self.verify_certificate,
            )
github caronc / apprise / apprise / common.py View on Github external
NotifyImageSize.XY_256,
)


class NotifyFormat(object):
    """
    A list of pre-defined text message formats that can be passed via the
    apprise library.
    """
    TEXT = 'text'
    HTML = 'html'
    MARKDOWN = 'markdown'


NOTIFY_FORMATS = (
    NotifyFormat.TEXT,
    NotifyFormat.HTML,
    NotifyFormat.MARKDOWN,
)


class OverflowMode(object):
    """
    A list of pre-defined modes of how to handle the text when it exceeds the
    defined maximum message size.
    """

    # Send the data as is; untouched.  Let the upstream server decide how the
    # content is handled.  Some upstream services might gracefully handle this
    # with expected intentions; others might not.
    UPSTREAM = 'upstream'
github caronc / apprise / apprise / plugins / NotifyMatrix.py View on Github external
def _matrix_webhook_payload(self, body, title='',
                                notify_type=NotifyType.INFO, **kwargs):
        """
        Format the payload for a Matrix based message

        """

        payload = {
            'displayName':
                self.user if self.user else self.app_id,
            'format': 'html',
        }

        if self.notify_format == NotifyFormat.HTML:
            payload['text'] = '{}{}'.format('' if not title else title, body)

        else:  # TEXT or MARKDOWN

            # Ensure our content is escaped
            title = NotifyMatrix.escape_html(title)
            body = NotifyMatrix.escape_html(body)

            payload['text'] = '{}{}'.format(
                '' if not title else '<h4>{}</h4>'.format(title), body)

        return payload
github caronc / apprise / apprise / Apprise.py View on Github external
body_format = self.asset.body_format \
            if body_format is None else body_format

        # Iterate over our loaded plugins
        for server in self.find(tag):
            if status is None:
                # We have at least one server to notify; change status
                # to be a default value of True from now (purely an
                # initialiation at this point)
                status = True

            # If our code reaches here, we either did not define a tag (it
            # was set to None), or we did define a tag and the logic above
            # determined we need to notify the service it's associated with
            if server.notify_format not in conversion_map:
                if body_format == NotifyFormat.MARKDOWN and \
                        server.notify_format == NotifyFormat.HTML:

                    # Apply Markdown
                    conversion_map[server.notify_format] = markdown(body)

                elif body_format == NotifyFormat.TEXT and \
                        server.notify_format == NotifyFormat.HTML:

                    # Basic TEXT to HTML format map; supports keys only
                    re_map = {
                        # Support Ampersand
                        r'&': '&amp;',

                        # Spaces to &nbsp; for formatting purposes since
                        # multiple spaces are treated as one an this may
                        # not be the callers intention
github caronc / apprise / apprise / plugins / NotifyFlock.py View on Github external
def send(self, body, title='', notify_type=NotifyType.INFO, **kwargs):
        """
        Perform Flock Notification
        """

        headers = {
            'User-Agent': self.app_id,
            'Content-Type': 'application/json',
        }

        # error tracking (used for function return)
        has_error = False

        if self.notify_format == NotifyFormat.HTML:
            body = '{}'.format(body)

        else:
            title = NotifyFlock.escape_html(title, whitespace=False)
            body = NotifyFlock.escape_html(body, whitespace=False)

            body = '{}{}'.format(
                '' if not title else '<b>{}</b><br>'.format(title), body)

        payload = {
            'token': self.token,
            'flockml': body,
            'sendAs': {
                'name': self.app_id if not self.user else self.user,
                # A Profile Image is only configured if we're configured to
                # allow it
github caronc / apprise / apprise / plugins / NotifyBase.py View on Github external
response = list()

        # tidy
        title = '' if not title else title.strip()
        body = '' if not body else body.rstrip()

        if overflow is None:
            # default
            overflow = self.overflow_mode

        if self.title_maxlen &lt;= 0 and len(title) &gt; 0:
            if self.notify_format == NotifyFormat.MARKDOWN:
                # Content is appended to body as markdown
                body = '**{}**\r\n{}'.format(title, body)

            elif self.notify_format == NotifyFormat.HTML:
                # Content is appended to body as html
                body = '&lt;{open_tag}&gt;{title}' \
                    '<br>\r\n{body}'.format(
                        open_tag=self.default_html_tag_id,
                        title=self.escape_html(title),
                        close_tag=self.default_html_tag_id,
                        body=body)
            else:
                # Content is appended to body as text
                body = '{}\r\n{}'.format(title, body)

            title = ''

        # Enforce the line count first always
        if self.body_max_line_count &gt; 0:
            # Limit results to just the first 2 line otherwise
github caronc / apprise / apprise / plugins / NotifyRocketChat.py View on Github external
# A URL that takes you to the setup/help of the specific protocol
    setup_url = 'https://github.com/caronc/apprise/wiki/Notify_rocketchat'

    # Allows the user to specify the NotifyImageSize object; this is supported
    # through the webhook
    image_size = NotifyImageSize.XY_128

    # The title is not used
    title_maxlen = 0

    # The maximum size of the message
    body_maxlen = 1000

    # Default to markdown
    notify_format = NotifyFormat.MARKDOWN

    # Define object templates
    templates = (
        '{schema}://{user}:{password}@{host}:{port}/{targets}',
        '{schema}://{user}:{password}@{host}/{targets}',
        '{schema}://{webhook}@{host}',
        '{schema}://{webhook}@{host}:{port}',
        '{schema}://{webhook}@{host}/{targets}',
        '{schema}://{webhook}@{host}:{port}/{targets}',
    )

    # Define our template arguments
    template_tokens = dict(NotifyBase.template_tokens, **{
        'host': {
            'name': _('Hostname'),
            'type': 'string',