import json import os from string import ascii_letters from cpl_core.utils import String from cpl_core.console import Console from cpl_core.environment import ApplicationEnvironmentABC class VersionSetterService: def __init__(self, env: ApplicationEnvironmentABC): self._env = env def _read_file(self, file: str) -> dict: project_json = {} with open(os.path.join(self._env.working_directory, file), 'r', encoding='utf-8') as f: # load json project_json = json.load(f) f.close() return project_json def _write_file(self, file: str, project_json: dict): with open(os.path.join(self._env.working_directory, file), 'w', encoding='utf-8') as f: f.write(json.dumps(project_json, indent=2)) f.close() def set_version(self, file: str, version: dict): project_json = self._read_file(file) project_json['ProjectSettings']['Version'] = version self._write_file(file, project_json) def set_dependencies(self, file: str, version: dict, key: str, skipped=None): project_json = self._read_file(file) if key not in project_json['ProjectSettings']: project_json['ProjectSettings'][key] = [] dependencies = project_json['ProjectSettings'][key] new_deps = [] for dependency in dependencies: if not dependency.startswith('cpl-'): new_deps.append(dependency) continue dep_version = dependency.split('=')[1] dep_name = dependency.split('=')[0] if dep_name[len(dep_name)-1] not in ascii_letters: dep_name = dep_name[:len(dep_name)-1] if skipped is not None and (dep_name in skipped or String.convert_to_snake_case(dep_name) in skipped): new_deps.append(dependency) continue new_deps.append(dependency.replace(dep_version, f'{version["Major"]}.{version["Minor"]}.{version["Micro"]}')) project_json['ProjectSettings'][key] = new_deps self._write_file(file, project_json)