def from_file(cls, connection_name: str) -> Optional['JiraConnection']: """ Raises ConfigError if file is missing, internal data fails validation, or assignee list fails to be queried """ config_file = cls._build_config(connection_name) if not os.path.isfile(config_file): raise ConfigError( 'Cannot initialize JIRA instance: {}. Missing config file: {}'. format(connection_name, cls._build_config(connection_name))) try: cp = configparser.RawConfigParser() cp.read(cls._build_config(connection_name)) url = cp.get('Connection', 'url').rstrip('/') user = decode(encode_password(), cp.get('Connection', 'user')) password = decode(encode_password(), cp.get('Connection', 'password')) result = JiraConnection(connection_name, url, user, password) result.possible_projects = cp.get('Connection', 'projects').split(',') return result except configparser.NoOptionError as e: print('Failed to create JiraConnection from file: {}. Error: {}'. format(config_file, str(e))) return None
def save_connection_config(self) -> None: if self.name and self.url: config_parser = RawConfigParser() config_parser.add_section(SECTION_TITLE) config_parser.set(SECTION_TITLE, 'url', self.url) if self._requires_auth: config_parser.set(SECTION_TITLE, 'username', self._auth['username']) password = encode(encode_password(), self._auth['password']) config_parser.set(SECTION_TITLE, 'password', password) if self.jenkins_views: config_parser.set(SECTION_TITLE, 'views', ','.join(self.view_names)) for view in self.views: view.save_view_config() save_argus_config( config_parser, build_config_file(jenkins_connections_dir, self.name)) else: raise ConfigError( 'No data to save in JenkinsConnection config file.')
def save_config(self) -> None: """ Blindly overwrites existing config file for connection. """ config_parser = configparser.RawConfigParser() config_parser.add_section('Connection') config_parser.set('Connection', 'url', self._url) config_parser.set('Connection', 'user', encode(encode_password(), self._user)) config_parser.set('Connection', 'password', encode(encode_password(), self._pass)) config_parser.set('Connection', 'projects', ','.join(self.possible_projects)) save_argus_config(config_parser, self._build_config(self.connection_name))
def load_connection_config(jenkins_manager: 'JenkinsManager', connection_name: str) -> None: config_file = build_config_file(jenkins_connections_dir, connection_name) if os.path.isfile(config_file): config_parser = RawConfigParser() config_parser.read(config_file) url = config_parser.get(SECTION_TITLE, 'url') auth = {} if config_parser.has_option(SECTION_TITLE, 'password'): auth['username'] = config_parser.get(SECTION_TITLE, 'username') auth['password'] = decode( encode_password(), config_parser.get(SECTION_TITLE, 'password')) try: jenkins_connection = JenkinsConnection(connection_name, url, auth=auth) if config_parser.has_option(SECTION_TITLE, 'views'): view_names = config_parser.get(SECTION_TITLE, 'views').split(',') print('Loading Jenkins views for connection: {}'.format( connection_name)) for view_name in view_names: JenkinsView.load_view_config(jenkins_connection, view_name) jenkins_manager.jenkins_connections[ jenkins_connection.name] = jenkins_connection except Exception as e: print( 'WARNING! Error occurred during creation of Jenkins instance: {}.' .format(e)) print( 'Skipping addition of this instance. Check routing to url: {}' .format(url)) pause() else: 'No config file for {}.'.format(connection_name)