sorry... sticky fingers....

in a nut shell... tasks are submitted to the DB.
the tasks are controlled by a module (or a package).

the build automation, looks for the submitted task to be done.
once it figures out what is the unnamed module, it imports it,
then passes it to some other function to execute on it. once all
done,
everything gets wiped out of memory and all files get deleted (ready
to start over)

I called them "cmdPlugins" because the look and feel is like something
that
gets "plugged into a wall socket, then unplugged and discarded when
done. This
is where new and/or unknown modules can be dynamically loaded @ build
time (saves me
tones of time manually configuring builds and other automation.


>
>
>
> > what does the attached code do? the indentation is all messed up?
>
> > On Dec 30, 12:16 am, mart <[email protected]> wrote:
>
> > > Really, I'm not trying to be funny... but where are the missing
> > > modules? are they on the machine somewhere? or do they need to be
> > > fetched from the net somewhere?
>
> > > This does seem like a great idea! Do we mean to load "unknown" modules
> > > or install missing software? or both? this is what I do for
> > > "unknown" (like missing) modules ... they only get loaded at build
> > > time, this way I don't need to care what the build system is doing...
>
> > > hoep it helps, and apologies if you mean something else :)
>
> > >     '''
> > >     blueCmdHandler extends cmdBaseClass
> > >     '''
> > >     def loadBuildCmd(self,
> > >                      builtins=None):
>
> > >         '''--- Use dictFunctionObject (DFO), to step through main sets
> > > ---'''
> > >         '''--- * 1) retrieve _main_ sets DFO from objInit table
> > > ---'''
> > >         rows = self.db(self.db.buildData.id>0).select()
> > >         last_row = rows.last()
> > >         dfo_main = cPickle.loads(last_row.get('dfo_main'))
>
> > >         '''--- * 2) retrieve cmd_Init DFO from cmdObjects table
> > > ---'''
> > >         rows = self.db(self.db.cmdObjects.id>0).select()
>
> > >         '''--- * 3) retrieve cmd_Init DFO from cmdObjects table
> > >                     retrieve all cmds/pyModules specified in build
> > > file ---'''
> > >         for row in rows:
> > >             '''--- load serialized (pickled) data from data ---'''
> > >             cmdInit =
> > > cPickle.loads(row.get('dfo_objCmd'))
> > >             '''--- iter through ---'''
> > >             if 'Cmd' in cmdInit.keys():
> > >                 '''---
> > >                 pyModule (i.e. blueLite.pyModules.cmdInit) is the path
> > > to
> > >                 the module to be invoked. Pass pyModule to blueCmd
>
> > > ---'''
> > >                 pyModule =
> > > cmdInit.Cmd.pyModule
> > >                 try:
> > >                     self.blueCmd(pyModule,row.name)
> > >                 except  Exception as
> > > errObj:
> > >                     err = cmdException.cmdPlugin(self.db,row.name)
>
> > > err.blueCmd(errObj,pyModule,all)
>
> > >     def blueCmd(self,
> > >                 chloe,
> > >                 rowName,
> > >                 builtIn_CmdName=None):
> > >         '''---
> > >              chloe is the module to be __imported__
>
> > > ---'''
> > >         if chloe is not None:
> > >             print("{0} will be processed by blueLite".format(chloe))
> > >             '''---
> > >                 miaZoe is the named py class going to sys.modules
> > >                                                                 ---'''
> > >             try:
> > >                 miaZoe = __import__(chloe)
> > >                 components = chloe.split('.')
> > >                 '''---
> > >                     split the path to named module, and collect
> > > attributes
>
> > > ---'''
>
> > >                 for comp in components[1:]:
> > >                     miaZoe = getattr(miaZoe,
> > >                                      comp)
>
> > >                 '''---
> > >                 caraAnne is now the object reference to class Chloe,
> > > no need to
> > >                 worry about __imported__ class since they inherit from
> > > base class
> > >                 call cmdPlugin, then blueCmd()
> > >                                                          ---'''
>
> > >                 caraAnne = miaZoe.cmdPlugin(self.db,
> > >                                             rowName)
> > >                 '''---
> > >                 step logic is in <pyModule>.cmd().
> > >                                             ---'''
> > >                 caraAnne.blueCmd()
> > >                 '''---
> > >                 step is done, chuck object and class reference
> > >                                                           ---'''
> > >                 if caraAnne is not None:
> > >                     del caraAnne
> > >                 del miaZoe
>
> > > On Dec 29, 11:47 pm, mdipierro <[email protected]> wrote:
>
> > > > How about some code that is you try o timport a module that is not
> > > > installed, trys to ez_install it?
>
> > > > import sys, imp
> > > > from ez_setup import use_setuptools
> > > > use_setuptools()
> > > > from setuptools.command.easy_install import main
>
> > > > class SmartImporter(object):
> > > >     tried_modules=set()
> > > >     domain_modules = set()
>
> > > >     def find_module(self, fullname, path=None):
> > > >         if fullname in self.domain_modules:
> > > >             return self
> > > >         if fullname in self.tried_modules:
> > > >             return None
> > > >         else:
> > > >             self.tried_modules.add(fullname)
> > > >             try:
> > > >                 main([fullname])
> > > >                 return self
> > > >             except:
> > > >                 return None
>
> > > >     def load_module(self, fullname):
> > > >         if fullname in sys.modules:
> > > >             return sys.modules[fullname]
> > > >         mod = imp.new_module(fullname)
> > > >         mod.__loader__ = self
> > > >         sys.modules[fullname] = mod
> > > >         if fullname not in self.domain_modules:
> > > >             self.domain_modules.add(fullname)
> > > >         return mod
>
> > > > sys.meta_path = [SmartImporter()]
>
> > > > import tornado # is not installed should install it!
> > > > print tornado
>
> > > > This does not quite works. I could use some help.
>
> > > > Massimo

Reply via email to