def getRpcNode(self, packages): packages_node = AutoTemplateAstNode() for p in packages: n = self.package_translator.translatePackage(p) name = p.__name__.split('.')[-1] packages_node.translate(name, n) exposed_rpc_node = TranslationAstNode('exposed_rpc.CommandQueueApi') exposed_rpc_node.translate(EXPOSED_PACKAGES=packages_node) return exposed_rpc_node
def translateClass(self, class_): class_namespace = self._getJsNamespace(class_) class_node = TranslationAstNode('classes.ExposedClass') class_node.translate(CLASS_NAME=class_.__name__, NAMESPACE='/'.join(class_namespace.split('.'))) methods_node = AutoTemplateAstNode() for decorator_class in getDecoratorsList(): node = self._getMethodTypeNode(class_, class_namespace, decorator_class) if node: methods_node.translate(decorator_class.__name__, node) class_node.translate(METHODS=methods_node) return class_node
def _getMethodTypeNode(self, class_, class_namespace, decorator_class): methods_node = AutoTemplateAstNode() instance = self._getClassInstance(class_) exposed_methods = instance.exposedMethods(decorator_class) if len(exposed_methods): for method_name in exposed_methods: mt_node = TranslationAstNode('methods.%s' % decorator_class.__name__) method = getattr(instance, method_name) if hasattr(method, 'method'): #TODO should look for getDecoratedMethod method = method.method method_args = portable_getargspec(method)[0][1:] cmd_string = class_namespace + '.' + method_name mt_node.translate(METHOD_NAME=method_name, ARGS=self._getArgsJs(method_args), KWARGS=self._getKwargsJs(method_args), RPC_METHOD=cmd_string,) methods_node.translate(method_name, mt_node) return methods_node else: return None