diff --git a/usr/bin/spoc-image b/usr/bin/spoc-image index 7013b27..749a92f 100644 --- a/usr/bin/spoc-image +++ b/usr/bin/spoc-image @@ -2,6 +2,7 @@ # -*- coding: utf-8 -*- import argparse +import os import sys from spoc import repo_local @@ -21,12 +22,12 @@ def get_image_name(file_path): return line.split()[1] return None -def listing(repo_type): - if repo_type == 'installed': +def listing(list_type): + if list_type == 'installed': images = repo_local.get_images() - elif repo_type == 'online': + elif list_type == 'online': images = repo_online.get_images() - elif repo_type == 'published': + elif list_type == 'published': images = repo_publish.get_images() for image in images: print(image) @@ -78,7 +79,7 @@ def build(filename, force, do_publish): image_name = get_image_name(filename) if force or image_name not in repo_local.get_images(): image = Image(image_name, False) - print(f'Building image {image_name} from file {filename}') + print(f'Building image {image_name} from file {os.path.abspath(filename)}') image.delete() image.create(ImageBuilder(), filename) print(f'Image {image_name} built successfully') @@ -95,8 +96,8 @@ def publish(image_name, force): image = Image(image_name) print(f'Publishing image {image_name}') image.unpublish() - image.publish() - print(f'Image {image_name} compressed from {readable_size(image.size)} to {readable_size(image.dlsize)} and published successfully') + size, dlsize = image.publish() + print(f'Image {image_name} compressed from {readable_size(size)} to {readable_size(dlsize)} and published successfully') else: print(f'Image {image_name} already published, skipping publish task') @@ -126,7 +127,7 @@ parser_build = subparsers.add_parser('build') parser_build.set_defaults(action=build) parser_build.add_argument('-f', '--force', action='store_true', help='Force rebuild already existing image') parser_build.add_argument('-p', '--publish', action='store_true', help='Publish the image after successful build') -parser_build.add_argument('file') +parser_build.add_argument('filename') parser_publish = subparsers.add_parser('publish') parser_publish.set_defaults(action=publish) @@ -148,7 +149,7 @@ elif args.action is delete: elif args.action is clean: clean() elif args.action is build: - build(args.file, args.force, args.publish) + build(args.filename, args.force, args.publish) elif args.action is publish: publish(args.image, args.force) elif args.action is unpublish: diff --git a/usr/lib/python3.8/spoc/cli.py b/usr/lib/python3.8/spoc/cli.py index e37f2b0..e097233 100644 --- a/usr/lib/python3.8/spoc/cli.py +++ b/usr/lib/python3.8/spoc/cli.py @@ -1,7 +1,6 @@ # -*- coding: utf-8 -*- import time - from concurrent.futures import ThreadPoolExecutor from math import floor diff --git a/usr/lib/python3.8/spoc/container.py b/usr/lib/python3.8/spoc/container.py index 5bea81d..507fc84 100644 --- a/usr/lib/python3.8/spoc/container.py +++ b/usr/lib/python3.8/spoc/container.py @@ -7,7 +7,6 @@ import shlex import shutil import subprocess import time - from concurrent.futures import ThreadPoolExecutor from . import network diff --git a/usr/lib/python3.8/spoc/flock.py b/usr/lib/python3.8/spoc/flock.py index 98f6a4b..ca8dff4 100644 --- a/usr/lib/python3.8/spoc/flock.py +++ b/usr/lib/python3.8/spoc/flock.py @@ -1,7 +1,6 @@ # -*- coding: utf-8 -*- import fcntl - from contextlib import contextmanager def locked_ex(lock_file): diff --git a/usr/lib/python3.8/spoc/image.py b/usr/lib/python3.8/spoc/image.py index 5169dd5..c5c72fb 100644 --- a/usr/lib/python3.8/spoc/image.py +++ b/usr/lib/python3.8/spoc/image.py @@ -11,7 +11,7 @@ from . import repo_online from . import repo_publish from .config import LAYERS_DIR, PUB_LAYERS_DIR, ONLINE_LAYERS_URL, TMP_LAYERS_DIR -DEFINITION_MEMBERS = {'layers', 'env', 'uid', 'gid', 'cmd', 'cwd', 'ready', 'halt', 'size', 'dlsize', 'hash'} +DEFINITION_MEMBERS = {'layers', 'env', 'uid', 'gid', 'cmd', 'cwd', 'ready', 'halt'} class Image: def __init__(self, name, load_from_repo=True): @@ -25,9 +25,6 @@ class Image: self.cwd = None self.ready = None self.halt = None - self.size = None - self.dlsize = None - self.hash = None if load_from_repo: self.set_definition(repo_local.get_image(name)) @@ -65,10 +62,12 @@ class Image: archive_path = os.path.join(PUB_LAYERS_DIR, f'{self.name}.tar.xz') with tarfile.open(archive_path, 'w:xz') as tar: tar.add(self.layer_path, self.name, filter=files.add_file) - self.size = files.size - self.dlsize = os.path.getsize(archive_path) - self.hash = repo_publish.sign_file(archive_path).hex() - repo_publish.register_image(self.name, self.get_definition()) + definition = self.get_definition() + definition['size'] = files.size + definition['dlsize'] = os.path.getsize(archive_path) + definition['hash'] = repo_publish.sign_file(archive_path).hex() + repo_publish.register_image(self.name, definition) + return (definition['size'], definition['dlsize']) def unpublish(self): repo_publish.unregister_image(self.name) diff --git a/usr/lib/python3.8/spoc/repo_local.py b/usr/lib/python3.8/spoc/repo_local.py index 3bd3699..f0e3a19 100644 --- a/usr/lib/python3.8/spoc/repo_local.py +++ b/usr/lib/python3.8/spoc/repo_local.py @@ -79,12 +79,12 @@ def get_apps(): def get_app(app_name): try: - return get_entry(TYPE_APP, image_name) + return get_entry(TYPE_APP, app_name) except KeyError as e: - raise ImageNotFoundError(image_name) from e + raise ImageNotFoundError(app_name) from e def register_app(app_name, definition): - add_entry(TYPE_APP, image_name, definition) + add_entry(TYPE_APP, app_name, definition) def unregister_app(app_name): - delete_entry(TYPE_APP, image_name) + delete_entry(TYPE_APP, app_name) diff --git a/usr/lib/python3.8/spoc/repo_online.py b/usr/lib/python3.8/spoc/repo_online.py index 16b201d..ce512b8 100644 --- a/usr/lib/python3.8/spoc/repo_online.py +++ b/usr/lib/python3.8/spoc/repo_online.py @@ -8,7 +8,6 @@ import requests import tarfile import tempfile import time - from cryptography.exceptions import InvalidSignature from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives import hashes @@ -113,6 +112,6 @@ def get_apps(): def get_app(app_name): try: - return get_entry(TYPE_APP, image_name) + return get_entry(TYPE_APP, app_name) except KeyError as e: - raise ImageNotFoundError(image_name) from e + raise ImageNotFoundError(app_name) from e diff --git a/usr/lib/python3.8/spoc/repo_publish.py b/usr/lib/python3.8/spoc/repo_publish.py index 2900232..eb6e566 100644 --- a/usr/lib/python3.8/spoc/repo_publish.py +++ b/usr/lib/python3.8/spoc/repo_publish.py @@ -1,7 +1,6 @@ # -*- coding: utf-8 -*- import json - from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives import hashes from cryptography.hazmat.primitives.asymmetric import ec, utils @@ -94,12 +93,12 @@ def get_apps(): def get_app(app_name): try: - return get_entry(TYPE_APP, image_name) + return get_entry(TYPE_APP, app_name) except KeyError as e: - raise ImageNotFoundError(image_name) from e + raise ImageNotFoundError(app_name) from e def register_app(app_name, definition): - add_entry(TYPE_APP, image_name, definition) + add_entry(TYPE_APP, app_name, definition) def unregister_app(app_name): - delete_entry(TYPE_APP, image_name) + delete_entry(TYPE_APP, app_name)