Example #1
0
def get_model(request):
    '''
        Returns Model object in JSON.
        - This method varies slightly from the common object method in that
          if we don't specify a model ID, we:
          - return the current active model if it exists or...
          - return the specification.
    '''
    ret = None
    obj_id = obj_id_from_url(request)
    gnome_sema = request.registry.settings['py_gnome_semaphore']
    gnome_sema.acquire()

    if not obj_id:
        my_model = get_active_model(request.session)
        if my_model:
            ret = my_model.serialize()
        else:
            # - return a Model specification
            ret = get_specifications(request, implemented_types)
    else:
        obj = get_session_object(obj_id, request.session)
        if obj:
            if ObjectImplementsOneOf(obj, implemented_types):
                set_active_model(request.session, obj.id)
                ret = obj.serialize()
            else:
                raise HTTPUnsupportedMediaType()
        else:
            raise HTTPNotFound()

    gnome_sema.release()
    return ret
Example #2
0
def update_map(request):
    '''Updates a Gnome Map object.'''
    try:
        json_request = json.loads(request.body)
    except:
        raise HTTPBadRequest()

    if not JSONImplementsOneOf(json_request, implemented_types):
        raise HTTPNotImplemented()

    obj = get_session_object(obj_id_from_req_payload(json_request),
                             request.session)
    if obj:
        try:
            UpdateObject(obj, json_request, request.session['objects'])
        except ValueError as e:
            raise HTTPUnsupportedMediaType(e)
    else:
        raise HTTPNotFound()

    set_session_object(obj, request.session)
    return obj.serialize()
Example #3
0
def update_model(request):
    '''
        Returns Model object in JSON.
        - This method varies slightly from the common object method in that
          if we don't specify a model ID, we:
          - update the current active model if it exists or...
          - generate a 'Not Found' exception.
    '''
    ret = None
    try:
        json_request = json.loads(request.body)
    except:
        raise HTTPBadRequest()

    if not JSONImplementsOneOf(json_request, implemented_types):
        raise HTTPNotImplemented()

    gnome_sema = request.registry.settings['py_gnome_semaphore']
    gnome_sema.acquire()

    obj_id = obj_id_from_req_payload(json_request)
    if obj_id:
        my_model = get_session_object(obj_id, request.session)
    else:
        my_model = get_active_model(request.session)

    if my_model:
        if UpdateObject(my_model, json_request,
                        get_session_objects(request.session)):
            set_session_object(my_model, request.session)
        ret = my_model.serialize()
    else:
        gnome_sema.release()
        raise HTTPNotFound()

    gnome_sema.release()

    return ret