From 77ae6c7d55764fbc3fe32817e4f232e8e365ed0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C5=82awomir=20Zborowski?= Date: Sun, 28 Apr 2024 22:48:00 +0200 Subject: [PATCH 1/3] Added support for bundling in auxilliary files --- python_appimage/commands/build/app.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/python_appimage/commands/build/app.py b/python_appimage/commands/build/app.py index 00c0c3e..bef8bda 100644 --- a/python_appimage/commands/build/app.py +++ b/python_appimage/commands/build/app.py @@ -287,6 +287,12 @@ def execute(appdir, name=None, python_version=None, linux_tag=None, '--no-warn-script-location', requirement), exclude=(deprecation + git_warnings)) + # Bundle auxilliary application files + aux_files_path = glob.glob(appdir + '/files') + if aux_files_path: + aux_files_path = aux_files_path[0] + log('BUNDLE', os.path.basename(aux_files_path)) + copy_tree(aux_files_path, 'AppDir/') # Bundle the entry point entrypoint_path = glob.glob(appdir + '/entrypoint.*') From a6d0da5f0bb303a7ad90aa538ca5832a21c11e96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C5=82awomir=20Zborowski?= Date: Tue, 7 May 2024 13:15:56 +0200 Subject: [PATCH 2/3] Applied review remarks --- python_appimage/__main__.py | 7 +++++++ python_appimage/commands/build/app.py | 12 +++++------- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/python_appimage/__main__.py b/python_appimage/__main__.py index 84b023e..7bac4ef 100644 --- a/python_appimage/__main__.py +++ b/python_appimage/__main__.py @@ -7,6 +7,11 @@ import sys __all__ = ['main'] +def directory(path): + if not os.path.isdir(path): + raise argparse.ArgumentTypeError("Not a directory: {}".format(path)) + return os.path.abspath(path) + def main(): '''Entry point for the CLI ''' @@ -73,6 +78,8 @@ def main(): help='force pip in-tree-build', action='store_true', default=False) + build_app_parser.add_argument('-x', '--extra-files', type=directory, + help='path to directory containing extra files to be baked in') list_parser = subparsers.add_parser('list', description='List Python versions installed in a manylinux image') diff --git a/python_appimage/commands/build/app.py b/python_appimage/commands/build/app.py index bef8bda..f18ed52 100644 --- a/python_appimage/commands/build/app.py +++ b/python_appimage/commands/build/app.py @@ -26,14 +26,14 @@ def _unpack_args(args): '''Unpack command line arguments ''' return args.appdir, args.name, args.python_version, args.linux_tag, \ - args.python_tag, args.base_image, args.in_tree_build + args.python_tag, args.base_image, args.in_tree_build, args.extra_files _tag_pattern = re.compile('python([^-]+)[-]([^.]+)[.]AppImage') _linux_pattern = re.compile('manylinux([0-9]+)_' + platform.machine()) def execute(appdir, name=None, python_version=None, linux_tag=None, - python_tag=None, base_image=None, in_tree_build=False): + python_tag=None, base_image=None, in_tree_build=False, extra_files=None): '''Build a Python application using a base AppImage ''' @@ -288,11 +288,9 @@ def execute(appdir, name=None, python_version=None, linux_tag=None, exclude=(deprecation + git_warnings)) # Bundle auxilliary application files - aux_files_path = glob.glob(appdir + '/files') - if aux_files_path: - aux_files_path = aux_files_path[0] - log('BUNDLE', os.path.basename(aux_files_path)) - copy_tree(aux_files_path, 'AppDir/') + if extra_files is not None: + log('BUNDLE', os.path.basename(extra_files)) + copy_tree(extra_files, 'AppDir/') # Bundle the entry point entrypoint_path = glob.glob(appdir + '/entrypoint.*') From 03bab9b38d5bdc6ffeebdec8436e8d0d114c7c02 Mon Sep 17 00:00:00 2001 From: Valentin Niess Date: Wed, 22 May 2024 08:42:07 +0200 Subject: [PATCH 3/3] Multiple extra data --- python_appimage/__main__.py | 10 +++++----- python_appimage/commands/build/app.py | 19 +++++++++++++------ 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/python_appimage/__main__.py b/python_appimage/__main__.py index 7bac4ef..62458d0 100644 --- a/python_appimage/__main__.py +++ b/python_appimage/__main__.py @@ -7,9 +7,9 @@ import sys __all__ = ['main'] -def directory(path): - if not os.path.isdir(path): - raise argparse.ArgumentTypeError("Not a directory: {}".format(path)) +def exists(path): + if not os.path.exists(path): + raise argparse.ArgumentTypeError("could not find: {}".format(path)) return os.path.abspath(path) def main(): @@ -78,8 +78,8 @@ def main(): help='force pip in-tree-build', action='store_true', default=False) - build_app_parser.add_argument('-x', '--extra-files', type=directory, - help='path to directory containing extra files to be baked in') + build_app_parser.add_argument('-x', '--extra-data', type=exists, + help='extra application data (bundled under $APPDIR/)', nargs='+') list_parser = subparsers.add_parser('list', description='List Python versions installed in a manylinux image') diff --git a/python_appimage/commands/build/app.py b/python_appimage/commands/build/app.py index f18ed52..856c643 100644 --- a/python_appimage/commands/build/app.py +++ b/python_appimage/commands/build/app.py @@ -26,14 +26,16 @@ def _unpack_args(args): '''Unpack command line arguments ''' return args.appdir, args.name, args.python_version, args.linux_tag, \ - args.python_tag, args.base_image, args.in_tree_build, args.extra_files + args.python_tag, args.base_image, args.in_tree_build, \ + args.extra_data _tag_pattern = re.compile('python([^-]+)[-]([^.]+)[.]AppImage') _linux_pattern = re.compile('manylinux([0-9]+)_' + platform.machine()) def execute(appdir, name=None, python_version=None, linux_tag=None, - python_tag=None, base_image=None, in_tree_build=False, extra_files=None): + python_tag=None, base_image=None, in_tree_build=False, + extra_data=None): '''Build a Python application using a base AppImage ''' @@ -287,10 +289,15 @@ def execute(appdir, name=None, python_version=None, linux_tag=None, '--no-warn-script-location', requirement), exclude=(deprecation + git_warnings)) - # Bundle auxilliary application files - if extra_files is not None: - log('BUNDLE', os.path.basename(extra_files)) - copy_tree(extra_files, 'AppDir/') + # Bundle auxilliary application data + if extra_data is not None: + for path in extra_data: + basename = os.path.basename(path) + log('BUNDLE', basename) + if os.path.isdir(path): + copy_tree(path, 'AppDir/' + basename) + else: + copy_file(path, 'AppDir/') # Bundle the entry point entrypoint_path = glob.glob(appdir + '/entrypoint.*')