class MachineController(FlaskView): decorators = [requires_auth] route_prefix = '/machine/' route_base = '/' def __init__(self): self.machines_model = MachineModel() @route('/<machine_name>', methods=['GET', 'POST']) def machine(self, machine_name): show_stl = False fn, doc, inputs = self.machines_model.machine(machine_name) form = metaform('Form_%s' % str(machine_name), inputs)(request.form) file_name = "" if request.method == 'POST' and form.validate(): try: values = {} for name, _type, _, _, _ in inputs: value = getattr(form, name) if types.get(_type, None): values[name] = types[_type](value.data) else: values[name] = value.data flash('CREATING!', 'success') current_folder = os.getcwd() os.chdir(UPLOAD_FOLDER) file_name = fn(**values) os.chdir(current_folder) show_stl = True except Exception as e: flash('WARNING! %s' % e.message, 'warning') return render_template('machine/machine.html', title=doc.title, description=doc.description, images=doc.images, form=form, show_stl=show_stl, file_name=file_name, machine_name=machine_name) @route('/download/<filename>') def download(self, filename): return send_from_directory(UPLOAD_FOLDER, filename) @route('/upload', methods=['GET', 'POST']) def upload(self): if request.method == 'POST': _file = request.files['file'] file_path = resources.save(_file, MACHINEHUB_FOLDER, ALLOWED_EXTENSIONS) if file_path: try: name = self.machines_model.update(file_path) return redirect( url_for('MachineController:machine', machine_name=name)) except NotMachineHub as e: flash('WARNING! %s' % e.message, 'warning') return render_template('machine/upload.html')
class MachineController(FlaskView): decorators = [requires_auth] route_prefix = '/machine/' route_base = '/' def __init__(self): self.machines_model = MachineModel() @route('/<machine_name>', methods=['GET', 'POST']) def machine(self, machine_name): show_stl = False fn, doc, inputs = self.machines_model.machine(machine_name) form = metaform('Form_%s' % str(machine_name), inputs)(request.form) file_name = "" if request.method == 'POST' and form.validate(): try: values = {} for name, _type, _, _, _ in inputs: value = getattr(form, name) if types.get(_type, None): values[name] = types[_type](value.data) else: values[name] = value.data flash('CREATING!', 'success') current_folder = os.getcwd() os.chdir(UPLOAD_FOLDER) file_name = fn(**values) os.chdir(current_folder) show_stl = True except Exception as e: flash('WARNING! %s' % e.message, 'warning') return render_template('machine/machine.html', title=doc.title, description=doc.description, images=doc.images, form=form, show_stl=show_stl, file_name=file_name, machine_name=machine_name) @route('/download/<filename>') def download(self, filename): return send_from_directory(UPLOAD_FOLDER, filename) @route('/upload', methods=['GET', 'POST']) def upload(self): if request.method == 'POST': _file = request.files['file'] file_path = resources.save(_file, MACHINEHUB_FOLDER, ALLOWED_EXTENSIONS) if file_path: try: name = self.machines_model.update(file_path) return redirect(url_for('MachineController:machine', machine_name=name)) except NotMachineHub as e: flash('WARNING! %s' % e.message, 'warning') return render_template('machine/upload.html')
class MachinehubController(FlaskView): decorators = [requires_auth] route_prefix = '/' route_base = '/' def __init__(self): self.machines_model = MachineModel() @route('/machines/<int:page>') def machines(self, page): links = [] count = self.machines_model.count machines = self.machines_model.get_machines_for_page(page, PER_PAGE, count) for name, doc in machines: url = url_for('MachineController:machine', machine_name=name) links.append((url, name, doc.title or "", doc.description or "")) if not machines and page != 1: abort(404) pagination = Pagination(page, PER_PAGE, count) return render_template('explorer.html', pagination=pagination, links=links ) @route('/') def index(self): return render_template('home.html')
class MachinehubController(FlaskView): decorators = [requires_auth] route_prefix = '/' route_base = '/' def __init__(self): self.machines_model = MachineModel() @route('/machines/<int:page>') def machines(self, page): links = [] count = self.machines_model.count machines = self.machines_model.get_machines_for_page( page, PER_PAGE, count) for name, doc in machines: url = url_for('MachineController:machine', machine_name=name) links.append((url, name, doc.title or "", doc.description or "")) if not machines and page != 1: abort(404) pagination = Pagination(page, PER_PAGE, count) return render_template('explorer.html', pagination=pagination, links=links) @route('/') def index(self): return render_template('home.html')
def __init__(self): self.machines_model = MachineModel()
from flask.helpers import url_for from flask.templating import render_template from machinehub.config import machinehub_conf, UPLOAD_FOLDER from functools import wraps from flask import request, Response import os from machinehub.server.app.controllers.machine_controller import MachineController from machinehub.server.app.controllers.auth_controller import requires_auth from machinehub.server.app.controllers.machinehub_controller import MachinehubController from machinehub.server.app.models.machine_model import MachineModel def url_for_other_page(page): args = request.view_args.copy() args['page'] = page return url_for(request.endpoint, **args) machine_model = MachineModel() app = Flask(__name__) app.secret_key = 'development key' app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0 app.jinja_env.globals['url_for_other_page'] = url_for_other_page MachinehubController().register(app) MachineController().register(app) if UPLOAD_FOLDER: app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER