Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
sdnotify/sdnotify/__init__.py
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
59 lines (51 sloc)
2.06 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import socket | |
import os | |
import sys | |
__version__ = "0.3.2" | |
# Byte conversion utility for compatibility between | |
# Python 2 and 3. | |
# http://python3porting.com/problems.html#nicer-solutions | |
if sys.version_info < (3,): | |
def _b(x): | |
return x | |
else: | |
import codecs | |
def _b(x): | |
return codecs.latin_1_encode(x)[0] | |
class SystemdNotifier: | |
"""This class holds a connection to the systemd notification socket | |
and can be used to send messages to systemd using its notify method.""" | |
def __init__(self, debug=False): | |
"""Instantiate a new notifier object. This will initiate a connection | |
to the systemd notification socket. | |
Normally this method silently ignores exceptions (for example, if the | |
systemd notification socket is not available) to allow applications to | |
function on non-systemd based systems. However, setting debug=True will | |
cause this method to raise any exceptions generated to the caller, to | |
aid in debugging. | |
""" | |
self.debug = debug | |
try: | |
self.socket = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM) | |
addr = os.getenv('NOTIFY_SOCKET') | |
if addr[0] == '@': | |
addr = '\0' + addr[1:] | |
self.socket.connect(addr) | |
except Exception: | |
self.socket = None | |
if self.debug: | |
raise | |
def notify(self, state): | |
"""Send a notification to systemd. state is a string; see | |
the man page of sd_notify (http://www.freedesktop.org/software/systemd/man/sd_notify.html) | |
for a description of the allowable values. | |
Normally this method silently ignores exceptions (for example, if the | |
systemd notification socket is not available) to allow applications to | |
function on non-systemd based systems. However, setting debug=True will | |
cause this method to raise any exceptions generated to the caller, to | |
aid in debugging.""" | |
try: | |
self.socket.sendall(_b(state)) | |
except Exception: | |
if self.debug: | |
raise |