[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