Esempio n. 1
0
def TestEdit(request, key):
    test = None
    error_msg = None
    current_user = users.get_current_user()
    api_key = request.REQUEST.get('api_key')

    # If a key was provided in the endpoint that means this is an edit.
    if key:
        test = models.user_test.Test.get_mem(key)
        meta = models.user_test.TestMeta.get_mem_by_test(test)
        if (test.user.key().name() != current_user.user_id()
                and not users.is_current_user_admin()):
            return http.HttpResponse(
                'You can\'t play with tests you don\'t own')

    if api_key or request.POST:
        # api_key should map to a User.key()
        if api_key:
            user = models.user_test.User.get_by_key_name(api_key)
            if not user:
                return http.HttpResponse(
                    'No user was found with an api_key=%s' % api_key)
        else:
            user = models.user_test.User.get_by_key_name(
                current_user.user_id())

        # edit
        if test:
            test.name = request.REQUEST.get('name')
            test.url = request.REQUEST.get('url')
            test.description = request.REQUEST.get('description')
            deleted = request.REQUEST.get('deleted')
            if deleted == '1':
                test.deleted = True
            logging.info('deleted: %s' % test.deleted)
            if request.REQUEST.get('sandboxid'):
                test.sandboxid = request.REQUEST.get('sandboxid')

            if request.REQUEST.get('test_keys'):
                test.test_keys = request.REQUEST.get('test_keys').split(',')
        # create
        else:
            meta = models.user_test.TestMeta().save()
            test = models.user_test.Test(
                user=user,
                name=request.REQUEST.get('name'),
                url=request.REQUEST.get('url'),
                description=request.REQUEST.get('description'),
                sandboxid=request.REQUEST.get('sandboxid',
                                              _get_random_sandboxid()),
                meta=meta)

        try:
            test.save()
            test.add_memcache()

            if api_key:
                return http.HttpResponse('{"test_key": "%s"}' % test.key(),
                                         mimetype='application/json')
            else:
                return http.HttpResponseRedirect('/user/settings')

        # App Engine model caught a validation exception.
        except datastore_errors.BadValueError, error_msg:
            if api_key:
                msg = 'Validation error: %s' % error_msg
                logging.info(msg)
                return http.HttpResponseServerError(msg)

            request = decorators.add_csrf_to_request(request)
            test = {
                'name': request.REQUEST.get('name'),
                'url': request.REQUEST.get('url'),
                'description': request.REQUEST.get('description'),
                'sandboxid': request.REQUEST.get('sandboxid')
            }
        # Do not try to catch / variable-ize this exception, it breaks in
        # production.
        except:
Esempio n. 2
0
def TestEdit(request, key):
    test = None
    error_msg = None
    current_user = users.get_current_user()
    api_key = request.REQUEST.get("api_key")

    # If a key was provided in the endpoint that means this is an edit.
    if key:
        test = models.user_test.Test.get_mem(key)
        meta = models.user_test.TestMeta.get_mem_by_test(test)
        if test.user.key().name() != current_user.user_id() and not users.is_current_user_admin():
            return http.HttpResponse("You can't play with tests you don't own")

    if api_key or request.POST:
        # api_key should map to a User.key()
        if api_key:
            user = models.user_test.User.get_by_key_name(api_key)
            if not user:
                return http.HttpResponse("No user was found with an api_key=%s" % api_key)
        else:
            user = models.user_test.User.get_by_key_name(current_user.user_id())

        # edit
        if test:
            test.name = request.REQUEST.get("name")
            test.url = request.REQUEST.get("url")
            test.description = request.REQUEST.get("description")
            deleted = request.REQUEST.get("deleted")
            if deleted == "1":
                test.deleted = True
            logging.info("deleted: %s" % test.deleted)
            if request.REQUEST.get("sandboxid"):
                test.sandboxid = request.REQUEST.get("sandboxid")

            if request.REQUEST.get("test_keys"):
                test.test_keys = request.REQUEST.get("test_keys").split(",")
        # create
        else:
            meta = models.user_test.TestMeta().save()
            test = models.user_test.Test(
                user=user,
                name=request.REQUEST.get("name"),
                url=request.REQUEST.get("url"),
                description=request.REQUEST.get("description"),
                sandboxid=request.REQUEST.get("sandboxid", _get_random_sandboxid()),
                meta=meta,
            )

        try:
            test.save()
            test.add_memcache()

            if api_key:
                return http.HttpResponse('{"test_key": "%s"}' % test.key(), mimetype="application/json")
            else:
                return http.HttpResponseRedirect("/user/settings")

        # App Engine model caught a validation exception.
        except datastore_errors.BadValueError, error_msg:
            if api_key:
                msg = "Validation error: %s" % error_msg
                logging.info(msg)
                return http.HttpResponseServerError(msg)

            request = decorators.add_csrf_to_request(request)
            test = {
                "name": request.REQUEST.get("name"),
                "url": request.REQUEST.get("url"),
                "description": request.REQUEST.get("description"),
                "sandboxid": request.REQUEST.get("sandboxid"),
            }
        # Do not try to catch / variable-ize this exception, it breaks in
        # production.
        except:
Esempio n. 3
0
            request = decorators.add_csrf_to_request(request)
            test = {
                'name': request.REQUEST.get('name'),
                'url': request.REQUEST.get('url'),
                'description': request.REQUEST.get('description'),
                'sandboxid': request.REQUEST.get('sandboxid')
            }
        # Do not try to catch / variable-ize this exception, it breaks in
        # production.
        except:
            error_msg = sys.exc_info()[0]
            logging.info(error_msg)
            if api_key:
                return http.HttpResponseServerError(error_msg)

            request = decorators.add_csrf_to_request(request)
            test = {
                'name': request.REQUEST.get('name'),
                'url': request.REQUEST.get('url'),
                'description': request.REQUEST.get('description'),
                'sandboxid': request.REQUEST.get('sandboxid')
            }

    params = {
        'test': test,
        'sandboxid': _get_random_sandboxid(),
        'max_sandboxid_len': _MAX_SANDBOXID_LEN,
        'error_msg': error_msg,
        'csrf_token': request.session.get('csrf_token')
    }
    return util.Render(request, 'user_test_form.html', params)
Esempio n. 4
0
            request = decorators.add_csrf_to_request(request)
            test = {
                "name": request.REQUEST.get("name"),
                "url": request.REQUEST.get("url"),
                "description": request.REQUEST.get("description"),
                "sandboxid": request.REQUEST.get("sandboxid"),
            }
        # Do not try to catch / variable-ize this exception, it breaks in
        # production.
        except:
            error_msg = sys.exc_info()[0]
            logging.info(error_msg)
            if api_key:
                return http.HttpResponseServerError(error_msg)

            request = decorators.add_csrf_to_request(request)
            test = {
                "name": request.REQUEST.get("name"),
                "url": request.REQUEST.get("url"),
                "description": request.REQUEST.get("description"),
                "sandboxid": request.REQUEST.get("sandboxid"),
            }

    params = {
        "test": test,
        "sandboxid": _get_random_sandboxid(),
        "max_sandboxid_len": _MAX_SANDBOXID_LEN,
        "error_msg": error_msg,
        "csrf_token": request.session.get("csrf_token"),
    }
    return util.Render(request, "user_test_form.html", params)