def wrapTask(request, action): # Allow only post if request.method != 'POST': raise Exception('Only post requests allowed') # Check user permissions if not request.user.has_perm('execute'): raise Exception('Missing execution privileges') # Parse the posted parameters as arguments for an asynchronous task to add to the queue. TODO MAKE MODULAR WITH SEPERATE TASK CLASS worker_database = request.database now = datetime.now() task = None # A if action == 'frepple_run': if not request.user.has_perm('execute.generate_plan'): raise Exception('Missing execution privileges') constraint = 0 for value in request.POST.getlist('constraint'): try: constraint += int(value) except: pass task = Task(name='generate plan', submitted=now, status='Waiting', user=request.user) task.arguments = "--constraint=%s --plantype=%s" % ( constraint, request.POST.get('plantype')) env = [] if request.POST.get('odoo_read', None) == '1': env.append("odoo_read") request.session['odoo_read'] = True else: request.session['odoo_read'] = False if request.POST.get('odoo_write', None) == '1': env.append("odoo_write") request.session['odoo_write'] = True else: request.session['odoo_write'] = False if env: task.arguments = "%s --env=%s" % (task.arguments, ','.join(env)) task.save(using=request.database) # Update the session object request.session['plantype'] = request.POST.get('plantype') request.session['constraint'] = constraint # B elif action == 'frepple_createmodel': task = Task(name='generate model', submitted=now, status='Waiting', user=request.user) task.arguments = "--cluster=%s --demand=%s --forecast_per_item=%s --level=%s --resource=%s " \ "--resource_size=%s --components=%s --components_per=%s --deliver_lt=%s --procure_lt=%s" % ( request.POST['clusters'], request.POST['demands'], request.POST['fcst'], request.POST['levels'], request.POST['rsrc_number'], request.POST['rsrc_size'], request.POST['components'], request.POST['components_per'], request.POST['deliver_lt'], request.POST['procure_lt'] ) task.save(using=request.database) # C elif action == 'frepple_flush': task = Task(name='empty database', submitted=now, status='Waiting', user=request.user) if not request.POST.get('all'): task.arguments = "--models=%s" % ','.join( request.POST.getlist('entities')) task.save(using=request.database) # D elif action == 'loaddata': task = Task(name='load dataset', submitted=now, status='Waiting', user=request.user, arguments=request.POST['datafile']) task.save(using=request.database) # E elif action == 'frepple_copy': worker_database = DEFAULT_DB_ALIAS if 'copy' in request.POST: if not request.user.has_perm('execute.copy_scenario'): raise Exception('Missing execution privileges') source = request.POST.get('source', DEFAULT_DB_ALIAS) for sc in Scenario.objects.all(): if request.POST.get(sc.name, 'off') == 'on' and sc.status == 'Free': task = Task(name='copy scenario', submitted=now, status='Waiting', user=request.user, arguments="%s %s" % (source, sc.name)) task.save() elif 'release' in request.POST: # Note: release is immediate and synchronous. if not request.user.has_perm('execute.release_scenario'): raise Exception('Missing execution privileges') for sc in Scenario.objects.all(): if request.POST.get(sc.name, 'off') == 'on' and sc.status != 'Free': sc.status = 'Free' sc.lastrefresh = now sc.save() if request.database == sc.name: # Erasing the database that is currently selected. request.prefix = '' elif 'update' in request.POST: # Note: update is immediate and synchronous. for sc in Scenario.objects.all(): if request.POST.get(sc.name, 'off') == 'on': sc.description = request.POST.get('description', None) sc.save() else: raise Exception('Invalid scenario task') # F elif action == 'frepple_backup': task = Task(name='backup database', submitted=now, status='Waiting', user=request.user) task.save(using=request.database) # G elif action == 'frepple_createbuckets': task = Task(name='generate buckets', submitted=now, status='Waiting', user=request.user) task.arguments = "--start=%s --end=%s --weekstart=%s" % ( request.POST['start'], request.POST['end'], request.POST['weekstart']) task.save(using=request.database) # H elif action == 'openbravo_import' and 'freppledb.openbravo' in settings.INSTALLED_APPS: task = Task(name='Openbravo import', submitted=now, status='Waiting', user=request.user) task.arguments = "--delta=%s" % request.POST['delta'] task.save(using=request.database) # I elif action == 'openbravo_export' and 'freppledb.openbravo' in settings.INSTALLED_APPS: task = Task(name='Openbravo export', submitted=now, status='Waiting', user=request.user) task.save(using=request.database) else: # Task not recognized raise Exception('Invalid launching task') # Launch a worker process if task and not checkActive(worker_database): if os.path.isfile(os.path.join(settings.FREPPLE_APP, "frepplectl.py")): if "python" in sys.executable: # Development layout Popen([ sys.executable, # Python executable os.path.join(settings.FREPPLE_APP, "frepplectl.py"), "frepple_runworker", "--database=%s" % worker_database ]) else: # Deployment on Apache web server Popen([ "python", os.path.join(settings.FREPPLE_APP, "frepplectl.py"), "frepple_runworker", "--database=%s" % worker_database ], creationflags=0x08000000) elif sys.executable.find('freppleserver.exe') >= 0: # Py2exe executable Popen( [ sys.executable.replace( 'freppleserver.exe', 'frepplectl.exe'), # frepplectl executable "frepple_runworker", "--database=%s" % worker_database ], creationflags=0x08000000) # Do not create a console window else: # Linux standard installation Popen([ "frepplectl", "frepple_runworker", "--database=%s" % worker_database ]) return task
def wrapTask(request, action): # Allow only post if request.method != 'POST': raise Exception('Only post requests allowed') # Check user permissions if not request.user.has_perm('execute'): raise Exception('Missing execution privileges') # Parse the posted parameters as arguments for an asynchronous task to add to the queue. TODO MAKE MODULAR WITH SEPERATE TASK CLASS worker_database = request.database now = datetime.now() task = None # A if action == 'frepple_run': if not request.user.has_perm('execute.generate_plan'): raise Exception('Missing execution privileges') constraint = 0 for value in request.POST.getlist('constraint'): try: constraint += int(value) except: pass task = Task(name='generate plan', submitted=now, status='Waiting', user=request.user) task.arguments = "--constraint=%s --plantype=%s" % (constraint, request.POST.get('plantype')) env = [] if request.POST.get('odoo_read', None) == '1': env.append("odoo_read") request.session['odoo_read'] = True else: request.session['odoo_read'] = False if request.POST.get('odoo_write', None) == '1': env.append("odoo_write") request.session['odoo_write'] = True else: request.session['odoo_write'] = False if env: task.arguments = "%s --env=%s" % (task.arguments, ','.join(env)) task.save(using=request.database) # Update the session object request.session['plantype'] = request.POST.get('plantype') request.session['constraint'] = constraint # B elif action == 'frepple_createmodel': task = Task(name='generate model', submitted=now, status='Waiting', user=request.user) task.arguments = "--cluster=%s --demand=%s --forecast_per_item=%s --level=%s --resource=%s " \ "--resource_size=%s --components=%s --components_per=%s --deliver_lt=%s --procure_lt=%s" % ( request.POST['clusters'], request.POST['demands'], request.POST['fcst'], request.POST['levels'], request.POST['rsrc_number'], request.POST['rsrc_size'], request.POST['components'], request.POST['components_per'], request.POST['deliver_lt'], request.POST['procure_lt'] ) task.save(using=request.database) # C elif action == 'frepple_flush': task = Task(name='empty database', submitted=now, status='Waiting', user=request.user) if not request.POST.get('all'): task.arguments = "--models=%s" % ','.join(request.POST.getlist('entities')) task.save(using=request.database) # D elif action == 'loaddata': task = Task(name='load dataset', submitted=now, status='Waiting', user=request.user, arguments=request.POST['datafile']) task.save(using=request.database) # E elif action == 'frepple_copy': worker_database = DEFAULT_DB_ALIAS if 'copy' in request.POST: if not request.user.has_perm('execute.copy_scenario'): raise Exception('Missing execution privileges') source = request.POST.get('source', DEFAULT_DB_ALIAS) for sc in Scenario.objects.all(): if request.POST.get(sc.name, 'off') == 'on' and sc.status == 'Free': task = Task(name='copy scenario', submitted=now, status='Waiting', user=request.user, arguments="%s %s" % (source, sc.name)) task.save() elif 'release' in request.POST: # Note: release is immediate and synchronous. if not request.user.has_perm('execute.release_scenario'): raise Exception('Missing execution privileges') for sc in Scenario.objects.all(): if request.POST.get(sc.name, 'off') == 'on' and sc.status != 'Free': sc.status = 'Free' sc.lastrefresh = now sc.save() if request.database == sc.name: # Erasing the database that is currently selected. request.prefix = '' elif 'update' in request.POST: # Note: update is immediate and synchronous. for sc in Scenario.objects.all(): if request.POST.get(sc.name, 'off') == 'on': sc.description = request.POST.get('description', None) sc.save() else: raise Exception('Invalid scenario task') # F elif action == 'frepple_backup': task = Task(name='backup database', submitted=now, status='Waiting', user=request.user) task.save(using=request.database) # G elif action == 'frepple_createbuckets': task = Task(name='generate buckets', submitted=now, status='Waiting', user=request.user) task.arguments = "--start=%s --end=%s --weekstart=%s" % ( request.POST['start'], request.POST['end'], request.POST['weekstart'] ) task.save(using=request.database) # H elif action == 'openbravo_import' and 'freppledb.openbravo' in settings.INSTALLED_APPS: task = Task(name='Openbravo import', submitted=now, status='Waiting', user=request.user) task.arguments = "--delta=%s" % request.POST['delta'] task.save(using=request.database) # I elif action == 'openbravo_export' and 'freppledb.openbravo' in settings.INSTALLED_APPS: task = Task(name='Openbravo export', submitted=now, status='Waiting', user=request.user) task.save(using=request.database) else: # Task not recognized raise Exception('Invalid launching task') # Launch a worker process if task and not checkActive(worker_database): if os.path.isfile(os.path.join(settings.FREPPLE_APP, "frepplectl.py")): if "python" in sys.executable: # Development layout Popen([ sys.executable, # Python executable os.path.join(settings.FREPPLE_APP, "frepplectl.py"), "frepple_runworker", "--database=%s" % worker_database ]) else: # Deployment on Apache web server Popen([ "python", os.path.join(settings.FREPPLE_APP, "frepplectl.py"), "frepple_runworker", "--database=%s" % worker_database ], creationflags=0x08000000) elif sys.executable.find('freppleserver.exe') >= 0: # Py2exe executable Popen([ sys.executable.replace('freppleserver.exe', 'frepplectl.exe'), # frepplectl executable "frepple_runworker", "--database=%s" % worker_database ], creationflags=0x08000000) # Do not create a console window else: # Linux standard installation Popen([ "frepplectl", "frepple_runworker", "--database=%s" % worker_database ]) return task
def wrapTask(request, action): # Allow only post if request.method != "POST": raise Exception("Only post requests allowed") # Check user permissions if not request.user.has_perm("execute"): raise Exception("Missing execution privileges") # Parse the posted parameters as arguments for an asynchronous task to add to the queue. TODO MAKE MODULAR WITH SEPERATE TASK CLASS worker_database = request.database now = datetime.now() task = None # A if action == "frepple_run": if not request.user.has_perm("execute.generate_plan"): raise Exception("Missing execution privileges") constraint = 0 for value in request.POST.getlist("constraint"): try: constraint += int(value) except: pass task = Task(name="generate plan", submitted=now, status="Waiting", user=request.user) task.arguments = "--constraint=%s --plantype=%s" % (constraint, request.POST.get("plantype")) env = [] if request.POST.get("odoo_read", None) == "1": env.append("odoo_read_1") request.session["odoo_read"] = True else: request.session["odoo_read"] = False if request.POST.get("odoo_write", None) == "1": env.append("odoo_write") request.session["odoo_write"] = True else: request.session["odoo_write"] = False if env: task.arguments = "%s --env=%s" % (task.arguments, ",".join(env)) task.save(using=request.database) # Update the session object request.session["plantype"] = request.POST.get("plantype") request.session["constraint"] = constraint # B elif action == "frepple_createmodel": task = Task(name="generate model", submitted=now, status="Waiting", user=request.user) task.arguments = ( "--cluster=%s --demand=%s --forecast_per_item=%s --level=%s --resource=%s " "--resource_size=%s --components=%s --components_per=%s --deliver_lt=%s --procure_lt=%s" % ( request.POST["clusters"], request.POST["demands"], request.POST["fcst"], request.POST["levels"], request.POST["rsrc_number"], request.POST["rsrc_size"], request.POST["components"], request.POST["components_per"], request.POST["deliver_lt"], request.POST["procure_lt"], ) ) task.save(using=request.database) # C elif action == "frepple_flush": task = Task(name="empty database", submitted=now, status="Waiting", user=request.user) if not request.POST.get("all"): task.arguments = "--models=%s" % ",".join(request.POST.getlist("entities")) task.save(using=request.database) # D elif action == "loaddata": task = Task( name="load dataset", submitted=now, status="Waiting", user=request.user, arguments=request.POST["datafile"] ) task.save(using=request.database) # E elif action == "frepple_copy": worker_database = DEFAULT_DB_ALIAS if "copy" in request.POST: if not request.user.has_perm("execute.copy_scenario"): raise Exception("Missing execution privileges") source = request.POST.get("source", DEFAULT_DB_ALIAS) for sc in Scenario.objects.all(): if request.POST.get(sc.name, "off") == "on" and sc.status == "Free": task = Task( name="copy scenario", submitted=now, status="Waiting", user=request.user, arguments="%s %s" % (source, sc.name), ) task.save() elif "release" in request.POST: # Note: release is immediate and synchronous. if not request.user.has_perm("execute.release_scenario"): raise Exception("Missing execution privileges") for sc in Scenario.objects.all(): if request.POST.get(sc.name, "off") == "on" and sc.status != "Free": sc.status = "Free" sc.lastrefresh = now sc.save() if request.database == sc.name: # Erasing the database that is currently selected. request.prefix = "" elif "update" in request.POST: # Note: update is immediate and synchronous. for sc in Scenario.objects.all(): if request.POST.get(sc.name, "off") == "on": sc.description = request.POST.get("description", None) sc.save() else: raise Exception("Invalid scenario task") # F elif action == "frepple_backup": task = Task(name="backup database", submitted=now, status="Waiting", user=request.user) task.save(using=request.database) # G elif action == "frepple_createbuckets": task = Task(name="generate buckets", submitted=now, status="Waiting", user=request.user) task.arguments = "--start=%s --end=%s --weekstart=%s" % ( request.POST["start"], request.POST["end"], request.POST["weekstart"], ) task.save(using=request.database) # H elif action == "openbravo_import" and "freppledb.openbravo" in settings.INSTALLED_APPS: task = Task(name="Openbravo import", submitted=now, status="Waiting", user=request.user) task.arguments = "--delta=%s" % request.POST["delta"] task.save(using=request.database) # I elif action == "openbravo_export" and "freppledb.openbravo" in settings.INSTALLED_APPS: task = Task(name="Openbravo export", submitted=now, status="Waiting", user=request.user) if "filter_export" in request.POST: task.arguments = "--filter" task.save(using=request.database) elif action == "odoo_import" and "freppledb.odoo" in settings.INSTALLED_APPS: task = Task(name="Odoo import", submitted=now, status="Waiting", user=request.user) # task.arguments = "--filter" task.save(using=request.database) # J elif action == "odoo_export" and "freppledb.odoo" in settings.INSTALLED_APPS: task = Task(name="Odoo export", submitted=now, status="Waiting", user=request.user) if "filter_export" in request.POST: task.arguments = "--filter" task.save(using=request.database) # K elif action == "frepple_loadfromfolder": task = Task(name="load from folder", submitted=now, status="Waiting", user=request.user) task.save(using=request.database) else: # Task not recognized raise Exception("Invalid launching task") # Launch a worker process, making sure it inherits the right # environment variables from this parent os.environ["FREPPLE_CONFIGDIR"] = settings.FREPPLE_CONFIGDIR if task and not checkActive(worker_database): if os.path.isfile(os.path.join(settings.FREPPLE_APP, "frepplectl.py")): if "python" in sys.executable: # Development layout Popen( [ sys.executable, # Python executable os.path.join(settings.FREPPLE_APP, "frepplectl.py"), "frepple_runworker", "--database=%s" % worker_database, ] ) else: # Deployment on Apache web server Popen( [ "python", os.path.join(settings.FREPPLE_APP, "frepplectl.py"), "frepple_runworker", "--database=%s" % worker_database, ], creationflags=0x08000000, ) elif sys.executable.find("freppleserver.exe") >= 0: # Py2exe executable Popen( [ sys.executable.replace("freppleserver.exe", "frepplectl.exe"), # frepplectl executable "frepple_runworker", "--database=%s" % worker_database, ], creationflags=0x08000000, ) # Do not create a console window else: # Linux standard installation Popen(["frepplectl", "frepple_runworker", "--database=%s" % worker_database]) return task
def wrapTask(request, action): # Allow only post if request.method != 'POST': raise Exception('Only post requests allowed') # Parse the posted parameters as arguments for an asynchronous task to add to the queue. TODO MAKE MODULAR WITH SEPERATE TASK CLASS worker_database = request.database now = datetime.now() task = None # A if action == 'frepple_run': if not request.user.has_perm('auth.generate_plan'): raise Exception('Missing execution privileges') constraint = 0 for value in request.POST.getlist('constraint'): try: constraint += int(value) except: pass task = Task(name='generate plan', submitted=now, status='Waiting', user=request.user) task.arguments = "--constraint=%s --plantype=%s" % ( constraint, request.POST.get('plantype', 1)) env = [] for value in request.POST.getlist('env'): env.append(value) if env: task.arguments = "%s --env=%s" % (task.arguments, ','.join(env)) request.session['env'] = env task.save(using=request.database) # Update the session object request.session['plantype'] = request.POST.get('plantype') request.session['constraint'] = constraint # C elif action == 'frepple_flush': if not request.user.has_perm('auth.run_db'): raise Exception('Missing execution privileges') task = Task(name='empty database', submitted=now, status='Waiting', user=request.user) models = ','.join(request.POST.getlist('models')) if models: task.arguments = "--models=%s" % models task.save(using=request.database) # D elif action == 'loaddata': if not request.user.has_perm('auth.run_db'): raise Exception('Missing execution privileges') task = Task(name='load dataset', submitted=now, status='Waiting', user=request.user, arguments=request.POST['fixture']) task.save(using=request.database) # E elif action == 'frepple_copy': worker_database = DEFAULT_DB_ALIAS if 'copy' in request.POST: if not request.user.has_perm('auth.copy_scenario'): raise Exception('Missing execution privileges') source = request.POST.get('source', DEFAULT_DB_ALIAS) destination = request.POST.getlist('destination') force = request.POST.get('force', False) for sc in Scenario.objects.all(): arguments = "%s %s" % (source, sc.name) if force: arguments += ' --force' if request.POST.get(sc.name, 'off') == 'on' or sc.name in destination: task = Task(name='copy scenario', submitted=now, status='Waiting', user=request.user, arguments=arguments) task.save() elif 'release' in request.POST: # Note: release is immediate and synchronous. if not request.user.has_perm('auth.release_scenario'): raise Exception('Missing execution privileges') for sc in Scenario.objects.all(): if request.POST.get(sc.name, 'off') == 'on' and sc.status != 'Free': sc.status = 'Free' sc.lastrefresh = now sc.save() if request.database == sc.name: # Erasing the database that is currently selected. request.prefix = '' elif 'update' in request.POST: # Note: update is immediate and synchronous. if not request.user.has_perm('auth.release_scenario'): raise Exception('Missing execution privileges') for sc in Scenario.objects.all(): if request.POST.get(sc.name, 'off') == 'on': sc.description = request.POST.get('description', None) sc.save() else: raise Exception('Invalid scenario task') # F elif action == 'frepple_backup': if not request.user.has_perm('auth.run_db'): raise Exception('Missing execution privileges') task = Task(name='backup database', submitted=now, status='Waiting', user=request.user) task.save(using=request.database) # G elif action == 'frepple_createbuckets': if not request.user.has_perm('auth.run_db'): raise Exception('Missing execution privileges') task = Task(name='generate buckets', submitted=now, status='Waiting', user=request.user) arguments = [] start = request.POST.get('start', None) if start: arguments.append("--start=%s" % start) end = request.POST.get('end', None) if end: arguments.append("--end=%s" % end) weekstart = request.POST.get('weekstart', None) if weekstart: arguments.append("--weekstart=%s" % weekstart) if arguments: task.arguments = " ".join(arguments) task.save(using=request.database) # J elif action == 'odoo_import' and 'freppledb.odoo' in settings.INSTALLED_APPS: task = Task(name='Odoo import', submitted=now, status='Waiting', user=request.user) task.save(using=request.database) # M elif action == 'frepple_importfromfolder': if not request.user.has_perm('auth.run_db'): raise Exception('Missing execution privileges') task = Task(name='import from folder', submitted=now, status='Waiting', user=request.user) task.save(using=request.database) # N elif action == 'frepple_exporttofolder': if not request.user.has_perm('auth.run_db'): raise Exception('Missing execution privileges') task = Task(name='export to folder', submitted=now, status='Waiting', user=request.user) task.save(using=request.database) else: # Task not recognized raise Exception("Invalid task name '%s'" % action) # Launch a worker process, making sure it inherits the right # environment variables from this parent os.environ['FREPPLE_CONFIGDIR'] = settings.FREPPLE_CONFIGDIR if task and not checkActive(worker_database): if os.path.isfile(os.path.join(settings.FREPPLE_APP, "frepplectl.py")): if "python" in sys.executable: # Development layout Popen([ sys.executable, # Python executable os.path.join(settings.FREPPLE_APP, "frepplectl.py"), "frepple_runworker", "--database=%s" % worker_database ]) else: # Deployment on Apache web server Popen([ "python", os.path.join(settings.FREPPLE_APP, "frepplectl.py"), "frepple_runworker", "--database=%s" % worker_database ], creationflags=0x08000000) elif sys.executable.find('freppleserver.exe') >= 0: # Py2exe executable Popen( [ sys.executable.replace( 'freppleserver.exe', 'frepplectl.exe'), # frepplectl executable "frepple_runworker", "--database=%s" % worker_database ], creationflags=0x08000000) # Do not create a console window else: # Linux standard installation Popen([ "frepplectl", "frepple_runworker", "--database=%s" % worker_database ]) return task
def wrapTask(request, action): # Allow only post if request.method != 'POST': raise Exception('Only post requests allowed') # Parse the posted parameters as arguments for an asynchronous task to add to the queue. TODO MAKE MODULAR WITH SEPERATE TASK CLASS worker_database = request.database now = datetime.now() task = None args = request.POST or request.GET # A if action == 'frepple_run': if not request.user.has_perm('auth.generate_plan'): raise Exception('Missing execution privileges') constraint = 0 for value in args.getlist('constraint'): try: constraint += int(value) except: pass task = Task(name='frepple_run', submitted=now, status='Waiting', user=request.user) task.arguments = "--constraint=%s --plantype=%s" % ( constraint, args.get('plantype', 1)) env = [] for value in args.getlist('env'): env.append(value) if env: task.arguments = "%s --env=%s" % (task.arguments, ','.join(env)) request.session['env'] = env task.save(using=request.database) # Update the session object request.session['plantype'] = args.get('plantype') request.session['constraint'] = constraint # C elif action == 'frepple_flush': if not request.user.has_perm('auth.run_db'): raise Exception('Missing execution privileges') task = Task(name='frepple_flush', submitted=now, status='Waiting', user=request.user) models = ','.join(args.getlist('models')) if models: task.arguments = "--models=%s" % (models) task.save(using=request.database) # D elif action == 'loaddata': if not request.user.has_perm('auth.run_db'): raise Exception('Missing execution privileges') task = Task(name='loaddata', submitted=now, status='Waiting', user=request.user, arguments=args['fixture']) task.save(using=request.database) # E elif action == 'frepple_copy': worker_database = DEFAULT_DB_ALIAS if 'copy' in args: if not request.user.has_perm('auth.copy_scenario'): raise Exception('Missing execution privileges') source = args.get('source', DEFAULT_DB_ALIAS) worker_database = source destination = args.getlist('destination') force = args.get('force', False) for sc in Scenario.objects.all(): arguments = "%s %s" % (source, sc.name) if force: arguments += ' --force' if args.get(sc.name, 'off') == 'on' or sc.name in destination: task = Task(name='frepple_copy', submitted=now, status='Waiting', user=request.user, arguments=arguments) task.save(using=source) elif 'release' in args: # Note: release is immediate and synchronous. if not request.user.has_perm('auth.release_scenario'): raise Exception('Missing execution privileges') for sc in Scenario.objects.all(): if args.get(sc.name, 'off') == 'on' and sc.status != 'Free': sc.status = 'Free' sc.lastrefresh = now sc.save() if request.database == sc.name: # Erasing the database that is currently selected. request.prefix = '' elif 'update' in args: # Note: update is immediate and synchronous. if not request.user.has_perm('auth.release_scenario'): raise Exception('Missing execution privileges') for sc in Scenario.objects.all(): if args.get(sc.name, 'off') == 'on': sc.description = args.get('description', None) sc.save() else: raise Exception('Invalid scenario task') # G elif action == 'frepple_createbuckets': if not request.user.has_perm('auth.run_db'): raise Exception('Missing execution privileges') task = Task(name='frepple_createbuckets', submitted=now, status='Waiting', user=request.user) arguments = [] start = args.get('start', None) if start: arguments.append("--start=%s" % start) end = args.get('end', None) if end: arguments.append("--end=%s" % end) weekstart = args.get('weekstart', None) if weekstart: arguments.append("--weekstart=%s" % weekstart) if arguments: task.arguments = " ".join(arguments) task.save(using=request.database) else: # Generic task wrapper # Find the command and verify we have permissions to run it command = None for commandname, appname in get_commands().items(): if commandname == action: try: c = getattr( import_module('%s.management.commands.%s' % (appname, commandname)), 'Command') if c.index >= 0 and c.getHTML(request): command = c break except Exception: pass # Silently ignore failures if not command: raise Exception("Invalid task name '%s'" % action) # Create a task arguments = [] for arg, val in args.lists(): if arg != 'csrfmiddlewaretoken': arguments.append('--%s=%s' % (arg, ','.join(val))) task = Task(name=action, submitted=now, status='Waiting', user=request.user) if arguments: task.arguments = " ".join(arguments) task.save(using=request.database) # Launch a worker process, making sure it inherits the right # environment variables from this parent os.environ['FREPPLE_CONFIGDIR'] = settings.FREPPLE_CONFIGDIR if task and not checkActive(worker_database): if os.path.isfile(os.path.join(settings.FREPPLE_APP, "frepplectl.py")): if "python" in sys.executable: # Development layout Popen([ sys.executable, # Python executable os.path.join(settings.FREPPLE_APP, "frepplectl.py"), "frepple_runworker", "--database=%s" % worker_database ]) else: # Deployment on Apache web server Popen([ "python", os.path.join(settings.FREPPLE_APP, "frepplectl.py"), "frepple_runworker", "--database=%s" % worker_database ], creationflags=0x08000000) elif sys.executable.find('freppleserver.exe') >= 0: # Py2exe executable Popen( [ sys.executable.replace( 'freppleserver.exe', 'frepplectl.exe'), # frepplectl executable "frepple_runworker", "--database=%s" % worker_database ], creationflags=0x08000000) # Do not create a console window else: # Linux standard installation Popen([ "frepplectl", "frepple_runworker", "--database=%s" % worker_database ]) return task
def LaunchTask(request, action): # Allow only post if request.method != 'POST': raise Http404('Only post requests allowed') # Parse the posted parameters as arguments for an asynchronous task to add to the queue. TODO MAKE MODULAR WITH SEPERATE TASK CLASS worker_database = request.database try: now = datetime.now() # A if action == 'generate plan': constraint = 0 for value in request.POST.getlist('constraint'): try: constraint += int(value) except: pass task = Task(name='generate plan', submitted=now, status='Waiting', user=request.user) task.arguments = "--constraint=%s --plantype=%s" % (constraint, request.POST.get('plantype')) task.save(using=request.database) # Update the session object TODO REPLACE WITH PREFERENCE INFO request.session['plantype'] = request.POST.get('plantype') request.session['constraint'] = constraint # B elif action == 'generate model': task = Task(name='generate model', submitted=now, status='Waiting', user=request.user) task.arguments = "--cluster=%s --demand=%s --forecast_per_item=%s --level=%s --resource=%s " \ "--resource_size=%s --components=%s --components_per=%s --deliver_lt=%s --procure_lt=%s" % ( request.POST['clusters'], request.POST['demands'], request.POST['fcst'], request.POST['levels'], request.POST['rsrc_number'], request.POST['rsrc_size'], request.POST['components'], request.POST['components_per'], request.POST['deliver_lt'], request.POST['procure_lt'] ) task.save(using=request.database) # C elif action == 'empty database': task = Task(name='empty database', submitted=now, status='Waiting', user=request.user) task.save(using=request.database) # D elif action == 'load dataset': task = Task(name='load dataset', submitted=now, status='Waiting', user=request.user, arguments=request.POST['datafile']) task.save(using=request.database) # E elif action == 'manage scenarios': worker_database = DEFAULT_DB_ALIAS if 'copy' in request.POST: source = request.POST.get('source', DEFAULT_DB_ALIAS) for sc in Scenario.objects.all(): if request.POST.get(sc.name,'off') == 'on' and sc.status == u'Free': task = Task(name='copy scenario', submitted=now, status='Waiting', user=request.user, arguments="%s %s" % (source, sc.name)) task.save() elif 'release' in request.POST: # Note: release is immediate and synchronous. for sc in Scenario.objects.all(): if request.POST.get(sc.name,'off') == u'on' and sc.status != u'Free': sc.status = u'Free' sc.lastrefresh = now sc.save() if request.database == sc.name: # Erasing the database that is currently selected. request.prefix = '' elif 'update' in request.POST: # Note: update is immediate and synchronous. for sc in Scenario.objects.all(): if request.POST.get(sc.name, 'off') == 'on': sc.description = request.POST.get('description',None) sc.save() else: raise Http404('Invalid scenario task') # F elif action == 'backup database': task = Task(name='backup database', submitted=now, status='Waiting', user=request.user) task.save(using=request.database) # G elif action == 'generate buckets': task = Task(name='generate buckets', submitted=now, status='Waiting', user=request.user) task.arguments = "--start=%s --end=%s --weekstart=%s" % ( request.POST['start'], request.POST['end'], request.POST['weekstart'] ) task.save(using=request.database) # H elif action == 'exportworkbook': return exportWorkbook(request) # I elif action == 'importworkbook': return importWorkbook(request) # J elif action == 'openbravo_import' and 'freppledb.openbravo' in settings.INSTALLED_APPS: task = Task(name='Openbravo import', submitted=now, status='Waiting', user=request.user) task.arguments = "--delta=%s" % request.POST['delta'] task.save(using=request.database) # K elif action == 'openbravo_export' and 'freppledb.openbravo' in settings.INSTALLED_APPS: task = Task(name='Openbravo export', submitted=now, status='Waiting', user=request.user) task.save(using=request.database) # L elif action == 'openerp_import' and 'freppledb.openerp' in settings.INSTALLED_APPS: task = Task(name='OpenERP import', submitted=now, status='Waiting', user=request.user) task.arguments = "--delta=%s" % request.POST['delta'] task.save(using=request.database) # M elif action == 'openerp_export' and 'freppledb.openerp' in settings.INSTALLED_APPS: task = Task(name='OpenERP export', submitted=now, status='Waiting', user=request.user) task.save(using=request.database) else: # Task not recognized raise Http404('Invalid launching task') # Launch a worker process if not checkActive(worker_database): if os.path.isfile(os.path.join(settings.FREPPLE_APP,"frepplectl.py")): # Development layout Popen([ sys.executable, # Python executable os.path.join(settings.FREPPLE_APP,"frepplectl.py"), "frepple_runworker", "--database=%s" % worker_database ]) elif sys.executable.find('freppleserver.exe') >= 0: # Py2exe executable Popen([ sys.executable.replace('freppleserver.exe','frepplectl.exe'), # frepplectl executable "frepple_runworker", "--database=%s" % worker_database ], creationflags=0x08000000) # Do not create a console window else: # Linux standard installation Popen([ "frepplectl", "frepple_runworker", "--database=%s" % worker_database ]) # Task created successfully return HttpResponseRedirect('%s/execute/' % request.prefix) except Exception as e: messages.add_message(request, messages.ERROR, force_unicode(_('Failure launching action: %(msg)s') % {'msg':e})) return HttpResponseRedirect('%s/execute/' % request.prefix)
def LaunchTask(request, action): # Allow only post if request.method != 'POST': raise Http404('Only post requests allowed') # Parse the posted parameters as arguments for an asynchronous task to add to the queue. TODO MAKE MODULAR WITH SEPERATE TASK CLASS worker_database = request.database try: now = datetime.now() # A if action == 'generate plan': constraint = 0 for value in request.POST.getlist('constraint'): try: constraint += int(value) except: pass task = Task(name='generate plan', submitted=now, status='Waiting', user=request.user) task.arguments = "--constraint=%s --plantype=%s" % (constraint, request.POST.get('plantype')) task.save(using=request.database) # Update the session object TODO REPLACE WITH PREFERENCE INFO request.session['plantype'] = request.POST.get('plantype') request.session['constraint'] = constraint # B elif action == 'generate model': task = Task(name='generate model', submitted=now, status='Waiting', user=request.user) task.arguments = "--cluster=%s --demand=%s --forecast_per_item=%s --level=%s --resource=%s " \ "--resource_size=%s --components=%s --components_per=%s --deliver_lt=%s --procure_lt=%s" % ( request.POST['clusters'], request.POST['demands'], request.POST['fcst'], request.POST['levels'], request.POST['rsrc_number'], request.POST['rsrc_size'], request.POST['components'], request.POST['components_per'], request.POST['deliver_lt'], request.POST['procure_lt'] ) task.save(using=request.database) # C elif action == 'empty database': task = Task(name='empty database', submitted=now, status='Waiting', user=request.user) task.save(using=request.database) # D elif action == 'load dataset': task = Task(name='load dataset', submitted=now, status='Waiting', user=request.user, arguments=request.POST['datafile']) task.save(using=request.database) # E elif action == 'manage scenarios': worker_database = DEFAULT_DB_ALIAS if 'copy' in request.POST: source = request.POST.get('source', DEFAULT_DB_ALIAS) for sc in Scenario.objects.all(): if request.POST.get(sc.name,'off') == 'on' and sc.status == u'Free': task = Task(name='copy scenario', submitted=now, status='Waiting', user=request.user, arguments="%s %s" % (source, sc.name)) task.save() elif 'release' in request.POST: # Note: release is immediate and synchronous. for sc in Scenario.objects.all(): if request.POST.get(sc.name,'off') == u'on' and sc.status != u'Free': sc.status = u'Free' sc.lastrefresh = now sc.save() if request.database == sc.name: # Erasing the database that is currently selected. request.prefix = '' elif 'update' in request.POST: # Note: update is immediate and synchronous. for sc in Scenario.objects.all(): if request.POST.get(sc.name, 'off') == 'on': sc.description = request.POST.get('description',None) sc.save() else: raise Http404('Invalid scenario task') # F elif action == 'backup database': task = Task(name='backup database', submitted=now, status='Waiting', user=request.user) task.save(using=request.database) # G elif action == 'generate buckets': task = Task(name='generate buckets', submitted=now, status='Waiting', user=request.user) task.arguments = "--start=%s --end=%s --weekstart=%s" % ( request.POST['start'], request.POST['end'], request.POST['weekstart'] ) task.save(using=request.database) # H elif action == 'exportworkbook': return exportWorkbook(request) # I elif action == 'importworkbook': return importWorkbook(request) # J elif action == 'openbravo_import' and 'freppledb.openbravo' in settings.INSTALLED_APPS: task = Task(name='Openbravo import', submitted=now, status='Waiting', user=request.user) task.arguments = "--delta=%s" % request.POST['delta'] task.save(using=request.database) # K elif action == 'openbravo_export' and 'freppledb.openbravo' in settings.INSTALLED_APPS: task = Task(name='Openbravo export', submitted=now, status='Waiting', user=request.user) task.save(using=request.database) # L elif action == 'openerp_import' and 'freppledb.openerp' in settings.INSTALLED_APPS: task = Task(name='OpenERP import', submitted=now, status='Waiting', user=request.user) task.arguments = "--delta=%s" % request.POST['delta'] task.save(using=request.database) # M elif action == 'openerp_export' and 'freppledb.openerp' in settings.INSTALLED_APPS: task = Task(name='OpenERP export', submitted=now, status='Waiting', user=request.user) task.save(using=request.database) else: # Task not recognized raise Http404('Invalid launching task') # Launch a worker process if not checkActive(worker_database): if os.path.isfile(os.path.join(settings.FREPPLE_APP,"frepplectl.py")): # Development layout Popen([ sys.executable, # Python executable os.path.join(settings.FREPPLE_APP,"frepplectl.py"), "frepple_runworker", "--database=%s" % worker_database ]) elif sys.executable.find('frepplectl.exe') >= 0: # Py2exe executable Popen([ sys.executable, # Python executable "frepple_runworker", "--database=%s" % worker_database ]) else: # Linux standard installation Popen([ "frepplectl", "frepple_runworker", "--database=%s" % worker_database ]) # Task created successfully return HttpResponseRedirect('%s/execute/' % request.prefix) except Exception as e: messages.add_message(request, messages.ERROR, force_unicode(_('Failure launching action: %(msg)s') % {'msg':e})) return HttpResponseRedirect('%s/execute/' % request.prefix)