Example #1
0
def dispatch(request, *args, **kw):
    """
        Perform somes checks, call the importer, and returns.
        Arguments of the method MUST be passed as pickle in POST data.
        This method is not meant to be called directly with a web browser.
        The Importer() instance is stored in session.
    """

    base = kw.pop('base')
    modules = kw.pop('modules')

    # Create Importer() if not already present in session.
    if '__importer__' not in request.session:
        request.session['__importer__'] = Importer()

    full_path = base.replace('/', '.') + '.' + modules.replace('/', '.')
    mod, met = full_path.rsplit('.', 1)
    module = __import__(mod, {}, {}, [''])
    callee = getattr(module, met)
    if not hasattr(callee, '__exportable__'):
        logger.debug("Exporter: method not exportable: " + full_path)
        return (200, Exception("Method not exportable"))

    # GET request ?
    # Only method call without args or attributes. (from a webbrowser)
    if request.method == 'GET':
        try:
            return (200, request.session['__importer__'].get(mod, met))
        except ImporterError, e:
            logger.debug("Exporter: Catched: " + e.traceback)
            return (500, {'msg': e.msg, 'traceback': e.traceback})
Example #2
0
def dispatch(request, *args, **kw):
    """
        Perform somes checks, call the importer, and returns.
        Arguments of the method MUST be passed as pickle in POST data.
        This method is not meant to be called directly with a web browser.
        The Importer() instance is stored in session.
    """

    base = kw.pop('base')
    modules = kw.pop('modules')

    # Create Importer() if not already present in session.
    if '__importer__' not in request.session:
        request.session['__importer__'] = Importer()

    full_path = base.replace('/', '.') + '.' + modules.replace('/', '.')
    mod, met = full_path.rsplit('.', 1)
    module = __import__(mod, {}, {}, [''])
    callee = getattr(module, met)
    if not hasattr(callee, '__exportable__'):
        logger.debug("Exporter: method not exportable: " + full_path)
        return (200, Exception("Method not exportable"))

    # GET request ?
    # Only method call without args or attributes. (from a webbrowser)
    if request.method == 'GET':
        try:
            return (200, request.session['__importer__'].get(mod, met))
        except ImporterError, e:
            logger.debug("Exporter: Catched: " + e.traceback)
            return (500, {'msg': e.msg, 'traceback': e.traceback})
Example #3
0
def __delete_item(pg_manager, ctx_list, table, table_key, item_list):
    """ Delete a set of items from @table. """

    ids = dict(zip(range(0, len(item_list)), item_list))
    query_item = []
    query_dict = {}
    for key, value in ids.iteritems():
        query_item.append('%%(__table_key_%d__)s' % key)
        query_dict.update({'__table_key_%d__' % key: value})
    query_dict.update({'table': table, 'table_key': table_key})
    query = 'DELETE FROM %s WHERE %s IN (%s)' % (table, table_key, ','.join(query_item))

    try:
        pg_manager.execute(ctx_list[0], query, query_dict)
        pg_manager.commit(ctx_list[0])
    except sjutils.PgConnManager.DatabaseError, _error:
        logger.debug('Rollback delete in table %s' % table)
        raise
Example #4
0
def __delete_item(pg_manager, ctx_list, table, table_key, item_list):
    """ Delete a set of items from @table. """

    ids = dict(zip(range(0, len(item_list)), item_list))
    query_item = []
    query_dict = {}
    for key, value in ids.iteritems():
        query_item.append('%%(__table_key_%d__)s' % key)
        query_dict.update({'__table_key_%d__' % key: value})
    query_dict.update({'table': table, 'table_key': table_key})
    query = 'DELETE FROM %s WHERE %s IN (%s)' % (table, table_key, ','.join(query_item))

    try:
        pg_manager.execute(ctx_list[0], query, query_dict)
        pg_manager.commit(ctx_list[0])
    except sjutils.PgConnManager.DatabaseError, _error:
        logger.debug('Rollback delete in table %s' % table)
        raise
Example #5
0
def create_groups(pg_manager, ctx_list, _request, groups):
    """ Create new groups.

    @groups: list of group names
        [String, String, ...]
    @returns: dictionary containing new groups and if an error occurs during object creation, it is appended
              to the @errors key with an added @message key containing the error message. All changes related to the
              failed group creation will be rolled back.
        {
            'errors': [{
                @object-keys: @object-values,
                'message': String
                }, ... ],
            @group_id: {
                'grp_id': Integer,
                'name': String
            }, ...
        }
    """

    ret = {}
    errors = []
    db_grp = None
    savepoint = 0
    for grp in groups:
        try:
            # Insert check
            savepoint += 1
            pg_manager.execute(ctx_list[0], "SAVEPOINT save%s" % savepoint)
            query = """INSERT INTO groups (name)
                VALUES (%(name)s) RETURNING grp_id, name"""
            pg_manager.execute(ctx_list[0], query, {'name': grp})
            db_grp = pg_manager.fetchall(ctx_list[0])[0]

            ret[db_grp[0]] = {'grp_id': db_grp[0], 'name': db_grp[1]}

            pg_manager.commit(ctx_list[0])
        except sjutils.PgConnManager.DatabaseError, error:
            logger.debug('Rollback group creation for %s.' % grp['name'])
            pg_manager.execute(ctx_list[0], "ROLLBACK TO save%s" % savepoint)
            if db_grp:
                del ret[db_grp[0]]
            grp['message'] = str(error)
            errors.append(grp)
Example #6
0
def create_groups(pg_manager, ctx_list, _request, groups):
    """ Create new groups.

    @groups: list of group names
        [String, String, ...]
    @returns: dictionary containing new groups and if an error occurs during object creation, it is appended
              to the @errors key with an added @message key containing the error message. All changes related to the
              failed group creation will be rolled back.
        {
            'errors': [{
                @object-keys: @object-values,
                'message': String
                }, ... ],
            @group_id: {
                'grp_id': Integer,
                'name': String
            }, ...
        }
    """

    ret = {}
    errors = []
    db_grp = None
    savepoint = 0
    for grp in groups:
        try:
            # Insert check
            savepoint += 1
            pg_manager.execute(ctx_list[0], "SAVEPOINT save%s" % savepoint)
            query = """INSERT INTO groups (name)
                VALUES (%(name)s) RETURNING grp_id, name"""
            pg_manager.execute(ctx_list[0], query, {'name': grp})
            db_grp = pg_manager.fetchall(ctx_list[0])[0]

            ret[db_grp[0]] = {'grp_id': db_grp[0], 'name': db_grp[1]}

            pg_manager.commit(ctx_list[0])
        except sjutils.PgConnManager.DatabaseError, error:
            logger.debug('Rollback group creation for %s.' % grp['name'])
            pg_manager.execute(ctx_list[0], "ROLLBACK TO save%s" % savepoint)
            if db_grp:
                del ret[db_grp[0]]
            grp['message'] = str(error)
            errors.append(grp)
Example #7
0
def create_checks(pg_manager, ctx_list, _request, checks):
    """ Create new checks with provided data.

    @checks: must be a list of check dictionaries of the form:
        [{
            'plugin': String,
            'plugin_check': String,
            'name': String,
            'repeat': Integer,
            'repeat_on_error': Integer,
            'group_id': Integer (optional),
            'infos': (optional) {
                @key: @value,
                ...
            }
        }, ... ]
        For each check, it is possible to automatically add it to an existing group according to its @group_id.
    @returns: dictionary containing new checks and if an error occurs during object creation, it is appended
              to the @errors key with an added @message key containing the error message. All changes related to the
              failed check creation will be rolled back.
        {
            'errors': [{
                @object-keys: @object-values,
                'message': String
                }, ... ],
            @chk_id: {
                'chk_id': Integer,
                'plugin': String,
                'plugin_check': String,
            }, ...
        }
    """

    ret = {}
    errors = []
    db_chk = None
    savepoint = 0
    for chk in checks:
        try:
            # Insert check
            savepoint += 1
            db_chk = None
            pg_manager.execute(ctx_list[0], "SAVEPOINT save%s" % savepoint)
            query = """INSERT INTO checks (plugin, plugin_check, name, repeat, repeat_on_error)
                VALUES (%(plugin)s, %(plugin_check)s, %(name)s, %(repeat)s, %(repeat_on_error)s) RETURNING chk_id, plugin, plugin_check"""
            pg_manager.execute(ctx_list[0], query, {
                'plugin': chk['plugin'],
                'plugin_check': chk['plugin_check'],
                'name': chk['name'],
                'repeat': chk['repeat'],
                'repeat_on_error': chk['repeat_on_error']
            })
            db_chk = pg_manager.fetchall(ctx_list[0])[0]

            ret[db_chk[0]] = {'chk_id': db_chk[0], 'plugin': db_chk[1], 'plugin_check': db_chk[2]}

            # Insert check_infos
            if 'infos' in chk:
                for key, value in chk['infos'].iteritems():
                    query = """INSERT INTO check_infos (chk_id, key, value) VALUES
                        (%(chk_id)s, %(chk_key)s, %(chk_value)s)"""
                    pg_manager.execute(ctx_list[0], query,
                        {'chk_id': db_chk[0], 'chk_key': key, 'chk_value': value})

            # Assign to existing group
            if 'group_id' in chk:
                query = "INSERT INTO checks_group (chk_id, grp_id) VALUES (%(chk_id)s, %(group_id)s)"
                pg_manager.execute(ctx_list[0], query, {'chk_id': db_chk[0], 'group_id': chk['group_id']})

        except sjutils.PgConnManager.DatabaseError, error:
            logger.debug('Rollback check creation for %s.%s.' % (chk['plugin'], chk['plugin_check']))
            pg_manager.execute(ctx_list[0], "ROLLBACK TO save%s" % savepoint)
            if db_chk:
                del ret[db_chk[0]]
            chk['message'] = str(error)
            errors.append(chk)
Example #8
0
def create_objects(pg_manager, ctx_list, _request, objects):
    """ Create new objects with provided data.

    @checks: must be a list of object dictionaries of the form:
        [{
            'address': String,
            'group_id': Integer (optional),
            'infos': (optional) {
                @key: @value,
                ...
            }
        }, ... ]
        For each check, it is possible to automatically add it to an existing group according to its @group_id.
    @returns: dictionary containing new objects and if an error occurs during object creation, it is appended
              to the @errors key with an added @message key containing the error message. All changes related to the
              failed object creation will be rolled back.
        {
            'errors': [{
                @object-keys: @object-values,
                'message': String
                }, ... ],
            @obj_id: {
                'obj_id': Integer,
                'address': String,
                'creation_date': datetime.date
            }, ...
        }
    """

    ret = {}
    errors = []
    db_obj = None
    savepoint = 0
    for obj in objects:
        try:
            savepoint += 1
            db_obj = None
            # Insert object
            pg_manager.execute(ctx_list[0], "SAVEPOINT save%s" % savepoint)
            query = "INSERT INTO objects (address) VALUES (%(obj_address)s) RETURNING obj_id, address, creation_date"
            pg_manager.execute(ctx_list[0], query, {'obj_address': obj['address']})
            db_obj = pg_manager.fetchall(ctx_list[0])[0]
            ret[db_obj[0]] = {'obj_id': db_obj[0], 'address': db_obj[1], 'creation_date': str(db_obj[2])}

            # Insert object_infos
            if 'infos' in obj:
                for key, value in obj['infos'].iteritems():
                    query = """INSERT INTO object_infos (obj_id, key, value) VALUES
                        (%(obj_id)s, %(obj_key)s, %(obj_value)s)"""
                    pg_manager.execute(ctx_list[0], query,
                        {'obj_id': db_obj[0], 'obj_key': key, 'obj_value': value})

            # Assign to existing group
            if 'group_id' in obj:
                query = "INSERT INTO objects_group (obj_id, grp_id) VALUES (%(obj_id)s, %(group_id)s)"
                pg_manager.execute(ctx_list[0], query, {'obj_id': db_obj[0], 'group_id': obj['group_id']})

        except sjutils.PgConnManager.DatabaseError, error:
            logger.debug('Rollback object creation for address %s.' % obj['address'])
            pg_manager.execute(ctx_list[0], "ROLLBACK TO save%s" % savepoint)
            if db_obj:
                del ret[db_obj[0]]
            obj['message'] = str(error)
            errors.append(obj)
Example #9
0
def update(pg_manager, ctx_list, _request, params):
    """ Update checks, groups and objects according to @params.

    If an error occurs during the update, the method will raise an error and rollback all changes.

    @params: dictionary of the form:
        {
            'objects':  {
                @obj_id : {
                    'obj_id'        : Integer,
                    'address'       : String,
                    'infos'         : {
                        'insert': { @key : String, ... },
                        'delete': { @key : String, ... }
                    }
                }, ...
            },
            'checks': {
                @chk_id: {
                    'chk_id'        : Integer,
                    'name'          : String,
                    'plugin'        : String,
                    'plugin_check'  : String,
                    'repeat'        : Integer,
                    'repeat_on_error' : Integer,
                    'infos'         : {
                        'insert': { @key : String, ... },
                        'delete': { @key : String, ... }
                    }
                }, ...
            },
            'groups' :  {
                @grp_id : {
                    'grp_id' : Integer,
                    'name'   : String
                }, ...
            }
        }
        Please note that chk_id, obj_id or grp_id are mandatory items that will not be changed.
    """

    try:
        # Update objects
        if 'objects' in params:
            for obj_id, obj_update in params['objects'].iteritems():
                query = "UPDATE objects SET address=%(address)s WHERE obj_id=%(obj_id)s"
                pg_manager.execute(ctx_list[0], query, obj_update)

                if 'infos' in obj_update:
                    __update_infos(pg_manager, ctx_list,
                        {'table_name': 'object_infos', 'table_id': 'obj_id', 'table_id_value': obj_id},
                        obj_update['infos'])

        # Update checks
        if 'checks' in params:
            for chk_id, chk_update in params['checks'].iteritems():
                for chk_param in ('name', 'plugin', 'plugin_check', 'repeat', 'repeat_on_error'):
                    query = "UPDATE checks SET " + chk_param + "=%(" + chk_param + ")s WHERE chk_id=%(chk_id)s"
                    pg_manager.execute(ctx_list[0], query, chk_update)

                if 'infos' in chk_update:
                    __update_infos(pg_manager, ctx_list,
                        {'table_name': 'check_infos', 'table_id': 'chk_id', 'table_id_value': chk_id},
                        chk_update['infos'])

        # Update groups
        if 'groups' in params:
            for _grp_id, grp_update in params['groups'].iteritems():
                query = "UPDATE groups SET name=%(name)s WHERE grp_id=%(grp_id)s"
                pg_manager.execute(ctx_list[0], query, grp_update)

        pg_manager.commit(ctx_list[0])
    except sjutils.PgConnManager.DatabaseError, _error:
        logger.debug('Rollback update')
        raise
Example #10
0
def create_checks(pg_manager, ctx_list, _request, checks):
    """ Create new checks with provided data.

    @checks: must be a list of check dictionaries of the form:
        [{
            'plugin': String,
            'plugin_check': String,
            'name': String,
            'repeat': Integer,
            'repeat_on_error': Integer,
            'group_id': Integer (optional),
            'infos': (optional) {
                @key: @value,
                ...
            }
        }, ... ]
        For each check, it is possible to automatically add it to an existing group according to its @group_id.
    @returns: dictionary containing new checks and if an error occurs during object creation, it is appended
              to the @errors key with an added @message key containing the error message. All changes related to the
              failed check creation will be rolled back.
        {
            'errors': [{
                @object-keys: @object-values,
                'message': String
                }, ... ],
            @chk_id: {
                'chk_id': Integer,
                'plugin': String,
                'plugin_check': String,
            }, ...
        }
    """

    ret = {}
    errors = []
    db_chk = None
    savepoint = 0
    for chk in checks:
        try:
            # Insert check
            savepoint += 1
            db_chk = None
            pg_manager.execute(ctx_list[0], "SAVEPOINT save%s" % savepoint)
            query = """INSERT INTO checks (plugin, plugin_check, name, repeat, repeat_on_error)
                VALUES (%(plugin)s, %(plugin_check)s, %(name)s, %(repeat)s, %(repeat_on_error)s) RETURNING chk_id, plugin, plugin_check"""
            pg_manager.execute(
                ctx_list[0], query, {
                    'plugin': chk['plugin'],
                    'plugin_check': chk['plugin_check'],
                    'name': chk['name'],
                    'repeat': chk['repeat'],
                    'repeat_on_error': chk['repeat_on_error']
                })
            db_chk = pg_manager.fetchall(ctx_list[0])[0]

            ret[db_chk[0]] = {
                'chk_id': db_chk[0],
                'plugin': db_chk[1],
                'plugin_check': db_chk[2]
            }

            # Insert check_infos
            if 'infos' in chk:
                for key, value in chk['infos'].iteritems():
                    query = """INSERT INTO check_infos (chk_id, key, value) VALUES
                        (%(chk_id)s, %(chk_key)s, %(chk_value)s)"""
                    pg_manager.execute(ctx_list[0], query, {
                        'chk_id': db_chk[0],
                        'chk_key': key,
                        'chk_value': value
                    })

            # Assign to existing group
            if 'group_id' in chk:
                query = "INSERT INTO checks_group (chk_id, grp_id) VALUES (%(chk_id)s, %(group_id)s)"
                pg_manager.execute(ctx_list[0], query, {
                    'chk_id': db_chk[0],
                    'group_id': chk['group_id']
                })

        except sjutils.PgConnManager.DatabaseError, error:
            logger.debug('Rollback check creation for %s.%s.' %
                         (chk['plugin'], chk['plugin_check']))
            pg_manager.execute(ctx_list[0], "ROLLBACK TO save%s" % savepoint)
            if db_chk:
                del ret[db_chk[0]]
            chk['message'] = str(error)
            errors.append(chk)
Example #11
0
def create_objects(pg_manager, ctx_list, _request, objects):
    """ Create new objects with provided data.

    @checks: must be a list of object dictionaries of the form:
        [{
            'address': String,
            'group_id': Integer (optional),
            'infos': (optional) {
                @key: @value,
                ...
            }
        }, ... ]
        For each check, it is possible to automatically add it to an existing group according to its @group_id.
    @returns: dictionary containing new objects and if an error occurs during object creation, it is appended
              to the @errors key with an added @message key containing the error message. All changes related to the
              failed object creation will be rolled back.
        {
            'errors': [{
                @object-keys: @object-values,
                'message': String
                }, ... ],
            @obj_id: {
                'obj_id': Integer,
                'address': String,
                'creation_date': datetime.date
            }, ...
        }
    """

    ret = {}
    errors = []
    db_obj = None
    savepoint = 0
    for obj in objects:
        try:
            savepoint += 1
            db_obj = None
            # Insert object
            pg_manager.execute(ctx_list[0], "SAVEPOINT save%s" % savepoint)
            query = "INSERT INTO objects (address) VALUES (%(obj_address)s) RETURNING obj_id, address, creation_date"
            pg_manager.execute(ctx_list[0], query,
                               {'obj_address': obj['address']})
            db_obj = pg_manager.fetchall(ctx_list[0])[0]
            ret[db_obj[0]] = {
                'obj_id': db_obj[0],
                'address': db_obj[1],
                'creation_date': db_obj[2]
            }

            # Insert object_infos
            if 'infos' in obj:
                for key, value in obj['infos'].iteritems():
                    query = """INSERT INTO object_infos (obj_id, key, value) VALUES
                        (%(obj_id)s, %(obj_key)s, %(obj_value)s)"""
                    pg_manager.execute(ctx_list[0], query, {
                        'obj_id': db_obj[0],
                        'obj_key': key,
                        'obj_value': value
                    })

            # Assign to existing group
            if 'group_id' in obj:
                query = "INSERT INTO objects_group (obj_id, grp_id) VALUES (%(obj_id)s, %(group_id)s)"
                pg_manager.execute(ctx_list[0], query, {
                    'obj_id': db_obj[0],
                    'group_id': obj['group_id']
                })

        except sjutils.PgConnManager.DatabaseError, error:
            logger.debug('Rollback object creation for address %s.' %
                         obj['address'])
            pg_manager.execute(ctx_list[0], "ROLLBACK TO save%s" % savepoint)
            if db_obj:
                del ret[db_obj[0]]
            obj['message'] = str(error)
            errors.append(obj)
Example #12
0
def update(pg_manager, ctx_list, _request, params):
    """ Update checks, groups and objects according to @params.

    If an error occurs during the update, the method will raise an error and rollback all changes.

    @params: dictionary of the form:
        {
            'objects':  {
                @obj_id : {
                    'obj_id'        : Integer,
                    'address'       : String,
                    'infos'         : {
                        'insert': { @key : String, ... },
                        'delete': { @key : String, ... }
                    }
                }, ...
            },
            'checks': {
                @chk_id: {
                    'chk_id'        : Integer,
                    'name'          : String,
                    'plugin'        : String,
                    'plugin_check'  : String,
                    'repeat'        : Integer,
                    'repeat_on_error' : Integer,
                    'infos'         : {
                        'insert': { @key : String, ... },
                        'delete': { @key : String, ... }
                    }
                }, ...
            },
            'groups' :  {
                @grp_id : {
                    'grp_id' : Integer,
                    'name'   : String
                }, ...
            }
        }
        Please note that chk_id, obj_id or grp_id are mandatory items that will not be changed.
    """

    try:
        # Update objects
        if 'objects' in params:
            for obj_id, obj_update in params['objects'].iteritems():
                query = "UPDATE objects SET address=%(address)s WHERE obj_id=%(obj_id)s"
                pg_manager.execute(ctx_list[0], query, obj_update)

                if 'infos' in obj_update:
                    __update_infos(
                        pg_manager, ctx_list, {
                            'table_name': 'object_infos',
                            'table_id': 'obj_id',
                            'table_id_value': obj_id
                        }, obj_update['infos'])

        # Update checks
        if 'checks' in params:
            for chk_id, chk_update in params['checks'].iteritems():
                for chk_param in ('name', 'plugin', 'plugin_check', 'repeat',
                                  'repeat_on_error'):
                    query = "UPDATE checks SET " + chk_param + "=%(" + chk_param + ")s WHERE chk_id=%(chk_id)s"
                    pg_manager.execute(ctx_list[0], query, chk_update)

                if 'infos' in chk_update:
                    __update_infos(
                        pg_manager, ctx_list, {
                            'table_name': 'check_infos',
                            'table_id': 'chk_id',
                            'table_id_value': chk_id
                        }, chk_update['infos'])

        # Update groups
        if 'groups' in params:
            for _grp_id, grp_update in params['groups'].iteritems():
                query = "UPDATE groups SET name=%(name)s WHERE grp_id=%(grp_id)s"
                pg_manager.execute(ctx_list[0], query, grp_update)

        pg_manager.commit(ctx_list[0])
    except sjutils.PgConnManager.DatabaseError, _error:
        logger.debug('Rollback update')
        raise
Example #13
0
def dispatch(request, *args, **kw):
    """
    Perform somes checks, call the importer, and returns.
    Arguments of the method MUST be passed as pickle in POST data.
    This method is not meant to be called directly with a web browser.
    """

    base = kw.pop("base")
    modules = kw.pop("modules")

    # Create Importer() if not already present in session.
    imp = Importer()

    full_path = base.replace("/", ".") + "." + modules.replace("/", ".")
    mod, met = full_path.rsplit(".", 1)
    module = __import__(mod, {}, {}, [""])
    callee = getattr(module, met)
    if not hasattr(callee, "__exportable__"):
        logger.debug("Exporter: method not exportable: " + full_path)
        return (200, Exception("Method not exportable"))

    # GET request ?
    # Only method call without args or attributes. (from a webbrowser)
    if request.method == "GET":
        try:
            return (200, imp.get(mod, met))
        except ImporterError as e:
            logger.debug("Exporter: Catched: " + e.traceback)
            return (500, {"msg": e.msg, "traceback": e.traceback})
    # POST ?
    # Method call with args, instantiations
    elif request.method == "POST":
        try:
            # Cause args is a tuple, create a list before.
            args = list(args)
            data = request.DECODED
            if data.get("args"):
                args += data["args"]
            kw.update(data["kw"])
            kw.update({"__request__": request})

            ret = None
            t = data["type"]
            if t == "call":
                ret = imp.call(mod, met, *args, **kw)
            elif t == "get":
                ret = imp.get(mod, met)
            elif t == "set":
                ret = imp.set(mod, met, kw.pop("value"))
            elif t == "instantiate":
                ret = imp.instantiate(kw.pop("variable"), mod, met, *args,
                                      **kw)
            return (200, ret)
        except ImporterError as e:
            logger.debug("Exporter: ImporterError catched: " + str(e))
            return (500, {"msg": e.msg, "traceback": e.traceback})
        except Exception as e:
            import traceback

            logger.debug("Exporter: Catched: " + str(e))
            return (500, {"msg": str(e), "traceback": traceback.format_exc()})
Example #14
0
        except ImporterError, e:
            logger.debug("Exporter: Catched: " + e.traceback)
            return (500, {'msg': e.msg, 'traceback': e.traceback})
    # POST ?
    # Method call with args, instantiations
    elif request.method == 'POST':
        try:
            # Cause args is a tuple, create a list before.
            args = list(args)
            data = request.DECODED
            if data.get('args'): args += data['args']
            kw.update(data['kw'])
            kw.update({'__request__': request})

            ret = None
            t = data['type']
            if t == 'call': ret = request.session['__importer__'].call(mod, met, *args, **kw)
            elif t == 'get': ret = request.session['__importer__'].get(mod, met)
            elif t == 'set': ret = request.session['__importer__'].set(mod, met, kw.pop('value'))
            elif t == 'instantiate': ret = request.session['__importer__'].instantiate(kw.pop('variable'), mod, met, *args, **kw)
            # Force session to be saved (should be pickable now).
            request.session.modified = True
            return (200, ret)
        except ImporterError, e:
            logger.debug("Exporter: ImporterError catched: " + str(e))
            return (500, {'msg': e.msg, 'traceback': e.traceback})
        except Exception, e:
            import traceback
            logger.debug("Exporter: Catched: " + str(e))
            return (500, {'msg': str(e), 'traceback': traceback.format_exc()})
Example #15
0
            # Cause args is a tuple, create a list before.
            args = list(args)
            data = request.DECODED
            if data.get('args'): args += data['args']
            kw.update(data['kw'])
            kw.update({'__request__': request})

            ret = None
            t = data['type']
            if t == 'call':
                ret = request.session['__importer__'].call(
                    mod, met, *args, **kw)
            elif t == 'get':
                ret = request.session['__importer__'].get(mod, met)
            elif t == 'set':
                ret = request.session['__importer__'].set(
                    mod, met, kw.pop('value'))
            elif t == 'instantiate':
                ret = request.session['__importer__'].instantiate(
                    kw.pop('variable'), mod, met, *args, **kw)
            # Force session to be saved (should be pickable now).
            request.session.modified = True
            return (200, ret)
        except ImporterError, e:
            logger.debug("Exporter: ImporterError catched: " + str(e))
            return (500, {'msg': e.msg, 'traceback': e.traceback})
        except Exception, e:
            import traceback
            logger.debug("Exporter: Catched: " + str(e))
            return (500, {'msg': str(e), 'traceback': traceback.format_exc()})