예제 #1
0
def _upload_template():

    if request.method == 'POST' and 'template' in request.files:
        
        file = request.files['template']
        
        filename = secure_filename(file.filename)
        dst_dir = current_app.config['UPLOADED_TEMPLATES_DEST']
        base_tpl_name = filename[:-4]
        versions = []
        for dirname in os.listdir(dst_dir):
            dirpath = os.path.join(dst_dir, dirname)
            if os.path.isdir(dirpath) and base_tpl_name + '_v' in dirname:
                versions.append(int(dirname.split('_v')[-1].strip()))
        if versions:
            max_version = max(versions)
        else:
            max_version = 0
        tpl_name = '{}_v{}'.format(base_tpl_name, max_version + 1)

        zf  = zipfile.ZipFile(file.stream)
        
        # load template
        result = upload_template(g.conn, zf, tpl_name)
        
        flash('Template %s uploaded successfully' % tpl_name, category='info')
    else:
        flash('Something went wrong.')
        
    return redirect(url_for('manager.manage_templates'))
예제 #2
0
def import_hydra_network():
    if request.method == 'POST':
        try:
            file = request.files['file[0]']
            filename = secure_filename(file.filename)
            error = 0
        except:
            error = 1
    
        return jsonify(error=error)

    redirect(url_for('home.main'))
예제 #3
0
def import_weap_area():
    
    file = request.files['file[0]']
    filename = secure_filename(file.filename)
    template_id = get_templates(g.conn, current_app.config['DEFAULT_HYDRA_TEMPLATE'])[0].id
    lookup_path = 'OpenAgua' + url_for('.static', filename='other/WEAP_OpenAgua_Lookup.csv')
    with zipfile.ZipFile(file.stream) as weapzipfile:
        area = load_weap_area(weapzipfile)
        network = weap_to_network(g.conn, filename, weapzipfile, area, session['project_id'], template_id, lookup_path)
    study = add_study(session['hydra_userid'], session['project_id'])
    error = 0

    return jsonify(error=0)
예제 #4
0
def user_profile():

    if "email" in session:
        if request.method == "POST":

            if not request.files["file"].filename == "":
                file = request.files["file"]

                if file.content_type == "image/jpeg":
                    filename = secure_filename(file.filename)
                    file.save(
                        os.path.join(app.config["UPLOAD_FOLDER"], filename))
                    files = [
                        ('avatar',
                         (f'{filename}',
                          open(f'{app.config["UPLOAD_FOLDER"]}/{filename}',
                               'rb'), 'image/jpeg'))
                    ]
                    payload = {}

                    access_token = session["access_token"]

                    image = requests.request(
                        "PUT",
                        f"{URL}/users/avatar",
                        headers={"Authorization": f"Bearer {access_token}"},
                        data=payload,
                        files=files)

                    if image.status_code == 200:
                        flash("Successfully updated avatar",
                              category="success")
                        session["avatar"] = image.json()["avatar_url"]

                    else:
                        flash("Something went wrong. Please try again",
                              category="error")

                    del files, image
                    file = os.path.join("./website", str(filename))
                    os.remove(file)

                    return redirect(url_for("views.user_profile"))

                else:
                    flash("Only accepting JPEG images", category="error")
                    return redirect(url_for(f"views.recipes"))

        return render_template("user_profile.html", user=session)

    return redirect("auth.login")
예제 #5
0
def upload_file():
    if request.method == 'POST':
        if 'file' not in request.files:
            flash('No file part')
            return redirect(request.url)
        file = request.files['file']
        if file.filename == '':
            flash('No selected file')
            return redirect(request.url)
        if file and allowed_file(file.filename):
            filename = u.secure_filename(file.filename)
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
            return redirect(url_for('all_files'))
    return render_template('upload.html')
예제 #6
0
def create_recipe():
    if "email" in session:
        if request.method == "POST":
            name = request.form.get("name")
            description = request.form.get("description")
            num_of_servings = request.form.get("num_of_servings")
            ingredients = request.form.get("ingredients")
            cook_time = request.form.get("cook_time")
            directions = request.form.get("directions")

            if name and description and num_of_servings and ingredients and cook_time and directions:
                if len(name) <= 3:
                    flash("Please enter a longer name", category="error")

                elif len(description) <= 5:
                    flash("Please enter a longer description",
                          category="error")

                else:
                    params = {
                        "name": f"{name}",
                        "description": f"{description}",
                        "num_of_servings": int(num_of_servings),
                        "ingredients": f"{ingredients}",
                        "cook_time": int(cook_time),
                        "directions": f"{directions}"
                    }

                    access_token = session["access_token"]

                    reply = requests.post(f"{URL}/recipes",
                                          json=params,
                                          headers={
                                              "Content-Type":
                                              "application/json",
                                              "Authorization":
                                              f"Bearer {access_token}"
                                          })

                    if reply.status_code == 201:

                        id = reply.json()["id"]

                        if not request.files["file"].filename == "":
                            file = request.files["file"]

                            if file.content_type == "image/jpeg":
                                filename = secure_filename(file.filename)
                                file.save(
                                    os.path.join(app.config["UPLOAD_FOLDER"],
                                                 filename))
                                files = [('cover', (
                                    f'{filename}',
                                    open(
                                        f'{app.config["UPLOAD_FOLDER"]}/{filename}',
                                        'rb'), 'image/jpeg'))]
                                payload = {}
                                image = requests.request(
                                    "PUT",
                                    f"{URL}/recipes/{id}/cover",
                                    headers={
                                        "Authorization":
                                        f"Bearer {access_token}"
                                    },
                                    data=payload,
                                    files=files)

                                del files, image
                                file = os.path.join("./website", str(filename))
                                os.remove(file)

                            else:
                                flash("Only accepting JPEG images",
                                      category="error")
                                return redirect(url_for("views.create_recipe"))

                        publish = requests.put(f"{URL}/recipes/{id}/publish",
                                               headers={
                                                   "Content-Type":
                                                   "application/json",
                                                   "Authorization":
                                                   f"Bearer {access_token}"
                                               })

                        flash("Successfully created a new recipe",
                              category="success")

                    elif reply.status_code == 400:
                        flash("One or more or the entered values are invalid",
                              category="error")
                    else:
                        flash("Something went wrong. Please try again",
                              category="error")

                    return redirect(url_for("views.recipes"))
        return render_template("create_recipe.html", user=session)
예제 #7
0
def edit_recipe():
    if "email" in session:
        try:
            id = request.args.get("id")
            reply = requests.get(f"{URL}/recipes/{id}")

            author = reply.json()["author"]["username"]
            name = reply.json()["name"]
            description = reply.json()["description"]
            num_of_servings = reply.json()["num_of_servings"]
            ingredients = reply.json()["ingredients"]
            cook_time = reply.json()["cook_time"]
            directions = reply.json()["directions"]

            if author == session["username"]:
                if request.method == "POST":
                    data = request.form

                    name = data["name"]
                    description = data["description"]
                    num_of_servings = data["num_of_servings"]
                    ingredients = data["ingredients"]
                    cook_time = data["cook_time"]
                    directions = data["directions"]

                    params = {
                        "name": f"{name}",
                        "description": f"{description}",
                        "num_of_servings": int(num_of_servings),
                        "ingredients": f"{ingredients}",
                        "cook_time": int(cook_time),
                        "directions": f"{directions}"
                    }

                    access_token = session["access_token"]

                    if not request.files["file"].filename == "":
                        file = request.files["file"]

                        if file.content_type == "image/jpeg":
                            filename = secure_filename(file.filename)
                            file.save(
                                os.path.join(app.config["UPLOAD_FOLDER"],
                                             filename))
                            files = [('cover', (
                                f'{filename}',
                                open(
                                    f'{app.config["UPLOAD_FOLDER"]}/{filename}',
                                    'rb'), 'image/jpeg'))]
                            payload = {}
                            image = requests.request(
                                "PUT",
                                f"{URL}/recipes/{id}/cover",
                                headers={
                                    "Authorization": f"Bearer {access_token}"
                                },
                                data=payload,
                                files=files)

                            del files, image
                            file = os.path.join("./website", str(filename))
                            os.remove(file)

                        else:
                            flash("Only accepting JPEG images",
                                  category="error")
                            return redirect(url_for(f"views.recipes"))

                    patch = requests.patch(f"{URL}/recipes/{id}",
                                           json=params,
                                           headers={
                                               "Content-Type":
                                               "application/json",
                                               "Authorization":
                                               f"Bearer {access_token}"
                                           })

                    if patch.status_code == 200:
                        flash("Successfully made changes to recipe",
                              category="success")

                    elif patch.status_code == 500:
                        flash("One or more or the entered values are invalid",
                              category="error")
                    else:
                        flash("Something went wrong. Pleasy try again",
                              category="error")

                    return redirect(url_for("views.recipes"))

                return render_template("edit_recipe.html",
                                       user=session,
                                       name=name,
                                       description=description,
                                       num_of_servings=num_of_servings,
                                       ingredients=ingredients,
                                       cook_time=cook_time,
                                       directions=directions)

            else:
                return redirect(url_for("views.recipes"))

        except Exception:
            return redirect(url_for("views.recipes"))