Changeset 79
- Timestamp:
- 07/02/08 00:46:36 (5 months ago)
- Files:
-
- fizzjik/fizzjik/config.py (modified) (4 diffs)
- fizzjik/fizzjik/hub.py (modified) (2 diffs)
- fizzjik/fizzjik/io/rest.py (modified) (4 diffs)
- fizzjik/fizzjik/io/say.py (modified) (1 diff)
- fizzjik/fizzjik/serial.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
fizzjik/fizzjik/config.py
r33 r79 16 16 return deco 17 17 18 def public_method(f): 19 f.public = True 20 return f 21 22 18 23 class ConfigurableMixin(object): 19 24 implements(IConfigurable) 25 20 26 config = None 21 27 def receiveConfig(self, config): … … 45 51 pass 46 52 53 54 47 55 class ConfigurableService(service.Service, ConfigurableMixin): 48 56 enabled = True … … 51 59 if_config("enabled", service.Service.privilegedStartService) 52 60 startService = if_config("enabled", service.Service.startService) 61 62 @property 63 def name(self): 64 return self.__class__.__name__ 65 53 66 54 67 class ConfigurableTCPServer(internet.TCPServer, ConfigurableMixin): … … 68 81 if_config("enabled", internet.TCPServer.privilegedStartService) 69 82 startService = if_config("enabled", internet.TCPServer.startService) 83 84 @property 85 def name(self): 86 return self.__class__.__name__ fizzjik/fizzjik/hub.py
r38 r79 1 1 from ConfigParser import SafeConfigParser as ConfigParser 2 import logging 2 3 3 4 from twisted.application import service, internet … … 40 41 41 42 def addService(self, svc): 43 logging.debug("Adding service '%s'" % svc.name) 42 44 if IConfigurable.implementedBy(svc.__class__): 43 45 self._sendConfiguration(svc) fizzjik/fizzjik/io/rest.py
r73 r79 1 import inspect 2 1 3 from twisted.web2 import server, channel 2 4 from twisted.web2 import iweb, http, resource, stream … … 13 15 """ 14 16 15 class ResterizerWebRoot(resource.LeafResource): 16 def __init__(self, parent, service): 17 class ResterizerWebResource(resource.Resource): 18 addSlash = False 19 20 def __init__(self, parent, service, method=None): 17 21 self.parent = parent 18 22 self.service = service 23 self.method = method 24 25 def childFactory(self, request, segment): 26 f = getattr(self.service, 'getServiceNamed', None) 27 if f: 28 svc = f(segment) 29 30 return self.__class__(self, svc) 31 m = getattr(self.service, segment, None) 32 if m: 33 svc = self.service 34 return self.__class__(self, svc, m) 35 36 return None 37 19 38 20 39 def render(self, ctx): 40 41 if self.method: 42 return self.renderMethod(ctx) 43 elif self.service: 44 return self.renderService(ctx) 45 46 47 def renderService(self, ctx): 48 public_methods = {} 49 50 for k in dir(self.service): 51 a = getattr(self.service, k) 52 if hasattr(a, 'public'): 53 public_methods[k] = a 54 55 out_methods = {} 56 for k, f in public_methods.iteritems(): 57 out_methods[k] = {} 58 out_methods[k]['spec'] = inspect.formatargspec( 59 inspect.getargspec(f.im_func)) 60 out_methods[k]['doc'] = getattr(f, '__doc__', '') 61 62 resp = {'service': self.service.name, 63 'public_methods': out_methods} 64 65 return http.Response(stream=simplejson.dumps(resp, sort_keys=True, 66 indent=2)) 67 68 def renderMethod(self, ctx): 21 69 req = iweb.IRequest(ctx) 22 23 method = req.args.pop('method')[0]24 70 params = {} 25 71 for k, v in req.args.iteritems(): 26 if k == 'method':27 continue28 72 params[k] = v[0] 29 73 30 74 s = stream.ProducerStream() 31 f = getattr(self.service, method)75 f = self.method 32 76 d = defer.maybeDeferred(f, **params) 33 77 34 78 d.addCallback(simplejson.dumps) 35 79 d.addCallback(s.write) 36 d.addCallback(s.finish) 80 d.addErrback(lambda x: s.write(str(x))) 81 d.addBoth(s.finish) 37 82 38 83 return http.Response(stream=s) … … 43 88 channel.HTTPFactory.__init__(self, self.parent.site) 44 89 45 46 90 class ResterizerService(ConfigurableTCPServer): 47 rootFactory = ResterizerWebR oot91 rootFactory = ResterizerWebResource 48 92 factory = ResterizerFactory 49 93 … … 54 98 55 99 super(ResterizerService, self).__init__(*args, **kw) 100 fizzjik/fizzjik/io/say.py
r78 r79 33 33 def stopService(self): 34 34 self.process.kill() 35 35 36 @config.public_method 36 37 def say(self, phrase): 37 38 self.spawn(phrase) fizzjik/fizzjik/serial.py
r19 r79 41 41 def observe(self, evt): 42 42 self.parent.observe(evt) 43 44 @property 45 def name(self): 46 return self.__class__.__name__ 43 47 44 48 class SerialPortProtocol(protocol.Protocol, ConfigurableMixin):
