diff --git a/CHANGELOG.md b/CHANGELOG.md index a5eaa20c..3be469ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -46,6 +46,11 @@ All notable changes to the Zowe Client Python SDK will be documented in this fil ### Bug Fixes +- *Breaking*: Replaced `datasets` in function names with `data_sets` as a standard. [#83] (https://github.com/zowe/zowe-client-python-sdk/issues/83) +- *Breaking*: Made unnecessary public variables to private [#83] (https://github.com/zowe/zowe-client-python-sdk/issues/83) + - `profile_manager._appname -> profile_manager.__appname` + - `profile_manager._show_warnings -> profile_manager.__show_warnings` + - `... and others ...` - Fixed `Files.create_data_set` to accept "FBA", "FBM", "VBA", "VBM" as valid recfm [#240](https://github.com/zowe/zowe-client-python-sdk/issues/240) - Fixed an issue with `Jobs.list_jobs` user correlator parameter [#242](https://github.com/zowe/zowe-client-python-sdk/issues/242) - Fixed default encoding for I/O operations to be UTF-8 on Windows [#243](https://github.com/zowe/zowe-client-python-sdk/issues/243) diff --git a/src/core/zowe/core_for_zowe_sdk/config_file.py b/src/core/zowe/core_for_zowe_sdk/config_file.py index d3f3fd01..932b0664 100644 --- a/src/core/zowe/core_for_zowe_sdk/config_file.py +++ b/src/core/zowe/core_for_zowe_sdk/config_file.py @@ -21,13 +21,12 @@ import commentjson import requests -from .logger import Log from .credential_manager import CredentialManager from .custom_warnings import ProfileNotFoundWarning, ProfileParsingWarning from .exceptions import ProfileNotFound +from .logger import Log from .profile_constants import GLOBAL_CONFIG_NAME, TEAM_CONFIG, USER_CONFIG from .validators import validate_config_json -from .logger import Log HOME = os.path.expanduser("~") GLOBAL_CONFIG_LOCATION = os.path.join(HOME, ".zowe") diff --git a/src/core/zowe/core_for_zowe_sdk/profile_manager.py b/src/core/zowe/core_for_zowe_sdk/profile_manager.py index 7eda388c..6b5934fb 100644 --- a/src/core/zowe/core_for_zowe_sdk/profile_manager.py +++ b/src/core/zowe/core_for_zowe_sdk/profile_manager.py @@ -52,17 +52,17 @@ class ProfileManager: """ def __init__(self, appname: str = "zowe", show_warnings: bool = True): - self._appname = appname - self._show_warnings = show_warnings + self.__appname = appname + self.__show_warnings = show_warnings - self.project_config = ConfigFile(type=TEAM_CONFIG, name=appname) - self.project_user_config = ConfigFile(type=USER_CONFIG, name=appname) + self.__project_config = ConfigFile(type=TEAM_CONFIG, name=appname) + self.__project_user_config = ConfigFile(type=USER_CONFIG, name=appname) self.__logger = Log.registerLogger(__name__) - self.global_config = ConfigFile(type=TEAM_CONFIG, name=GLOBAL_CONFIG_NAME) + self.__global_config = ConfigFile(type=TEAM_CONFIG, name=GLOBAL_CONFIG_NAME) try: - self.global_config.location = GLOBAL_CONFIG_LOCATION + self.__global_config.location = GLOBAL_CONFIG_LOCATION except Exception: self.__logger.warning("Could not find Global Config Directory") warnings.warn( @@ -70,9 +70,9 @@ def __init__(self, appname: str = "zowe", show_warnings: bool = True): ConfigNotFoundWarning, ) - self.global_user_config = ConfigFile(type=USER_CONFIG, name=GLOBAL_CONFIG_NAME) + self.__global_user_config = ConfigFile(type=USER_CONFIG, name=GLOBAL_CONFIG_NAME) try: - self.global_user_config.location = GLOBAL_CONFIG_LOCATION + self.__global_user_config.location = GLOBAL_CONFIG_LOCATION except Exception: self.__logger.warning("Could not find Global User Config Directory") warnings.warn( @@ -83,40 +83,40 @@ def __init__(self, appname: str = "zowe", show_warnings: bool = True): @property def config_appname(self) -> str: """Returns the app name""" - return self._appname + return self.__appname @property def config_dir(self) -> Optional[str]: """Returns the folder path to where the Zowe z/OSMF Team Project Config files are located.""" - return self.project_config.location + return self.__project_config.location @config_dir.setter def config_dir(self, dirname: str) -> None: """ Set directory/folder path to where Zowe z/OSMF Team Project Config files are located """ - self.project_config.location = dirname - self.project_user_config.location = dirname + self.__project_config.location = dirname + self.__project_user_config.location = dirname @property def user_config_dir(self) -> Optional[str]: """Returns the folder path to where the Zowe z/OSMF User Project Config files are located.""" - return self.project_user_config.location + return self.__project_user_config.location @user_config_dir.setter def user_config_dir(self, dirname: str) -> None: """Set directory/folder path to where Zowe z/OSMF User Project Config files are located""" - self.project_user_config.location = dirname + self.__project_user_config.location = dirname @property def config_filename(self) -> str: """Return the filename for Zowe z/OSMF Team Project Config""" - return self.project_config.filename + return self.__project_config.filename @property def config_filepath(self) -> Optional[str]: """Get the full Zowe z/OSMF Team Project Config filepath""" - return self.project_config.filepath + return self.__project_config.filepath @staticmethod def get_env(cfg: ConfigFile, cwd=None) -> dict: @@ -262,7 +262,7 @@ def load( error_msg="Could not find profile as both profile_name and profile_type is not set.", ) - if not self._show_warnings: + if not self.__show_warnings: warnings.simplefilter("ignore") profile_props: dict = {} @@ -275,7 +275,12 @@ def load( cfg_schema = None cfg_schema_dir = None - for cfg_layer in (self.project_user_config, self.project_config, self.global_user_config, self.global_config): + for cfg_layer in ( + self.__project_user_config, + self.__project_config, + self.__global_user_config, + self.__global_config, + ): if cfg_layer.profiles is None: try: cfg_layer.init_from_file(validate_schema, suppress_config_file_warnings) @@ -294,12 +299,12 @@ def load( cfg_schema = cfg_layer.schema_property cfg_schema_dir = cfg_layer._location - usrProject = self.project_user_config.profiles or {} - project = self.project_config.profiles or {} + usrProject = self.__project_user_config.profiles or {} + project = self.__project_config.profiles or {} project_temp = always_merger.merge(deepcopy(project), usrProject) - usrGlobal = self.global_user_config.profiles or {} - global_ = self.global_config.profiles or {} + usrGlobal = self.__global_user_config.profiles or {} + global_ = self.__global_config.profiles or {} global_temp = always_merger.merge(deepcopy(global_), usrGlobal) profiles_merged = project_temp @@ -359,7 +364,7 @@ def get_highest_priority_layer(self, json_path: str) -> Optional[ConfigFile]: """ highest_layer = None longest_match = "" - layers = [self.project_user_config, self.project_config, self.global_user_config, self.global_config] + layers = [self.__project_user_config, self.__project_config, self.__global_user_config, self.__global_config] original_name = layers[0].get_profile_name_from_path(json_path) @@ -426,7 +431,7 @@ def save(self) -> None: """ Save the layers (configuration files) to disk. """ - layers = [self.project_user_config, self.project_config, self.global_user_config, self.global_config] + layers = [self.__project_user_config, self.__project_config, self.__global_user_config, self.__global_config] for layer in layers: layer.save(False) diff --git a/src/core/zowe/core_for_zowe_sdk/request_handler.py b/src/core/zowe/core_for_zowe_sdk/request_handler.py index da4e8112..b41d5818 100644 --- a/src/core/zowe/core_for_zowe_sdk/request_handler.py +++ b/src/core/zowe/core_for_zowe_sdk/request_handler.py @@ -43,7 +43,7 @@ def __init__(self, session_arguments, logger_name=__name__): """ self.session = requests.Session() self.session_arguments = session_arguments - self.valid_methods = ["GET", "POST", "PUT", "DELETE"] + self.__valid_methods = ["GET", "POST", "PUT", "DELETE"] self.__handle_ssl_warnings() self.__logger = Log.registerLogger(logger_name) @@ -71,17 +71,17 @@ def perform_request(self, method, request_arguments, expected_code=[200], stream normalized_response: json normalized request response in json (dictionary) """ - self.method = method - self.request_arguments = request_arguments - self.expected_code = expected_code + self.__method = method + self.__request_arguments = request_arguments + self.__expected_code = expected_code self.__logger.debug( - f"Request method: {self.method}, Request arguments: {self.request_arguments}, Expected code: {expected_code}" + f"Request method: {self.__method}, Request arguments: {self.__request_arguments}, Expected code: {expected_code}" ) self.__validate_method() self.__send_request(stream=stream) self.__validate_response() if stream: - return self.response + return self.__response return self.__normalize_response() def __validate_method(self): @@ -92,16 +92,16 @@ def __validate_method(self): InvalidRequestMethod If the input request method is not supported """ - if self.method not in self.valid_methods: - self.__logger.error(f"Invalid HTTP method input {self.method}") - raise InvalidRequestMethod(self.method) + if self.__method not in self.__valid_methods: + self.__logger.error(f"Invalid HTTP method input {self.__method}") + raise InvalidRequestMethod(self.__method) def __send_request(self, stream=False): """Build a custom session object, prepare it with a custom request and send it.""" session = self.session - request_object = requests.Request(method=self.method, **self.request_arguments) + request_object = requests.Request(method=self.__method, **self.__request_arguments) prepared = session.prepare_request(request_object) - self.response = session.send(prepared, stream=stream, **self.session_arguments) + self.__response = session.send(prepared, stream=stream, **self.session_arguments) def __del__(self): """Clean up the REST session object once it is no longer needed anymore""" @@ -118,21 +118,21 @@ def __validate_response(self): If the HTTP/HTTPS request fails """ # Automatically checks if status code is between 200 and 400 - if self.response.ok: - if self.response.status_code not in self.expected_code: + if self.__response.ok: + if self.__response.status_code not in self.__expected_code: self.__logger.error( - f"The status code from z/OSMF was: {self.expected_code}\nExpected: {self.response.status_code}\nRequest output:{self.response.text}" + f"The status code from z/OSMF was: {self.__expected_code}\nExpected: {self.__response.status_code}\nRequest output:{self.__response.text}" ) - raise UnexpectedStatus(self.expected_code, self.response.status_code, self.response.text) + raise UnexpectedStatus(self.__expected_code, self.__response.status_code, self.__response.text) else: - output_str = str(self.response.request.url) - output_str += "\n" + str(self.response.request.headers) - output_str += "\n" + str(self.response.request.body) - output_str += "\n" + str(self.response.text) + output_str = str(self.__response.request.url) + output_str += "\n" + str(self.__response.request.headers) + output_str += "\n" + str(self.__response.request.body) + output_str += "\n" + str(self.__response.text) self.__logger.error( - f"HTTP Request has failed with status code {self.response.status_code}. \n {output_str}" + f"HTTP Request has failed with status code {self.__response.status_code}. \n {output_str}" ) - raise RequestFailed(self.response.status_code, output_str) + raise RequestFailed(self.__response.status_code, output_str) def __normalize_response(self): """Normalize the response object to a JSON format. @@ -144,10 +144,10 @@ def __normalize_response(self): - object when the response is JSON text - `str` when the response is plain text """ - contentType = self.response.headers.get("Content-Type") + contentType = self.__response.headers.get("Content-Type") if contentType == "application/octet-stream": - return self.response.content + return self.__response.content elif contentType and contentType.startswith("application/json"): - return "" if self.response.text == "" else self.response.json() + return "" if self.__response.text == "" else self.__response.json() else: - return self.response.text + return self.__response.text diff --git a/src/core/zowe/core_for_zowe_sdk/sdk_api.py b/src/core/zowe/core_for_zowe_sdk/sdk_api.py index 73284793..2ac79555 100644 --- a/src/core/zowe/core_for_zowe_sdk/sdk_api.py +++ b/src/core/zowe/core_for_zowe_sdk/sdk_api.py @@ -11,12 +11,11 @@ """ import urllib -from .logger import Log from . import session_constants +from .logger import Log from .request_handler import RequestHandler from .session import ISession, Session -from .logger import Log class SdkApi: @@ -24,38 +23,37 @@ class SdkApi: Abstract class used to represent the base SDK API. """ - def __init__(self, profile, default_url, logger_name = __name__): - self.profile = profile + def __init__(self, profile, default_url, logger_name=__name__): session = Session(profile) self.session: ISession = session.load() self.logger = Log.registerLogger(logger_name) - self.default_service_url = default_url - self.default_headers = { + self._default_service_url = default_url + self._default_headers = { "Content-Type": "application/json", "X-CSRF-ZOSMF-HEADER": "", } - self.request_endpoint = session.host_url + self.default_service_url + self._request_endpoint = session.host_url + self._default_service_url - self.request_arguments = { - "url": self.request_endpoint, - "headers": self.default_headers, + self._request_arguments = { + "url": self._request_endpoint, + "headers": self._default_headers, } - self.session_arguments = { + self.__session_arguments = { "verify": self.session.rejectUnauthorized, "timeout": 30, } - self.request_handler = RequestHandler(self.session_arguments, logger_name = logger_name) + self.request_handler = RequestHandler(self.__session_arguments, logger_name=logger_name) if self.session.type == session_constants.AUTH_TYPE_BASIC: - self.request_arguments["auth"] = (self.session.user, self.session.password) + self._request_arguments["auth"] = (self.session.user, self.session.password) elif self.session.type == session_constants.AUTH_TYPE_BEARER: - self.default_headers["Authorization"] = f"Bearer {self.session.tokenValue}" + self._default_headers["Authorization"] = f"Bearer {self.session.tokenValue}" elif self.session.type == session_constants.AUTH_TYPE_TOKEN: - self.default_headers["Cookie"] = f"{self.session.tokenType}={self.session.tokenValue}" - + self._default_headers["Cookie"] = f"{self.session.tokenType}={self.session.tokenValue}" + def __enter__(self): return self @@ -68,7 +66,7 @@ def _create_custom_request_arguments(self): This method is required because the way that Python handles dictionary creation """ - return self.request_arguments.copy() + return self._request_arguments.copy() def _encode_uri_component(self, str_to_adjust): """Adjust string to be correct in a URL diff --git a/src/core/zowe/core_for_zowe_sdk/zosmf_profile.py b/src/core/zowe/core_for_zowe_sdk/zosmf_profile.py index 2df61390..31ded264 100644 --- a/src/core/zowe/core_for_zowe_sdk/zosmf_profile.py +++ b/src/core/zowe/core_for_zowe_sdk/zosmf_profile.py @@ -52,7 +52,7 @@ def __init__(self, profile_name): profile_name The name of the Zowe z/OSMF profile """ - self.profile_name = profile_name + self.__profile_name = profile_name self.__logger = Log.registerLogger(__name__) @property @@ -69,7 +69,7 @@ def load(self): zosmf_connection z/OSMF connection object """ - profile_file = os.path.join(self.profiles_dir, "{}.yaml".format(self.profile_name)) + profile_file = os.path.join(self.profiles_dir, "{}.yaml".format(self.__profile_name)) with open(profile_file, "r") as fileobj: profile_yaml = yaml.safe_load(fileobj) @@ -93,7 +93,7 @@ def load(self): def __get_secure_value(self, name): service_name = constants["ZoweCredentialKey"] - account_name = "zosmf_{}_{}".format(self.profile_name, name) + account_name = "zosmf_{}_{}".format(self.__profile_name, name) secret_value = keyring.get_password(service_name, account_name) @@ -108,14 +108,14 @@ def __get_secure_value(self, name): def __load_secure_credentials(self): """Load secure credentials for a z/OSMF profile.""" if not HAS_KEYRING: - self.__logger.error(f"{self.profile_name} keyring module not installed") - raise SecureProfileLoadFailed(self.profile_name, "Keyring module not installed") + self.__logger.error(f"{self.__profile_name} keyring module not installed") + raise SecureProfileLoadFailed(self.__profile_name, "Keyring module not installed") try: zosmf_user = self.__get_secure_value("user") zosmf_password = self.__get_secure_value("password") except Exception as e: - self.__logger.error(f"Failed to load secure profile '{self.profile_name}' because '{e}'") - raise SecureProfileLoadFailed(self.profile_name, e) + self.__logger.error(f"Failed to load secure profile '{self.__profile_name}' because '{e}'") + raise SecureProfileLoadFailed(self.__profile_name, e) else: return (zosmf_user, zosmf_password) diff --git a/src/zos_console/zowe/zos_console_for_zowe_sdk/console.py b/src/zos_console/zowe/zos_console_for_zowe_sdk/console.py index 42e5a3d8..0bd5eb13 100644 --- a/src/zos_console/zowe/zos_console_for_zowe_sdk/console.py +++ b/src/zos_console/zowe/zos_console_for_zowe_sdk/console.py @@ -40,7 +40,7 @@ def issue_command(self, command, console=None): A JSON containing the response from the console command """ custom_args = self._create_custom_request_arguments() - custom_args["url"] = self.request_endpoint.replace("defcn", console or "defcn") + custom_args["url"] = self._request_endpoint.replace("defcn", console or "defcn") request_body = {"cmd": command} custom_args["json"] = request_body response_json = self.request_handler.perform_request("PUT", custom_args) @@ -63,6 +63,6 @@ def get_response(self, response_key, console=None): """ custom_args = self._create_custom_request_arguments() request_url = "{}/solmsgs/{}".format(console or "defcn", response_key) - custom_args["url"] = self.request_endpoint.replace("defcn", request_url) + custom_args["url"] = self._request_endpoint.replace("defcn", request_url) response_json = self.request_handler.perform_request("GET", custom_args) return response_json diff --git a/src/zos_files/zowe/zos_files_for_zowe_sdk/datasets.py b/src/zos_files/zowe/zos_files_for_zowe_sdk/datasets.py index 530f31fe..32f8230a 100644 --- a/src/zos_files/zowe/zos_files_for_zowe_sdk/datasets.py +++ b/src/zos_files/zowe/zos_files_for_zowe_sdk/datasets.py @@ -245,7 +245,7 @@ def __init__(self, connection): Also update header to accept gzip encoded responses """ super().__init__(connection, "/zosmf/restfiles/", logger_name=__name__) - self.default_headers["Accept-Encoding"] = "gzip" + self._default_headers["Accept-Encoding"] = "gzip" def list(self, name_pattern, return_attributes=False): """Retrieve a list of datasets based on a given pattern. @@ -265,7 +265,7 @@ def list(self, name_pattern, return_attributes=False): """ custom_args = self._create_custom_request_arguments() custom_args["params"] = {"dslevel": self._encode_uri_component(name_pattern)} - custom_args["url"] = "{}ds".format(self.request_endpoint) + custom_args["url"] = "{}ds".format(self._request_endpoint) if return_attributes: custom_args["headers"]["X-IBM-Attributes"] = "base" @@ -288,13 +288,13 @@ def list_members(self, dataset_name, member_pattern=None, member_start=None, lim if member_pattern is not None: additional_parms["pattern"] = member_pattern custom_args["params"] = additional_parms - custom_args["url"] = "{}ds/{}/member".format(self.request_endpoint, self._encode_uri_component(dataset_name)) + custom_args["url"] = "{}ds/{}/member".format(self._request_endpoint, self._encode_uri_component(dataset_name)) custom_args["headers"]["X-IBM-Max-Items"] = "{}".format(limit) custom_args["headers"]["X-IBM-Attributes"] = attributes response_json = self.request_handler.perform_request("GET", custom_args) return response_json["items"] # type: ignore - def copy_dataset_or_member( + def copy_data_set_or_member( self, from_dataset_name, to_dataset_name, @@ -351,7 +351,7 @@ def copy_dataset_or_member( custom_args = self._create_custom_request_arguments() custom_args["json"] = data - custom_args["url"] = "{}ds/{}".format(self.request_endpoint, self._encode_uri_component(path_to_member)) + custom_args["url"] = "{}ds/{}".format(self._request_endpoint, self._encode_uri_component(path_to_member)) response_json = self.request_handler.perform_request("PUT", custom_args, expected_code=[200]) return response_json @@ -387,7 +387,7 @@ def create(self, dataset_name, options: Optional[DatasetOption] = None): raise ValueError custom_args = self._create_custom_request_arguments() - custom_args["url"] = "{}ds/{}".format(self.request_endpoint, self._encode_uri_component(dataset_name)) + custom_args["url"] = "{}ds/{}".format(self._request_endpoint, self._encode_uri_component(dataset_name)) custom_args["json"] = options.to_dict() if options else {} response_json = self.request_handler.perform_request("POST", custom_args, expected_code=[201]) return response_json @@ -464,7 +464,7 @@ def create_default(self, dataset_name: str, default_type: str): "dirblk": 25, } - custom_args["url"] = "{}ds/{}".format(self.request_endpoint, self._encode_uri_component(dataset_name)) + custom_args["url"] = "{}ds/{}".format(self._request_endpoint, self._encode_uri_component(dataset_name)) response_json = self.request_handler.perform_request("POST", custom_args, expected_code=[201]) return response_json @@ -477,7 +477,7 @@ def get_content(self, dataset_name, stream=False): A JSON with the contents of a given dataset """ custom_args = self._create_custom_request_arguments() - custom_args["url"] = "{}ds/{}".format(self.request_endpoint, self._encode_uri_component(dataset_name)) + custom_args["url"] = "{}ds/{}".format(self._request_endpoint, self._encode_uri_component(dataset_name)) response_json = self.request_handler.perform_request("GET", custom_args, stream=stream) return response_json @@ -496,7 +496,7 @@ def get_binary_content(self, dataset_name, stream=False, with_prefixes=False): A response object from the requests library """ custom_args = self._create_custom_request_arguments() - custom_args["url"] = "{}ds/{}".format(self.request_endpoint, self._encode_uri_component(dataset_name)) + custom_args["url"] = "{}ds/{}".format(self._request_endpoint, self._encode_uri_component(dataset_name)) custom_args["headers"]["Accept"] = "application/octet-stream" if with_prefixes: custom_args["headers"]["X-IBM-Data-Type"] = "record" @@ -514,7 +514,7 @@ def write(self, dataset_name, data, encoding=_ZOWE_FILES_DEFAULT_ENCODING): A JSON containing the result of the operation """ custom_args = self._create_custom_request_arguments() - custom_args["url"] = "{}ds/{}".format(self.request_endpoint, self._encode_uri_component(dataset_name)) + custom_args["url"] = "{}ds/{}".format(self._request_endpoint, self._encode_uri_component(dataset_name)) custom_args["data"] = data custom_args["headers"]["Content-Type"] = "text/plain; charset={}".format(encoding) response_json = self.request_handler.perform_request("PUT", custom_args, expected_code=[204, 201]) @@ -576,7 +576,7 @@ def recall_migrated(self, dataset_name: str, wait=False): custom_args = self._create_custom_request_arguments() custom_args["json"] = data - custom_args["url"] = "{}ds/{}".format(self.request_endpoint, self._encode_uri_component(dataset_name)) + custom_args["url"] = "{}ds/{}".format(self._request_endpoint, self._encode_uri_component(dataset_name)) response_json = self.request_handler.perform_request("PUT", custom_args, expected_code=[200]) return response_json @@ -609,7 +609,7 @@ def delete_migrated(self, dataset_name: str, purge=False, wait=False): custom_args = self._create_custom_request_arguments() custom_args["json"] = data - custom_args["url"] = "{}ds/{}".format(self.request_endpoint, self._encode_uri_component(dataset_name)) + custom_args["url"] = "{}ds/{}".format(self._request_endpoint, self._encode_uri_component(dataset_name)) response_json = self.request_handler.perform_request("PUT", custom_args, expected_code=[200]) return response_json @@ -635,7 +635,7 @@ def migrate(self, dataset_name: str, wait=False): custom_args = self._create_custom_request_arguments() custom_args["json"] = data - custom_args["url"] = "{}ds/{}".format(self.request_endpoint, self._encode_uri_component(dataset_name)) + custom_args["url"] = "{}ds/{}".format(self._request_endpoint, self._encode_uri_component(dataset_name)) response_json = self.request_handler.perform_request("PUT", custom_args, expected_code=[200]) return response_json @@ -662,7 +662,7 @@ def rename(self, before_dataset_name: str, after_dataset_name: str): custom_args = self._create_custom_request_arguments() custom_args["json"] = data custom_args["url"] = "{}ds/{}".format( - self.request_endpoint, self._encode_uri_component(after_dataset_name).strip() + self._request_endpoint, self._encode_uri_component(after_dataset_name).strip() ) response_json = self.request_handler.perform_request("PUT", custom_args, expected_code=[200]) @@ -710,7 +710,7 @@ def rename_member(self, dataset_name: str, before_member_name: str, after_member custom_args = self._create_custom_request_arguments() custom_args["json"] = data - custom_args["url"] = "{}ds/{}".format(self.request_endpoint, self._encode_uri_component(path_to_member)) + custom_args["url"] = "{}ds/{}".format(self._request_endpoint, self._encode_uri_component(path_to_member)) response_json = self.request_handler.perform_request("PUT", custom_args, expected_code=[200]) return response_json @@ -720,14 +720,14 @@ def delete(self, dataset_name, volume=None, member_name=None): custom_args = self._create_custom_request_arguments() if member_name is not None: dataset_name = f"{dataset_name}({member_name})" - url = "{}ds/{}".format(self.request_endpoint, self._encode_uri_component(dataset_name)) + url = "{}ds/{}".format(self._request_endpoint, self._encode_uri_component(dataset_name)) if volume is not None: - url = "{}ds/-{}/{}".format(self.request_endpoint, volume, self._encode_uri_component(dataset_name)) + url = "{}ds/-{}/{}".format(self._request_endpoint, volume, self._encode_uri_component(dataset_name)) custom_args["url"] = url response_json = self.request_handler.perform_request("DELETE", custom_args, expected_code=[200, 202, 204]) return response_json - def copy_uss_to_dataset( + def copy_uss_to_data_set( self, from_filename, to_dataset_name, to_member_name=None, type=FileType.TEXT, replace=False ): """ @@ -761,6 +761,6 @@ def copy_uss_to_dataset( path_to_member = f"{to_dataset_name}({to_member_name})" if to_member_name else to_dataset_name custom_args = self._create_custom_request_arguments() custom_args["json"] = data - custom_args["url"] = "{}ds/{}".format(self.request_endpoint, self._encode_uri_component(path_to_member)) + custom_args["url"] = "{}ds/{}".format(self._request_endpoint, self._encode_uri_component(path_to_member)) response_json = self.request_handler.perform_request("PUT", custom_args, expected_code=[200]) return response_json diff --git a/src/zos_files/zowe/zos_files_for_zowe_sdk/file_system.py b/src/zos_files/zowe/zos_files_for_zowe_sdk/file_system.py index 844f8bc9..a52af689 100644 --- a/src/zos_files/zowe/zos_files_for_zowe_sdk/file_system.py +++ b/src/zos_files/zowe/zos_files_for_zowe_sdk/file_system.py @@ -10,7 +10,6 @@ Copyright Contributors to the Zowe Project. """ - from zowe.core_for_zowe_sdk import SdkApi from zowe.zos_files_for_zowe_sdk import constants, exceptions @@ -42,7 +41,7 @@ def __init__(self, connection): Also update header to accept gzip encoded responses """ super().__init__(connection, "/zosmf/restfiles/", logger_name=__name__) - self.default_headers["Accept-Encoding"] = "gzip" + self._default_headers["Accept-Encoding"] = "gzip" def create(self, file_system_name, options={}): """ @@ -68,7 +67,7 @@ def create(self, file_system_name, options={}): raise exceptions.MaxAllocationQuantityExceeded custom_args = self._create_custom_request_arguments() - custom_args["url"] = "{}mfs/zfs/{}".format(self.request_endpoint, file_system_name) + custom_args["url"] = "{}mfs/zfs/{}".format(self._request_endpoint, file_system_name) custom_args["json"] = options response_json = self.request_handler.perform_request("POST", custom_args, expected_code=[201]) return response_json @@ -78,7 +77,7 @@ def delete(self, file_system_name): Deletes a zFS Filesystem """ custom_args = self._create_custom_request_arguments() - custom_args["url"] = "{}mfs/zfs/{}".format(self.request_endpoint, file_system_name) + custom_args["url"] = "{}mfs/zfs/{}".format(self._request_endpoint, file_system_name) response_json = self.request_handler.perform_request("DELETE", custom_args, expected_code=[204]) return response_json @@ -97,7 +96,7 @@ def mount(self, file_system_name, mount_point, options={}, encoding=_ZOWE_FILES_ options["action"] = "mount" options["mount-point"] = mount_point custom_args = self._create_custom_request_arguments() - custom_args["url"] = "{}mfs/{}".format(self.request_endpoint, file_system_name) + custom_args["url"] = "{}mfs/{}".format(self._request_endpoint, file_system_name) custom_args["json"] = options custom_args["headers"]["Content-Type"] = "text/plain; charset={}".format(encoding) response_json = self.request_handler.perform_request("PUT", custom_args, expected_code=[204]) @@ -117,7 +116,7 @@ def unmount(self, file_system_name, options={}, encoding=_ZOWE_FILES_DEFAULT_ENC """ options["action"] = "unmount" custom_args = self._create_custom_request_arguments() - custom_args["url"] = "{}mfs/{}".format(self.request_endpoint, file_system_name) + custom_args["url"] = "{}mfs/{}".format(self._request_endpoint, file_system_name) custom_args["json"] = options custom_args["headers"]["Content-Type"] = "text/plain; charset={}".format(encoding) response_json = self.request_handler.perform_request("PUT", custom_args, expected_code=[204]) @@ -140,8 +139,6 @@ def list(self, file_path_name=None, file_system_name=None): custom_args = self._create_custom_request_arguments() custom_args["params"] = {"path": file_path_name, "fsname": file_system_name} - custom_args["url"] = "{}mfs".format(self.request_endpoint) + custom_args["url"] = "{}mfs".format(self._request_endpoint) response_json = self.request_handler.perform_request("GET", custom_args, expected_code=[200]) return response_json - - diff --git a/src/zos_files/zowe/zos_files_for_zowe_sdk/files.py b/src/zos_files/zowe/zos_files_for_zowe_sdk/files.py index a40c099a..c742e15c 100644 --- a/src/zos_files/zowe/zos_files_for_zowe_sdk/files.py +++ b/src/zos_files/zowe/zos_files_for_zowe_sdk/files.py @@ -51,7 +51,7 @@ def __init__(self, connection): Also update header to accept gzip encoded responses """ super().__init__(connection, "/zosmf/restfiles/", logger_name=__name__) - self.default_headers["Accept-Encoding"] = "gzip" + self._default_headers["Accept-Encoding"] = "gzip" self.ds = Datasets(connection) self.uss = USSFiles(connection) self.fs = FileSystems(connection) @@ -80,13 +80,13 @@ def list_dsn_members(self, dataset_name, member_pattern=None, member_start=None, """Deprecated function. Please use ds.list_members() instead""" return self.ds.list_members(dataset_name, member_pattern, member_start, limit, attributes) - def copy_uss_to_dataset( + def copy_uss_to_data_set( self, from_filename, to_dataset_name, to_member_name=None, type=FileType.TEXT, replace=False ): - """Deprecated function. Please use ds.copy_uss_to_dataset instead""" - return self.ds.copy_uss_to_dataset(from_filename, to_dataset_name, to_member_name, type, replace) + """Deprecated function. Please use ds.copy_uss_to_data_set instead""" + return self.ds.copy_uss_to_data_set(from_filename, to_dataset_name, to_member_name, type, replace) - def copy_dataset_or_member( + def copy_data_set_or_member( self, from_dataset_name, to_dataset_name, @@ -97,8 +97,8 @@ def copy_dataset_or_member( enq=None, replace=False, ): - """Deprecated function. Please use ds.copy_dataset_or_member() instead""" - return self.ds.copy_dataset_or_member( + """Deprecated function. Please use ds.copy_data_set_or_member() instead""" + return self.ds.copy_data_set_or_member( from_dataset_name, to_dataset_name, from_member_name, volser, alias, to_member_name, enq, replace ) @@ -182,7 +182,7 @@ def list_unix_file_systems(self, file_path_name=None, file_system_name=None): """Deprecated function. Please use fs.list() instead""" return self.fs.list(file_path_name, file_system_name) - def recall_migrated_dataset(self, dataset_name: str, wait=False): + def recall_migrated_data_set(self, dataset_name: str, wait=False): """Deprecated function. Please use ds.recall_migrated() instead""" return self.ds.recall_migrated(dataset_name, wait) @@ -194,10 +194,10 @@ def migrate_data_set(self, dataset_name: str, wait=False): """Deprecated function. Please use ds.migrate() instead""" return self.ds.migrate(dataset_name, wait) - def rename_dataset(self, before_dataset_name: str, after_dataset_name: str): + def rename_data_set(self, before_dataset_name: str, after_dataset_name: str): """Deprecated function. Please use ds.rename() instead""" return self.ds.rename(before_dataset_name, after_dataset_name) - def rename_dataset_member(self, dataset_name: str, before_member_name: str, after_member_name: str, enq=""): + def rename_data_set_member(self, dataset_name: str, before_member_name: str, after_member_name: str, enq=""): """Deprecated function. Please use ds.rename_member() instead""" return self.ds.rename_member(dataset_name, before_member_name, after_member_name, enq) diff --git a/src/zos_files/zowe/zos_files_for_zowe_sdk/uss.py b/src/zos_files/zowe/zos_files_for_zowe_sdk/uss.py index abcc3d17..a59bf2db 100644 --- a/src/zos_files/zowe/zos_files_for_zowe_sdk/uss.py +++ b/src/zos_files/zowe/zos_files_for_zowe_sdk/uss.py @@ -18,6 +18,7 @@ _ZOWE_FILES_DEFAULT_ENCODING = zos_file_constants["ZoweFilesDefaultEncoding"] + class USSFiles(SdkApi): """ Class used to represent the base z/OSMF USSFiles API @@ -43,8 +44,8 @@ def __init__(self, connection): Also update header to accept gzip encoded responses """ super().__init__(connection, "/zosmf/restfiles/", logger_name=__name__) - self.default_headers["Accept-Encoding"] = "gzip" - + self._default_headers["Accept-Encoding"] = "gzip" + def list(self, path): """Retrieve a list of USS files based on a given pattern. @@ -55,7 +56,7 @@ def list(self, path): """ custom_args = self._create_custom_request_arguments() custom_args["params"] = {"path": path} - custom_args["url"] = "{}fs".format(self.request_endpoint) + custom_args["url"] = "{}fs".format(self._request_endpoint) response_json = self.request_handler.perform_request("GET", custom_args) return response_json @@ -76,13 +77,13 @@ def delete(self, filepath_name, recursive=False): HTTP Response for No Content """ custom_args = self._create_custom_request_arguments() - custom_args["url"] = "{}fs/{}".format(self.request_endpoint, filepath_name.lstrip("/")) + custom_args["url"] = "{}fs/{}".format(self._request_endpoint, filepath_name.lstrip("/")) if recursive: custom_args["headers"]["X-IBM-Option"] = "recursive" response_json = self.request_handler.perform_request("DELETE", custom_args, expected_code=[204]) return response_json - + def create(self, file_path, type, mode=None): """ Add a file or directory @@ -98,7 +99,7 @@ def create(self, file_path, type, mode=None): custom_args = self._create_custom_request_arguments() custom_args["json"] = data - custom_args["url"] = "{}fs/{}".format(self.request_endpoint, file_path.lstrip("/")) + custom_args["url"] = "{}fs/{}".format(self._request_endpoint, file_path.lstrip("/")) response_json = self.request_handler.perform_request("POST", custom_args, expected_code=[201]) return response_json @@ -110,12 +111,12 @@ def write(self, filepath_name, data, encoding=_ZOWE_FILES_DEFAULT_ENCODING): A JSON containing the result of the operation """ custom_args = self._create_custom_request_arguments() - custom_args["url"] = "{}fs/{}".format(self.request_endpoint, filepath_name.lstrip("/")) + custom_args["url"] = "{}fs/{}".format(self._request_endpoint, filepath_name.lstrip("/")) custom_args["data"] = data custom_args["headers"]["Content-Type"] = "text/plain; charset={}".format(encoding) response_json = self.request_handler.perform_request("PUT", custom_args, expected_code=[204, 201]) return response_json - + def get_content(self, filepath_name): """Retrieve the content of a filename. The complete path must be specified. @@ -125,10 +126,10 @@ def get_content(self, filepath_name): A JSON with the contents of the specified USS file """ custom_args = self._create_custom_request_arguments() - custom_args["url"] = "{}fs{}".format(self.request_endpoint, filepath_name) + custom_args["url"] = "{}fs{}".format(self._request_endpoint, filepath_name) response_json = self.request_handler.perform_request("GET", custom_args) return response_json - + def get_content_streamed(self, file_path, binary=False): """Retrieve the contents of a given USS file streamed. @@ -138,7 +139,7 @@ def get_content_streamed(self, file_path, binary=False): A response object from the requests library """ custom_args = self._create_custom_request_arguments() - custom_args["url"] = "{}fs/{}".format(self.request_endpoint, self._encode_uri_component(file_path.lstrip("/"))) + custom_args["url"] = "{}fs/{}".format(self._request_endpoint, self._encode_uri_component(file_path.lstrip("/"))) if binary: custom_args["headers"]["X-IBM-Data-Type"] = "binary" response = self.request_handler.perform_request("GET", custom_args, stream=True) @@ -158,4 +159,4 @@ def upload(self, input_file, filepath_name, encoding=_ZOWE_FILES_DEFAULT_ENCODIN response_json = self.write(filepath_name, in_file.read()) else: self.logger.error(f"File {input_file} not found.") - raise FileNotFound(input_file) \ No newline at end of file + raise FileNotFound(input_file) diff --git a/src/zos_jobs/zowe/zos_jobs_for_zowe_sdk/jobs.py b/src/zos_jobs/zowe/zos_jobs_for_zowe_sdk/jobs.py index b7289e0e..9cdc0447 100644 --- a/src/zos_jobs/zowe/zos_jobs_for_zowe_sdk/jobs.py +++ b/src/zos_jobs/zowe/zos_jobs_for_zowe_sdk/jobs.py @@ -53,7 +53,7 @@ def get_job_status(self, jobname, jobid): """ custom_args = self._create_custom_request_arguments() job_url = "{}/{}".format(jobname, jobid) - request_url = "{}{}".format(self.request_endpoint, self._encode_uri_component(job_url)) + request_url = "{}{}".format(self._request_endpoint, self._encode_uri_component(job_url)) custom_args["url"] = request_url response_json = self.request_handler.perform_request("GET", custom_args) return response_json @@ -81,7 +81,7 @@ def cancel_job(self, jobname: str, jobid: str, modify_version="2.0"): custom_args = self._create_custom_request_arguments() job_url = "{}/{}".format(jobname, jobid) - request_url = "{}{}".format(self.request_endpoint, self._encode_uri_component(job_url)) + request_url = "{}{}".format(self._request_endpoint, self._encode_uri_component(job_url)) custom_args["url"] = request_url custom_args["json"] = {"request": "cancel", "version": modify_version} @@ -111,7 +111,7 @@ def delete_job(self, jobname, jobid, modify_version="2.0"): custom_args = self._create_custom_request_arguments() job_url = "{}/{}".format(jobname, jobid) - request_url = "{}{}".format(self.request_endpoint, self._encode_uri_component(job_url)) + request_url = "{}{}".format(self._request_endpoint, self._encode_uri_component(job_url)) custom_args["url"] = request_url custom_args["headers"]["X-IBM-Job-Modify-Version"] = modify_version @@ -121,7 +121,7 @@ def delete_job(self, jobname, jobid, modify_version="2.0"): def _issue_job_request(self, req: dict, jobname: str, jobid: str, modify_version): custom_args = self._create_custom_request_arguments() job_url = "{}/{}".format(jobname, jobid) - request_url = "{}{}".format(self.request_endpoint, self._encode_uri_component(job_url)) + request_url = "{}{}".format(self._request_endpoint, self._encode_uri_component(job_url)) custom_args["url"] = request_url custom_args["json"] = {**req, "version": modify_version} @@ -314,7 +314,7 @@ def get_spool_files(self, correlator): """ custom_args = self._create_custom_request_arguments() job_url = "{}/files".format(correlator) - request_url = "{}{}".format(self.request_endpoint, self._encode_uri_component(job_url)) + request_url = "{}{}".format(self._request_endpoint, self._encode_uri_component(job_url)) custom_args["url"] = request_url response_json = self.request_handler.perform_request("GET", custom_args) return response_json @@ -333,7 +333,7 @@ def get_jcl_text(self, correlator): """ custom_args = self._create_custom_request_arguments() job_url = "{}/files/JCL/records".format(correlator) - request_url = "{}{}".format(self.request_endpoint, self._encode_uri_component(job_url)) + request_url = "{}{}".format(self._request_endpoint, self._encode_uri_component(job_url)) custom_args["url"] = request_url response_json = self.request_handler.perform_request("GET", custom_args) return response_json @@ -357,7 +357,7 @@ def get_spool_file_contents(self, correlator, id): """ custom_args = self._create_custom_request_arguments() job_url = "{}/files/{}/records".format(correlator, id) - request_url = "{}{}".format(self.request_endpoint, self._encode_uri_component(job_url)) + request_url = "{}{}".format(self._request_endpoint, self._encode_uri_component(job_url)) custom_args["url"] = request_url response_json = self.request_handler.perform_request("GET", custom_args) return response_json diff --git a/src/zos_tso/zowe/zos_tso_for_zowe_sdk/tso.py b/src/zos_tso/zowe/zos_tso_for_zowe_sdk/tso.py index 91cdf772..59291cc7 100644 --- a/src/zos_tso/zowe/zos_tso_for_zowe_sdk/tso.py +++ b/src/zos_tso/zowe/zos_tso_for_zowe_sdk/tso.py @@ -130,7 +130,7 @@ def send_tso_message(self, session_key, message): A non-normalized list from TSO containing the result from the command """ custom_args = self._create_custom_request_arguments() - custom_args["url"] = "{}/{}".format(self.request_endpoint, str(session_key)) + custom_args["url"] = "{}/{}".format(self._request_endpoint, str(session_key)) # z/OSMF TSO API requires json to be formatted in specific way without spaces request_json = {"TSO RESPONSE": {"VERSION": "0100", "DATA": str(message)}} custom_args["data"] = json.dumps(request_json, separators=(",", ":")) @@ -152,7 +152,7 @@ def ping_tso_session(self, session_key): Where the options are: 'Ping successful' or 'Ping failed' """ custom_args = self._create_custom_request_arguments() - custom_args["url"] = "{}/{}/{}".format(self.request_endpoint, "ping", str(session_key)) + custom_args["url"] = "{}/{}/{}".format(self._request_endpoint, "ping", str(session_key)) response_json = self.request_handler.perform_request("PUT", custom_args) message_id_list = self.parse_message_ids(response_json) return "Ping successful" if self.session_not_found not in message_id_list else "Ping failed" @@ -171,7 +171,7 @@ def end_tso_session(self, session_key): A string informing if the session was terminated successfully or not """ custom_args = self._create_custom_request_arguments() - custom_args["url"] = "{}/{}".format(self.request_endpoint, session_key) + custom_args["url"] = "{}/{}".format(self._request_endpoint, session_key) response_json = self.request_handler.perform_request("DELETE", custom_args) message_id_list = self.parse_message_ids(response_json) return "Session ended" if self.session_not_found not in message_id_list else "Session already ended" @@ -208,6 +208,6 @@ def retrieve_tso_messages(self, response_json): def __get_tso_data(self, session_key): custom_args = self._create_custom_request_arguments() - custom_args["url"] = "{}/{}".format(self.request_endpoint, session_key) + custom_args["url"] = "{}/{}".format(self._request_endpoint, session_key) command_output = self.request_handler.perform_request("GET", custom_args)["tsoData"] return command_output diff --git a/src/zosmf/zowe/zosmf_for_zowe_sdk/zosmf.py b/src/zosmf/zowe/zosmf_for_zowe_sdk/zosmf.py index 577e3fd3..554facf0 100644 --- a/src/zosmf/zowe/zosmf_for_zowe_sdk/zosmf.py +++ b/src/zosmf/zowe/zosmf_for_zowe_sdk/zosmf.py @@ -9,6 +9,7 @@ Copyright Contributors to the Zowe project. """ + from zowe.core_for_zowe_sdk import SdkApi @@ -41,7 +42,7 @@ def get_info(self): json A JSON containing the z/OSMF Info REST API data """ - response_json = self.request_handler.perform_request("GET", self.request_arguments) + response_json = self.request_handler.perform_request("GET", self._request_arguments) return response_json def list_systems(self): @@ -53,6 +54,6 @@ def list_systems(self): """ custom_args = self._create_custom_request_arguments() - custom_args["url"] = "{}/systems".format(self.request_endpoint) + custom_args["url"] = "{}/systems".format(self._request_endpoint) response_json = self.request_handler.perform_request("GET", custom_args, expected_code=[200]) return response_json diff --git a/tests/integration/test_zos_console.py b/tests/integration/test_zos_console.py index 33e8d804..83104967 100644 --- a/tests/integration/test_zos_console.py +++ b/tests/integration/test_zos_console.py @@ -1,4 +1,5 @@ """Integration tests for the Zowe Python SDK z/OS Console package.""" + import unittest from zowe.core_for_zowe_sdk import ProfileManager diff --git a/tests/integration/test_zos_files.py b/tests/integration/test_zos_files.py index 549cae8d..b1a40163 100644 --- a/tests/integration/test_zos_files.py +++ b/tests/integration/test_zos_files.py @@ -89,15 +89,15 @@ def test_write_to_dsn_should_be_possible(self): command_output = self.files.write_to_dsn(self.test_member_generic, "HELLO WORLD") self.assertTrue(command_output == "") - def test_copy_uss_to_dataset_should_be_possible(self): - """Executing copy_uss_to_dataset should be possible.""" - command_output = self.files.copy_uss_to_dataset( + def test_copy_uss_to_data_set_should_be_possible(self): + """Executing copy_uss_to_data_set should be possible.""" + command_output = self.files.copy_uss_to_data_set( self.files_fixtures["TEST_USS"], self.files_fixtures["TEST_PDS"] + "(TEST2)", replace=True ) self.assertTrue(command_output == "") - def test_copy_dataset_or_member_should_be_possible(self): - """Executing copy_dataset_or_member should be possible.""" + def test_copy_data_set_or_member_should_be_possible(self): + """Executing copy_data_set_or_member should be possible.""" test_case = { "from_dataset_name": self.files_fixtures["TEST_PDS"], "to_dataset_name": self.files_fixtures["TEST_PDS"], @@ -105,7 +105,7 @@ def test_copy_dataset_or_member_should_be_possible(self): "to_member_name": "TEST", "replace": True, } - command_output = self.files.copy_dataset_or_member(**test_case) + command_output = self.files.copy_data_set_or_member(**test_case) self.assertTrue(command_output == "") def test_mount_unmount_zfs_file_system(self): diff --git a/tests/unit/core/test_profile_manager.py b/tests/unit/core/test_profile_manager.py index acc835d7..95df9833 100644 --- a/tests/unit/core/test_profile_manager.py +++ b/tests/unit/core/test_profile_manager.py @@ -17,7 +17,7 @@ ProfileManager, constants, custom_warnings, - exceptions + exceptions, ) FIXTURES_PATH = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "fixtures") @@ -30,6 +30,7 @@ def keyring_get_password(serviceName: str, username: str): global SECURE_CONFIG_PROPS return SECURE_CONFIG_PROPS + def keyring_get_password_exception(): raise Exception @@ -254,27 +255,31 @@ def test_profile_empty_exception(self, get_pass_func, mock_logger_error: mock.Ma # Test self.setUpCreds(cwd_up_file_path, secure_props={}) config_file = ConfigFile(name=self.custom_appname, type="team_config") - props: dict = config_file.get_profile(profile_name=None,profile_type=None,validate_schema=False) - self.assertEqual(mock_logger_error.call_args[0][0], "Failed to load profile: profile_name and profile_type were not provided.") + props: dict = config_file.get_profile(profile_name=None, profile_type=None, validate_schema=False) + self.assertEqual( + mock_logger_error.call_args[0][0], + "Failed to load profile: profile_name and profile_type were not provided.", + ) @mock.patch("logging.Logger.error") @mock.patch("logging.Logger.warning") @mock.patch("zowe.secrets_for_zowe_sdk.keyring.get_password", side_effect=keyring_get_password) - def test_get_profilename_from_profiletype_invalid_profile_type(self, get_pass_func, mock_logger_warning: mock.MagicMock, mock_logger_error: mock.MagicMock): + def test_get_profilename_from_profiletype_invalid_profile_type( + self, get_pass_func, mock_logger_warning: mock.MagicMock, mock_logger_error: mock.MagicMock + ): """ Test correct warnings and exceptions are being thrown with empty default, invalid profile type. """ with self.assertRaises(exceptions.ProfileNotFound): - config_file = ConfigFile(name="name", type="team_config", defaults={}, profiles={'a': {'none' : 'none'}}) - config_file.get_profilename_from_profiletype('test') + config_file = ConfigFile(name="name", type="team_config", defaults={}, profiles={"a": {"none": "none"}}) + config_file.get_profilename_from_profiletype("test") mock_logger_warning.assert_any_call("Given profile type 'test' has no default profile name") mock_logger_warning.assert_any_call("Profile 'a' has no type attribute") mock_logger_error.assert_called_once_with("No profile with matching profile_type 'test' found") - @mock.patch("logging.Logger.warning") @mock.patch("zowe.secrets_for_zowe_sdk.keyring.get_password", side_effect=keyring_get_password) def test_validate_schema_logger(self, get_pass_func, mock_logger_warning: mock.MagicMock): @@ -507,7 +512,6 @@ def test_profile_loading_with_valid_schema(self, get_pass_func): prof_manager.config_dir = self.custom_dir props: dict = prof_manager.load(profile_name="zosmf") - @mock.patch("zowe.secrets_for_zowe_sdk.keyring.get_password", side_effect=keyring_get_password) def test_profile_loading_with_invalid_schema(self, get_pass_func): """ @@ -533,7 +537,7 @@ def test_profile_loading_with_invalid_schema(self, get_pass_func): "profiles.zosmf.properties.password": "password", }, ) - + # Test prof_manager = ProfileManager(appname="invalid.zowe") prof_manager.config_dir = self.custom_dir @@ -616,7 +620,7 @@ def test_get_highest_priority_layer(self): # Set up the ProfileManager profile_manager = ProfileManager() - profile_manager.project_user_config = project_user_config + profile_manager._ProfileManager__project_user_config = project_user_config project_user_config.get_profile_name_from_path.return_value = "zosmf" # Call the function being tested result_layer = profile_manager.get_highest_priority_layer("zosmf") @@ -816,4 +820,4 @@ def test_config_file_save(self, mock_save_secure_props): self.assertNotIn("user", config_file.jsonc["profiles"]["lpar1"]["properties"]) self.assertEqual( ["port"], list(config_file.jsonc["profiles"]["lpar1"]["profiles"]["zosmf"]["properties"].keys()) - ) \ No newline at end of file + ) diff --git a/tests/unit/core/test_sdk_api.py b/tests/unit/core/test_sdk_api.py index eda522ef..91d6838f 100644 --- a/tests/unit/core/test_sdk_api.py +++ b/tests/unit/core/test_sdk_api.py @@ -5,10 +5,8 @@ from unittest import mock from pyfakefs.fake_filesystem_unittest import TestCase -from zowe.core_for_zowe_sdk import ( - SdkApi, - session_constants -) +from zowe.core_for_zowe_sdk import SdkApi, session_constants + class TestSdkApiClass(TestCase): """SdkApi class unit tests.""" @@ -53,7 +51,7 @@ def test_should_handle_basic_auth(self): sdk_api = SdkApi(self.basic_props, self.default_url) self.assertEqual(sdk_api.session.type, session_constants.AUTH_TYPE_BASIC) self.assertEqual( - sdk_api.request_arguments["auth"], + sdk_api._request_arguments["auth"], (self.basic_props["user"], self.basic_props["password"]), ) @@ -62,7 +60,7 @@ def test_should_handle_bearer_auth(self): sdk_api = SdkApi(self.bearer_props, self.default_url) self.assertEqual(sdk_api.session.type, session_constants.AUTH_TYPE_BEARER) self.assertEqual( - sdk_api.default_headers["Authorization"], + sdk_api._default_headers["Authorization"], "Bearer " + self.bearer_props["tokenValue"], ) @@ -71,7 +69,7 @@ def test_should_handle_token_auth(self): sdk_api = SdkApi(self.token_props, self.default_url) self.assertEqual(sdk_api.session.type, session_constants.AUTH_TYPE_TOKEN) self.assertEqual( - sdk_api.default_headers["Cookie"], + sdk_api._default_headers["Cookie"], self.token_props["tokenType"] + "=" + self.token_props["tokenValue"], ) @@ -90,4 +88,4 @@ def test_encode_uri_component(self): actual_none = sdk_api._encode_uri_component(None) expected_none = None - self.assertEqual(actual_none, expected_none) \ No newline at end of file + self.assertEqual(actual_none, expected_none) diff --git a/tests/unit/files/datasets/test_copy.py b/tests/unit/files/datasets/test_copy.py index af820698..6461061a 100644 --- a/tests/unit/files/datasets/test_copy.py +++ b/tests/unit/files/datasets/test_copy.py @@ -17,16 +17,18 @@ def setUp(self): } @mock.patch("requests.Session.send") - def test_copy_uss_to_dataset(self, mock_send_request): - """Test copy_uss_to_dataset sends a request""" + def test_copy_uss_to_data_set(self, mock_send_request): + """Test copy_uss_to_data_set sends a request""" mock_send_request.return_value = mock.Mock(headers={"Content-Type": "application/json"}, status_code=200) - Files(self.test_profile).copy_uss_to_dataset("from_filename", "to_dataset_name", "to_member_name", replace=True) + Files(self.test_profile).copy_uss_to_data_set( + "from_filename", "to_dataset_name", "to_member_name", replace=True + ) mock_send_request.assert_called_once() - def test_copy_dataset_or_member_raises_exception(self): + def test_copy_data_set_or_member_raises_exception(self): """Test copying a data set or member raises error when assigning invalid values to enq parameter""" test_case = { @@ -38,11 +40,11 @@ def test_copy_dataset_or_member_raises_exception(self): "replace": True, } with self.assertRaises(ValueError) as e_info: - Files(self.test_profile).copy_dataset_or_member(**test_case) + Files(self.test_profile).copy_data_set_or_member(**test_case) self.assertEqual(str(e_info.exception), "Invalid value for enq.") @mock.patch("requests.Session.send") - def test_copy_dataset_or_member(self, mock_send_request): + def test_copy_data_set_or_member(self, mock_send_request): """Test copying a data set or member sends a request""" mock_send_request.return_value = mock.Mock(headers={"Content-Type": "application/json"}, status_code=200) @@ -69,5 +71,5 @@ def test_copy_dataset_or_member(self, mock_send_request): }, ] for test_case in test_values: - Files(self.test_profile).copy_dataset_or_member(**test_case) + Files(self.test_profile).copy_data_set_or_member(**test_case) mock_send_request.assert_called() diff --git a/tests/unit/files/datasets/test_create.py b/tests/unit/files/datasets/test_create.py index 9a69df12..f5d1dfeb 100644 --- a/tests/unit/files/datasets/test_create.py +++ b/tests/unit/files/datasets/test_create.py @@ -87,7 +87,7 @@ def test_create_data_set_raises_error_with_invalid_arguments_parameterized(self) option = DatasetOption(**test_case) obj = Files(self.test_profile).create_data_set("MY.OLD.ds", options=option) - def test_create_dataset_parameterized(self): + def test_create_data_set_parameterized(self): """Test create dataset with different values""" test_values = [ (DatasetOption(alcunit="CYL", dsorg="PO", primary=1, dirblk=5, recfm="FB", blksize=6160, lrecl=80), True), @@ -121,14 +121,14 @@ def test_create_dataset_parameterized(self): ) @mock.patch("requests.Session.send") - def test_create_default_dataset(self, mock_send_request): + def test_create_default_data_set(self, mock_send_request): """Test creating a default data set sends a request""" mock_send_request.return_value = mock.Mock(headers={"Content-Type": "application/json"}, status_code=201) Files(self.test_profile).create_default_data_set("dataset_name", "partitioned") mock_send_request.assert_called_once() - def test_create_default_dataset_parameterized(self): + def test_create_default_data_set_parameterized(self): """Test create default dataset with different values""" test_values = [ (("DSN", "partitioned"), True), diff --git a/tests/unit/files/datasets/test_migrate.py b/tests/unit/files/datasets/test_migrate.py index 413911ba..48a9925e 100644 --- a/tests/unit/files/datasets/test_migrate.py +++ b/tests/unit/files/datasets/test_migrate.py @@ -1,7 +1,7 @@ import re from unittest import TestCase, mock -from zowe.zos_files_for_zowe_sdk import Files, exceptions, Datasets +from zowe.zos_files_for_zowe_sdk import Datasets, Files, exceptions class TestCreateClass(TestCase): @@ -16,16 +16,16 @@ def setUp(self): "port": 443, "rejectUnauthorized": True, } - + @mock.patch("requests.Session.send") - def test_recall_migrated_dataset(self, mock_send_request): + def test_recall_migrated_data_set(self, mock_send_request): """Test recalling migrated data set sends a request""" mock_send_request.return_value = mock.Mock(headers={"Content-Type": "application/json"}, status_code=200) - Files(self.test_profile).recall_migrated_dataset("dataset_name") + Files(self.test_profile).recall_migrated_data_set("dataset_name") mock_send_request.assert_called_once() - def test_recall_migrated_dataset_parameterized(self): + def test_recall_migrated_data_set_parameterized(self): """Testing recall migrated_dataset with different values""" test_values = [ @@ -42,14 +42,14 @@ def test_recall_migrated_dataset_parameterized(self): data = {"request": "hrecall", "wait": test_case[1]} - files_test_profile.recall_migrated_dataset(test_case[0], test_case[1]) + files_test_profile.recall_migrated_data_set(test_case[0], test_case[1]) custom_args = files_test_profile._create_custom_request_arguments() custom_args["json"] = data custom_args["url"] = "https://mock-url.com:443/zosmf/restfiles/ds/{}".format(test_case[0]) files_test_profile.ds.request_handler.perform_request.assert_called_once_with( "PUT", custom_args, expected_code=[200] ) - + @mock.patch("requests.Session.send") def test_delete_migrated_data_set(self, mock_send_request): """Test deleting a migrated data set sends a request""" @@ -124,4 +124,4 @@ def test_migrate_data_set_parameterized(self): custom_args["url"] = "https://mock-url.com:443/zosmf/restfiles/ds/{}".format(test_case[0]) files_test_profile.ds.request_handler.perform_request.assert_called_once_with( "PUT", custom_args, expected_code=[200] - ) \ No newline at end of file + ) diff --git a/tests/unit/files/datasets/test_rename.py b/tests/unit/files/datasets/test_rename.py index c3a70b49..1adb26d0 100644 --- a/tests/unit/files/datasets/test_rename.py +++ b/tests/unit/files/datasets/test_rename.py @@ -1,7 +1,7 @@ import re from unittest import TestCase, mock -from zowe.zos_files_for_zowe_sdk import Files, exceptions, Datasets +from zowe.zos_files_for_zowe_sdk import Datasets, Files, exceptions class TestCreateClass(TestCase): @@ -18,14 +18,14 @@ def setUp(self): } @mock.patch("requests.Session.send") - def test_rename_dataset(self, mock_send_request): + def test_rename_data_set(self, mock_send_request): """Test renaming dataset sends a request""" mock_send_request.return_value = mock.Mock(headers={"Content-Type": "application/json"}, status_code=200) - Files(self.test_profile).rename_dataset("MY.OLD.DSN", "MY.NEW.DSN") + Files(self.test_profile).rename_data_set("MY.OLD.DSN", "MY.NEW.DSN") mock_send_request.assert_called_once() - def test_rename_dataset_parameterized(self): + def test_rename_data_set_parameterized(self): """Test renaming a dataset with different values""" test_values = [ (("DSN.OLD", "DSN.NEW"), True), @@ -45,7 +45,7 @@ def test_rename_dataset_parameterized(self): }, } - files_test_profile.rename_dataset(test_case[0][0], test_case[0][1]) + files_test_profile.rename_data_set(test_case[0][0], test_case[0][1]) custom_args = files_test_profile._create_custom_request_arguments() custom_args["json"] = data @@ -55,20 +55,20 @@ def test_rename_dataset_parameterized(self): ) @mock.patch("requests.Session.send") - def test_rename_dataset_member(self, mock_send_request): + def test_rename_data_set_member(self, mock_send_request): """Test renaming dataset member sends a request""" mock_send_request.return_value = mock.Mock(headers={"Content-Type": "application/json"}, status_code=200) - Files(self.test_profile).rename_dataset_member("MY.DS.NAME", "MEMBEROLD", "MEMBERNEW") + Files(self.test_profile).rename_data_set_member("MY.DS.NAME", "MEMBEROLD", "MEMBERNEW") mock_send_request.assert_called_once() - def test_rename_dataset_member_raises_exception(self): + def test_rename_data_set_member_raises_exception(self): """Test renaming a dataset member raises error when assigning invalid values to enq parameter""" with self.assertRaises(ValueError) as e_info: - Files(self.test_profile).rename_dataset_member("MY.DS.NAME", "MEMBER1", "MEMBER1N", "RANDOM") + Files(self.test_profile).rename_data_set_member("MY.DS.NAME", "MEMBER1", "MEMBER1N", "RANDOM") self.assertEqual(str(e_info.exception), "Invalid value for enq.") - def test_rename_dataset_member_parameterized(self): + def test_rename_data_set_member_parameterized(self): """Test renaming a dataset member with different values""" test_values = [ (("DSN", "MBROLD$", "MBRNEW$", "EXCLU"), True), @@ -94,7 +94,7 @@ def test_rename_dataset_member_parameterized(self): if len(test_case[0]) > 3: data["enq"] = test_case[0][3].strip() if test_case[1]: - files_test_profile.rename_dataset_member(*test_case[0]) + files_test_profile.rename_data_set_member(*test_case[0]) custom_args = files_test_profile._create_custom_request_arguments() custom_args["json"] = data ds_path = "{}({})".format(test_case[0][0], test_case[0][2]) @@ -107,5 +107,5 @@ def test_rename_dataset_member_parameterized(self): ) else: with self.assertRaises(ValueError) as e_info: - files_test_profile.rename_dataset_member(*test_case[0]) - self.assertEqual(str(e_info.exception), "Invalid value for enq.") \ No newline at end of file + files_test_profile.rename_data_set_member(*test_case[0]) + self.assertEqual(str(e_info.exception), "Invalid value for enq.")