def _process_parts(self): for part_name in self._parts_data: if '/' in part_name: logger.warning('DEPRECATED: Found a "/" ' 'in the name of the {!r} part'.format( part_name)) self._part_names.append(part_name) properties = self._parts_data[part_name] or {} plugin_name = properties.get('plugin') if 'after' in properties: self.after_requests[part_name] = properties.pop('after') if 'filesets' in properties: del properties['filesets'] # Handle the deprecated snap keyword. if 'snap' in properties: snap = properties.pop('snap') if snap: deprecations.handle_deprecation_notice('dn1') properties['prime'] = snap self.load_part(part_name, plugin_name, properties) self._compute_dependencies() self.all_parts = self._sort_parts()
def _process_parts(self): for part_name in self._parts_data: if "/" in part_name: logger.warning( 'DEPRECATED: Found a "/" ' "in the name of the {!r} part".format(part_name) ) self._part_names.append(part_name) properties = self._parts_data[part_name] or {} plugin_name = properties.get("plugin") if "after" in properties: self.after_requests[part_name] = properties.pop("after") if "filesets" in properties: del properties["filesets"] # Handle the deprecated snap keyword. if "snap" in properties: snap = properties.pop("snap") if snap: deprecations.handle_deprecation_notice("dn1") properties["prime"] = snap self.load_part(part_name, plugin_name, properties) self._compute_dependencies() self.all_parts = self._sort_parts()
def finalize_snap_meta_version(self) -> None: # Reparse the version, the order should stick. version = self._config_data["version"] version_script = self._config_data.get("version-script") if version_script: # Deprecation warning for use of version-script. handle_deprecation_notice("dn10") self._snap_meta.version = _version.get_version(version, version_script)
def _compose_snap_yaml(self): """Create a new dictionary from config_data to obtain snap.yaml. Missing key exceptions will be raised if config_data does not contain all the _MANDATORY_PACKAGE_KEYS, config_data can be validated against the snapcraft schema. Keys that are in _OPTIONAL_PACKAGE_KEYS are ignored if not there. """ snap_yaml = collections.OrderedDict() for key_name in _MANDATORY_PACKAGE_KEYS: snap_yaml[key_name] = self._config_data[key_name] # If the base is core in snapcraft.yaml we do not set it in # snap.yaml LP: #1819290 if "base" in self._config_data and self._config_data["base"] != "core": snap_yaml["base"] = self._config_data["base"] # Reparse the version, the order should stick. version = self._config_data["version"] version_script = self._config_data.get("version-script") if version_script: # Deprecation warning for use of version-script. handle_deprecation_notice("dn10") snap_yaml["version"] = _version.get_version(version, version_script) for key_name in _OPTIONAL_PACKAGE_KEYS: if key_name in self._config_data: snap_yaml[key_name] = self._config_data[key_name] if self._apps: # This really should be environment (PATH and LD_LIBRARY_PATH), # anything else should be provided by an extension. command_chain = self._generate_command_chain() apps = { k: v.get_yaml(prepend_command_chain=command_chain) for k, v in self._apps.items() } snap_yaml["apps"] = apps assumes = _determine_assumes(apps) if assumes: # Sorting for consistent results (order doesn't matter) snap_yaml["assumes"] = sorted( set(snap_yaml.get("assumes", list())) | assumes) self._process_passthrough_properties(snap_yaml) return snap_yaml
def _setup_gui(self): # Handles the setup directory which only contains gui assets. setup_dir = "setup" if not os.path.exists(setup_dir): return handle_deprecation_notice("dn3") gui_src = os.path.join(setup_dir, "gui") if os.path.exists(gui_src): for f in os.listdir(gui_src): if not os.path.exists(self.meta_gui_dir): os.mkdir(self.meta_gui_dir) shutil.copy2(os.path.join(gui_src, f), self.meta_gui_dir)
def get_command(self, ctx, cmd_name): new_cmd_name = _CMD_DEPRECATED_REPLACEMENTS.get(cmd_name) if new_cmd_name: if _CMD_DEPRECATION_NOTICES.get(cmd_name): deprecations.handle_deprecation_notice( _CMD_DEPRECATION_NOTICES.get(cmd_name)) else: echo.warning("DEPRECATED: Use {!r} instead of {!r}".format( new_cmd_name, cmd_name)) cmd = click.Group.get_command(self, ctx, new_cmd_name) else: cmd_name = _CMD_ALIASES.get(cmd_name, cmd_name) cmd = click.Group.get_command(self, ctx, cmd_name) return cmd
def get_command(self, ctx, cmd_name): new_cmd_name = _CMD_DEPRECATED_REPLACEMENTS.get(cmd_name) if new_cmd_name: if _CMD_DEPRECATION_NOTICES.get(cmd_name): deprecations.handle_deprecation_notice( _CMD_DEPRECATION_NOTICES.get(cmd_name)) else: echo.warning('DEPRECATED: Use {!r} instead of {!r}'.format( new_cmd_name, cmd_name)) cmd = click.Group.get_command(self, ctx, new_cmd_name) else: cmd_name = _CMD_ALIASES.get(cmd_name, cmd_name) cmd = click.Group.get_command(self, ctx, cmd_name) return cmd
def _setup_gui(self): # Handles the setup directory which only contains gui assets. setup_dir = 'setup' if not os.path.exists(setup_dir): return handle_deprecation_notice('dn3') gui_src = os.path.join(setup_dir, 'gui') gui_dst = os.path.join(self.meta_dir, 'gui') if os.path.exists(gui_src): for f in os.listdir(gui_src): if not os.path.exists(gui_dst): os.mkdir(gui_dst) shutil.copy2(os.path.join(gui_src, f), gui_dst)
def _compose_snap_yaml(self): """Create a new dictionary from config_data to obtain snap.yaml. Missing key exceptions will be raised if config_data does not contain all the _MANDATORY_PACKAGE_KEYS, config_data can be validated against the snapcraft schema. Keys that are in _OPTIONAL_PACKAGE_KEYS are ignored if not there. """ snap_yaml = collections.OrderedDict() for key_name in _MANDATORY_PACKAGE_KEYS: snap_yaml[key_name] = self._config_data[key_name] # If the base is core in snapcraft.yaml we do not set it in # snap.yaml LP: #1819290 if "base" in self._config_data and self._config_data["base"] != "core": snap_yaml["base"] = self._config_data["base"] # Reparse the version, the order should stick. version = self._config_data["version"] version_script = self._config_data.get("version-script") if version_script: # Deprecation warning for use of version-script. handle_deprecation_notice("dn10") snap_yaml["version"] = _version.get_version(version, version_script) for key_name in _OPTIONAL_PACKAGE_KEYS: if key_name in self._config_data: snap_yaml[key_name] = self._config_data[key_name] if "apps" in self._config_data: _verify_app_paths(basedir=self._prime_dir, apps=self._config_data["apps"]) snap_yaml["apps"] = self._wrap_apps(self._config_data["apps"]) self._render_socket_modes(snap_yaml["apps"]) self._validate_command_chain(snap_yaml["apps"]) self._process_passthrough_properties(snap_yaml) assumes = _determine_assumes(self._config_data) if assumes: # Sorting for consistent results (order doesn't matter) snap_yaml["assumes"] = sorted( set(snap_yaml.get("assumes", [])) | assumes) return snap_yaml
def snap(directory, output, **kwargs): """Create a snap. \b Examples: snapcraft snap snapcraft snap --output renamed-snap.snap If you want to snap a directory, you should use the pack command instead. """ if directory: deprecations.handle_deprecation_notice("dn6") _pack(directory, output=output) else: _execute(steps.PRIME, parts=tuple(), pack_project=True, output=output, **kwargs)
def _ensure_no_duplicate_app_aliases(self): # Prevent multiple apps within a snap from having duplicate alias names aliases = [] for app_name, app in self.data.get("apps", {}).items(): aliases.extend(app.get("aliases", [])) # The aliases property is actually deprecated: if aliases: deprecations.handle_deprecation_notice("dn5") seen = set() duplicates = set() for alias in aliases: if alias in seen: duplicates.add(alias) else: seen.add(alias) if duplicates: raise errors.DuplicateAliasError(aliases=duplicates)
def _ensure_no_duplicate_app_aliases(self): # Prevent multiple apps within a snap from having duplicate alias names aliases = [] for app_name, app in self.data.get('apps', {}).items(): aliases.extend(app.get('aliases', [])) # The aliases property is actually deprecated: if aliases: deprecations.handle_deprecation_notice('dn5') seen = set() duplicates = set() for alias in aliases: if alias in seen: duplicates.add(alias) else: seen.add(alias) if duplicates: raise errors.DuplicateAliasError(aliases=duplicates)
def _run_store_command(args): # noqa: C901 if args['list-registered'] or args['registered']: snapcraft.list_registered() elif args['list-keys'] or args['keys']: snapcraft.list_keys() elif args['create-key']: snapcraft.create_key(args['<key-name>']) elif args['register-key']: snapcraft.register_key(args['<key-name>']) elif args['register']: snapcraft.register(args['<snap-name>'], args['--private']) elif args['sign-build']: snapcraft.sign_build( args['<snap-file>'], args['--key-name'], args['--local']) elif args['upload']: logger.warning('DEPRECATED: Use `push` instead of `upload`') snapcraft.push(args['<snap-file>']) elif args['push']: if args['--release']: release_channels = args['--release'].split(',') else: release_channels = [] snapcraft.push(args['<snap-file>'], release_channels) elif args['release']: snapcraft.release( args['<snap-name>'], args['<revision>'], [args['<channel>']]) elif args['validate']: snapcraft.validate(args['<snap-name>'], args['<validation>'], key=args['--key-name']) elif args['gated']: snapcraft.gated(args['<snap-name>']) elif args['status']: snapcraft.status( args['<snap-name>'], args['--series'], args['--arch']) elif args['revisions'] or args['list-revisions'] or args['history']: if args['history']: deprecations.handle_deprecation_notice('dn4') snapcraft.revisions( args['<snap-name>'], args['--series'], args['--arch']) elif args['close']: snapcraft.close(args['<snap-name>'], args['<channel_names>']) elif args['collaborate']: snapcraft.collaborate(args['<snap-name>'], key=args['--key-name'])
def snap(directory, output, **kwargs): """Create a snap. \b Examples: snapcraft snap snapcraft snap --output renamed-snap.snap If you want to snap a directory, you should use the pack command instead. """ if directory: deprecations.handle_deprecation_notice("dn6") else: project = _execute(steps.PRIME, parts=[], **kwargs) directory = project.prime_dir snap_name = lifecycle.pack(directory, output) echo.info("Snapped {}".format(snap_name))
def _run_store_command(args): # noqa: C901 if args['list-registered'] or args['registered']: snapcraft.list_registered() elif args['list-keys'] or args['keys']: snapcraft.list_keys() elif args['create-key']: snapcraft.create_key(args['<key-name>']) elif args['register-key']: snapcraft.register_key(args['<key-name>']) elif args['register']: snapcraft.register(args['<snap-name>'], args['--private']) elif args['sign-build']: snapcraft.sign_build( args['<snap-file>'], args['--key-name'], args['--local']) elif args['upload']: logger.warning('DEPRECATED: Use `push` instead of `upload`') snapcraft.push(args['<snap-file>']) elif args['push']: if args['--release']: release_channels = args['--release'].split(',') else: release_channels = [] snapcraft.push(args['<snap-file>'], release_channels) elif args['release']: snapcraft.release( args['<snap-name>'], args['<revision>'], [args['<channel>']]) elif args['validate']: snapcraft.validate(args['<snap-name>'], args['<validation>'], key=args['--key-name']) elif args['gated']: snapcraft.gated(args['<snap-name>']) elif args['status']: snapcraft.status( args['<snap-name>'], args['--series'], args['--arch']) elif args['revisions'] or args['list-revisions'] or args['history']: if args['history']: deprecations.handle_deprecation_notice('dn4') snapcraft.revisions( args['<snap-name>'], args['--series'], args['--arch']) elif args['close']: snapcraft.close(args['<snap-name>'], args['<channel_names>'])
def __init__(self, *, part_properties: Dict[str, Any], sourcedir: str, builddir: str, stagedir: str, primedir: str, builtin_functions: 'Dict[str, Callable[..., None]]') -> None: """Create a new Runner. :param dict part_properties: YAML properties set for this part. :param str sourcedir: The source directory for this part. :param str builddir: The build directory for this part. :param str stagedir: The staging area. :param str primedir: The priming area. :param dict builtin_functions: Dict of builtin function names to actual callables. """ self._sourcedir = sourcedir self._builddir = builddir self._stagedir = stagedir self._primedir = primedir self._builtin_functions = builtin_functions self._override_pull_scriptlet = part_properties.get('override-pull') self._override_build_scriptlet = part_properties.get('override-build') self._override_stage_scriptlet = part_properties.get('override-stage') self._override_prime_scriptlet = part_properties.get('override-prime') # These are all deprecated self._prepare_scriptlet = part_properties.get('prepare') if self._prepare_scriptlet: deprecations.handle_deprecation_notice('dn7') self._build_scriptlet = part_properties.get('build') if self._build_scriptlet: deprecations.handle_deprecation_notice('dn8') self._install_scriptlet = part_properties.get('install') if self._install_scriptlet: deprecations.handle_deprecation_notice('dn9')
def snap(directory, output, **kwargs): """Create a snap. \b Examples: snapcraft snap snapcraft snap --output renamed-snap.snap If you want to snap a directory, you should use the pack command instead. """ if directory: deprecations.handle_deprecation_notice('dn6') project_options = get_project_options(**kwargs) container_config = env.get_container_config() if container_config.use_container: lifecycle.containerbuild('snap', project_options, container_config, output, directory) else: snap_name = lifecycle.snap( project_options, directory=directory, output=output) echo.info('Snapped {}'.format(snap_name))
def __init__( self, *, part_properties: Dict[str, Any], sourcedir: str, builddir: str, stagedir: str, primedir: str, builtin_functions: "Dict[str, Callable[..., None]]" ) -> None: """Create a new Runner. :param dict part_properties: YAML properties set for this part. :param str sourcedir: The source directory for this part. :param str builddir: The build directory for this part. :param str stagedir: The staging area. :param str primedir: The priming area. :param dict builtin_functions: Dict of builtin function names to actual callables. """ self._sourcedir = sourcedir self._builddir = builddir self._stagedir = stagedir self._primedir = primedir self._builtin_functions = builtin_functions self._override_pull_scriptlet = part_properties.get("override-pull") self._override_build_scriptlet = part_properties.get("override-build") self._override_stage_scriptlet = part_properties.get("override-stage") self._override_prime_scriptlet = part_properties.get("override-prime") # These are all deprecated self._prepare_scriptlet = part_properties.get("prepare") if self._prepare_scriptlet: deprecations.handle_deprecation_notice("dn7") self._build_scriptlet = part_properties.get("build") if self._build_scriptlet: deprecations.handle_deprecation_notice("dn8") self._install_scriptlet = part_properties.get("install") if self._install_scriptlet: deprecations.handle_deprecation_notice("dn9")
def local_plugins_dir(self): deprecated_plugins_dir = os.path.join(self.parts_dir, 'plugins') if os.path.exists(deprecated_plugins_dir): handle_deprecation_notice('dn2') return deprecated_plugins_dir return os.path.join(self.__project_dir, 'snap', 'plugins')
def local_plugins_dir(self): deprecated_plugins_dir = os.path.join(self.parts_dir, "plugins") if os.path.exists(deprecated_plugins_dir): handle_deprecation_notice("dn2") return deprecated_plugins_dir return os.path.join(self.__project_dir, "snap", "plugins")