def definition_package(cls): """Get package for service. Returns: Package name for service. """ try: return cls.__definition_package except AttributeError: cls.__definition_package = util.get_package_for_module(cls.__module__) return cls.__definition_package
def describe_file(module): """Build a file from a specified Python module. Args: module: Python module to describe. Returns: Initialized FileDescriptor instance describing the module. """ # May not import remote at top of file because remote depends on this # file # TODO(rafek): Straighten out this dependency. Possibly move these functions # from descriptor to their own module. from protorpc import remote descriptor = FileDescriptor() descriptor.package = util.get_package_for_module(module) if not descriptor.package: descriptor.package = None message_descriptors = [] enum_descriptors = [] service_descriptors = [] # Need to iterate over all top level attributes of the module looking for # message, enum and service definitions. Each definition must be itself # described. for name in sorted(dir(module)): value = getattr(module, name) if isinstance(value, type): if issubclass(value, messages.Message): message_descriptors.append(describe_message(value)) elif issubclass(value, messages.Enum): enum_descriptors.append(describe_enum(value)) elif issubclass(value, remote.Service): service_descriptors.append(describe_service(value)) if message_descriptors: descriptor.message_types = message_descriptors if enum_descriptors: descriptor.enum_types = enum_descriptors if service_descriptors: descriptor.service_types = service_descriptors return descriptor
def testPackageMappingsWithPackage(self): this_module_name = util.get_package_for_module(__name__) full_type_name = 'MessageWithEnum.ThisEnum' full_key = '%s.%s' % (this_module_name, full_type_name) this_module = sys.modules[__name__] new_package = 'new_package' try: setattr(this_module, 'package', new_package) new_key = '%s.%s' % (new_package, full_type_name) self.assertEqual( new_key, encoding._GetTypeKey(MessageWithEnum.ThisEnum, '')) self.assertEqual( full_key, encoding._GetTypeKey(MessageWithEnum.ThisEnum, new_package)) finally: delattr(this_module, 'package')
def testIsMainCompiled(self): module = self.CreateModule('__main__') module.__file__ = '/bing/blam/bloom/blarm/my_file.pyc' self.assertPackageEquals('my_file', util.get_package_for_module(module))
def testHasModuleName(self): module = self.CreateModule('service_module') self.assertPackageEquals('service_module', util.get_package_for_module(module))
def testHasPackage(self): module = self.CreateModule('service_module') module.package = 'my_package' self.assertPackageEquals('my_package', util.get_package_for_module(module))
def testModuleNameNotInSys(self): self.assertPackageEquals(None, util.get_package_for_module('service_module'))
def testPackageMappingsNoPackage(self): this_module_name = util.get_package_for_module(__name__) full_type_name = 'MessageWithEnum.ThisEnum' full_key = '%s.%s' % (this_module_name, full_type_name) self.assertEqual(full_key, encoding._GetTypeKey(MessageWithEnum.ThisEnum, ''))
def testNoExtension(self): module = self.CreateModule('__main__') module.__file__ = '/bing/blam/bloom/blarm/my_file' self.assertPackageEquals('my_file', util.get_package_for_module(module))
def testNoPackageAtAll(self): module = self.CreateModule('__main__') self.assertPackageEquals('__main__', util.get_package_for_module(module))