fix pylint

This commit is contained in:
Michael Jerger 2023-05-20 16:14:35 +02:00
parent ce35bc2d54
commit b44751149a
19 changed files with 82 additions and 126 deletions

View file

@ -30,7 +30,7 @@ pylint:
stage: lint&test
script:
- pip install -r dev_requirements.txt
- pylint -d W0511,R0903,C0301,W0614,C0114,C0115,C0116,similarities,W1203,W0702,W0702,R0913,R0902,R0914,R1732 src/main/python/ddadevops/
- pylint -d W0511,R0903,C0301,W0614,C0114,C0115,C0116,similarities,W1203,W0702,W0702,R0913,R0902,R0914,R1732,R1705,W0707,C0123,W0703,C0103 src/main/python/ddadevops/
pytest:
stage: lint&test

View file

@ -1,5 +1,5 @@
from pathlib import Path
from ..domain import Image, Devops, BuildType
from ..domain import Devops, BuildType
from ..infrastructure import FileApi, ResourceApi, ImageApi

View file

@ -1,4 +1,4 @@
from typing import Optional, List
from typing import List
from pathlib import Path
from ..infrastructure import GitApi, BuildFileRepository
from ..domain import Version, Release, ReleaseType
@ -53,8 +53,8 @@ class ReleaseService:
def __set_version_and_commit__(
self, version: Version, build_file_ids: List[str], message: str
):
for id in build_file_ids:
build_file = self.build_file_repository.get(Path(id))
for build_file_id in build_file_ids:
build_file = self.build_file_repository.get(Path(build_file_id))
build_file.set_version(version)
self.build_file_repository.write(build_file)
self.git_api.add_file(build_file.file_path)

View file

@ -49,7 +49,7 @@ class C4kBuild(DevopsBuild):
self.execution_api = ExecutionApi()
devops = self.devops_repo.get_devops(self.project)
if BuildType.C4K not in devops.specialized_builds:
raise ValueError(f"C4kBuild requires BuildType.C4K")
raise ValueError("C4kBuild requires BuildType.C4K")
def update_runtime_config(self, dns_record: DnsRecord):
devops = self.devops_repo.get_devops(self.project)

View file

@ -1,6 +1,5 @@
from typing import Optional
import deprecation
from .domain import Devops, InitService
from .domain import InitService
from .infrastructure import DevopsRepository, FileApi
@ -21,12 +20,12 @@ def get_devops_build(project):
class DevopsBuild:
def __init__(self, project, input: dict):
def __init__(self, project, inp: dict):
self.project = project
self.file_api = FileApi()
self.init_service = InitService.prod(project.basedir)
self.devops_repo = DevopsRepository()
devops = self.init_service.initialize(input)
devops = self.init_service.initialize(inp)
self.devops_repo.set_devops(self.project, devops)
self.project.set_property("build", self)

View file

@ -1,4 +1,3 @@
from typing import Optional
import deprecation
from .domain import BuildType
from .application import ImageBuildService
@ -33,12 +32,12 @@ def create_devops_docker_build_config(
class DevopsImageBuild(DevopsBuild):
def __init__(self, project, input: dict):
super().__init__(project, input)
def __init__(self, project, inp: dict):
super().__init__(project, inp)
self.image_build_service = ImageBuildService.prod()
devops = self.devops_repo.get_devops(self.project)
if BuildType.IMAGE not in devops.specialized_builds:
raise ValueError(f"ImageBuild requires BuildType.IMAGE")
raise ValueError("ImageBuild requires BuildType.IMAGE")
def initialize_build_dir(self):
super().initialize_build_dir()

View file

@ -1,16 +1,9 @@
from enum import Enum
from typing import Optional
from pathlib import Path
import re
import json
from .common import (
Validateable,
Devops,
ReleaseType,
)
from .version import (
Version,
)
import re
from enum import Enum
from pathlib import Path
from .common import Validateable
from .version import Version
class BuildFileType(Enum):
@ -110,18 +103,12 @@ class BuildFile(Validateable):
)
self.content = substitute
case BuildFileType.JAVA_CLOJURE:
version_line = re.search("\\(defproject .*\n", self.content)
version_line_group = version_line.group()
# TODO: we should stick here on defproject instead of first line!
version_string = re.search(
"[0-9]*\\.[0-9]*\\.[0-9]*(-SNAPSHOT)?", version_line_group
)
version_str = version_string.group()
substitute = re.sub(
'"[0-9]*\\.[0-9]*\\.[0-9]*(-SNAPSHOT)?"',
f'"{new_version.to_string()}"',
self.content,
1
1,
)
self.content = substitute
except:

View file

@ -7,18 +7,18 @@ from .common import (
class C4k(Validateable):
def __init__(self, input: dict):
self.module = input.get("module")
self.stage = input.get("stage")
self.c4k_executable_name = input.get("c4k_executable_name", input.get("module"))
self.c4k_config = input.get("c4k_config", {})
self.c4k_grafana_cloud_url = input.get(
def __init__(self, inp: dict):
self.module = inp.get("module")
self.stage = inp.get("stage")
self.c4k_executable_name = inp.get("c4k_executable_name", inp.get("module"))
self.c4k_config = inp.get("c4k_config", {})
self.c4k_grafana_cloud_url = inp.get(
"c4k_grafana_cloud_url",
"https://prometheus-prod-01-eu-west-0.grafana.net/api/prom/push",
)
self.c4k_auth = input.get("c4k_auth", {})
self.c4k_grafana_cloud_user = input.get('c4k_grafana_cloud_user')
self.c4k_grafana_cloud_password = input.get('c4k_grafana_cloud_password')
self.c4k_auth = inp.get("c4k_auth", {})
self.c4k_grafana_cloud_user = inp.get('c4k_grafana_cloud_user')
self.c4k_grafana_cloud_password = inp.get('c4k_grafana_cloud_password')
self.dns_record: Optional[DnsRecord] = None
# TODO: these functions should be located at TerraformBuild later on.

View file

@ -1,7 +1,5 @@
import deprecation
from enum import Enum
from typing import List, TypedDict
import deprecation
from typing import List
def filter_none(list_to_filter):
@ -70,15 +68,15 @@ class DnsRecord(Validateable):
class Devops(Validateable):
def __init__(
self,
input: dict,
inp: dict,
specialized_builds: dict[BuildType, Validateable],
mixins: dict[MixinType, Validateable],
):
self.stage = input.get("stage")
self.project_root_path = input.get("project_root_path")
self.module = input.get("module")
self.name = input.get("name", self.module)
self.build_dir_name = input.get("build_dir_name", "target")
self.stage = inp.get("stage")
self.project_root_path = inp.get("project_root_path")
self.module = inp.get("module")
self.name = inp.get("name", self.module)
self.build_dir_name = inp.get("build_dir_name", "target")
self.specialized_builds = specialized_builds
self.mixins = mixins
@ -99,15 +97,3 @@ class Devops(Validateable):
for mixin in self.mixins:
result += self.mixins[mixin].validate()
return result
def __put__(self, key, value):
self.stack[key] = value
def __get(self, key):
return self.stack[key]
def __get_keys__(self, keys):
result = {}
for key in keys:
result[key] = self.__get(key)
return result

View file

@ -1,8 +1,6 @@
import deprecation
from enum import Enum
from typing import List, TypedDict
from typing import List
from inflection import underscore
import deprecation
from .common import (
Validateable,
)
@ -23,7 +21,7 @@ class CredentialMapping(Validateable):
result = []
result += self.__validate_is_not_empty__("gopass_path")
if not self.name and not self.gopass_field:
result.append(f"Either name or gopass field has to be defined.")
result.append("Either name or gopass field has to be defined.")
return result
def gopass_type(self):
@ -46,14 +44,14 @@ class CredentialMapping(Validateable):
class Credentials(Validateable):
def __init__(self, input: dict, default_mappings: list = []):
input_mappings = input.get("credentials_mapping", [])
def __init__(self, inp: dict, default_mappings: list = []):
inp_mappings = inp.get("credentials_mapping", [])
self.mappings = {}
for input_mapping in default_mappings:
mapping = CredentialMapping(input_mapping)
for inp_mapping in default_mappings:
mapping = CredentialMapping(inp_mapping)
self.mappings[mapping.name_for_input()] = mapping
for input_mapping in input_mappings:
mapping = CredentialMapping(input_mapping)
for inp_mapping in inp_mappings:
mapping = CredentialMapping(inp_mapping)
self.mappings[mapping.name_for_input()] = mapping
def validate(self) -> List[str]:

View file

@ -1,5 +1,3 @@
import deprecation
from enum import Enum
from typing import List, Optional, Dict
from .common import Validateable, Devops, BuildType, MixinType
from .image import Image
@ -12,28 +10,28 @@ class DevopsFactory:
def __init__(self):
pass
def build_devops(self, input: dict, version: Optional[Version] = None) -> Devops:
build_types = self.__parse_build_types__(input["build_types"])
mixin_types = self.__parse_mixin_types__(input["mixin_types"])
def build_devops(self, inp: dict, version: Optional[Version] = None) -> Devops:
build_types = self.__parse_build_types__(inp["build_types"])
mixin_types = self.__parse_mixin_types__(inp["mixin_types"])
specialized_builds: Dict[BuildType, Validateable] = {}
if BuildType.IMAGE in build_types:
specialized_builds[BuildType.IMAGE] = Image(input)
specialized_builds[BuildType.IMAGE] = Image(inp)
if BuildType.C4K in build_types:
specialized_builds[BuildType.C4K] = C4k(input)
specialized_builds[BuildType.C4K] = C4k(inp)
mixins: Dict[MixinType, Validateable] = {}
if MixinType.RELEASE in mixin_types:
mixins[MixinType.RELEASE] = Release(input, version)
mixins[MixinType.RELEASE] = Release(inp, version)
devops = Devops(input, specialized_builds=specialized_builds, mixins=mixins)
devops = Devops(inp, specialized_builds=specialized_builds, mixins=mixins)
devops.throw_if_invalid()
return devops
def merge(self, input: dict, context: dict, authorization: dict) -> dict:
return {} | context | authorization | input
def merge(self, inp: dict, context: dict, authorization: dict) -> dict:
return {} | context | authorization | inp
def __parse_build_types__(self, build_types: List[str]) -> List[BuildType]:
result = []

View file

@ -1,4 +1,4 @@
from typing import Optional, List
from typing import List
from .common import (
filter_none,
Validateable,
@ -8,16 +8,16 @@ from .common import (
class Image(Validateable):
def __init__(
self,
input: dict,
inp: dict,
):
self.image_dockerhub_user = input.get("image_dockerhub_user")
self.image_dockerhub_password = input.get("image_dockerhub_password")
self.image_tag = input.get("image_tag")
self.image_build_commons_path = input.get("image_build_commons_path")
self.image_use_package_common_files = input.get(
self.image_dockerhub_user = inp.get("image_dockerhub_user")
self.image_dockerhub_password = inp.get("image_dockerhub_password")
self.image_tag = inp.get("image_tag")
self.image_build_commons_path = inp.get("image_build_commons_path")
self.image_use_package_common_files = inp.get(
"image_use_package_common_files", True
)
self.image_build_commons_dir_name = input.get(
self.image_build_commons_dir_name = inp.get(
"image_build_commons_dir_name", "docker"
)

View file

@ -1,9 +1,8 @@
from pathlib import Path
from typing import List, Dict
from typing import Dict
from .common import Devops, MixinType, BuildType
from .credentials import CredentialMapping, Credentials, GopassType
from .devops_factory import DevopsFactory
from .version import Version
from .release import ReleaseType
from ..infrastructure import BuildFileRepository, CredentialsApi, EnvironmentApi, GitApi
@ -33,9 +32,9 @@ class InitService:
GitApi(),
)
def initialize(self, input: dict) -> Devops:
build_types = self.devops_factory.__parse_build_types__(input["build_types"])
mixin_types = self.devops_factory.__parse_mixin_types__(input["mixin_types"])
def initialize(self, inp: dict) -> Devops:
build_types = self.devops_factory.__parse_build_types__(inp["build_types"])
mixin_types = self.devops_factory.__parse_mixin_types__(inp["mixin_types"])
version = None
default_mappings = []
@ -66,7 +65,7 @@ class InitService:
]
if MixinType.RELEASE in mixin_types:
primary_build_file_id = input.get(
primary_build_file_id = inp.get(
"release_primary_build_file", "./project.clj"
)
primary_build_file = self.build_file_repository.get(
@ -74,12 +73,12 @@ class InitService:
)
version = primary_build_file.get_version()
credentials = Credentials(input, default_mappings)
credentials = Credentials(inp, default_mappings)
authorization = self.authorization(credentials)
context = self.context(mixin_types, version)
merged = self.devops_factory.merge(input, context, authorization)
merged = self.devops_factory.merge(inp, context, authorization)
return self.devops_factory.build_devops(merged, version=version)

View file

@ -1,9 +1,7 @@
from enum import Enum
from typing import Optional, List
from pathlib import Path
from .common import (
Validateable,
Devops,
ReleaseType,
)
from .version import (
@ -12,14 +10,14 @@ from .version import (
class Release(Validateable):
def __init__(self, input: dict, version: Optional[Version]):
self.release_type = ReleaseType[input.get("release_type", "NONE")]
self.release_main_branch = input.get("release_main_branch", "main")
self.release_current_branch = input.get("release_current_branch")
self.release_primary_build_file = input.get(
def __init__(self, inp: dict, version: Optional[Version]):
self.release_type = ReleaseType[inp.get("release_type", "NONE")]
self.release_main_branch = inp.get("release_main_branch", "main")
self.release_current_branch = inp.get("release_current_branch")
self.release_primary_build_file = inp.get(
"release_primary_build_file", "./project.clj"
)
self.release_secondary_build_files = input.get(
self.release_secondary_build_files = inp.get(
"release_secondary_build_files", []
)
self.version = version

View file

@ -1,4 +1,3 @@
from enum import Enum
from typing import Optional
from .common import (
Validateable,
@ -37,7 +36,7 @@ class Version(Validateable):
return self.to_string().__hash__()
def is_snapshot(self):
return not self.snapshot_suffix == None
return not self.snapshot_suffix is None
def to_string(self) -> str:
version_no = ".".join([str(x) for x in self.version_list])
@ -49,7 +48,7 @@ class Version(Validateable):
result = []
result += self.__validate_is_not_empty__("version_list")
if self.version_list and len(self.version_list) < 3:
result += [f"version_list must have at least 3 levels."]
result += ["version_list must have at least 3 levels."]
if (
self.version_list
and self.version_string

View file

@ -1,10 +1,9 @@
from subprocess import check_output, Popen, PIPE, run
from pathlib import Path
from sys import stdout
from os import chmod, environ
from pkg_resources import resource_string
import yaml
from subprocess import check_output, Popen, PIPE, run
from ..domain import Devops, Image, C4k, Release, BuildFile
class ResourceApi:
@ -99,7 +98,7 @@ class ExecutionApi:
output = output.rstrip()
return output
def execute_live(command):
def execute_live(self, command):
process = Popen(command, stdout=PIPE)
for line in iter(process.stdout.readline, b""):
print(line.decode("utf-8"), end="")

View file

@ -1,12 +1,6 @@
from pathlib import Path
from sys import stdout
from os import chmod
from subprocess import run
from pkg_resources import resource_string
import yaml
import deprecation
from ..domain import Devops, Image, C4k, Release, BuildFile
from ..python_util import execute
from ..domain.common import Devops
from ..domain.build_file import BuildFile
class DevopsRepository:

View file

@ -5,12 +5,12 @@ from .domain import MixinType
class ReleaseMixin(DevopsBuild):
def __init__(self, project: Project, input: dict):
super().__init__(project, input)
def __init__(self, project: Project, inp: dict):
super().__init__(project, inp)
self.release_service = ReleaseService.prod(project.basedir)
devops = self.devops_repo.get_devops(self.project)
if MixinType.RELEASE not in devops.mixins:
raise ValueError(f"ReleaseMixin requires MixinType.RELEASE")
raise ValueError("ReleaseMixin requires MixinType.RELEASE")
def prepare_release(self):
devops = self.devops_repo.get_devops(self.project)