def wrapper_fn_pfr(request, *args, **kwargs): if request.GET.get("process_id", None): # Get by ID--direct! if not isnumeric(request.GET["process_id"]): return JsonResponseMessageError(_("process_id is not numeric."), status=400) else: process_log = get_object_or_404(UpdateProgressLog, id=request.GET["process_id"]) elif request.GET.get("process_name", None): process_name = request.GET["process_name"] if "start_time" not in request.GET: start_time = datetime.datetime.now() else: start_time = make_naive(dateutil.parser.parse(request.GET["start_time"]), get_current_timezone()) try: # Get the latest one of a particular name--indirect process_log = UpdateProgressLog.get_active_log(process_name=process_name, create_new=False) if not process_log: # Still waiting; get the very latest, at least. logs = UpdateProgressLog.objects \ .filter(process_name=process_name, completed=True, end_time__gt=start_time) \ .order_by("-end_time") if logs: process_log = logs[0] except Exception as e: # The process finished before we started checking, or it's been deleted. # Best to complete silently, but for debugging purposes, will make noise for now. return JsonResponseMessageError(unicode(e), status=500) else: return JsonResponseMessageError(_("Must specify process_id or process_name"), status=400) return handler(request, process_log, *args, **kwargs)
def handle(self, *args, **options): # Eliminate irrelevant settings for opt in BaseCommand.option_list: del options[opt.dest] # Parse the crappy way that runcherrypy takes args, # or the host/port for arg in args: if "=" in arg: (key,val) = arg.split("=") options[key] = val elif ":" in arg: (options["host"], options["port"]) = arg.split(":") elif isnumeric(arg): options["port"] = arg else: raise CommandError("Unexpected argument format: %s" % arg) # In order to avoid doing this twice when the autoreloader # loads this process again, only execute the initialization # code if autoreloader won't be run (daemonize), or if # RUN_MAIN is set (autoreloader has started) if options["daemonize"] or os.environ.get("RUN_MAIN"): self.setup_server_if_needed() # we do this on every server request, # as we don't know what happens when we're not looking. self.reinitialize_server() # Now call the proper command if not options["daemonize"]: call_command("runserver", "%s:%s" % (options["host"], options["port"])) else: call_command("runcherrypyserver", *["%s=%s" % (key,val) for key, val in options.iteritems()])
def wrapper_fn_pfr(request, *args, **kwargs): if request.GET.get("process_id", None): # Get by ID--direct! if not isnumeric(request.GET["process_id"]): return JsonResponseMessageError(_("process_id is not numeric.")); else: process_log = get_object_or_404(UpdateProgressLog, id=request.GET["process_id"]) elif request.GET.get("process_name", None): process_name = request.GET["process_name"] if "start_time" not in request.GET: start_time = datetime.datetime.now() else: start_time = make_naive(dateutil.parser.parse(request.GET["start_time"]), get_current_timezone()) try: # Get the latest one of a particular name--indirect process_log = UpdateProgressLog.get_active_log(process_name=process_name, create_new=False) if not process_log: # Still waiting; get the very latest, at least. logs = UpdateProgressLog.objects \ .filter(process_name=process_name, completed=True, end_time__gt=start_time) \ .order_by("-end_time") if logs: process_log = logs[0] except Exception as e: # The process finished before we started checking, or it's been deleted. # Best to complete silently, but for debugging purposes, will make noise for now. return JsonResponseMessageError(unicode(e)); else: return JsonResponseMessageError(_("Must specify process_id or process_name")) return handler(request, process_log, *args, **kwargs)
def handle(self, *args, **options): # Eliminate irrelevant settings for opt in BaseCommand.option_list: del options[opt.dest] # Parse the crappy way that runcherrypy takes args, # or the host/port for arg in args: if "=" in arg: (key,val) = arg.split("=") options[key] = val elif ":" in arg: (options["host"], options["port"]) = arg.split(":") elif isnumeric(arg): options["port"] = arg else: raise CommandError("Unexpected argument format: %s" % arg) # In order to avoid doing this twice when the autoreloader # loads this process again, only execute the initialization # code if autoreloader won't be run (daemonize), or if # RUN_MAIN is set (autoreloader has started) if options["daemonize"] or os.environ.get("RUN_MAIN"): self.setup_server_if_needed() # we do this on every server request, # as we don't know what happens when we're not looking. self.reinitialize_server() # In case any chronograph threads were interrupted the last time # the server was stopped, clear their is_running flags to allow # them to be started up again as needed. Job.objects.update(is_running=False) call_command("collectstatic", interactive=False) # set the BUILD_HASH to the current time, so assets get refreshed to their newest versions build_hash = str(time.mktime(time.gmtime())) logging.debug("Writing %s as BUILD_HASH" % build_hash) Settings.set('BUILD_HASH', build_hash) if options['startuplock']: os.unlink(options['startuplock']) # Now call the proper command if not options["production"]: call_command("runserver", "%s:%s" % (options["host"], options["port"])) else: del options["production"] sys.stdout.write("To access KA Lite from another connected computer, try the following address(es):\n") for addr in get_ip_addresses(): sys.stdout.write("\thttp://%s:%s/\n" % (addr, settings.USER_FACING_PORT())) call_command("runcherrypyserver", *["%s=%s" % (key,val) for key, val in options.iteritems()])
def browser_submit_answer(self, answer): """ From an exercise page, insert an answer into the text box and submit. """ self.browser.find_element_by_id('solutionarea').find_element_by_css_selector('input[type=text]').click() self.browser_send_keys(unicode(answer)) self.browser_send_keys(Keys.RETURN) # Convert points to a number, when appropriate time.sleep(0.25) points = self.browser_get_current_points() return float(points) if isnumeric(points) else points
def handle(self, *args, **options): # Eliminate irrelevant settings for opt in BaseCommand.option_list: del options[opt.dest] # In case any chronograph threads were interrupted the last time # the server was stopped, clear their is_running flags to allow # them to be started up again as needed. Job.objects.update(is_running=False) # Parse the crappy way that runcherrypy takes args, # or the host/port for arg in args: if "=" in arg: (key, val) = arg.split("=") options[key] = val elif ":" in arg: (options["host"], options["port"]) = arg.split(":") elif isnumeric(arg): options["port"] = arg else: raise CommandError("Unexpected argument format: %s" % arg) # In order to avoid doing this twice when the autoreloader # loads this process again, only execute the initialization # code if autoreloader won't be run (daemonize), or if # RUN_MAIN is set (autoreloader has started) if options["daemonize"] or os.environ.get("RUN_MAIN"): self.setup_server_if_needed() # we do this on every server request, # as we don't know what happens when we're not looking. self.reinitialize_server() call_command("collectstatic", interactive=False) # Now call the proper command if not options["production"]: call_command("runserver", "%s:%s" % (options["host"], options["port"])) else: del options["production"] sys.stdout.write( "To access KA Lite from another connected computer, try the following address(es):\n" ) for addr in get_ip_addresses(): sys.stdout.write("\thttp://%s:%s/\n" % (addr, settings.USER_FACING_PORT())) call_command( "runcherrypyserver", *["%s=%s" % (key, val) for key, val in options.iteritems()])
def browser_submit_answer(self, answer): """ From an exercise page, insert an answer into the text box and submit. """ self.browser.find_element_by_id( 'solutionarea').find_element_by_css_selector( 'input[type=text]').click() self.browser_send_keys(unicode(answer)) self.browser_send_keys(Keys.RETURN) # Convert points to a number, when appropriate time.sleep(0.25) points = self.browser_get_current_points() return float(points) if isnumeric(points) else points
def get_activity_int(cls, activity_type): """Helper function converts from string or int to the underlying int""" if type(activity_type).__name__ in ["str", "unicode"]: if activity_type in cls.KNOWN_TYPES: return cls.KNOWN_TYPES[activity_type] else: raise Exception("Unrecognized activity type: %s" % activity_type) elif isnumeric(activity_type): return int(activity_type) else: raise Exception("Cannot convert requested activity_type to int")
def handle(self, *args, **options): # Eliminate irrelevant settings for opt in BaseCommand.option_list: del options[opt.dest] # Parse the crappy way that runcherrypy takes args, # or the host/port for arg in args: if "=" in arg: (key,val) = arg.split("=") options[key] = val elif ":" in arg: (options["host"], options["port"]) = arg.split(":") elif isnumeric(arg): options["port"] = arg else: raise CommandError("Unexpected argument format: %s" % arg) # In order to avoid doing this twice when the autoreloader # loads this process again, only execute the initialization # code if autoreloader won't be run (daemonize), or if # RUN_MAIN is set (autoreloader has started) if options["daemonize"] or os.environ.get("RUN_MAIN"): self.setup_server_if_needed() # we do this on every server request, # as we don't know what happens when we're not looking. self.reinitialize_server() call_command("collectstatic", interactive=False) # Now call the proper command if not options["production"]: call_command("runserver", "%s:%s" % (options["host"], options["port"])) else: del options["production"] sys.stdout.write("To access KA Lite from another connected computer, try the following address(es):\n") for addr in get_ip_addresses(): sys.stdout.write("\thttp://%s:%s/\n" % (addr, settings.USER_FACING_PORT())) call_command("runcherrypyserver", *["%s=%s" % (key,val) for key, val in options.iteritems()])
def handle(self, *args, **options): # Store base django settings and remove them from the options list # because we are proxying one type of option list to another format # where --foo=bar becomes foo=bar warnings.warn( "manage kaserve is deprecated, please use kalite start [--foreground] [...]", RemovedInKALite_v015_Warning ) base_django_settings = {} for opt in BaseCommand.option_list: base_django_settings[opt.dest] = options[opt.dest] del options[opt.dest] # Parse the crappy way that runcherrypy takes args, # or the host/port for arg in args: if "=" in arg: (key,val) = arg.split("=") options[key] = val elif ":" in arg: (options["host"], options["port"]) = arg.split(":") elif isnumeric(arg): options["port"] = arg else: raise CommandError("Unexpected argument format: %s" % arg) # In order to avoid doing this twice when the autoreloader # loads this process again, only execute the initialization # code if autoreloader won't be run (daemonize), or if # RUN_MAIN is set (autoreloader has started) if options["daemonize"] or os.environ.get("RUN_MAIN"): self.setup_server_if_needed() # we do this on every server request, # as we don't know what happens when we're not looking. self.reinitialize_server() # In case any chronograph threads were interrupted the last time # the server was stopped, clear their is_running flags to allow # them to be started up again as needed. Job.objects.update(is_running=False) # Copy static media, one reason for not symlinking: It is not cross-platform and can cause permission issues # with many webservers logging.info("Copying static media...") call_command("collectstatic", interactive=False, verbosity=0) call_command("collectstatic_js_reverse", interactive=False) if options['startuplock']: os.unlink(options['startuplock']) # Now call the proper command if not options["production"]: call_command("runserver", "%s:%s" % (options["host"], options["port"])) else: del options["production"] addresses = get_ip_addresses(include_loopback=False) sys.stdout.write("To access KA Lite from another connected computer, try the following address(es):\n") for addr in addresses: sys.stdout.write("\thttp://%s:%s/\n" % (addr, settings.USER_FACING_PORT())) sys.stdout.write("To access KA Lite from this machine, try the following address:\n") sys.stdout.write("\thttp://127.0.0.1:%s/\n" % settings.USER_FACING_PORT()) call_command("runcherrypyserver", *["%s=%s" % (key,val) for key, val in options.iteritems()], **base_django_settings)