# ------------------------------------------------------------------
|
# Copyright (c) 2024 PyInstaller Development Team.
|
#
|
# This file is distributed under the terms of the GNU General Public
|
# License (version 2.0 or later).
|
#
|
# The full license is available in LICENSE, distributed with
|
# this software.
|
#
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
# ------------------------------------------------------------------
|
|
from PyInstaller.utils.hooks import is_module_satisfies, collect_data_files
|
|
hiddenimports = []
|
datas = []
|
|
# In pydicom 3.0.0, the `pydicom.encoders` plugins were renamed to `pydicom.pixels.encoders`, and
|
# `pydicom.pixels.decoders` were also added. We need to collect them all, because they are loaded during
|
# `pydicom` module initialization. We intentionally avoid using `collect_submodules` here, because that causes
|
# import of `pydicom` with logging framework initialized, which results in error tracebacks being logged for all plugins
|
# with missing libraries (see https://github.com/pydicom/pydicom/issues/2128).
|
if is_module_satisfies('pydicom >= 3.0.0'):
|
hiddenimports += [
|
"pydicom.pixels.decoders.gdcm",
|
"pydicom.pixels.decoders.pylibjpeg",
|
"pydicom.pixels.decoders.pillow",
|
"pydicom.pixels.decoders.pyjpegls",
|
"pydicom.pixels.decoders.rle",
|
"pydicom.pixels.encoders.gdcm",
|
"pydicom.pixels.encoders.pylibjpeg",
|
"pydicom.pixels.encoders.native",
|
"pydicom.pixels.encoders.pyjpegls",
|
]
|
|
# With pydicom 3.0.0, initialization of `pydicom` (unnecessarily) imports `pydicom.examples`, which attempts to set
|
# up several test datasets: https://github.com/pydicom/pydicom/blob/v3.0.0/src/pydicom/examples/__init__.py#L10-L24
|
# Some of those are bundled with the package itself, some are downloaded (into `.pydicom/data` directory in user's
|
# home directory) on he first `pydicom.examples` import.
|
#
|
# The download code requires `pydicom/data/urls.json` and `pydicom/data/hashes.json`; the lack of former results in
|
# run-time error, while the lack of latter results in warnings about dataset download failure.
|
#
|
# The test data files that are bundled with the package are not listed in `urls.json`, so if they are missing, there
|
# is not attempt to download them. Therefore, try to get away without collecting them here - if anyone actually
|
# requires them in the frozen application, let them explicitly collect them.
|
additional_data_patterns = [
|
'urls.json',
|
'hashes.json',
|
]
|
else:
|
hiddenimports += [
|
"pydicom.encoders.gdcm",
|
"pydicom.encoders.pylibjpeg",
|
"pydicom.encoders.native",
|
]
|
additional_data_patterns = []
|
|
# Collect data files from `pydicom.data`; charset files and palettes might be needed during processing, so always
|
# collect them. Some other data files became required in v3.0.0 - the corresponding patterns are set accordingly in
|
# `additional_data_patterns` in the above if/else block.
|
datas += collect_data_files(
|
'pydicom.data',
|
includes=[
|
'charset_files/*',
|
'palettes/*',
|
*additional_data_patterns,
|
],
|
)
|