示例#1
0
 def setUpClass(cls):
     cls.mapped_module = mapper.MappedModule('TestDjangoOneToOneFieldConversion')
     cls.mapped_module.add_mapped_model(OneToOneParentTestModel.generate_protocol_buffer())
     cls.mapped_module.add_mapped_model(OneToOneChildTestModel.generate_protocol_buffer())
     util.generate_pb2_module(cls.mapped_module)
     cls.pb2 = cls.mapped_module.load_pb2()
     cls.converter = Converter(cls.mapped_module)
示例#2
0
    def setUpClass(cls):
        cls.mapped_module = mapper.MappedModule('TestDjangoNoDecoratorForeignKeyConversion')
        cls.mapped_module.add_mapped_model(NoDecoratorForeignKeyChildTestModel.generate_protocol_buffer())
#        cls.mapped_module.add_mapped_model(ForeignKeyChildTestFollowRelatedFalseModel.generate_protocol_buffer())
        util.generate_pb2_module(cls.mapped_module)
        cls.pb2 = cls.mapped_module.load_pb2()
        cls.converter = Converter(cls.mapped_module)
示例#3
0
 def setUpClass(cls):
     cls.mapped_module = mapper.MappedModule('TestDjangoManyToManyConversion')
     cls.mapped_module.add_mapped_model(ManyToManyParentTestModel.generate_protocol_buffer())
     cls.mapped_module.add_mapped_model(ManyToManyChildTestModel.generate_protocol_buffer())
     cls.mapped_module.add_mapped_model(ManyToManyChildTestFollowRelatedFalseModel.generate_protocol_buffer())
     util.generate_pb2_module(cls.mapped_module)
     cls.pb2 = cls.mapped_module.load_pb2()
     cls.converter = Converter(cls.mapped_module)
示例#4
0
    def handle(self, app=None, **options):
        ### Start of code copied from south apps convert_to_south.py
        # Make sure we have an app
        if not app:
            print "Please specify an app."
            return

        # See if the app exists
        app = app.split(".")[-1]
        try:
            app_module = models.get_app(app)
        except ImproperlyConfigured:
            print "There is no enabled application matching '%s'." % app
            return

        # Try to get its list of models
        model_list = models.get_models(app_module)
        if not model_list:
            print "This application has no models."

        ### End of code copied from south apps convert_to_south.py

        pb2_path = options.get('pb2')
        pb2_mod = None
        field_number_map = {}
        if pb2_path:
            mod_name, file_ext = os.path.splitext(os.path.split(pb2_path)[-1])
            if file_ext == '.py':
                pb2_mod = imp.load_source(mod_name, pb2_path)
            elif file_ext == '.pyc':
                pb2_mod = imp.load_compiled(mod_name, pb2_path)
            else:
                print "Don't understand pb2 value %s" % pb2_path
                sys.exit(1)
            field_number_map = util.generate_field_number_map(pb2_mod)
        mapped_module = mapper.MappedModule(app)
        mapped_models = [
            model.generate_protocol_buffer(old_pb2_mod=pb2_mod,
                                           field_number_map=field_number_map)
            for model in model_list if hasattr(model, '__PBANDJ')
        ]
        for mapped_model in mapped_models:
            mapped_module.add_mapped_model(mapped_model)

        proto = mapped_module.generate_proto()
        util.generate_pb2_module(mapped_module)
        app_path, module_file = os.path.split(app_module.__file__)
        util.save_module(mapped_module, path=app_path)
示例#5
0
 def setUpClass(cls):
     cls.mapped_module = mapper.MappedModule('TestDjangoCharChoicesEnumConversion')
     cls.mapped_module.add_mapped_model(EnumTest.generate_protocol_buffer())
     util.generate_pb2_module(cls.mapped_module)
     cls.pb2 = cls.mapped_module.load_pb2()
     cls.converter = Converter(cls.mapped_module)
示例#6
0
 def setUpClass(cls):
     cls.mapped_module = mapper.MappedModule('TestExcludeConversion')
     cls.mapped_module.add_mapped_model(ExcludeTest.generate_protocol_buffer())
     util.generate_pb2_module(cls.mapped_module)
     cls.pb2 = cls.mapped_module.load_pb2()
     cls.converter = Converter(cls.mapped_module)
示例#7
0
 def setUpClass(cls):
     cls.mapped_module = mapper.MappedModule('TestDjangoFieldConversion')
     cls.mapped_module.add_mapped_model(test_models.OneOfEverything.generate_protocol_buffer())
     util.generate_pb2_module(cls.mapped_module)
     cls.converter = Converter(cls.mapped_module)
     cls.pb2 = cls.mapped_module.load_pb2()
class Command(BaseCommand):
    option_list = BaseCommand.option_list + (
        make_option(
            '--out', dest='out', default='.', help='Set the output location'),
        make_option('--target',
                    dest='target',
                    default=None,
                    help='Set the name of the generated .proto file'),
        make_option('--pb2',
                    dest='pb2',
                    default=None,
                    help='Maintain field nubering from existing pb2 module'),
        make_option('--external',
                    dest='external',
                    default=None,
                    help='External .proto files needed as import'))

    help = "Generated Protocol Buffer service definitions and bindings"
    args = "[appname]"

    def handle(self, app=None, **options):

        # Make sure we have an app
        if not app:
            print "Please specify an app."
            return

        # See if the app exists
        app = app.split(".")[-1]

        try:
            app_module = models.get_app(app)
        except ImproperlyConfigured:
            print "There is no enabled application matching '%s'." % app
        service_mod = PBANDJ_SERVICE_MODULES.get(
            app, app + "." + PBANDJ_SERVICE_MODULE)
        try:
            #            service_mod = __import__(service_mod, fromlist=[app])
            service_mod = __import__(service_mod,
                                     fromlist=[app_module.__package__])
        except Exception, e:
            print e
            return

#        pb = proto.Proto(app + '_' + 'services')
#        pb.imports.append(app + '.proto')
        mapped_module = mapper.MappedModule(app + '_' + 'services')
        mapped_module.add_import(app + '.proto')
        for xtra_import in service_registry.proto_imports:
            mapped_module.add_import(xtra_import)
        if options.get('external', None) != None:
            mapped_module.add_import(options.get('external'))
        for service_name, handlers in service_registry.services.items():
            pb_service = service.Service(service_name)
            service_handlers = {}
            for handler in handlers:
                meta = handler._pbandj
                service_in = meta.input
                if isinstance(service_in,
                              type) and models.Model in service_in.__bases__:
                    service_in = service_in.generate_protocol_buffer(
                    ).pb_msg.name
                service_out = meta.output
                if isinstance(service_out,
                              type) and models.Model in service_out.__bases__:
                    service_out = service_out.generate_protocol_buffer(
                    ).pb_msg.name
                pb_service.add_rpc(meta.method_name, service_in, service_out)
                # Add a handler entry for this service method
                service_handlers[meta.method_name] = handler
            mapped_module.add_service(pb_service, service_handlers)
#            pb.add_service(pb_service)
#        print pb
        proto = mapped_module.generate_proto()
        print proto
        util.generate_pb2_module(mapped_module)
        #        util.write_proto_file(pb)
        pathtomodule = os.path.split(app_module.__file__)[0]
        util.save_service_module(mapped_module, path=pathtomodule)