diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs
new file mode 100644
index 0000000..b88d491
--- /dev/null
+++ b/.git-blame-ignore-revs
@@ -0,0 +1,5 @@
+# For more information, see:
+# https://docs.github.com/en/repositories/working-with-files/using-files/viewing-a-file#ignore-commits-in-the-blame-view
+
+# Black code formatting of entire repository
+c75775b10b19a361fd8ecfdaccc2bb2f820ea115
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index a9dcb99..c59f584 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1,19 +1,20 @@
-# See https://pre-commit.com for more information
-# See https://pre-commit.com/hooks.html for more hooks
 repos:
-- repo: https://github.com/pre-commit/pre-commit-hooks
-  rev: v4.4.0
-  hooks:
-    - id: trailing-whitespace
-    - id: end-of-file-fixer
-    - id: check-yaml
-    - id: check-added-large-files
-- repo: https://github.com/akaihola/darker
-  rev: 1.7.2
-  hooks:
-    - id: darker
-      args:
-        - --isort
-        - --skip-string-normalization
-      additional_dependencies:
-        - isort~=5.13.1
+  - repo: https://github.com/pre-commit/pre-commit-hooks
+    rev: v3.2.0
+    hooks:
+      - id: trailing-whitespace
+      - id: end-of-file-fixer
+      - id: check-json
+      - id: check-yaml
+      - id: check-added-large-files
+  - repo: https://github.com/astral-sh/ruff-pre-commit
+    rev: v0.3.4
+    hooks:
+      - id: ruff
+        args: ["--fix", "--show-fixes"]
+  - repo: https://github.com/psf/black-pre-commit-mirror
+    rev: 24.3.0
+    hooks:
+      - id: black-jupyter
+        args: ["--skip-string-normalization"]
+        language_version: python3.11
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2fbeb6d..c25eb74 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,9 @@
+## v1.0.1
+### 2024-04-05
+
+This version of HyBIG updates the repository to use `black` code formatting
+throughout. There should be no functional change to the service.
+
 ## v1.0.0
 ### 2024-01-22
 This version of the Harmony Browse Image Generator (HyBIG) contains all
diff --git a/README.md b/README.md
index b79828d..7d9c19a 100644
--- a/README.md
+++ b/README.md
@@ -140,6 +140,39 @@ newest relate of the code (starting at the top of the file).
 ## vX.Y.Z
 ```
 
+### pre-commit hooks:
+
+This repository uses [pre-commit](https://pre-commit.com/) to enable pre-commit
+checking the repository for some coding standard best practices. These include:
+
+* Removing trailing whitespaces.
+* Removing blank lines at the end of a file.
+* JSON files have valid formats.
+* [ruff](https://github.com/astral-sh/ruff) Python linting checks.
+* [black](https://black.readthedocs.io/en/stable/index.html) Python code
+  formatting checks.
+
+To enable these checks:
+
+```bash
+# Install pre-commit Python package as part of test requirements:
+pip install -r tests/pip_test_requirements.txt
+
+# Install the git hook scripts:
+pre-commit install
+
+# (Optional) Run against all files:
+pre-commit run --all-files
+```
+
+When you try to make a new commit locally, `pre-commit` will automatically run.
+If any of the hooks detect non-compliance (e.g., trailing whitespace), that
+hook will state it failed, and also try to fix the issue. You will need to
+review and `git add` the changes before you can make a commit.
+
+It is planned to implement additional hooks, possibly including tools such as
+`mypy`.
+
 ## Releasing a new version of the service:
 
 Once a new Docker image has been published with a new semantic version tag,
diff --git a/docker/service_version.txt b/docker/service_version.txt
index 3eefcb9..7dea76e 100644
--- a/docker/service_version.txt
+++ b/docker/service_version.txt
@@ -1 +1 @@
-1.0.0
+1.0.1
diff --git a/docs/HyBIG-Example-Usage.ipynb b/docs/HyBIG-Example-Usage.ipynb
index fc088ba..a72fa04 100644
--- a/docs/HyBIG-Example-Usage.ipynb
+++ b/docs/HyBIG-Example-Usage.ipynb
@@ -58,6 +58,7 @@
     "\n",
     "# creates an output directory for the downloaded files\n",
     "from pathlib import Path\n",
+    "\n",
     "output_dir = Path('./hybig-output')\n",
     "Path.mkdir(output_dir, exist_ok=True)"
    ]
@@ -79,12 +80,11 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "\n",
     "aster_collection = Collection(id='C1256584478-EEDTEST')\n",
     "aster_granule = 'G1256584570-EEDTEST'\n",
     "\n",
     "measures_collection = Collection(id='C1258119317-EEDTEST')\n",
-    "measures_granule =  'G1258119387-EEDTEST'\n",
+    "measures_granule = 'G1258119387-EEDTEST'\n",
     "\n",
     "harmony_client = Client(env=Environment.UAT)"
    ]
@@ -118,9 +118,7 @@
     "\n",
     "# Specify a request to create a browse image from an MEaSUREs granule:\n",
     "measures_request = Request(\n",
-    "    collection=measures_collection,\n",
-    "    granule_id=measures_granule,\n",
-    "    format=image_format\n",
+    "    collection=measures_collection, granule_id=measures_granule, format=image_format\n",
     ")\n",
     "\n",
     "# Submit the request and wait for it to complete:\n",
@@ -132,8 +130,9 @@
     "Path.mkdir(example1_output_dir, exist_ok=True)\n",
     "downloaded_outputs = [\n",
     "    file_future.result()\n",
-    "    for file_future\n",
-    "    in harmony_client.download_all(measures_job_id, overwrite=True, directory=example1_output_dir)\n",
+    "    for file_future in harmony_client.download_all(\n",
+    "        measures_job_id, overwrite=True, directory=example1_output_dir\n",
+    "    )\n",
     "]"
    ]
   },
@@ -234,7 +233,7 @@
     "    collection=aster_collection,\n",
     "    granule_id=aster_granule,\n",
     "    scale_extent=scale_extent,\n",
-    "    format='image/jpeg'\n",
+    "    format='image/jpeg',\n",
     ")\n",
     "\n",
     "# Submit the request and wait for it to complete:\n",
@@ -246,8 +245,9 @@
     "Path.mkdir(example2_output_dir, exist_ok=True)\n",
     "downloaded_extent_outputs = [\n",
     "    file_future.result()\n",
-    "    for file_future\n",
-    "    in harmony_client.download_all(extent_job_id, overwrite=True, directory=example2_output_dir)\n",
+    "    for file_future in harmony_client.download_all(\n",
+    "        extent_job_id, overwrite=True, directory=example2_output_dir\n",
+    "    )\n",
     "]"
    ]
   },
@@ -312,7 +312,7 @@
     "    collection=measures_collection,\n",
     "    granule_id=measures_granule,\n",
     "    scale_size=scale_sizes,\n",
-    "    format='image/png'\n",
+    "    format='image/png',\n",
     ")\n",
     "\n",
     "# Submit the request and wait for it to complete:\n",
@@ -324,8 +324,9 @@
     "Path.mkdir(example3_output_dir, exist_ok=True)\n",
     "downloaded_scale_size_outputs = [\n",
     "    file_future.result()\n",
-    "    for file_future\n",
-    "    in harmony_client.download_all(scale_size_job_id, overwrite=True, directory=example3_output_dir)\n",
+    "    for file_future in harmony_client.download_all(\n",
+    "        scale_size_job_id, overwrite=True, directory=example3_output_dir\n",
+    "    )\n",
     "]"
    ]
   },
@@ -366,8 +367,9 @@
     "dimensions_request = Request(\n",
     "    collection=measures_collection,\n",
     "    granule_id=measures_granule,\n",
-    "    height=180, width=180,\n",
-    "    format='image/png'\n",
+    "    height=180,\n",
+    "    width=180,\n",
+    "    format='image/png',\n",
     ")\n",
     "\n",
     "# Submit the request and wait for it to complete:\n",
@@ -379,8 +381,9 @@
     "Path.mkdir(example4_output_dir, exist_ok=True)\n",
     "downloaded_dimensions_outputs = [\n",
     "    file_future.result()\n",
-    "    for file_future\n",
-    "    in harmony_client.download_all(dimensions_job_id, overwrite=True, directory=example4_output_dir)\n",
+    "    for file_future in harmony_client.download_all(\n",
+    "        dimensions_job_id, overwrite=True, directory=example4_output_dir\n",
+    "    )\n",
     "]"
    ]
   },
@@ -432,7 +435,7 @@
     "    granule_id=measures_granule,\n",
     "    scale_extent=iceland_extent,\n",
     "    scale_size=iceland_scale_size,\n",
-    "    format='image/png'\n",
+    "    format='image/png',\n",
     ")\n",
     "\n",
     "# Submit the request and wait for it to complete:\n",
@@ -444,8 +447,9 @@
     "Path.mkdir(example5_output_dir, exist_ok=True)\n",
     "downloaded_tiled_outputs = [\n",
     "    file_future.result()\n",
-    "    for file_future\n",
-    "    in harmony_client.download_all(tiled_job_id, overwrite=True, directory=example5_output_dir)\n",
+    "    for file_future in harmony_client.download_all(\n",
+    "        tiled_job_id, overwrite=True, directory=example5_output_dir\n",
+    "    )\n",
     "]"
    ]
   },
diff --git a/harmony_browse_image_generator/__main__.py b/harmony_browse_image_generator/__main__.py
index f6d6295..60ad288 100644
--- a/harmony_browse_image_generator/__main__.py
+++ b/harmony_browse_image_generator/__main__.py
@@ -1,4 +1,5 @@
 """ Run the Harmony Browse Image Generator Adapter via the Harmony CLI. """
+
 from argparse import ArgumentParser
 from sys import argv
 
@@ -9,12 +10,13 @@
 
 
 def main(arguments: list[str]):
-    """ Parse command line arguments and invoke the appropriate method to
-        respond to them
+    """Parse command line arguments and invoke the appropriate method to
+    respond to them
 
     """
-    parser = ArgumentParser(prog=SERVICE_NAME,
-                            description='Run Harmony Browse Image Generator.')
+    parser = ArgumentParser(
+        prog=SERVICE_NAME, description='Run Harmony Browse Image Generator.'
+    )
 
     setup_cli(parser)
     harmony_arguments, _ = parser.parse_known_args(arguments[1:])
diff --git a/harmony_browse_image_generator/adapter.py b/harmony_browse_image_generator/adapter.py
index e6af74e..77d86f7 100644
--- a/harmony_browse_image_generator/adapter.py
+++ b/harmony_browse_image_generator/adapter.py
@@ -6,6 +6,7 @@
     Global Imagery Browse Services (GIBS) compatible browse imagery.
 
 """
+
 from os.path import basename
 from pathlib import Path
 from shutil import rmtree
@@ -33,13 +34,13 @@
 
 
 class BrowseImageGeneratorAdapter(BaseHarmonyAdapter):
-    """ This class extends the BaseHarmonyAdapter class from the
-        harmony-service-lib package to implement HyBIG operations.
+    """This class extends the BaseHarmonyAdapter class from the
+    harmony-service-lib package to implement HyBIG operations.
 
     """
 
     def invoke(self) -> Catalog:
-        """ Adds validation to process_item based invocations. """
+        """Adds validation to process_item based invocations."""
         self.validate_message()
         return super().invoke()
 
@@ -65,14 +66,17 @@ def validate_message(self):
             )
 
     def process_item(self, item: Item, source: HarmonySource) -> Item:
-        """ Processes a single input STAC item. """
+        """Processes a single input STAC item."""
         try:
             working_directory = mkdtemp()
             results = item.clone()
             results.assets = {}
 
-            asset = next(item_asset for item_asset in item.assets.values()
-                         if 'data' in (item_asset.roles or []))
+            asset = next(
+                item_asset
+                for item_asset in item.assets.values()
+                if 'data' in (item_asset.roles or [])
+            )
 
             color_palette = get_color_palette_from_item(item)
 
@@ -82,7 +86,8 @@ def process_item(self, item: Item, source: HarmonySource) -> Item:
                 working_directory,
                 logger=self.logger,
                 cfg=self.config,
-                access_token=self.message.accessToken)
+                access_token=self.message.accessToken,
+            )
 
             # Create browse images.
             image_file_list = create_browse_imagery(
@@ -98,14 +103,15 @@ def process_item(self, item: Item, source: HarmonySource) -> Item:
             # locations to a list before creating the stac item.
             item_assets = []
 
-            for browse_image_name, world_file_name, aux_xml_file_name in image_file_list:
+            for (
+                browse_image_name,
+                world_file_name,
+                aux_xml_file_name,
+            ) in image_file_list:
                 # Stage the images:
-                browse_image_url = self.stage_output(browse_image_name,
-                                                     asset.href)
-                browse_aux_url = self.stage_output(aux_xml_file_name,
-                                                   asset.href)
-                world_file_url = self.stage_output(world_file_name,
-                                                   asset.href)
+                browse_image_url = self.stage_output(browse_image_name, asset.href)
+                browse_aux_url = self.stage_output(aux_xml_file_name, asset.href)
+                world_file_url = self.stage_output(world_file_name, asset.href)
                 item_assets.append(('data', browse_image_url, 'data'))
                 item_assets.append(('metadata', world_file_url, 'metadata'))
                 item_assets.append(('auxiliary', browse_aux_url, 'metadata'))
@@ -122,27 +128,28 @@ def process_item(self, item: Item, source: HarmonySource) -> Item:
             rmtree(working_directory)
 
     def stage_output(self, transformed_file: Path, input_file: str) -> str:
-        """ Generate an output file name based on the input asset URL and the
-            operations performed to produce the output. Use this name to stage
-            the output in the S3 location specified in the input Harmony
-            message.
+        """Generate an output file name based on the input asset URL and the
+        operations performed to produce the output. Use this name to stage
+        the output in the S3 location specified in the input Harmony
+        message.
 
         """
 
         ext = get_tiled_file_extension(transformed_file)
-        output_file_name = generate_output_filename(
-            input_file, ext=ext
+        output_file_name = generate_output_filename(input_file, ext=ext)
+
+        return stage(
+            transformed_file,
+            output_file_name,
+            get_file_mime_type(transformed_file),
+            location=self.message.stagingLocation,
+            logger=self.logger,
+            cfg=self.config,
         )
 
-        return stage(transformed_file,
-                     output_file_name,
-                     get_file_mime_type(transformed_file),
-                     location=self.message.stagingLocation,
-                     logger=self.logger,
-                     cfg=self.config)
-
-    def create_output_stac_item(self, input_stac_item: Item,
-                                item_assets: list[tuple[str, str, str]]) -> Item:
+    def create_output_stac_item(
+        self, input_stac_item: Item, item_assets: list[tuple[str, str, str]]
+    ) -> Item:
         """Create an output STAC item used to access the browse imagery and
             ESRI world file as staged in S3.
 
@@ -162,14 +169,17 @@ def create_output_stac_item(self, input_stac_item: Item,
             asset_name = get_asset_name(name, url)
 
             output_stac_item.assets[asset_name] = Asset(
-                url, title=basename(url),
-                media_type=get_file_mime_type(url), roles=[role]
+                url,
+                title=basename(url),
+                media_type=get_file_mime_type(url),
+                roles=[role],
             )
 
         return output_stac_item
 
-    def stage_manifest(self, image_file_list: list[tuple[Path, Path, Path]],
-                       asset_href: str) -> str:
+    def stage_manifest(
+        self, image_file_list: list[tuple[Path, Path, Path]], asset_href: str
+    ) -> str:
         """Write a manifest file of the output images.
 
         Write a file that will serve as the 'data' key for tiled output.  At
@@ -181,6 +191,7 @@ def stage_manifest(self, image_file_list: list[tuple[Path, Path, Path]],
 
         with open(manifest_fn, 'w', encoding='UTF-8') as file_pointer:
             file_pointer.writelines(
-                f'{img}, {wld}, {aux}\n' for img, wld, aux in image_file_list)
+                f'{img}, {wld}, {aux}\n' for img, wld, aux in image_file_list
+            )
 
         return self.stage_output(manifest_fn, asset_href)
diff --git a/harmony_browse_image_generator/browse.py b/harmony_browse_image_generator/browse.py
index c9fdda4..1068673 100644
--- a/harmony_browse_image_generator/browse.py
+++ b/harmony_browse_image_generator/browse.py
@@ -1,4 +1,5 @@
 """Module containing core functionality for browse image generation."""
+
 import re
 from itertools import zip_longest
 from logging import Logger
@@ -50,10 +51,8 @@ def create_browse_imagery(
 
     """
     output_driver = image_driver(message.format.mime)
-    out_image_file = output_image_file(Path(input_file_path),
-                                       driver=output_driver)
-    out_world_file = output_world_file(Path(input_file_path),
-                                       driver=output_driver)
+    out_image_file = output_image_file(Path(input_file_path), driver=output_driver)
+    out_world_file = output_world_file(Path(input_file_path), driver=output_driver)
 
     try:
         with open_rasterio(
@@ -83,8 +82,9 @@ def create_browse_imagery(
             )
 
             processed_files = []
-            for grid_parameters, tile_location in zip_longest(grid_parameter_list,
-                                                              tile_locators):
+            for grid_parameters, tile_location in zip_longest(
+                grid_parameter_list, tile_locators
+            ):
                 tiled_out_image_file = get_tiled_filename(out_image_file, tile_location)
                 tiled_out_world_file = get_tiled_filename(out_world_file, tile_location)
                 tiled_out_aux_xml_file = get_aux_xml_filename(tiled_out_image_file)
@@ -286,9 +286,7 @@ def get_color_map_from_image(image: Image) -> dict:
 
 def get_aux_xml_filename(image_filename: Path) -> Path:
     """get aux.xml filenames."""
-    return image_filename.with_suffix(
-        image_filename.suffix + '.aux.xml'
-    )
+    return image_filename.with_suffix(image_filename.suffix + '.aux.xml')
 
 
 def get_tiled_filename(input_file: Path, locator: dict | None = None) -> Path:
@@ -298,7 +296,8 @@ def get_tiled_filename(input_file: Path, locator: dict | None = None) -> Path:
     """
     if locator is not None:
         return input_file.with_suffix(
-            f".r{int(locator['row']):02d}c{int(locator['col']):02d}{input_file.suffix}")
+            f".r{int(locator['row']):02d}c{int(locator['col']):02d}{input_file.suffix}"
+        )
     return input_file
 
 
@@ -342,8 +341,8 @@ def validate_file_type(dsr: DatasetReader) -> None:
 def get_destination(grid_parameters: GridParams, n_bands: int) -> ndarray:
     """Initialize an array for writing an output raster."""
     return np.zeros(
-        (n_bands, grid_parameters['height'], grid_parameters['width']),
-        dtype='uint8')
+        (n_bands, grid_parameters['height'], grid_parameters['width']), dtype='uint8'
+    )
 
 
 def write_georaster_as_browse(
diff --git a/harmony_browse_image_generator/color_utility.py b/harmony_browse_image_generator/color_utility.py
index 10ac408..8176288 100644
--- a/harmony_browse_image_generator/color_utility.py
+++ b/harmony_browse_image_generator/color_utility.py
@@ -38,7 +38,7 @@ def palette_from_remote_colortable(url: str) -> ColorPalette:
 
 
 def get_color_palette_from_item(item: Item) -> ColorPalette | None:
-    """Return a color palete
+    """Return a color palette
 
     If the input Item has an associated color information, fetch the data from
     the location and read into a ColorPalette
diff --git a/harmony_browse_image_generator/crs.py b/harmony_browse_image_generator/crs.py
index 2be9270..efd8686 100644
--- a/harmony_browse_image_generator/crs.py
+++ b/harmony_browse_image_generator/crs.py
@@ -107,10 +107,10 @@ def choose_best_crs_from_metadata(crs: CRS) -> CRS:
     if projection_params.get('proj', None) == 'longlat':
         return CRS.from_string(PREFERRED_CRS['global'])
 
-    if projection_params.get('lat_0', 0.) >= 80:
+    if projection_params.get('lat_0', 0.0) >= 80:
         return CRS.from_string(PREFERRED_CRS['north'])
 
-    if projection_params.get('lat_0', 0.) <= -80:
+    if projection_params.get('lat_0', 0.0) <= -80:
         return CRS.from_string(PREFERRED_CRS['south'])
 
     return CRS.from_string(PREFERRED_CRS['global'])
diff --git a/harmony_browse_image_generator/exceptions.py b/harmony_browse_image_generator/exceptions.py
index 55c7810..4e9170f 100644
--- a/harmony_browse_image_generator/exceptions.py
+++ b/harmony_browse_image_generator/exceptions.py
@@ -2,6 +2,7 @@
     messaging to the end-user.
 
 """
+
 from harmony.util import HarmonyException
 
 SERVICE_NAME = 'harmony-browse-image-generator'
@@ -9,23 +10,27 @@
 
 class HyBIGError(HarmonyException):
     """Base service exception."""
+
     def __init__(self, message=None):
         super().__init__(message, SERVICE_NAME)
 
 
 class HyBIGNoColorInformation(HarmonyException):
     """Used to describe missing color information."""
+
     def __init__(self, message=None):
         super().__init__(message, SERVICE_NAME)
 
 
 class HyBIGInvalidMessageError(HarmonyException):
     """Input Harmony Message could not be used as presented."""
+
     def __init__(self, message=None):
         super().__init__(message, SERVICE_NAME)
 
 
 class HyBIGValueError(HarmonyException):
     """Input was incorrect for the routine."""
+
     def __init__(self, message=None):
         super().__init__(message, SERVICE_NAME)
diff --git a/harmony_browse_image_generator/sizes.py b/harmony_browse_image_generator/sizes.py
index 28852c7..d7c9f25 100644
--- a/harmony_browse_image_generator/sizes.py
+++ b/harmony_browse_image_generator/sizes.py
@@ -7,6 +7,7 @@
 There's a number of "rules" from the GIBS ICD that are codified in this module.
 
 """
+
 from collections import namedtuple
 from typing import TypedDict
 
@@ -16,6 +17,7 @@
 from harmony.message_utility import has_dimensions, has_scale_extents, has_scale_sizes
 from pyproj import Transformer
 from pyproj.crs import CRS as pyCRS
+
 # pylint: disable-next=no-name-in-module
 from rasterio.crs import CRS
 from rasterio.transform import AffineTransformer, from_bounds, from_origin
@@ -32,6 +34,7 @@
 
 class GridParams(TypedDict):
     """Convenience to describe a grid parameters dictionary."""
+
     height: int
     width: int
     crs: CRS
@@ -40,6 +43,7 @@ class GridParams(TypedDict):
 
 class ScaleExtent(TypedDict):
     """Convenience to describe a scale extent dictionary."""
+
     xmin: float
     ymin: float
     xmax: float
@@ -48,12 +52,14 @@ class ScaleExtent(TypedDict):
 
 class ScaleSize(TypedDict):
     """Convenience to describe a scale size dictionary."""
+
     x: float
     y: float
 
 
 class Dimensions(TypedDict):
     """Convenience to describe a scale a dimension dictionary."""
+
     width: int
     height: int
 
@@ -187,8 +193,9 @@ def choose_target_dimensions(
     return dimensions
 
 
-def get_rasterio_parameters(crs: CRS, scale_extent: ScaleExtent,
-                            dimensions: Dimensions) -> GridParams:
+def get_rasterio_parameters(
+    crs: CRS, scale_extent: ScaleExtent, dimensions: Dimensions
+) -> GridParams:
     """Convert the grid into rasterio consumable format.
 
     Returns a Dictionary of keyword params suitable for rasterio to use in
@@ -215,7 +222,7 @@ def get_rasterio_parameters(crs: CRS, scale_extent: ScaleExtent,
 
 
 def create_tiled_output_parameters(
-        grid_parameters: GridParams
+    grid_parameters: GridParams,
 ) -> tuple[list[GridParams], list[dict] | list[None]]:
     """Split the output grid if necessary.
 
diff --git a/harmony_browse_image_generator/utilities.py b/harmony_browse_image_generator/utilities.py
index 345ee6d..f8640d8 100644
--- a/harmony_browse_image_generator/utilities.py
+++ b/harmony_browse_image_generator/utilities.py
@@ -1,4 +1,5 @@
 """ Module containing utility functionality. """
+
 import re
 from mimetypes import guess_type as guess_mime_type
 from os.path import splitext
@@ -9,7 +10,7 @@
     '.h5': 'application/x-hdf5',
     '.wld': 'text/plain',
     '.jgw': 'text/plain',
-    '.pgw': 'text/plain'
+    '.pgw': 'text/plain',
 }
 
 
@@ -42,11 +43,11 @@ def get_asset_name(name: str, url: str) -> str:
 
 
 def get_file_mime_type(file_name: Path | str) -> str | None:
-    """ This function tries to infer the MIME type of a file string. If the
-        `mimetypes.guess_type` function cannot guess the MIME type of the
-        granule, a dictionary of known file types is checked using the file
-        extension. That dictionary only contains keys for MIME types that
-        `mimetypes.guess_type` cannot resolve.
+    """This function tries to infer the MIME type of a file string. If the
+    `mimetypes.guess_type` function cannot guess the MIME type of the
+    granule, a dictionary of known file types is checked using the file
+    extension. That dictionary only contains keys for MIME types that
+    `mimetypes.guess_type` cannot resolve.
 
     """
     mime_type = guess_mime_type(file_name, False)
diff --git a/tests/test_adapter.py b/tests/test_adapter.py
index 9a84f46..838657c 100644
--- a/tests/test_adapter.py
+++ b/tests/test_adapter.py
@@ -1,4 +1,5 @@
 """ End-to-end tests of the Harmony Browse Image Generator (HyBIG). """
+
 from pathlib import Path
 from shutil import copy, rmtree
 from tempfile import mkdtemp
@@ -22,22 +23,21 @@
 
 
 class TestAdapter(TestCase):
-    """ A class testing the harmony_browse_image_generator.adapter module. """
+    """A class testing the harmony_browse_image_generator.adapter module."""
+
     @classmethod
     def setUpClass(cls):
-        """ Define test fixtures that can be shared between tests. """
+        """Define test fixtures that can be shared between tests."""
         cls.access_token = 'fake-token'
         cls.granule_url = 'https://www.example.com/input.tiff'
-        cls.input_stac = create_stac(Granule(cls.granule_url,
-                                             'image/tiff',
-                                             ['data']))
+        cls.input_stac = create_stac(Granule(cls.granule_url, 'image/tiff', ['data']))
         cls.staging_location = 's3://example-bucket'
         cls.fixtures = Path(__file__).resolve().parent / 'fixtures'
         cls.red_tif_fixture = cls.fixtures / 'red.tif'
         cls.user = 'blightyear'
 
     def setUp(self):
-        """ Define test fixtures that are not shared between tests. """
+        """Define test fixtures that are not shared between tests."""
         self.temp_dir = Path(mkdtemp())
         self.config = config(validate=False)
 
@@ -45,59 +45,69 @@ def tearDown(self):
         if self.temp_dir.exists():
             rmtree(self.temp_dir)
 
-    def assert_expected_output_catalog(self, catalog: Catalog,
-                                       expected_browse_href: str,
-                                       expected_browse_title: str,
-                                       expected_browse_media_type: str,
-                                       expected_world_href: str,
-                                       expected_world_title: str,
-                                       expected_world_media_type: str,
-                                       expected_aux_href: str,
-                                       expected_aux_title: str,
-                                       expected_aux_media_type: str,
-                                       ):
-        """ Check the contents of the Harmony output STAC. It should have a
-            single data item. The URL, title and media type for this asset will
-            be compared to supplied values.
+    def assert_expected_output_catalog(
+        self,
+        catalog: Catalog,
+        expected_browse_href: str,
+        expected_browse_title: str,
+        expected_browse_media_type: str,
+        expected_world_href: str,
+        expected_world_title: str,
+        expected_world_media_type: str,
+        expected_aux_href: str,
+        expected_aux_title: str,
+        expected_aux_media_type: str,
+    ):
+        """Check the contents of the Harmony output STAC. It should have a
+        single data item. The URL, title and media type for this asset will
+        be compared to supplied values.
 
         """
         items = list(catalog.get_items())
         self.assertEqual(len(items), 1)
-        self.assertListEqual(list(items[0].assets.keys()),
-                             ['data', 'metadata', 'auxiliary'])
+        self.assertListEqual(
+            list(items[0].assets.keys()), ['data', 'metadata', 'auxiliary']
+        )
         self.assertDictEqual(
             items[0].assets['data'].to_dict(),
-            {'href': expected_browse_href,
-             'title': expected_browse_title,
-             'type': expected_browse_media_type,
-             'roles': ['data']}
+            {
+                'href': expected_browse_href,
+                'title': expected_browse_title,
+                'type': expected_browse_media_type,
+                'roles': ['data'],
+            },
         )
 
         self.assertDictEqual(
             items[0].assets['metadata'].to_dict(),
-            {'href': expected_world_href,
-             'title': expected_world_title,
-             'type': expected_world_media_type,
-             'roles': ['metadata']}
+            {
+                'href': expected_world_href,
+                'title': expected_world_title,
+                'type': expected_world_media_type,
+                'roles': ['metadata'],
+            },
         )
 
         self.assertDictEqual(
-            items[0].assets['auxiliary'].to_dict(), {
+            items[0].assets['auxiliary'].to_dict(),
+            {
                 'href': expected_aux_href,
                 'title': expected_aux_title,
                 'type': expected_aux_media_type,
-                'roles': ['metadata']
-            })
+                'roles': ['metadata'],
+            },
+        )
 
     @patch('harmony_browse_image_generator.browse.reproject')
     @patch('harmony_browse_image_generator.adapter.rmtree')
     @patch('harmony_browse_image_generator.adapter.mkdtemp')
     @patch('harmony_browse_image_generator.adapter.download')
     @patch('harmony_browse_image_generator.adapter.stage')
-    def test_valid_request_jpeg(self, mock_stage, mock_download, mock_mkdtemp,
-                                mock_rmtree, mock_reproject):
-        """ Ensure a request with a correctly formatted message is fully
-            processed.
+    def test_valid_request_jpeg(
+        self, mock_stage, mock_download, mock_mkdtemp, mock_rmtree, mock_reproject
+    ):
+        """Ensure a request with a correctly formatted message is fully
+        processed.
 
         """
         expected_downloaded_file = self.temp_dir / 'input.tiff'
@@ -119,7 +129,6 @@ def test_valid_request_jpeg(self, mock_stage, mock_download, mock_mkdtemp,
         expected_aux_url = f'{self.staging_location}/{expected_aux_basename}'
         expected_manifest_url = f'{self.staging_location}/{expected_manifest_basename}'
 
-
         expected_browse_mime = 'image/jpeg'
         expected_world_mime = 'text/plain'
         expected_aux_mime = 'application/xml'
@@ -128,47 +137,57 @@ def test_valid_request_jpeg(self, mock_stage, mock_download, mock_mkdtemp,
         mock_mkdtemp.return_value = self.temp_dir
 
         def move_tif(*args, **kwargs):
-            """copy fixture tiff to download location. """
+            """copy fixture tiff to download location."""
             copy(self.red_tif_fixture, expected_downloaded_file)
             return expected_downloaded_file
+
         mock_download.side_effect = move_tif
         mock_stage.side_effect = [
-            expected_browse_url, expected_aux_url, expected_world_url,
-            expected_manifest_url
+            expected_browse_url,
+            expected_aux_url,
+            expected_world_url,
+            expected_manifest_url,
         ]
 
-        message = Message({
-            'accessToken': self.access_token,
-            'callback': 'https://example.com/',
-            'sources': [{'collection': 'C1234-EEDTEST', 'shortName': 'test'}],
-            'stagingLocation': self.staging_location,
-            'user': self.user,
-            'format': {'mime': 'image/jpeg'},
-        })
+        message = Message(
+            {
+                'accessToken': self.access_token,
+                'callback': 'https://example.com/',
+                'sources': [{'collection': 'C1234-EEDTEST', 'shortName': 'test'}],
+                'stagingLocation': self.staging_location,
+                'user': self.user,
+                'format': {'mime': 'image/jpeg'},
+            }
+        )
 
-        hybig = BrowseImageGeneratorAdapter(message, config=self.config,
-                                            catalog=self.input_stac)
+        hybig = BrowseImageGeneratorAdapter(
+            message, config=self.config, catalog=self.input_stac
+        )
 
         _, output_catalog = hybig.invoke()
 
         # Ensure the output catalog contains the single, expected item:
-        self.assert_expected_output_catalog(output_catalog,
-                                            expected_browse_url,
-                                            expected_browse_basename,
-                                            expected_browse_mime,
-                                            expected_world_url,
-                                            expected_world_basename,
-                                            expected_world_mime,
-                                            expected_aux_url,
-                                            expected_aux_basename,
-                                            expected_aux_mime,
-                                            )
+        self.assert_expected_output_catalog(
+            output_catalog,
+            expected_browse_url,
+            expected_browse_basename,
+            expected_browse_mime,
+            expected_world_url,
+            expected_world_basename,
+            expected_world_mime,
+            expected_aux_url,
+            expected_aux_basename,
+            expected_aux_mime,
+        )
 
         # Ensure a download was requested via harmony-service-lib:
-        mock_download.assert_called_once_with(self.granule_url, self.temp_dir,
-                                              logger=hybig.logger,
-                                              cfg=hybig.config,
-                                              access_token=self.access_token)
+        mock_download.assert_called_once_with(
+            self.granule_url,
+            self.temp_dir,
+            logger=hybig.logger,
+            cfg=hybig.config,
+            access_token=self.access_token,
+        )
 
         # Set up for testing reprojection validation calls.
         # All defaults will be computed
@@ -200,8 +219,11 @@ def move_tif(*args, **kwargs):
         }
         raster = convert_mulitband_to_raster(rio_data_array)
 
-        dest = np.full((expected_params['height'], expected_params['width']),
-                       dtype='uint8', fill_value=0)
+        dest = np.full(
+            (expected_params['height'], expected_params['width']),
+            dtype='uint8',
+            fill_value=0,
+        )
 
         expected_reproject_calls = [
             call(
@@ -236,52 +258,71 @@ def move_tif(*args, **kwargs):
             ),
         ]
 
-
         self.assertEqual(mock_reproject.call_count, 3)
-        for actual_call, expected_call in zip(mock_reproject.call_args_list,
-                                              expected_reproject_calls):
-            np.testing.assert_array_equal(actual_call.kwargs['source'],
-                                          expected_call.kwargs['source'])
-            np.testing.assert_array_equal(actual_call.kwargs['destination'],
-                                          expected_call.kwargs['destination'])
-            self.assertEqual(actual_call.kwargs['src_transform'],
-                             expected_call.kwargs['src_transform'])
-            self.assertEqual(actual_call.kwargs['src_crs'],
-                             expected_call.kwargs['src_crs'])
-            self.assertEqual(actual_call.kwargs['dst_transform'],
-                             expected_call.kwargs['dst_transform'])
-            self.assertEqual(actual_call.kwargs['dst_crs'],
-                             expected_call.kwargs['dst_crs'])
-            self.assertEqual(actual_call.kwargs['resampling'],
-                             expected_call.kwargs['resampling'])
+        for actual_call, expected_call in zip(
+            mock_reproject.call_args_list, expected_reproject_calls
+        ):
+            np.testing.assert_array_equal(
+                actual_call.kwargs['source'], expected_call.kwargs['source']
+            )
+            np.testing.assert_array_equal(
+                actual_call.kwargs['destination'], expected_call.kwargs['destination']
+            )
+            self.assertEqual(
+                actual_call.kwargs['src_transform'],
+                expected_call.kwargs['src_transform'],
+            )
+            self.assertEqual(
+                actual_call.kwargs['src_crs'], expected_call.kwargs['src_crs']
+            )
+            self.assertEqual(
+                actual_call.kwargs['dst_transform'],
+                expected_call.kwargs['dst_transform'],
+            )
+            self.assertEqual(
+                actual_call.kwargs['dst_crs'], expected_call.kwargs['dst_crs']
+            )
+            self.assertEqual(
+                actual_call.kwargs['resampling'], expected_call.kwargs['resampling']
+            )
 
         # Ensure the browse image and ESRI world file were staged as expected:
-        mock_stage.assert_has_calls([
-            call(expected_browse_full_path,
-                 expected_browse_basename,
-                 expected_browse_mime,
-                 logger=hybig.logger,
-                 location=self.staging_location,
-                 cfg=self.config),
-            call(expected_aux_full_path,
-                 expected_aux_basename,
-                 expected_aux_mime,
-                 logger=hybig.logger,
-                 location=self.staging_location,
-                 cfg=self.config),
-            call(expected_world_full_path,
-                 expected_world_basename,
-                 expected_world_mime,
-                 logger=hybig.logger,
-                 location=self.staging_location,
-                 cfg=self.config),
-            call(expected_manifest_full_path,
-                 expected_manifest_basename,
-                 expected_manifest_mime,
-                 logger=hybig.logger,
-                 location=self.staging_location,
-                 cfg=self.config)
-        ])
+        mock_stage.assert_has_calls(
+            [
+                call(
+                    expected_browse_full_path,
+                    expected_browse_basename,
+                    expected_browse_mime,
+                    logger=hybig.logger,
+                    location=self.staging_location,
+                    cfg=self.config,
+                ),
+                call(
+                    expected_aux_full_path,
+                    expected_aux_basename,
+                    expected_aux_mime,
+                    logger=hybig.logger,
+                    location=self.staging_location,
+                    cfg=self.config,
+                ),
+                call(
+                    expected_world_full_path,
+                    expected_world_basename,
+                    expected_world_mime,
+                    logger=hybig.logger,
+                    location=self.staging_location,
+                    cfg=self.config,
+                ),
+                call(
+                    expected_manifest_full_path,
+                    expected_manifest_basename,
+                    expected_manifest_mime,
+                    logger=hybig.logger,
+                    location=self.staging_location,
+                    cfg=self.config,
+                ),
+            ]
+        )
 
         # Ensure container clean-up was requested:
         mock_rmtree.assert_called_once_with(self.temp_dir)
@@ -291,10 +332,11 @@ def move_tif(*args, **kwargs):
     @patch('harmony_browse_image_generator.adapter.mkdtemp')
     @patch('harmony_browse_image_generator.adapter.download')
     @patch('harmony_browse_image_generator.adapter.stage')
-    def test_valid_request_png(self, mock_stage, mock_download, mock_mkdtemp,
-                               mock_rmtree, mock_reproject):
-        """ Ensure a request with a correctly formatted message is fully
-            processed.
+    def test_valid_request_png(
+        self, mock_stage, mock_download, mock_mkdtemp, mock_rmtree, mock_reproject
+    ):
+        """Ensure a request with a correctly formatted message is fully
+        processed.
 
         """
         expected_downloaded_file = self.temp_dir / 'input.tiff'
@@ -311,7 +353,6 @@ def test_valid_request_png(self, mock_stage, mock_download, mock_mkdtemp,
         expected_manifest_basename = 'input.txt'
         expected_manifest_full_path = self.temp_dir / 'manifest.txt'
 
-
         expected_browse_url = f'{self.staging_location}/{expected_browse_basename}'
         expected_world_url = f'{self.staging_location}/{expected_world_basename}'
         expected_aux_url = f'{self.staging_location}/{expected_aux_basename}'
@@ -325,47 +366,57 @@ def test_valid_request_png(self, mock_stage, mock_download, mock_mkdtemp,
         mock_mkdtemp.return_value = self.temp_dir
 
         def move_tif(*args, **kwargs):
-            """copy fixture tiff to download location. """
+            """copy fixture tiff to download location."""
             copy(self.red_tif_fixture, expected_downloaded_file)
             return expected_downloaded_file
+
         mock_download.side_effect = move_tif
         mock_stage.side_effect = [
-            expected_browse_url, expected_aux_url, expected_world_url,
-            expected_manifest_url
+            expected_browse_url,
+            expected_aux_url,
+            expected_world_url,
+            expected_manifest_url,
         ]
 
-        message = Message({
-            'accessToken': self.access_token,
-            'callback': 'https://example.com/',
-            'sources': [{'collection': 'C1234-EEDTEST', 'shortName': 'test'}],
-            'stagingLocation': self.staging_location,
-            'user': self.user,
-            'format': {'mime': 'image/png'},
-        })
+        message = Message(
+            {
+                'accessToken': self.access_token,
+                'callback': 'https://example.com/',
+                'sources': [{'collection': 'C1234-EEDTEST', 'shortName': 'test'}],
+                'stagingLocation': self.staging_location,
+                'user': self.user,
+                'format': {'mime': 'image/png'},
+            }
+        )
 
-        hybig = BrowseImageGeneratorAdapter(message, config=self.config,
-                                            catalog=self.input_stac)
+        hybig = BrowseImageGeneratorAdapter(
+            message, config=self.config, catalog=self.input_stac
+        )
 
         _, output_catalog = hybig.invoke()
 
         # Ensure the output catalog contains the single, expected item:
-        self.assert_expected_output_catalog(output_catalog,
-                                            expected_browse_url,
-                                            expected_browse_basename,
-                                            expected_browse_mime,
-                                            expected_world_url,
-                                            expected_world_basename,
-                                            expected_world_mime,
-                                            expected_aux_url,
-                                            expected_aux_basename,
-                                            expected_aux_mime,
-                                            )
+        self.assert_expected_output_catalog(
+            output_catalog,
+            expected_browse_url,
+            expected_browse_basename,
+            expected_browse_mime,
+            expected_world_url,
+            expected_world_basename,
+            expected_world_mime,
+            expected_aux_url,
+            expected_aux_basename,
+            expected_aux_mime,
+        )
 
         # Ensure a download was requested via harmony-service-lib:
-        mock_download.assert_called_once_with(self.granule_url, self.temp_dir,
-                                              logger=hybig.logger,
-                                              cfg=hybig.config,
-                                              access_token=self.access_token)
+        mock_download.assert_called_once_with(
+            self.granule_url,
+            self.temp_dir,
+            logger=hybig.logger,
+            cfg=hybig.config,
+            access_token=self.access_token,
+        )
 
         # Set up for testing reprojection validation calls.
         # All defaults will be computed
@@ -399,8 +450,11 @@ def move_tif(*args, **kwargs):
         raster = convert_mulitband_to_raster(rio_data_array)
         raster, color_map = prepare_raster_for_writing(raster, 'PNG')
 
-        dest = np.full((expected_params['height'], expected_params['width']),
-                       dtype='uint8', fill_value=0)
+        dest = np.full(
+            (expected_params['height'], expected_params['width']),
+            dtype='uint8',
+            fill_value=0,
+        )
 
         expected_reproject_calls = [
             call(
@@ -415,55 +469,75 @@ def move_tif(*args, **kwargs):
             )
         ]
 
-
         self.assertEqual(mock_reproject.call_count, 1)
-        for actual_call, expected_call in zip(mock_reproject.call_args_list,
-                                              expected_reproject_calls):
-            np.testing.assert_array_equal(actual_call.kwargs['source'],
-                                          expected_call.kwargs['source'])
-            np.testing.assert_array_equal(actual_call.kwargs['destination'],
-                                          expected_call.kwargs['destination'])
-            self.assertEqual(actual_call.kwargs['src_transform'],
-                             expected_call.kwargs['src_transform'])
-            self.assertEqual(actual_call.kwargs['src_crs'],
-                             expected_call.kwargs['src_crs'])
-            self.assertEqual(actual_call.kwargs['dst_transform'],
-                             expected_call.kwargs['dst_transform'])
-            self.assertEqual(actual_call.kwargs['dst_crs'],
-                             expected_call.kwargs['dst_crs'])
-            self.assertEqual(actual_call.kwargs['dst_nodata'],
-                             expected_call.kwargs['dst_nodata'])
-
-            self.assertEqual(actual_call.kwargs['resampling'],
-                             expected_call.kwargs['resampling'])
+        for actual_call, expected_call in zip(
+            mock_reproject.call_args_list, expected_reproject_calls
+        ):
+            np.testing.assert_array_equal(
+                actual_call.kwargs['source'], expected_call.kwargs['source']
+            )
+            np.testing.assert_array_equal(
+                actual_call.kwargs['destination'], expected_call.kwargs['destination']
+            )
+            self.assertEqual(
+                actual_call.kwargs['src_transform'],
+                expected_call.kwargs['src_transform'],
+            )
+            self.assertEqual(
+                actual_call.kwargs['src_crs'], expected_call.kwargs['src_crs']
+            )
+            self.assertEqual(
+                actual_call.kwargs['dst_transform'],
+                expected_call.kwargs['dst_transform'],
+            )
+            self.assertEqual(
+                actual_call.kwargs['dst_crs'], expected_call.kwargs['dst_crs']
+            )
+            self.assertEqual(
+                actual_call.kwargs['dst_nodata'], expected_call.kwargs['dst_nodata']
+            )
+
+            self.assertEqual(
+                actual_call.kwargs['resampling'], expected_call.kwargs['resampling']
+            )
 
         # Ensure the browse image and ESRI world file were staged as expected:
-        mock_stage.assert_has_calls([
-            call(expected_browse_full_path,
-                 expected_browse_basename,
-                 expected_browse_mime,
-                 logger=hybig.logger,
-                 location=self.staging_location,
-                 cfg=self.config),
-            call(expected_aux_full_path,
-                 expected_aux_basename,
-                 expected_aux_mime,
-                 logger=hybig.logger,
-                 location=self.staging_location,
-                 cfg=self.config),
-            call(expected_world_full_path,
-                 expected_world_basename,
-                 expected_world_mime,
-                 logger=hybig.logger,
-                 location=self.staging_location,
-                 cfg=self.config),
-            call(expected_manifest_full_path,
-                 expected_manifest_basename,
-                 expected_manifest_mime,
-                 logger=hybig.logger,
-                 location=self.staging_location,
-                 cfg=self.config),
-        ])
+        mock_stage.assert_has_calls(
+            [
+                call(
+                    expected_browse_full_path,
+                    expected_browse_basename,
+                    expected_browse_mime,
+                    logger=hybig.logger,
+                    location=self.staging_location,
+                    cfg=self.config,
+                ),
+                call(
+                    expected_aux_full_path,
+                    expected_aux_basename,
+                    expected_aux_mime,
+                    logger=hybig.logger,
+                    location=self.staging_location,
+                    cfg=self.config,
+                ),
+                call(
+                    expected_world_full_path,
+                    expected_world_basename,
+                    expected_world_mime,
+                    logger=hybig.logger,
+                    location=self.staging_location,
+                    cfg=self.config,
+                ),
+                call(
+                    expected_manifest_full_path,
+                    expected_manifest_basename,
+                    expected_manifest_mime,
+                    logger=hybig.logger,
+                    location=self.staging_location,
+                    cfg=self.config,
+                ),
+            ]
+        )
 
         # Ensure container clean-up was requested:
         mock_rmtree.assert_called_once_with(self.temp_dir)
diff --git a/tests/test_code_format.py b/tests/test_code_format.py
index cea2cd8..27f825b 100644
--- a/tests/test_code_format.py
+++ b/tests/test_code_format.py
@@ -5,26 +5,29 @@
 
 
 class TestCodeFormat(TestCase):
-    """ This test class should ensure all Harmony service Python code adheres
-        to standard Python code styling.
+    """This test class should ensure all Harmony service Python code adheres
+    to standard Python code styling.
 
-        Ignored errors and warning:
+    Ignored errors and warning:
 
-        * E501: Line length, which defaults to 80 characters. This is a
-                preferred feature of the code, but not always easily achieved.
-        * W503: Break before binary operator. Have to ignore one of W503 or
-                W504 to allow for breaking of some long lines. PEP8 suggests
-                breaking the line before a binary operator is more "Pythonic".
+    * E501: Line length, which defaults to 80 characters. This is a
+            preferred feature of the code, but not always easily achieved.
+    * W503: Break before binary operator. Have to ignore one of W503 or
+            W504 to allow for breaking of some long lines. PEP8 suggests
+            breaking the line before a binary operator is more "Pythonic".
+    * E203, E701: This repository uses black code formatting, which deviates
+                  from PEP8 for these errors.
     """
+
     @classmethod
     def setUpClass(cls):
         cls.python_files = Path('harmony_browse_image_generator').rglob('*.py')
 
     def test_pycodestyle_adherence(self):
-        """ Ensure all code in the `harmony_browse_image_generator` directory
-            adheres to PEP8 defined standard.
+        """Ensure all code in the `harmony_browse_image_generator` directory
+        adheres to PEP8 defined standard.
 
         """
-        style_guide = StyleGuide(ignore=['E501', 'W503'])
+        style_guide = StyleGuide(ignore=['E501', 'W503', 'E203', 'E701'])
         results = style_guide.check_files(self.python_files)
         self.assertEqual(results.total_errors, 0, 'Found code style issues.')
diff --git a/tests/unit/test_adapter.py b/tests/unit/test_adapter.py
index 22a7384..081bb30 100644
--- a/tests/unit/test_adapter.py
+++ b/tests/unit/test_adapter.py
@@ -1,4 +1,4 @@
-from unittest import TestCase, skip
+from unittest import TestCase
 
 from harmony.message import Message
 from harmony.util import config
@@ -9,20 +9,19 @@
 
 
 class TestAdapter(TestCase):
-    """ A class testing the harmony_browse_image_generator.adapter module. """
+    """A class testing the harmony_browse_image_generator.adapter module."""
 
     @classmethod
     def setUpClass(cls):
-        """ Define test fixtures that can be shared between tests. """
+        """Define test fixtures that can be shared between tests."""
         cls.access_token = 'is_it_secret_is_it_safe?'
         cls.callback = 'callback'
         cls.config = config(validate=False)
         cls.staging_location = 'staging_location'
         cls.user = 'mmcfly'
-        cls.input_stac = create_stac(Granule('www.example.com/file.nc4',
-                                             'application/x-netcdf4',
-                                             ['data']))
-
+        cls.input_stac = create_stac(
+            Granule('www.example.com/file.nc4', 'application/x-netcdf4', ['data'])
+        )
 
     def test_validate_message_scale_extent_no_crs(self):
         """Ensure only messages with expected content will be processed."""
@@ -99,54 +98,57 @@ def test_validate_message_empty(self):
             self.fail('valid message threw exception')
 
     def test_create_output_stac_items(self):
-        """ Ensure a STAC item is created with Assets for both the browse image
-            and ESRI world file.
+        """Ensure a STAC item is created with Assets for both the browse image
+        and ESRI world file.
 
         """
         input_stac_item = next(self.input_stac.get_items())
-        message = Message({
-            'accessToken': self.access_token,
-            'callback': self.callback,
-            'sources': [{'collection': 'C1234-EEEDTEST', 'shortName': 'test'}],
-            'stagingLocation': self.staging_location,
-            'user': self.user
-        })
-        adapter = BrowseImageGeneratorAdapter(message, config=self.config,
-                                              catalog=self.input_stac)
+        message = Message(
+            {
+                'accessToken': self.access_token,
+                'callback': self.callback,
+                'sources': [{'collection': 'C1234-EEEDTEST', 'shortName': 'test'}],
+                'stagingLocation': self.staging_location,
+                'user': self.user,
+            }
+        )
+        adapter = BrowseImageGeneratorAdapter(
+            message, config=self.config, catalog=self.input_stac
+        )
 
         browse_image_url = f'{self.staging_location}/browse.png'
         esri_url = f'{self.staging_location}/browse.pgw'
         aux_url = f'{self.staging_location}/browse.png.aux.xml'
 
         output_stac_item = adapter.create_output_stac_item(
-            input_stac_item, [('data', browse_image_url, 'data'),
-                              ('metadata', esri_url, 'metadata'),
-                              ('auxiliary', aux_url, 'metadata')])
+            input_stac_item,
+            [
+                ('data', browse_image_url, 'data'),
+                ('metadata', esri_url, 'metadata'),
+                ('auxiliary', aux_url, 'metadata'),
+            ],
+        )
 
         # Check item has expected assets:
-        self.assertListEqual(list(output_stac_item.assets.keys()),
-                             ['data', 'metadata', 'auxiliary'])
+        self.assertListEqual(
+            list(output_stac_item.assets.keys()), ['data', 'metadata', 'auxiliary']
+        )
 
         # Check the browse image asset
-        self.assertEqual(output_stac_item.assets['data'].href,
-                         browse_image_url)
-        self.assertEqual(output_stac_item.assets['data'].media_type,
-                         'image/png')
-        self.assertEqual(output_stac_item.assets['data'].title,
-                         'browse.png')
+        self.assertEqual(output_stac_item.assets['data'].href, browse_image_url)
+        self.assertEqual(output_stac_item.assets['data'].media_type, 'image/png')
+        self.assertEqual(output_stac_item.assets['data'].title, 'browse.png')
 
         # Check the world file asset
-        self.assertEqual(output_stac_item.assets['metadata'].href,
-                         esri_url)
-        self.assertEqual(output_stac_item.assets['metadata'].media_type,
-                         'text/plain')
-        self.assertEqual(output_stac_item.assets['metadata'].title,
-                         'browse.pgw')
+        self.assertEqual(output_stac_item.assets['metadata'].href, esri_url)
+        self.assertEqual(output_stac_item.assets['metadata'].media_type, 'text/plain')
+        self.assertEqual(output_stac_item.assets['metadata'].title, 'browse.pgw')
 
         # Check the Aux file asset
-        self.assertEqual(output_stac_item.assets['auxiliary'].href,
-                         aux_url)
-        self.assertEqual(output_stac_item.assets['auxiliary'].media_type,
-                         'application/xml')
-        self.assertEqual(output_stac_item.assets['auxiliary'].title,
-                         'browse.png.aux.xml')
+        self.assertEqual(output_stac_item.assets['auxiliary'].href, aux_url)
+        self.assertEqual(
+            output_stac_item.assets['auxiliary'].media_type, 'application/xml'
+        )
+        self.assertEqual(
+            output_stac_item.assets['auxiliary'].title, 'browse.png.aux.xml'
+        )
diff --git a/tests/unit/test_browse.py b/tests/unit/test_browse.py
index 2cc20f9..6f2b86c 100644
--- a/tests/unit/test_browse.py
+++ b/tests/unit/test_browse.py
@@ -585,6 +585,7 @@ def test_get_color_map_from_image(self):
         """
         # random image with values of 0 to 4.
         image_data = self.random.integers(5, size=(5, 6), dtype='uint8')
+        # fmt: off
         palette_sequence = [
             255, 0, 0, 255,
             0, 255, 0, 255,
@@ -592,6 +593,7 @@ def test_get_color_map_from_image(self):
             225, 100, 25, 25,
             0, 0, 0, 0
         ]
+        # fmt: on
         test_image = Image.fromarray(image_data)
         test_image.putpalette(palette_sequence, rawmode='RGBA')
 
@@ -600,7 +602,7 @@ def test_get_color_map_from_image(self):
             1: (0, 255, 0, 255),
             2: (0, 0, 255, 255),
             3: (225, 100, 25, 25),
-            4: (0, 0, 0, 0)
+            4: (0, 0, 0, 0),
         }
 
         actual_color_map = get_color_map_from_image(test_image)
diff --git a/tests/unit/test_crs.py b/tests/unit/test_crs.py
index 00205f5..3fa14e2 100644
--- a/tests/unit/test_crs.py
+++ b/tests/unit/test_crs.py
@@ -1,6 +1,5 @@
 """Tests exercising the crs module"""
 
-
 from pathlib import Path
 from shutil import rmtree
 from tempfile import TemporaryDirectory
@@ -81,6 +80,7 @@
     '''
 )
 
+
 class TestCrs(TestCase):
     """A class that tests the crs module."""
 
@@ -113,10 +113,10 @@ def test_choose_target_crs_with_proj4_from_harmony_message_and_empty_epsg(self):
         test_srs = SRS(
             {
                 'proj4': (
-                    '+proj=stere +lat_0=90 +lon_0=-33 +k=0.994'
-                    ' +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs +type=crs'
+                    '+proj=stere +lat_0=90 +lon_0=-33 +k=0.994 '
+                    '+x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs +type=crs'
                 ),
-                'epsg': ''
+                'epsg': '',
             }
         )
         actual_CRS = choose_target_crs(test_srs, None)
@@ -269,4 +269,4 @@ def test_multiple_crs_from_metadata(self):
         for epsg_code, expected, name in epsg_test_codes:
             with self.subTest(f'{epsg_code}: {name}'):
                 actual_CRS = choose_best_crs_from_metadata(epsg_code)
-                self.assertEqual(actual_CRS, CRS.from_string( PREFERRED_CRS[expected]))
+                self.assertEqual(actual_CRS, CRS.from_string(PREFERRED_CRS[expected]))
diff --git a/tests/unit/test_sizes.py b/tests/unit/test_sizes.py
index a2644c0..d309ced 100644
--- a/tests/unit/test_sizes.py
+++ b/tests/unit/test_sizes.py
@@ -211,9 +211,9 @@ def setUpClass(cls):
         cls.CELLS_PER_TILE = 4096
 
     def test_needs_tiling(self):
-        """ Does the grid need to be tiled. The grid parameters checked in each
-            test only the x resolution from the Affine matrix and whether the
-            CRS is projected or geographic.
+        """Does the grid need to be tiled. The grid parameters checked in each
+        test only the x resolution from the Affine matrix and whether the
+        CRS is projected or geographic.
 
         """
         with self.subTest('Projected, needs tiling'):
@@ -221,7 +221,7 @@ def test_needs_tiling(self):
                 'height': 8192,
                 'width': 8193,
                 'crs': CRS.from_epsg(nsidc_np_seaice_grid['epsg']),
-                'transform': Affine(400, 0.0, -3850000.0, 0.0, 400, 5850000.0)
+                'transform': Affine(400, 0.0, -3850000.0, 0.0, 400, 5850000.0),
             }
             self.assertTrue(needs_tiling(grid_parameters))
 
@@ -230,7 +230,7 @@ def test_needs_tiling(self):
                 'height': 8192,
                 'width': 8192,
                 'crs': CRS.from_epsg(nsidc_np_seaice_grid['epsg']),
-                'transform': Affine(600, 0.0, -3850000.0, 0.0, 600, 5850000.0)
+                'transform': Affine(600, 0.0, -3850000.0, 0.0, 600, 5850000.0),
             }
             self.assertFalse(needs_tiling(grid_parameters))
 
@@ -239,7 +239,7 @@ def test_needs_tiling(self):
                 'height': 180000,
                 'width': 360000,
                 'crs': CRS.from_epsg(4326),
-                'transform': Affine(0.001, 0.0, -180, 0.0, -0.001, 180)
+                'transform': Affine(0.001, 0.0, -180, 0.0, -0.001, 180),
             }
             self.assertTrue(needs_tiling(grid_parameters))
 
@@ -248,7 +248,7 @@ def test_needs_tiling(self):
                 'height': 1800,
                 'width': 3600,
                 'crs': CRS.from_epsg(4326),
-                'transform': Affine(0.1, 0.0, -180, 0.0, -0.1, 180)
+                'transform': Affine(0.1, 0.0, -180, 0.0, -0.1, 180),
             }
             self.assertFalse(needs_tiling(grid_parameters))
 
diff --git a/tests/unit/utility.py b/tests/unit/utility.py
index 274b594..6393956 100644
--- a/tests/unit/utility.py
+++ b/tests/unit/utility.py
@@ -1,4 +1,5 @@
 """Utility functions shared across test files."""
+
 from contextlib import contextmanager
 from tempfile import NamedTemporaryFile
 
@@ -28,10 +29,11 @@ def rasterio_test_file(raster_data=None, **options):
         'dtype': 'uint8',
     }
 
-
     with NamedTemporaryFile(suffix='.tif') as tmp_file:
         with rasterio.Env(CHECK_DISK_FREE_SPACE="NO"):
-            with rasterio.open(tmp_file.name, 'w', **default_options | options) as tmp_rasterio_file:
+            with rasterio.open(
+                tmp_file.name, 'w', **default_options | options
+            ) as tmp_rasterio_file:
                 if raster_data is not None:
                     tmp_rasterio_file.write(raster_data)
 
diff --git a/tests/utilities.py b/tests/utilities.py
index cf2b5a0..2ccb98a 100644
--- a/tests/utilities.py
+++ b/tests/utilities.py
@@ -1,4 +1,5 @@
 """Utilities used to extend unittest capabilities."""
+
 from collections import namedtuple
 from datetime import datetime
 
@@ -10,23 +11,28 @@
 
 
 def create_stac(granule: Granule) -> Catalog:
-    """ Create a SpatioTemporal Asset Catalog (STAC). These are used as inputs
-        for Harmony requests, containing the URL and other information for
-        input granules.
+    """Create a SpatioTemporal Asset Catalog (STAC). These are used as inputs
+    for Harmony requests, containing the URL and other information for
+    input granules.
 
-        For simplicity the geometric and temporal properties of each item are
-        set to default values.
+    For simplicity the geometric and temporal properties of each item are
+    set to default values.
 
     """
     catalog = Catalog(id='input catalog', description='test input')
 
-    item = Item(id='input granule', bbox=[-180, -90, 180, 90],
-                geometry=bbox_to_geometry([-180, -90, 180, 90]),
-                datetime=datetime(2020, 1, 1), properties=None)
-
-    item.add_asset('input data',
-                   Asset(granule.url, media_type=granule.media_type,
-                         roles=granule.roles))
+    item = Item(
+        id='input granule',
+        bbox=[-180, -90, 180, 90],
+        geometry=bbox_to_geometry([-180, -90, 180, 90]),
+        datetime=datetime(2020, 1, 1),
+        properties=None,
+    )
+
+    item.add_asset(
+        'input data',
+        Asset(granule.url, media_type=granule.media_type, roles=granule.roles),
+    )
     catalog.add_item(item)
 
     return catalog