Source code for relay_commander.ld

# -*- coding: utf-8 -*-
"""
relay_commander.ld
~~~~~~~~~~~~~~~~~~

This module provides a wrapper for the LaunchDarkly API.

Reference API - https://pypi.org/project/launchdarkly-api/

.. versionchanged:: 0.0.12
    Refactor module to make it PEP-8 and PEP-484 compliant.
"""
import sys

import launchdarkly_api

from relay_commander.util import LOG


[docs]class LaunchDarklyApi(): """Wrapper for the LaunchDarkly API"""
[docs] def __init__( self, api_key: str, project_key: str = None, environment_key: str = None ): """ Instantiate a new LaunchDarklyApi instance. :param api_key: API Access Key for LaunchDarkly. :param project_key: Key for project. :param environment_key: Environment in which to \ pull state from. """ self.api_key = api_key self.project_key = project_key self.environment_key = environment_key # get new LD client configuration = launchdarkly_api.Configuration() configuration.api_key['Authorization'] = api_key self.client = launchdarkly_api.ProjectsApi( launchdarkly_api.ApiClient(configuration)) self.feature = launchdarkly_api.FeatureFlagsApi( launchdarkly_api.ApiClient(configuration))
[docs] def get_environments(self, project_key: str) -> dict: """ Retrieve all environments for a given project. Includes name, key, and mobile key. :param project_key: Key for project. :returns: dictionary of environments. """ try: resp = self.client.get_project(project_key) except launchdarkly_api.rest.ApiException as ex: msg = "Unable to get environments." resp = "API response was {0} {1}.".format(ex.status, ex.reason) LOG.error("%s %s", msg, resp) sys.exit(1) envs = [] for env in resp.environments: env = dict( key=env.key, api_key=env.api_key, client_id=env.id ) envs.append(env) return envs
[docs] def update_flag(self, state: str, feature_key: str) \ -> launchdarkly_api.FeatureFlag: """ Update the flag status for the specified feature flag. :param state: New feature flag state :param featureKey: Feature flag key :returns: FeatureFlag object. """ build_env = "/environments/" + self.environment_key + "/on" patch_comment = [{"op": "replace", "path": build_env, "value": state}] try: resp = self.feature.patch_feature_flag( self.project_key, feature_key, patch_comment) except launchdarkly_api.rest.ApiException as ex: msg = "Unable to update flag." resp = "API response was {0} {1}.".format(ex.status, ex.reason) LOG.error("%s %s", msg, resp) sys.exit(1) return resp