async def do(self, args): tree = await self.root._get_tree() t = await self.setup(meta=True) if args: objs = [] for a in args: m = import_string(a) if isinstance(m, py_types.ModuleType): from moat.script.util import objects n = 0 for c in objects(m, Task, filter=lambda x: getattr( x, 'taskdef', None) is not None): await t.add_task(c, force=self.force) n += 1 if self.root.verbose > (1 if n else 0): print("%s: %s command%s found." % (a, n if n else "no", "" if n == 1 else "s"), file=self.stdout) else: if not isinstance(m, Task): raise CommandError("%s is not a task" % a) await t.add_task(m, force=self.force) else: for c in task_types(): await t.add_task(c, force=self.force) r = await tree.subdir(*TASKSCAN_DIR) from moat.task.collect import Collector await r.add_task(path=(), taskdef=Collector.taskdef, force=self.force) await t.wait()
async def do(self,args): tree = await self.root._get_tree() t = await self.setup(meta=True) if args: objs = [] for a in args: m = import_string(a) if isinstance(m,py_types.ModuleType): from moat.script.util import objects n = 0 for c in objects(m, Task, filter=lambda x:getattr(x,'taskdef',None) is not None): await t.add_task(c, force=self.force) n += 1 if self.root.verbose > (1 if n else 0): print("%s: %s command%s found." % (a,n if n else "no", "" if n==1 else "s"), file=self.stdout) else: if not isinstance(m,Task): raise CommandError("%s is not a task"%a) await t.add_task(m, force=self.force) else: for c in task_types(): await t.add_task(c, force=self.force) r = await tree.subdir(*TASKSCAN_DIR) from moat.task.collect import Collector await r.add_task(path=(),taskdef=Collector.taskdef, force=self.force) await t.wait()
def devices(): from moat.script.util import objects from moat.base import BaseDevice # we want all objects with a distinctive prefix return objects(__name__, BaseDevice, filter=lambda x: x.__dict__.get('prefix', None) is not None)
def device_types(): if not _device_types: from moat.script.util import objects for typ in objects(__name__,OnewireDevice): fam = typ.family if isinstance(fam,str): _device_types[fam] = typ else: for f in fam: _device_types[f] = typ return _device_types
def device_types(): if not _device_types: from moat.script.util import objects for typ in objects(__name__, OnewireDevice): fam = typ.family if isinstance(fam, str): _device_types[fam] = typ else: for f in fam: _device_types[f] = typ return _device_types
async def start(self, bindto,port, root="default"): self.rootpath = root logger.info("Starting web server on %s:%s with /%s", bindto,port,root) await self.tree.lookup(*(WEBDEF_DIR)) for cls in objects('moat.web', BaseExt): await cls.start(self.app) for view in objects('moat.web',BaseView): if view.path is not None: print(view) self.app.router.add_route('*', view.path, view) r = FakeReq('/') r = await self.app.router.resolve(r) if getattr(r,'_exception',None) is not None: self.app.router.add_get('/', hello) self.handler = self.app.make_handler() self.srv = await self.loop.create_server(self.handler, bindto,port) logger.debug('serving on %s', self.srv.sockets[0].getsockname())
async def start(self, bindto, port, root="default"): self.rootpath = root logger.info("Starting web server on %s:%s with /%s", bindto, port, root) await self.tree.lookup(*(WEBDEF_DIR)) for cls in objects('moat.web', BaseExt): await cls.start(self.app) for view in objects('moat.web', BaseView): if view.path is not None: print(view) self.app.router.add_route('*', view.path, view) r = FakeReq('/') r = await self.app.router.resolve(r) if getattr(r, '_exception', None) is not None: self.app.router.add_get('/', hello) self.handler = self.app.make_handler() self.srv = await self.loop.create_server(self.handler, bindto, port) logger.debug('serving on %s', self.srv.sockets[0].getsockname())
async def do(self, args): t = await self.setup() tree = await self.root._get_tree() t2 = await tree.subdir(TASKDEF_DIR) if args: objs = [] for a in args: m = import_string(a) if isinstance(m, py_types.ModuleType): try: syms = m.__all__ except AttributeError: syms = dir(m) n = 0 for c in syms: c = getattr(m, c, None) if isinstance(c, type) and issubclass( c, BaseModule) and c.prefix is not None: objs.append(c) n += 1 if self.root.verbose > (1 if n else 0): print("%s: %s module%s found." % (a, n if n else "no", "" if n == 1 else "s"), file=self.stdout) if self.tasks: n = 0 for c in objects(m, Task, filter=lambda x: getattr( x, 'taskdef', None) is not None): await t2.add_task(c, force=self.force) n += 1 if self.root.verbose > (1 if n else 0): print("%s: %s command%s found." % (a, n if n else "no", "" if n == 1 else "s"), file=self.stdout) else: if not isinstance(m, BaseModule): raise CommandError("%s is not a task" % a) objs.append(m) else: objs = modules() tasks = await t.root.subdir(TASKDEF_DIR) for obj in objs: await t.add_module(obj, force=self.force) for ta in obj.task_types(): await tasks.add_task(ta, force=self.force) await t.wait()
async def stop(self): logger.info("Stopping web server") if self.srv is not None: self.srv.close() await self.srv.wait_closed() if self.app is not None: for cls in objects('moat.web', BaseExt): await cls.stop(self.app) await self.app.shutdown() if self.handler is not None: await self.handler.finish_connections(60.0) if self.app is not None: await self.app.cleanup()
async def do(self,args): t = await self.setup() tree = await self.root._get_tree() t2 = await tree.subdir(TASKDEF_DIR) if args: objs = [] for a in args: m = import_string(a) if isinstance(m,py_types.ModuleType): try: syms = m.__all__ except AttributeError: syms = dir(m) n = 0 for c in syms: c = getattr(m,c,None) if isinstance(c,type) and issubclass(c,BaseModule) and c.prefix is not None: objs.append(c) n += 1 if self.root.verbose > (1 if n else 0): print("%s: %s module%s found." % (a,n if n else "no", "" if n==1 else "s"), file=self.stdout) if self.tasks: n = 0 for c in objects(m, Task, filter=lambda x:getattr(x,'taskdef',None) is not None): await t2.add_task(c, force=self.force) n += 1 if self.root.verbose > (1 if n else 0): print("%s: %s command%s found." % (a,n if n else "no", "" if n==1 else "s"), file=self.stdout) else: if not isinstance(m,BaseModule): raise CommandError("%s is not a task"%a) objs.append(m) else: objs = modules() tasks = await t.root.subdir(TASKDEF_DIR) for obj in objs: await t.add_module(obj, force=self.force) for ta in obj.task_types(): await tasks.add_task(ta, force=self.force) await t.wait()
async def do(self,args): tree = await self.root._get_tree() t = await self.setup(meta=True) if args: objs = [] for a in args: m = import_string(a) if isinstance(m,types.ModuleType): from moat.script.util import objects n = 0 for c in objects(m, WebdefDir, filter=lambda x:getattr(x,'name',None) is not None): await t.add_webdef(c, force=self.force) n += 1 if self.root.verbose > (1 if n else 0): print("%s: %s webdef%s found." % (a,n if n else "no", "" if n==1 else "s"), file=self.stdout) else: if not isinstance(m,WebdefDir): raise CommandError("%s is not a web definition"%a) await t.add_webdef(m, force=self.force) else: for c in webdefs(): await t.add_webdef(c, force=self.force) await t.wait()
def types(): """Generator for all types known to MoaT. This accesses the code.""" from .base import Type from moat.script.util import objects return objects(__name__, Type, filter=lambda x:x.name is not None)
def devices(): from moat.script.util import objects from moat.base import BaseDevice # we want all objects with a distinctive prefix return objects(__name__, BaseDevice, filter=lambda x:x.__dict__.get('prefix',None) is not None)
def tasks(): if not _tasks: for t in objects(__name__, ScanTask): _tasks[t.typ] = t return _tasks
def modules(base="moat.ext"): from moat.script.util import objects # This filter ignores derived classes which do not set a prefix return objects(base, BaseModule, filter=lambda x:x.__dict__.get('prefix',None) is not None)
def tasks(): if not _tasks: for t in objects(__name__,ScanTask): _tasks[t.typ] = t return _tasks
def webdefs(): """Generator for all web defs known to MoaT. This accesses the code.""" from .base import WebdefDir from moat.script.util import objects return objects(__name__, WebdefDir, filter=lambda x:x.name is not None)
def types(): """Generator for all types known to MoaT. This accesses the code.""" from .base import Type from moat.script.util import objects return objects(__name__, Type, filter=lambda x: x.name is not None)
def webdefs(): """Generator for all web defs known to MoaT. This accesses the code.""" from .base import WebdefDir from moat.script.util import objects return objects(__name__, WebdefDir, filter=lambda x: x.name is not None)