diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index a0f1ba4..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/pyliquibase/__init__.py b/pyliquibase/__init__.py index 7d88691..84314ab 100644 --- a/pyliquibase/__init__.py +++ b/pyliquibase/__init__.py @@ -10,16 +10,6 @@ from pkg_resources import resource_filename -##### loggger -log = logging.getLogger(name="pyliquibase") -log.setLevel(logging.INFO) -handler = logging.StreamHandler(sys.stdout) -handler.setLevel(logging.INFO) -formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') -handler.setFormatter(formatter) -log.addHandler(handler) - -##### DEFAULT_LIQUIBASE_VERSION: str = "4.21.1" LIQUIBASE_ZIP_URL: str = "https://github.com/liquibase/liquibase/releases/download/v{}/liquibase-{}.zip" @@ -46,6 +36,7 @@ def __init__(self, defaultsFile: str, :param additionalClasspath: additional classpath to import java libraries and liquibase extensions """ + self._log = None # if liquibaseDir is provided then switch to user provided liquibase. if liquibaseDir: self.liquibase_dir: str = liquibaseDir.rstrip("/") @@ -81,6 +72,18 @@ def __init__(self, defaultsFile: str, self.cli = self._cli() + @property + def log(self): + if not self._log: + self._log = logging.getLogger("pyliquibase") + self._log.setLevel(logging.INFO) + handler = logging.StreamHandler(sys.stdout) + handler.setLevel(logging.INFO) + formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') + handler.setFormatter(formatter) + self._log.addHandler(handler) + return self._log + def _cli(self): ##### jnius import jnius_config @@ -100,10 +103,10 @@ def _cli(self): if not jnius_config.vm_running: jnius_config.add_classpath(*LIQUIBASE_CLASSPATH) else: - log.warning( + self.log.warning( "VM is already running, can't set classpath/options! classpath: %s" % jnius_config.get_classpath()) - log.debug("classpath: %s" % jnius_config.get_classpath()) + self.log.debug("classpath: %s" % jnius_config.get_classpath()) from jnius import JavaClass, MetaJavaClass, JavaMethod ##### @@ -116,8 +119,8 @@ class LiquibaseCommandLine(JavaClass, metaclass=MetaJavaClass): return LiquibaseCommandLine() def execute(self, *arguments: str): - log.warning("Current working dir is %s" % pathlib.Path.cwd()) - log.debug("Executing liquibase %s" % list(arguments)) + self.log.warning("Current working dir is %s" % pathlib.Path.cwd()) + self.log.debug("Executing liquibase %s" % list(arguments)) rc = self.cli.execute(self.args + list(arguments)) if rc: raise RuntimeError("Liquibase execution failed with exit code:%s" % rc) @@ -137,7 +140,7 @@ def update_to_tag(self, tag: str): param: tag: Name of a tag in the changelog. """ - log.debug("Updating to tag: %s" % tag) + self.log.debug("Updating to tag: %s" % tag) self.execute("update-to-tag", tag) def validate(self): @@ -147,17 +150,17 @@ def status(self): self.execute("status") def rollback(self, tag): - log.debug("Rolling back to tag:%s" % tag) + self.log.debug("Rolling back to tag:%s" % tag) self.execute("rollback", tag) def rollback_to_datetime(self, datetime): - log.debug("Rolling back to %s" % str(datetime)) + self.log.debug("Rolling back to %s" % str(datetime)) self.execute("rollbackToDate", datetime) def changelog_sync(self): """Executes the changelog-sync Liquibase maintenance command. `Reference Documentation `_. """ - log.debug("Marking all undeployed changes as executed in database.") + self.log.debug("Marking all undeployed changes as executed in database.") self.execute("changelog-sync") def changelog_sync_to_tag(self, tag: str): @@ -165,19 +168,19 @@ def changelog_sync_to_tag(self, tag: str): param: tag: Name of a tag in the changelog. """ - log.debug("Marking all undeployed changes as executed up to tag %s in database." % tag) + self.log.debug("Marking all undeployed changes as executed up to tag %s in database." % tag) self.execute("changelog-sync-to-tag", tag) def clear_checksums(self): """Executes the clear-checksums Liquibase maintenance command. `Reference Documentation `_. """ - log.debug("Marking all undeployed changes as executed in database.") + self.log.debug("Marking all undeployed changes as executed in database.") self.execute("clear-checksums") def release_locks(self): """Executes the release-locks Liquibase maintenance command. `Reference Documentation `_. """ - log.debug("Marking all undeployed changes as executed in database.") + self.log.debug("Marking all undeployed changes as executed in database.") self.execute("release-locks") def _download_liquibase(self) -> None: @@ -185,10 +188,10 @@ def _download_liquibase(self) -> None: :return: """ if os.path.exists(self.liquibase_dir): - log.debug("Liquibase version %s found, skipping download..." % str(self.version)) + self.log.debug("Liquibase version %s found, skipping download..." % str(self.version)) else: _file = LIQUIBASE_ZIP_FILE.format(self.version) - log.warning("Downloading Liquibase version: %s ...", self.version) + self.log.warning("Downloading Liquibase version: %s ...", self.version) self._download_zipfile(url=LIQUIBASE_ZIP_URL.format(self.version, self.version), destination=self.liquibase_dir) @@ -208,9 +211,9 @@ def download_additional_java_library(self, url: str, destination_dir: str = None destination_dir = destination_dir if destination_dir else self.liquibase_lib_dir destination_file = "%s/%s" % (destination_dir, lib_file_name) if pathlib.Path(destination_file).exists(): - log.info("File already available skipping download: %s", destination_file) + self.log.info("File already available skipping download: %s", destination_file) else: - log.info("Downloading file: %s to %s", url, destination_file) + self.log.info("Downloading file: %s to %s", url, destination_file) self._download_file(url=url, destination=destination_file) with zipfile.ZipFile(destination_file, 'r') as zip_ref: zip_ref.extractall(destination_dir) @@ -222,10 +225,10 @@ def _download_zipfile(self, url: str, destination: str) -> None: :return: """ with tempfile.NamedTemporaryFile(suffix="_liquibase.zip", delete=False) as tmpfile: - log.info("Downloading %s to %s" % (url, destination)) + self.log.info("Downloading %s to %s" % (url, destination)) self._download_file(url, tmpfile.name) - log.info("Extracting to %s" % (destination)) + self.log.info("Extracting to %s" % (destination)) with zipfile.ZipFile(tmpfile, 'r') as zip_ref: zip_ref.extractall(destination) os.unlink(tmpfile.name) @@ -239,7 +242,7 @@ def _download_file(self, url: str, destination: str) -> None: try: request.urlretrieve(url, destination) except Exception as e: - log.error("Failed to download %s" % url) + self.log.error("Failed to download %s" % url) raise e