[elbe-devel] [PATCH 1/1] Add decorator for FinetuningAction registration
Torben Hohn
torben.hohn at linutronix.de
Wed Jun 5 16:07:22 CEST 2019
On Tue, Jun 04, 2019 at 12:23:22PM +0200, dion at linutronix.de wrote:
> From: Olivier Dion <dion at linutronix.de>
>
> The decorator takes 1 argument, 'tag', and 1 optional argument,
> 'register' set to 'True' by default.
>
> The 'tag' argument is a string that represent the xml tag for the
> finetuning action.
>
> The 'register' argument can be set to 'False' to ignore the
> registration in the decorator.
>
> Example
> =======
>
> ``````````````````````````````````````````````````````````````````````
> @FinetuningAction.register("my-xml-tag")
> MyAction(FinetuningAction):
> <...>
> @FinetuningAction.register("my-xml-tag-not-ready", register=False)
> MyActionNotReady(FinetuningAction):
> <...>
> ````````````````````````````````````````````````````````````
>
> Signed-off-by: Olivier Dion <dion at linutronix.de>
> ---
> elbepack/finetuning.py | 183 ++++++++++---------------------------------------
> 1 file changed, 36 insertions(+), 147 deletions(-)
>
> diff --git a/elbepack/finetuning.py b/elbepack/finetuning.py
> index 426097aa..eac2eff4 100644
> --- a/elbepack/finetuning.py
> +++ b/elbepack/finetuning.py
> @@ -34,8 +34,12 @@ class FinetuningAction(object):
> actiondict = {}
>
> @classmethod
> - def register(cls, action):
> - cls.actiondict[action.tag] = action
> + def register(cls, tag, register=True):
> + def _register(action):
> + if register is True:
> + cls.actiondict[tag] = action
> + return action
> + return _register
>
> def __new__(cls, node):
> action = cls.actiondict[node.tag]
> @@ -51,25 +55,23 @@ class FinetuningAction(object):
> self.execute(log, buildenv, target)
>
>
> + at FinetuningAction.register('image_finetuning', False)
> class ImageFinetuningAction(FinetuningAction):
>
> - tag = 'image_finetuning'
> -
> def __init__(self, node):
> FinetuningAction.__init__(self, node)
>
> def execute(self, _log, _buildenv, _target):
> raise NotImplementedError("<%s> may only be "
> - "used in <image-finetuning>" % self.tag)
> + "used in <image-finetuning>" % 'image_finetuning')
the self.tag is actually the tag of the deriving classes.
i believe, that we should keep the tag. the alternative would be to use
self.__class__.__name__ dont like that either
>
> def execute_img(self, _log, _buildenv, _target, _builddir, _loop_dev):
> raise NotImplementedError('execute_img() not implemented')
>
>
> + at FinetuningAction.register('rm')
> class RmAction(FinetuningAction):
>
> - tag = 'rm'
> -
> def __init__(self, node):
> FinetuningAction.__init__(self, node)
>
> @@ -88,13 +90,9 @@ class RmAction(FinetuningAction):
> log.do("rm -rvf '%s'" % f)
>
>
> -FinetuningAction.register(RmAction)
> -
> -
> + at FinetuningAction.register('mkdir')
> class MkdirAction(FinetuningAction):
>
> - tag = 'mkdir'
> -
> def __init__(self, node):
> FinetuningAction.__init__(self, node)
>
> @@ -102,13 +100,9 @@ class MkdirAction(FinetuningAction):
> log.do("mkdir -p " + target.fname(self.node.et.text))
>
>
> -FinetuningAction.register(MkdirAction)
> -
> -
> + at FinetuningAction.register('mknod')
> class MknodAction(FinetuningAction):
>
> - tag = 'mknod'
> -
> def __init__(self, node):
> FinetuningAction.__init__(self, node)
>
> @@ -120,14 +114,9 @@ class MknodAction(FinetuningAction):
> " " +
> self.node.et.attrib['opts'])
>
> -
> -FinetuningAction.register(MknodAction)
> -
> -
> + at FinetuningAction.register('buildenv_mkdir')
> class BuildenvMkdirAction(FinetuningAction):
>
> - tag = 'buildenv_mkdir'
> -
> def __init__(self, node):
> FinetuningAction.__init__(self, node)
>
> @@ -135,13 +124,9 @@ class BuildenvMkdirAction(FinetuningAction):
> log.do("mkdir -p " + buildenv.rfs.fname(self.node.et.text))
>
>
> -FinetuningAction.register(BuildenvMkdirAction)
> -
> -
> + at FinetuningAction.register('cp')
> class CpAction(FinetuningAction):
>
> - tag = 'cp'
> -
> def __init__(self, node):
> FinetuningAction.__init__(self, node)
>
> @@ -151,13 +136,9 @@ class CpAction(FinetuningAction):
> log.do("cp -av " + f + " " + target.fname(self.node.et.text))
>
>
> -FinetuningAction.register(CpAction)
> -
> -
> + at FinetuningAction.register('buildenv_cp')
> class BuildenvCpAction(FinetuningAction):
>
> - tag = 'buildenv_cp'
> -
> def __init__(self, node):
> FinetuningAction.__init__(self, node)
>
> @@ -167,13 +148,9 @@ class BuildenvCpAction(FinetuningAction):
> log.do("cp -av " + f + " " + buildenv.rfs.fname(self.node.et.text))
>
>
> -FinetuningAction.register(BuildenvCpAction)
> -
> -
> + at FinetuningAction.register('b2t_cp')
> class B2TCpAction(FinetuningAction):
>
> - tag = 'b2t_cp'
> -
> def __init__(self, node):
> FinetuningAction.__init__(self, node)
>
> @@ -183,13 +160,9 @@ class B2TCpAction(FinetuningAction):
> log.do("cp -av " + f + " " + target.fname(self.node.et.text))
>
>
> -FinetuningAction.register(B2TCpAction)
> -
> -
> + at FinetuningAction.register('t2b_cp')
> class T2BCpAction(FinetuningAction):
>
> - tag = 't2b_cp'
> -
> def __init__(self, node):
> FinetuningAction.__init__(self, node)
>
> @@ -198,14 +171,9 @@ class T2BCpAction(FinetuningAction):
> for f in src:
> log.do("cp -av " + f + " " + buildenv.rfs.fname(self.node.et.text))
>
> -
> -FinetuningAction.register(T2BCpAction)
> -
> -
> + at FinetuningAction.register('t2p_mv')
> class T2PMvAction(FinetuningAction):
>
> - tag = 't2p_mv'
> -
> def __init__(self, node):
> FinetuningAction.__init__(self, node)
>
> @@ -221,13 +189,9 @@ class T2PMvAction(FinetuningAction):
> log.do("mv -v " + f + " " + dest)
>
>
> -FinetuningAction.register(T2PMvAction)
> -
> -
> + at FinetuningAction.register('mv')
> class MvAction(FinetuningAction):
>
> - tag = 'mv'
> -
> def __init__(self, node):
> FinetuningAction.__init__(self, node)
>
> @@ -237,13 +201,9 @@ class MvAction(FinetuningAction):
> log.do("mv -v " + f + " " + target.fname(self.node.et.text))
>
>
> -FinetuningAction.register(MvAction)
> -
> -
> + at FinetuningAction.register('ln')
> class LnAction(FinetuningAction):
>
> - tag = 'ln'
> -
> def __init__(self, node):
> FinetuningAction.__init__(self, node)
>
> @@ -254,13 +214,9 @@ class LnAction(FinetuningAction):
> (self.node.et.attrib['path'], self.node.et.text))
>
>
> -FinetuningAction.register(LnAction)
> -
> -
> + at FinetuningAction.register('buildenv_mv')
> class BuildenvMvAction(FinetuningAction):
>
> - tag = 'buildenv_mv'
> -
> def __init__(self, node):
> FinetuningAction.__init__(self, node)
>
> @@ -269,14 +225,9 @@ class BuildenvMvAction(FinetuningAction):
> for f in src:
> log.do("mv -v " + f + " " + buildenv.rfs.fname(self.node.et.text))
>
> -
> -FinetuningAction.register(BuildenvMvAction)
> -
> -
> + at FinetuningAction.register('adduser')
> class AddUserAction(FinetuningAction):
>
> - tag = 'adduser'
> -
> def __init__(self, node):
> FinetuningAction.__init__(self, node)
>
> @@ -319,13 +270,9 @@ class AddUserAction(FinetuningAction):
> self.node.et.text))
>
>
> -FinetuningAction.register(AddUserAction)
> -
> -
> + at FinetuningAction.register('addgroup')
> class AddGroupAction(FinetuningAction):
>
> - tag = 'addgroup'
> -
> def __init__(self, node):
> FinetuningAction.__init__(self, node)
>
> @@ -343,13 +290,9 @@ class AddGroupAction(FinetuningAction):
> self.node.et.text))
>
>
> -FinetuningAction.register(AddGroupAction)
> -
> -
> + at FinetuningAction.register('file')
> class AddFileAction(FinetuningAction):
>
> - tag = 'file'
> -
> def __init__(self, node):
> FinetuningAction.__init__(self, node)
>
> @@ -406,13 +349,10 @@ class AddFileAction(FinetuningAction):
> if mode is not None:
> log.chroot(target.path, 'chmod "%s" "%s"' % (mode, dst))
>
> -FinetuningAction.register(AddFileAction)
> -
>
> + at FinetuningAction.register('raw_cmd')
> class RawCmdAction(FinetuningAction):
>
> - tag = 'raw_cmd'
> -
> def __init__(self, node):
> FinetuningAction.__init__(self, node)
>
> @@ -421,13 +361,9 @@ class RawCmdAction(FinetuningAction):
> log.chroot(target.path, self.node.et.text)
>
>
> -FinetuningAction.register(RawCmdAction)
> -
> -
> + at FinetuningAction.register('command')
> class CmdAction(FinetuningAction):
>
> - tag = 'command'
> -
> def __init__(self, node):
> FinetuningAction.__init__(self, node)
>
> @@ -436,13 +372,9 @@ class CmdAction(FinetuningAction):
> log.chroot(target.path, "/bin/sh", stdin=self.node.et.text)
>
>
> -FinetuningAction.register(CmdAction)
> -
> -
> + at FinetuningAction.register('buildenv_command')
> class BuildenvCmdAction(FinetuningAction):
>
> - tag = 'buildenv_command'
> -
> def __init__(self, node):
> FinetuningAction.__init__(self, node)
>
> @@ -451,13 +383,9 @@ class BuildenvCmdAction(FinetuningAction):
> log.chroot(buildenv.path, "/bin/sh", stdin=self.node.et.text)
>
>
> -FinetuningAction.register(BuildenvCmdAction)
> -
> -
> + at FinetuningAction.register('purge')
> class PurgeAction(FinetuningAction):
>
> - tag = 'purge'
> -
> def __init__(self, node):
> FinetuningAction.__init__(self, node)
>
> @@ -466,13 +394,9 @@ class PurgeAction(FinetuningAction):
> log.chroot(target.path, "dpkg --purge " + self.node.et.text)
>
>
> -FinetuningAction.register(PurgeAction)
> -
> -
> + at FinetuningAction.register('updated')
> class UpdatedAction(FinetuningAction):
>
> - tag = 'updated'
> -
> def __init__(self, node):
> FinetuningAction.__init__(self, node)
>
> @@ -560,13 +484,9 @@ class UpdatedAction(FinetuningAction):
> target.touch_file('/var/cache/elbe/.downgrade_allowed')
>
>
> -FinetuningAction.register(UpdatedAction)
> -
> -
> + at FinetuningAction.register('artifact')
> class ArtifactAction(FinetuningAction):
>
> - tag = 'artifact'
> -
> def __init__(self, node):
> FinetuningAction.__init__(self, node)
>
> @@ -577,13 +497,9 @@ class ArtifactAction(FinetuningAction):
> target.images.append(self.node.et.text)
>
>
> -FinetuningAction.register(ArtifactAction)
> -
> -
> + at FinetuningAction.register('rm_artifact')
> class RmArtifactAction(FinetuningAction):
>
> - tag = 'rm_artifact'
> -
> def __init__(self, node):
> FinetuningAction.__init__(self, node)
>
> @@ -595,13 +511,9 @@ class RmArtifactAction(FinetuningAction):
> target.images.remove(self.node.et.text)
>
>
> -FinetuningAction.register(ArtifactAction)
> -
> -
> + at FinetuningAction.register('losetup')
> class LosetupAction(FinetuningAction):
>
> - tag = 'losetup'
> -
> def __init__(self, node):
> FinetuningAction.__init__(self, node)
>
> @@ -624,13 +536,9 @@ class LosetupAction(FinetuningAction):
> log.do(cmd)
>
>
> -FinetuningAction.register(LosetupAction)
> -
> -
> + at FinetuningAction.register('img_convert')
> class ImgConvertAction(FinetuningAction):
>
> - tag = 'img_convert'
> -
> def __init__(self, node):
> FinetuningAction.__init__(self, node)
>
> @@ -666,13 +574,9 @@ class ImgConvertAction(FinetuningAction):
> del target.image_packers[src]
>
>
> -FinetuningAction.register(ImgConvertAction)
> -
> -
> + at FinetuningAction.register('set_packer')
> class SetPackerAction(FinetuningAction):
>
> - tag = 'set_packer'
> -
> def __init__(self, node):
> FinetuningAction.__init__(self, node)
>
> @@ -687,13 +591,9 @@ class SetPackerAction(FinetuningAction):
> target.image_packers[img] = packers[packer]
>
>
> -FinetuningAction.register(SetPackerAction)
> -
> -
> + at FinetuningAction.register('extract_partition')
> class ExtractPartitionAction(ImageFinetuningAction):
>
> - tag = 'extract_partition'
> -
> def __init__(self, node):
> ImageFinetuningAction.__init__(self, node)
>
> @@ -713,13 +613,9 @@ class ExtractPartitionAction(ImageFinetuningAction):
> target.image_packers[self.node.et.text] = default_packer
>
>
> -FinetuningAction.register(ExtractPartitionAction)
> -
> -
> + at FinetuningAction.register('copy_from_partition')
> class CopyFromPartition(ImageFinetuningAction):
>
> - tag = 'copy_from_partition'
> -
> def __init__(self, node):
> ImageFinetuningAction.__init__(self, node)
>
> @@ -753,13 +649,9 @@ class CopyFromPartition(ImageFinetuningAction):
> target.images.append(aname)
>
>
> -FinetuningAction.register(CopyFromPartition)
> -
> -
> + at FinetuningAction.register('copy_to_partition')
> class CopyToPartition(ImageFinetuningAction):
>
> - tag = 'copy_to_partition'
> -
> def __init__(self, node):
> ImageFinetuningAction.__init__(self, node)
>
> @@ -781,9 +673,6 @@ class CopyToPartition(ImageFinetuningAction):
> log.do(cmd)
>
>
> -FinetuningAction.register(CopyToPartition)
> -
> -
> def do_finetuning(xml, log, buildenv, target):
>
> if not xml.has('target/finetuning'):
> --
> 2.11.0
>
>
> _______________________________________________
> elbe-devel mailing list
> elbe-devel at linutronix.de
> https://lists.linutronix.de/mailman/listinfo/elbe-devel
--
Torben Hohn
Linutronix GmbH | Bahnhofstrasse 3 | D-88690 Uhldingen-Mühlhofen
Phone: +49 7556 25 999 18; Fax.: +49 7556 25 999 99
Hinweise zum Datenschutz finden Sie hier (Informations on data privacy
can be found here): https://linutronix.de/kontakt/Datenschutz.php
Linutronix GmbH | Firmensitz (Registered Office): Uhldingen-Mühlhofen |
Registergericht (Registration Court): Amtsgericht Freiburg i.Br., HRB700
806 | Geschäftsführer (Managing Directors): Heinz Egger, Thomas Gleixner
More information about the elbe-devel
mailing list