Skip to content

Commit

Permalink
Add function to reload settings
Browse files Browse the repository at this point in the history
- Adds eventmq.settings.reload_settings to reload and set up the conf object for
  the correct sections.
  • Loading branch information
com4 committed Apr 5, 2017
1 parent ab0ccf7 commit 977986b
Show file tree
Hide file tree
Showing 6 changed files with 45 additions and 48 deletions.
15 changes: 3 additions & 12 deletions eventmq/jobmanager.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
from .constants import KBYE, STATUS
from .poller import Poller, POLLIN
from .sender import Sender
from .settings import conf, load_settings_from_dict, load_settings_from_file
from .settings import conf, reload_settings
from .utils.classes import EMQPService, HeartbeatMixin
from .utils.devices import generate_device_name
from .utils.functions import get_timeout_from_headers
Expand Down Expand Up @@ -71,7 +71,7 @@ def __init__(self, override_settings=None, skip_signal=False, *args,
"""
self.override_settings = override_settings

self.load_settings()
reload_settings('jobmanager', self.override_settings)

super(JobManager, self).__init__(*args, **kwargs)

Expand Down Expand Up @@ -283,7 +283,7 @@ def on_kbye(self, msgid, msg):

def sighup_handler(self, signum, frame):
logger.info('Caught signal %s' % signum)
self.load_settings()
reload_settings('jobmanager', self.override_settings)

self.should_reset = True
self.received_disconnect = True
Expand All @@ -294,12 +294,3 @@ def sigterm_handler(self, signum, frame):

self.awaiting_startup_ack = False
self.received_disconnect = True

def load_settings(self):
"""
Reload settings by resetting to defaults, reading the config, and
setting any overridden settings.
"""
conf.reload()
load_settings_from_file('jobmanager')
load_settings_from_dict(self.override_settings, 'jobmanager')
13 changes: 2 additions & 11 deletions eventmq/pub.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@

from . import exceptions, poller, publisher, receiver
from .constants import STATUS
from .settings import conf, load_settings_from_dict, load_settings_from_file
from .settings import conf, reload_settings
from .utils.classes import HeartbeatMixin

logger = logging.getLogger(__name__)
Expand All @@ -43,7 +43,7 @@ def __init__(self, override_settings=None, skip_signal=False, *args,
testing.
"""
self.override_settings = override_settings
self.load_settings()
reload_settings('publisher', self.override_settings)

super(Pub, self).__init__(*args, **kwargs) # creates _meta
self.poller = poller.Poller()
Expand Down Expand Up @@ -108,15 +108,6 @@ def process_client_message(self, msg):

return

def load_settings(self):
"""
Reload settings by resetting to defaults, reading the config file, and
setting any overriden settings.
"""
conf.reload()
load_settings_from_file(section='publisher')
load_settings_from_dict(self.override_settings, 'publisher')


# Entry point for pip console scripts
def pub_main():
Expand Down
15 changes: 3 additions & 12 deletions eventmq/router.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
CLIENT_TYPE, DISCONNECT, KBYE, PROTOCOL_VERSION, ROUTER_SHOW_SCHEDULERS,
ROUTER_SHOW_WORKERS, STATUS
)
from .settings import conf, load_settings_from_dict, load_settings_from_file
from .settings import conf, reload_settings
from .utils import tuplify
from .utils.classes import EMQdeque, HeartbeatMixin
from .utils.devices import generate_device_name
Expand Down Expand Up @@ -61,7 +61,7 @@ def __init__(self, override_settings=None, skip_signal=False, *args,
testing.
"""
self.override_settings = override_settings
self.load_settings()
reload_settings('router', override_settings)

super(Router, self).__init__(*args, **kwargs) # Creates _meta

Expand Down Expand Up @@ -943,19 +943,10 @@ def sighup_handler(self, signum, frame):
self.backend.unbind(conf.BACKEND_LISTEN_ADDR)
self.administrative_socket.unbind(conf.ADMINISTRATIVE_LISTEN_ADDR)

self.load_settings()
reload_settings('router', self.override_settings)

self.start()

def load_settings(self):
"""
Reload settings by resetting to defaults, reading the config file, and
setting any overriden settings.
"""
conf.reload()
load_settings_from_file('router')
load_settings_from_dict(self.override_settings, 'router')


def router_on_full():
logger.critical('High watermark hit in router')
Expand Down
13 changes: 2 additions & 11 deletions eventmq/scheduler.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
from .constants import KBYE
from .poller import Poller, POLLIN
from .sender import Sender
from .settings import conf, load_settings_from_dict, load_settings_from_file
from .settings import conf, reload_settings
from .utils.classes import EMQPService, HeartbeatMixin
from .utils.devices import generate_device_name
from .utils.messages import send_emqp_message as sendmsg
Expand Down Expand Up @@ -66,7 +66,7 @@ def __init__(self, override_settings=None, skip_signal=False, *args,
"""
self.override_settings = override_settings

self.load_settings()
reload_settings('scheduler', self.override_settings)

logger.info('Initializing Scheduler...')

Expand Down Expand Up @@ -435,15 +435,6 @@ def schedule_hash(cls, message):

return schedule_hash

def load_settings(self):
"""
Reload settings by resetting to defaults, reading config file, and
setting any overriden settings.
"""
conf.reload()
load_settings_from_file('scheduler')
load_settings_from_dict(self.override_settings, 'scheduler')


def test_job(*args, **kwargs):
"""
Expand Down
33 changes: 33 additions & 0 deletions eventmq/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -257,6 +257,39 @@
}


def reload_settings(section, override_settings=None):
"""
Reload settings by resetting ``conf`` to defaults, loading settings from a
file and overwriting any additional settings with what's defined in the
``override_settings`` dict
Args:
section (str): The section of interest. See ``_CONFIG_DEFS``
override_settings (dict): Dictionary containing any additional settings
to override. The key should be the upper case config name.
See: :func:`load_settings_from_dict` for more information.
"""
if section not in _CONFIG_DEFS:
raise ValueError(
'Unable to reload settings using unknown section: {} - Valid '
'options are: {}'.format(section, _CONFIG_DEFS.keys()))

config_file = None

conf.reload()

if override_settings:
if 'CONFIG' in override_settings:
config_file = override_settings['CONFIG']
elif 'CONFIG_FILE' in override_settings:
config_file = override_settings['CONFIG_FILE']

load_settings_from_file(section, file_path=config_file)
load_settings_from_dict(override_settings, section)

conf.section = section


def load_settings_from_dict(settings_dict, section):
"""
Load settings into conf from the provided dictionary. Generally this would
Expand Down
4 changes: 2 additions & 2 deletions eventmq/tests/test_jobmanager.py
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ def test_on_disconnect(self, socket_mock, sendmsg_mock):
self.assertTrue(jm.received_disconnect, "Did not receive disconnect.")

# Other Tests
@mock.patch('eventmq.jobmanager.load_settings_from_file')
@mock.patch('eventmq.jobmanager.reload_settings')
def test_sighup_handler(self, load_settings_mock):
jm = jobmanager.JobManager()

Expand All @@ -126,7 +126,7 @@ def test_sighup_handler(self, load_settings_mock):
# called once on init, and once for the sighup handler
self.assertEqual(2, load_settings_mock.call_count)
# check to see if the last call was called with the jobmanager section
load_settings_mock.assert_called_with('jobmanager')
load_settings_mock.assert_called_with('jobmanager', None)

@mock.patch('eventmq.jobmanager.sendmsg')
def test_sigterm_handler(self, sendmsg_mock):
Expand Down

0 comments on commit 977986b

Please sign in to comment.