Source code for ryo_iso.utils

import appdirs as _appdirs
from pathlib import Path as _Path
# NOTE: importlib backport for Python 3.5
import importlib_resources as _resources
import shutil as _shutil
import time as _time
import yaml as _yaml
import sys as _sys
import os as _os
import re as _re
from loguru import logger as _logger
import requests as _requests
import delegator as _delegator
import subprocess as _subprocess

[docs]def cleanup_data(): """ Clean up build artifacts Removes ['./squashfs-root','./image','./build'] .. warning:: Do not manually ``rm -rf squashfs-root`` if the chrooted devices are mounted """ paths = ['./squashfs-root','./image','./build','./base_image.mbr','./base_image.efi'] paths = map(_Path,paths) paths = filter(lambda path: path.exists(), paths) for path in paths: p = _subprocess.run(['sudo','rm','--one-file-system','--recursive',str(path)]) if p.returncode != 0: _logger.debug("rm failed"+repr(p)) else: _logger.debug("rm: %s" % str(path)) _logger.debug(repr(p))
[docs]def umount_dev(): """ Unmount chrooted pseudo-filesystems umount ['proc/sys/fs/binfmt_misc', 'proc', 'run/dbus', 'sys', 'dev/pts', 'dev'] in the chroot """ _logger.info("Umounting chroot pseudo-filesystems") devices = ['proc/sys/fs/binfmt_misc', 'proc', 'run/dbus', 'sys', 'dev/pts', 'dev'] devices = map(lambda device: 'squashfs-root/' + device, devices) mounted = list(filter(_os.path.ismount, devices)) if len(mounted) == 0: _logger.debug("No pseudo-filesystems mounted in chroot") else: for device in mounted: p = _subprocess.run(['sudo','umount',device]) if p.returncode != 0: _logger.debug("umount failed"+repr(p)) else: _logger.debug("umount: %s" % device)
[docs]def profile_start(): """ Start pydoit profiler This `python-action <https://pydoit.org/tasks.html#python-action>`_ returns a dictionary with the profiler start time, which is made available to other actions in the same Task instance Returns ------- dict 'start': start time of the profiler """ return {'start': _time.time()}
[docs]def profile_stop(task,**kwargs): """ Stop pydoit profiler This `python-action <https://pydoit.org/tasks.html#python-action>`_ accesses the start time from the :func:`profile_start` action Parameters ---------- task: dict Access to start time via pydoit Task instance **kwargs: dict Keyword argument access to start time Returns ------- dict 'duration': profiler duration """ if 'start' in kwargs: duration = _time.time() - kwargs['start'] else: duration = _time.time() - task.values['start'] _logger.debug(task.name+": "+str(duration)+" seconds") return {'duration': duration}