def get_commands(cls, endpoint, auth_token, **kwargs): # TODO(ujjwalpa@): We don't really have a command to execute for Twine # as we directly write to the pypirc file (or to stdout for dryrun) # with python itself instead. Nevertheless, we're using this method for # testing so we'll keep the interface for now but return a string with # the expected pypirc content instead of a list of commands to # execute. This definitely reeks of code smell and there is probably # room for rethinking and refactoring the interfaces of these adapter # helper classes in the future. assert 'pypi_rc_path' in kwargs, 'pypi_rc_path must be provided.' pypi_rc_path = kwargs['pypi_rc_path'] default_pypi_rc = cls.DEFAULT_PYPI_RC_FMT.format( repository_endpoint=endpoint, auth_token=auth_token) pypi_rc = RawConfigParser() if os.path.exists(pypi_rc_path): try: pypi_rc.read(pypi_rc_path) index_servers = pypi_rc.get('distutils', 'index-servers') servers = [ server.strip() for server in index_servers.split('\n') if server.strip() != '' ] if 'codeartifact' not in servers: servers.append('codeartifact') pypi_rc.set('distutils', 'index-servers', '\n' + '\n'.join(servers)) if 'codeartifact' not in pypi_rc.sections(): pypi_rc.add_section('codeartifact') pypi_rc.set('codeartifact', 'repository', endpoint) pypi_rc.set('codeartifact', 'username', 'aws') pypi_rc.set('codeartifact', 'password', auth_token) except Exception as e: # invalid .pypirc file sys.stdout.write('%s is in an invalid state.' % pypi_rc_path) sys.stdout.write(os.linesep) raise e else: pypi_rc.readfp(StringIO(default_pypi_rc)) pypi_rc_stream = StringIO() pypi_rc.write(pypi_rc_stream) pypi_rc_str = pypi_rc_stream.getvalue() pypi_rc_stream.close() return pypi_rc_str
def _assert_pypi_rc_has_expected_content(self, pypi_rc_str, server, repo_url=None, username=None, password=None): pypi_rc = RawConfigParser() pypi_rc.readfp(StringIO(pypi_rc_str)) self.assertIn('distutils', pypi_rc.sections()) self.assertIn('index-servers', pypi_rc.options('distutils')) index_servers = pypi_rc.get('distutils', 'index-servers') index_servers = [ index_server.strip() for index_server in index_servers.split('\n') if index_server.strip() != '' ] self.assertIn(server, index_servers) if repo_url or username or password: self.assertIn(server, pypi_rc.sections()) if repo_url: self.assertIn('repository', pypi_rc.options(server)) self.assertEqual(pypi_rc.get(server, 'repository'), repo_url) if username: self.assertIn('username', pypi_rc.options(server)) self.assertEqual(pypi_rc.get(server, 'username'), username) if password: self.assertIn('password', pypi_rc.options(server)) self.assertEqual(pypi_rc.get(server, 'password'), password)
def _get_twine_commands(self): default_pypi_rc_fmt = '''\ [distutils] index-servers= pypi codeartifact [codeartifact] repository: {repository_endpoint} username: aws password: {auth_token}''' default_pypi_rc = default_pypi_rc_fmt.format( repository_endpoint=self.endpoint, auth_token=self.auth_token) pypi_rc = RawConfigParser() if os.path.exists(self.test_pypi_rc_path): pypi_rc.read(self.test_pypi_rc_path) index_servers = pypi_rc.get('distutils', 'index-servers') servers = [ server.strip() for server in index_servers.split('\n') if server.strip() != '' ] if 'codeartifact' not in servers: servers.append('codeartifact') pypi_rc.set('distutils', 'index-servers', '\n' + '\n'.join(servers)) if 'codeartifact' not in pypi_rc.sections(): pypi_rc.add_section('codeartifact') pypi_rc.set('codeartifact', 'repository', self.endpoint) pypi_rc.set('codeartifact', 'username', 'aws') pypi_rc.set('codeartifact', 'password', self.auth_token) else: pypi_rc.readfp(StringIO(default_pypi_rc)) pypi_rc_stream = StringIO() pypi_rc.write(pypi_rc_stream) pypi_rc_str = pypi_rc_stream.getvalue() pypi_rc_stream.close() return pypi_rc_str