Esempio n. 1
0
def generate_method(x, lib, auth=True):
    auth_f = ', auth=None' if auth else ''
    auth_a = ', auth' if auth else ''
    typed_args = ', '.join([(PYTYPEOF(arg) + ' ' + arg_name(arg)).strip()
                            for arg in x.args_in])
    arg_list = ', '.join([arg_name(arg) for arg in x.args_in])
    if x.form == bindings.AsyncCall:
        excess = ''
        magic_attr = ''
        if x.name == 'put':
            excess = ', secret=None'
            magic_attr = "    if secret is not None: attributes['__secret'] = secret\n"
        meth = 'def async_{0}(self, {1}{3}{2}):\n'.format(
            name(x), typed_args, excess, auth_f)
        meth += magic_attr
        meth += '    return self.{0}(hyperdex_{3}_{1}, {2}, auth)\n'.format(
            bindings.call_name(x), x.name, arg_list, lib)
        meth += 'def {0}(self, {1}{3}{2}):\n'.format(name(x), typed_args,
                                                     excess, auth_f)
        meth += magic_attr
        meth += '    return self.async_{0}({1}{2}).wait()\n'.format(
            name(x), arg_list, auth_a)
    elif x.form == bindings.Iterator:
        meth = 'def {0}(self, {1}):\n'.format(name(x), typed_args)
        meth += '    return self.{0}(hyperdex_{3}_{1}, {2})\n'.format(
            bindings.call_name(x), x.name, arg_list, lib)
    elif x.form == bindings.MicrotransactionCall:
        raise RuntimeError(
            'generate_method cannot be called on MicrotransactionCall')
    else:
        raise RuntimeError('unknown function type')
    return indent(meth)[:-1]
Esempio n. 2
0
def generate_method(x, lib):
    assert x.form in (bindings.AsyncCall, bindings.Iterator)
    typed_args = ', '.join([(PYTYPEOF(arg) + ' ' + arg_name(arg)).strip()
                            for arg in x.args_in])
    arg_list = ', '.join([arg_name(arg) for arg in x.args_in])
    if x.form == bindings.AsyncCall:
        excess = ''
        magic_attr = ''
        if x.name == 'put':
            excess = ', secret=None'
            magic_attr = "    if secret is not None: attributes['__secret'] = secret\n"
        meth = 'def async_{0}(self, {1}, auth=None{2}):\n'.format(
            name(x), typed_args, excess)
        meth += magic_attr
        meth += '    return self.{0}(hyperdex_{3}_{1}, {2}, auth)\n'.format(
            bindings.call_name(x), x.name, arg_list, lib)
        meth += 'def {0}(self, {1}, auth=None{2}):\n'.format(
            name(x), typed_args, excess)
        meth += magic_attr
        meth += '    return self.async_{0}({1}, auth).wait()\n'.format(
            name(x), arg_list)
    if x.form == bindings.Iterator:
        meth = 'def {0}(self, {1}):\n'.format(name(x), typed_args)
        meth += '    return self.{0}(hyperdex_{3}_{1}, {2})\n'.format(
            bindings.call_name(x), x.name, arg_list, lib)
    return indent(meth)[:-1]
Esempio n. 3
0
def generate_method(x, lib, auth=True):
    auth_f = ', auth=None' if auth else ''
    auth_a = ', auth' if auth else ''
    typed_args = ', '.join([(PYTYPEOF(arg) + ' ' + arg_name(arg)).strip()
                             for arg in x.args_in])
    arg_list = ', '.join([arg_name(arg) for arg in x.args_in])
    if x.form == bindings.AsyncCall:
        excess = ''
        magic_attr = ''
        if x.name == 'put':
            excess = ', secret=None'
            magic_attr = "    if secret is not None: attributes['__secret'] = secret\n"
        meth  = 'def async_{0}(self, {1}{3}{2}):\n'.format(name(x), typed_args, excess, auth_f)
        meth += magic_attr
        meth += '    return self.{0}(hyperdex_{3}_{1}, {2}, auth)\n'.format(bindings.call_name(x), x.name, arg_list, lib)
        meth += 'def {0}(self, {1}{3}{2}):\n'.format(name(x), typed_args, excess, auth_f)
        meth += magic_attr
        meth += '    return self.async_{0}({1}{2}).wait()\n'.format(name(x), arg_list, auth_a)
    elif x.form == bindings.Iterator:
        meth  = 'def {0}(self, {1}):\n'.format(name(x), typed_args)
        meth += '    return self.{0}(hyperdex_{3}_{1}, {2})\n'.format(bindings.call_name(x), x.name, arg_list, lib)
    elif x.form == bindings.MicrotransactionCall:
        raise RuntimeError('generate_method cannot be called on MicrotransactionCall')
    else:
        raise RuntimeError('unknown function type')
    return indent(meth)[:-1]
Esempio n. 4
0
def generate_method(x, lib):
    assert x.form in (bindings.AsyncCall, bindings.Iterator)
    typed_args = ', '.join([(PYTYPEOF(arg) + ' ' + arg_name(arg)).strip()
                             for arg in x.args_in])
    arg_list = ', '.join([arg_name(arg) for arg in x.args_in])
    if x.form == bindings.AsyncCall:
        meth  = 'def async_{0}(self, {1}):\n'.format(name(x), typed_args)
        meth += '    return self.{0}(hyperdex_{3}_{1}, {2})\n'.format(bindings.call_name(x), x.name, arg_list, lib)
        meth += 'def {0}(self, {1}):\n'.format(name(x), typed_args)
        meth += '    return self.async_{0}({1}).wait()\n'.format(name(x), arg_list)
    if x.form == bindings.Iterator:
        meth  = 'def {0}(self, {1}):\n'.format(name(x), typed_args)
        meth += '    return self.{0}(hyperdex_{3}_{1}, {2})\n'.format(bindings.call_name(x), x.name, arg_list, lib)
    return indent(meth)[:-1]
Esempio n. 5
0
def generate_method(x, lib):
    assert x.form in (bindings.AsyncCall, bindings.Iterator)
    typed_args = ', '.join([(PYTYPEOF(arg) + ' ' + arg_name(arg)).strip()
                             for arg in x.args_in])
    arg_list = ', '.join([arg_name(arg) for arg in x.args_in])
    if x.form == bindings.AsyncCall:
        meth  = 'def async_{0}(self, {1}):\n'.format(name(x), typed_args)
        meth += '    return self.{0}(hyperdex_{3}_{1}, {2})\n'.format(bindings.call_name(x), x.name, arg_list, lib)
        meth += 'def {0}(self, {1}):\n'.format(name(x), typed_args)
        meth += '    return self.async_{0}({1}).wait()\n'.format(name(x), arg_list)
    if x.form == bindings.Iterator:
        meth  = 'def {0}(self, {1}):\n'.format(name(x), typed_args)
        meth += '    return self.{0}(hyperdex_{3}_{1}, {2})\n'.format(bindings.call_name(x), x.name, arg_list, lib)
    return indent(meth)[:-1]
Esempio n. 6
0
def generate_method(x, lib):
    assert x.form in (bindings.AsyncCall, bindings.Iterator,
                      bindings.MicrotransactionCall)
    typed_args_in = ', '.join([(arg_name(arg) + ' ' + GOTYPEOF(arg)).strip()
                               for arg in x.args_in])
    if x.form == bindings.AsyncCall:
        typed_args_out = return_type_async(x.args_out)
    if x.form == bindings.Iterator:
        typed_args_out = return_type_iter(x.args_out)
    arg_list = ', '.join([arg_name(arg) for arg in x.args_in])
    stub_args, stub_args_list = generate_stub_args(x)
    meth = 'func stub_{0}(client *C.struct_hyperdex_client, {1}) int64 {{\n'.format(
        x.name, stub_args)
    meth += '\treturn int64(C.hyperdex_client_{0}(client, {1}))\n'.format(
        x.name, stub_args_list)
    meth += '}\n'
    if x.form != bindings.MicrotransactionCall:
        meth += 'func (client *Client) {0}({1}) ({2}) {{\n'.format(
            GoIfy(x.name), typed_args_in, typed_args_out)
    else:
        meth += 'func (client *Client) {0}({1}) {{\n'.format(
            GoIfy(x.name), typed_args_in)
    meth += '\treturn client.{0}(stub_{1}, {2})\n'.format(
        GoIfy(bindings.call_name(x)), x.name, arg_list)
    meth += '}\n'
    return meth
Esempio n. 7
0
def generate_worker_definitions(xs, lib):
    calls = set([])
    for x in xs:
        call = bindings.call_name(x)
        if call in calls:
            continue
        if x.form is bindings.MicrotransactionCall:
            continue #TODO support microtransactions in NodeJS
        assert x.form in (bindings.AsyncCall, bindings.Iterator)
        fptr = bindings.c.generate_func_ptr(x, lib)
        func  = 'v8::Handle<v8::Value>\nHyperDexClient :: '
        func += '{0}({1}, const v8::Arguments& args)\n'.format(call, fptr)
        func += '{\n'
        func += '    v8::HandleScope scope;\n'
        func += '    v8::Local<v8::Object> client_obj = args.This();\n'
        func += '    HyperDexClient* client = node::ObjectWrap::Unwrap<HyperDexClient>(client_obj);\n'
        func += '    e::intrusive_ptr<Operation> op(new Operation(client_obj, client));\n'
        if x.form == bindings.AsyncCall:
            func += '    v8::Local<v8::Function> func = args[{0}].As<v8::Function>();\n'.format(len(x.args_in))
            func += '\n    if (func.IsEmpty() || !func->IsFunction())\n'
            func += '    {\n'
            func += '        v8::ThrowException(v8::String::New("Callback must be a function"));\n'
            func += '        return scope.Close(v8::Undefined());\n'
            func += '    }\n\n'
            func += '    if (!op->set_callback(func)) { return scope.Close(v8::Undefined()); }\n'
        if x.form == bindings.Iterator:
            func += '    v8::Local<v8::Function> func = args[{0}].As<v8::Function>();\n'.format(len(x.args_in))
            func += '\n    if (func.IsEmpty() || !func->IsFunction())\n'
            func += '    {\n'
            func += '        v8::ThrowException(v8::String::New("Callback must be a function"));\n'
            func += '        return scope.Close(v8::Undefined());\n'
            func += '    }\n\n'
            func += '    v8::Local<v8::Function> done = args[{0}].As<v8::Function>();\n'.format(len(x.args_in) + 1)
            func += '\n    if (done.IsEmpty() || !done->IsFunction())\n'.format(len(x.args_in))
            func += '    {\n'
            func += '        v8::ThrowException(v8::String::New("Callback must be a function"));\n'
            func += '        return scope.Close(v8::Undefined());\n'
            func += '    }\n\n'
            func += '    if (!op->set_callback(func, done)) { return scope.Close(v8::Undefined()); }\n'
        for idx, arg in enumerate(x.args_in):
            for p, n in arg.args:
                func += '    ' + p + ' in_' + n + ';\n'
            args = ', '.join(['&in_' + n for p, n in arg.args])
            func += '    v8::Local<v8::Value> {0} = args[{1}];\n'.format(arg.__name__.lower(), idx)
            func += '    if (!op->convert_{0}({0}, {1})) return scope.Close(v8::Undefined());\n'.format(arg.__name__.lower(), args)
        func += '    op->reqid = f(client->client(), {0}, {1});\n\n'.format(', '.join(['in_' + n for p, n in sum([list(a.args) for a in x.args_in], [])]),
                                                                            ', '.join(['&op->' + n for p, n in sum([list(a.args) for a in x.args_out], [])]))
        func += '    if (op->reqid < 0)\n    {\n'
        func += '        op->callback_error_from_status();\n'
        func += '        return scope.Close(v8::Undefined());\n'
        func += '    }\n\n'
        args = '_'.join([arg.__name__.lower() for arg in x.args_out])
        form = x.form.__name__.lower()
        func += '    op->encode_return = &Operation::encode_{0}_{1};\n'.format(form, args)
        func += '    client->add(op->reqid, op);\n'
        func += '    return scope.Close(v8::Undefined());\n'
        func += '}\n'
        yield func
        calls.add(call)
Esempio n. 8
0
def generate_definition(x):
    assert x.form in (bindings.AsyncCall, bindings.Iterator)
    func  = 'v8::Handle<v8::Value>\n'
    func += 'HyperDexClient :: ' + x.name
    func += '(const v8::Arguments& args)\n{\n'
    func += '    return {0}(hyperdex_client_{1}, args);\n'.format(bindings.call_name(x), x.name)
    func += '}\n'
    return func
Esempio n. 9
0
File: java.py Progetto: via/HyperDex
def generate_workers(xs):
    calls = set([])
    for x in xs:
        call = bindings.call_name(x)
        if call in calls:
            continue
        yield generate_worker(call, x)
        calls.add(call)
Esempio n. 10
0
def generate_definition(x):
    assert x.form in (bindings.AsyncCall, bindings.Iterator)
    func  = 'v8::Handle<v8::Value>\n'
    func += 'HyperDexClient :: ' + x.name
    func += '(const v8::Arguments& args)\n{\n'
    func += '    return {0}(hyperdex_client_{1}, args);\n'.format(bindings.call_name(x), x.name)
    func += '}\n'
    return func
Esempio n. 11
0
def generate_workers(xs):
    calls = set([])
    for x in xs:
        call = bindings.call_name(x)
        if call in calls:
            continue
        yield generate_worker(call, x)
        calls.add(call)
Esempio n. 12
0
def generate_function_pointer_typedefs(xs, lib):
    calls = set([])
    for x in xs:
        call = bindings.call_name(x)
        if call in calls:
            continue
        assert x.form in (bindings.AsyncCall, bindings.Iterator)
        yield 'ctypedef ' + generate_function_ptr(x, call + '_fptr', lib)
        calls.add(call)
Esempio n. 13
0
def generate_function_pointer_typedefs(xs, lib):
    calls = set([])
    for x in xs:
        call = bindings.call_name(x)
        if call in calls:
            continue
        assert x.form in (bindings.AsyncCall, bindings.Iterator)
        yield 'ctypedef ' + generate_function_ptr(x, call + '_fptr', lib)
        calls.add(call)
Esempio n. 14
0
def generate_worker_declarations(xs, lib):
    calls = set([])
    for x in xs:
        call = bindings.call_name(x)
        if call in calls:
            continue
        assert x.form in (bindings.AsyncCall, bindings.Iterator)
        fptr = bindings.c.generate_func_ptr(x, lib)
        yield 'static v8::Handle<v8::Value> {0}({1}, const v8::Arguments& args);'.format(call, fptr)
        calls.add(call)
Esempio n. 15
0
def generate_workers(xs):
    calls = set([])
    for x in xs:
        call = bindings.call_name(x)
        if call in calls:
            continue
        if x.form is bindings.MicrotransactionCall:
            continue
        yield generate_worker(call, x)
        calls.add(call)
Esempio n. 16
0
def generate_workers(xs):
    calls = set([])
    for x in xs:
        call = bindings.call_name(x)
        if call in calls:
            continue
        if x.form is bindings.MicrotransactionCall:
            continue
        yield generate_worker(call, x)
        calls.add(call)
Esempio n. 17
0
def generate_worker_declarations(xs, lib):
    calls = set([])
    for x in xs:
        call = bindings.call_name(x)
        if call in calls:
            continue
        assert x.form in (bindings.AsyncCall, bindings.Iterator)
        fptr = bindings.c.generate_func_ptr(x, lib)
        yield 'static v8::Handle<v8::Value> {0}({1}, const v8::Arguments& args);'.format(call, fptr)
        calls.add(call)
Esempio n. 18
0
def generate_workers(xs):
    calls = set([])
    for x in xs:
        call = bindings.call_name(x)
        if call in calls:
            continue
        assert x.form in (bindings.AsyncCall, bindings.Iterator)
        if x.form == bindings.AsyncCall:
            yield generate_worker_asynccall(call, x)
        if x.form == bindings.Iterator:
            yield generate_worker_iterator(call, x)
        calls.add(call)
Esempio n. 19
0
def generate_method(x, lib):
    assert x.form in (bindings.AsyncCall, bindings.Iterator)
    typed_args = ', '.join([(PYTYPEOF(arg) + ' ' + arg_name(arg)).strip()
                             for arg in x.args_in])
    arg_list = ', '.join([arg_name(arg) for arg in x.args_in])
    if x.form == bindings.AsyncCall:
        excess = ''
        magic_attr = ''
        if x.name == 'put':
            excess = ', secret=None'
            magic_attr = "    if secret is not None: attributes['__secret'] = secret\n"
        meth  = 'def async_{0}(self, {1}, auth=None{2}):\n'.format(name(x), typed_args, excess)
        meth += magic_attr
        meth += '    return self.{0}(hyperdex_{3}_{1}, {2}, auth)\n'.format(bindings.call_name(x), x.name, arg_list, lib)
        meth += 'def {0}(self, {1}, auth=None{2}):\n'.format(name(x), typed_args, excess)
        meth += magic_attr
        meth += '    return self.async_{0}({1}, auth).wait()\n'.format(name(x), arg_list)
    if x.form == bindings.Iterator:
        meth  = 'def {0}(self, {1}):\n'.format(name(x), typed_args)
        meth += '    return self.{0}(hyperdex_{3}_{1}, {2})\n'.format(bindings.call_name(x), x.name, arg_list, lib)
    return indent(meth)[:-1]
Esempio n. 20
0
def generate_workers(xs):
    calls = set([])
    for x in xs:
        call = bindings.call_name(x)
        if call in calls:
            continue
        assert x.form in (bindings.AsyncCall, bindings.Iterator)
        if x.form == bindings.AsyncCall:
            yield generate_worker_asynccall(call, x)
        if x.form == bindings.Iterator:
            yield generate_worker_iterator(call, x)
        calls.add(call)
Esempio n. 21
0
def generate_workers(xs):
    calls = set([])
    for x in xs:
        call = bindings.call_name(x)
        if call in calls:
            continue
        if x.form is bindings.MicrotransactionCall:
            continue
        if x.form == bindings.AsyncCall:
            yield generate_worker_asynccall(call, x)
        elif x.form == bindings.Iterator:
            yield generate_worker_iterator(call, x)
        else:
            raise RuntimeError('unknown function type')
        calls.add(call)
Esempio n. 22
0
def generate_workers(xs):
    calls = set([])
    for x in xs:
        call = bindings.call_name(x)
        if call in calls:
            continue
        if x.form is bindings.MicrotransactionCall:
            continue
        if x.form == bindings.AsyncCall:
            yield generate_worker_asynccall(call, x)
        elif x.form == bindings.Iterator:
            yield generate_worker_iterator(call, x)
        else:
            raise RuntimeError('unknown function type')
        calls.add(call)
Esempio n. 23
0
def generate_method(x, lib):
    assert x.form in (bindings.AsyncCall, bindings.Iterator)
    typed_args_in = ', '.join([(arg_name(arg) + ' ' + GOTYPEOF(arg)).strip()
                               for arg in x.args_in])
    if x.form == bindings.AsyncCall:
        typed_args_out = return_type_async(x.args_out)
    if x.form == bindings.Iterator:
        typed_args_out = return_type_iter(x.args_out)
    arg_list = ', '.join([arg_name(arg) for arg in x.args_in])
    stub_args, stub_args_list = generate_stub_args(x)
    meth  = 'func stub_{0}(client *C.struct_hyperdex_client, {1}) int64 {{\n'.format(x.name, stub_args)
    meth += '\treturn int64(C.hyperdex_client_{0}(client, {1}))\n'.format(x.name, stub_args_list)
    meth += '}\n'
    meth += 'func (client *Client) {0}({1}) ({2}) {{\n'.format(GoIfy(x.name), typed_args_in, typed_args_out)
    meth += '\treturn client.{0}(stub_{1}, {2})\n'.format(GoIfy(bindings.call_name(x)), x.name, arg_list)
    meth += '}\n'
    return meth
Esempio n. 24
0
def generate_definition(x):
    assert x.form in (bindings.AsyncCall, bindings.Iterator)
    func = 'JNIEXPORT HYPERDEX_API jobject JNICALL\n'
    if x.form == bindings.AsyncCall:
        func += 'Java_org_hyperdex_client_Client_async_1{0}(JNIEnv* env, jobject obj'.format(
            x.name.replace('_', '_1'))
    if x.form == bindings.Iterator:
        func += 'Java_org_hyperdex_client_Client_{0}(JNIEnv* env, jobject obj'.format(
            x.name.replace('_', '_1'))
    for arg in x.args_in:
        func += ', ' + CTYPEOF(arg) + ' ' + arg.__name__.lower()
    func += ')\n{\n'
    func += '    return hyperdex_java_client_{0}(env, obj, hyperdex_client_{1}'.format(
        bindings.call_name(x), x.name)
    for arg in x.args_in:
        func += ', ' + arg.__name__.lower()
    func += ');\n}\n'
    return func
Esempio n. 25
0
File: java.py Progetto: via/HyperDex
def generate_definition(x):
    assert x.form in (bindings.AsyncCall, bindings.Iterator)
    func = 'JNIEXPORT HYPERDEX_API jobject JNICALL\n'
    if x.form == bindings.AsyncCall:
        func += 'Java_org_hyperdex_client_Client_async_1{0}(JNIEnv* env, jobject obj'.format(
            x.name.replace('_', '_1'))
    if x.form == bindings.Iterator:
        func += 'Java_org_hyperdex_client_Client_{0}(JNIEnv* env, jobject obj'.format(
            x.name.replace('_', '_1'))
    for arg in x.args_in:
        func += ', ' + CTYPEOF(arg) + ' ' + arg.__name__.lower()
    func += ')\n{\n'
    func += '    return hyperdex_java_client_{0}(env, obj, hyperdex_client_{1}'.format(
        bindings.call_name(x), x.name)
    for arg in x.args_in:
        func += ', ' + arg.__name__.lower()
    func += ');\n}\n'
    return func
Esempio n. 26
0
def generate_definition(x):
    assert x.form in (bindings.AsyncCall, bindings.Iterator)
    func = 'static VALUE\nhyperdex_ruby_client_{0}(VALUE self'.format(x.name)
    for arg in x.args_in:
        func += ', VALUE ' + arg.__name__.lower()
    func += ')\n{\n'
    func += '    return hyperdex_ruby_client_{0}(hyperdex_client_{1}, self'.format(bindings.call_name(x), x.name)
    for arg in x.args_in:
        func += ', ' + arg.__name__.lower()
    func += ');\n}\n'
    if x.form == bindings.AsyncCall:
        func += 'VALUE\nhyperdex_ruby_client_wait_{0}(VALUE self'.format(x.name)
        for arg in x.args_in:
            func += ', VALUE ' + arg.__name__.lower()
        func += ')\n{\n'
        func += '    VALUE deferred = hyperdex_ruby_client_{0}(self'.format(x.name)
        for arg in x.args_in:
            func += ', ' + arg.__name__.lower()
        func += ');\n'
        func += '    return rb_funcall(deferred, rb_intern("wait"), 0);\n}\n'
    return func
Esempio n. 27
0
def generate_definition(x):
    assert x.form in (bindings.AsyncCall, bindings.Iterator)
    func = 'static VALUE\nhyperdex_ruby_client_{0}(VALUE self'.format(x.name)
    for arg in x.args_in:
        func += ', VALUE ' + arg.__name__.lower()
    func += ')\n{\n'
    func += '    return hyperdex_ruby_client_{0}(hyperdex_client_{1}, self'.format(
        bindings.call_name(x), x.name)
    for arg in x.args_in:
        func += ', ' + arg.__name__.lower()
    func += ');\n}\n'
    if x.form == bindings.AsyncCall:
        func += 'VALUE\nhyperdex_ruby_client_wait_{0}(VALUE self'.format(
            x.name)
        for arg in x.args_in:
            func += ', VALUE ' + arg.__name__.lower()
        func += ')\n{\n'
        func += '    VALUE deferred = hyperdex_ruby_client_{0}(self'.format(
            x.name)
        for arg in x.args_in:
            func += ', ' + arg.__name__.lower()
        func += ');\n'
        func += '    return rb_funcall(deferred, rb_intern("wait"), 0);\n}\n'
    return func