Python re.MatchObject() Examples
The following are 29
code examples of re.MatchObject().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
re
, or try the search function
.
Example #1
Source File: server.py From browserscope with Apache License 2.0 | 6 votes |
def _handle_script_request(self, environ, start_response, url_map, match, inst=None): """Handles a HTTP request that has matched a script handler. Args: environ: An environ dict for the request as defined in PEP-333. start_response: A function with semantics defined in PEP-333. url_map: An appinfo.URLMap instance containing the configuration for the handler that matched. match: A re.MatchObject containing the result of the matched URL pattern. inst: The Instance to send the request to. If None then an appropriate Instance will be chosen. Returns: An iterable over strings containing the body of the HTTP response. """ raise NotImplementedError()
Example #2
Source File: regex.py From pilot with Apache License 2.0 | 6 votes |
def __init__ (self, result=None) : """ construct with a `re.MatchObject` instance. This ctor should only be called from within the `ReString` class. """ self._glist = list() self._gdict = dict() if result : if not isinstance (result, type(re.match("",""))) : # fuck python raise TypeError ('Need re.MatchObject on construction, not %s' % type(result)) self._glist = result.groups () self._gdict = result.groupdict () # -------------------------------------------------------------------------- #
Example #3
Source File: module.py From python-compat-runtime with Apache License 2.0 | 6 votes |
def _handle_script_request(self, environ, start_response, url_map, match, inst=None): """Handles a HTTP request that has matched a script handler. Args: environ: An environ dict for the request as defined in PEP-333. start_response: A function with semantics defined in PEP-333. url_map: An appinfo.URLMap instance containing the configuration for the handler that matched. match: A re.MatchObject containing the result of the matched URL pattern. inst: The Instance to send the request to. If None then an appropriate Instance will be chosen. Returns: An iterable over strings containing the body of the HTTP response. """ raise NotImplementedError()
Example #4
Source File: static_files_handler.py From python-compat-runtime with Apache License 2.0 | 6 votes |
def handle(self, match, environ, start_response): """Serves the file content matching the request. Args: match: The re.MatchObject containing the result of matching the URL against this handler's URL pattern. environ: An environ dict for the current request as defined in PEP-333. start_response: A function with semantics defined in PEP-333. Returns: An iterable over strings containing the body of the HTTP response. """ relative_path = match.group('file') if not self._is_relative_path_valid(relative_path): return self._not_found_404(environ, start_response) full_path = os.path.join(self._root_path, self._url_map.static_dir, relative_path) return self._handle_path(full_path, environ, start_response)
Example #5
Source File: static_files_handler.py From python-compat-runtime with Apache License 2.0 | 6 votes |
def handle(self, match, environ, start_response): """Serves the file content matching the request. Args: match: The re.MatchObject containing the result of matching the URL against this handler's URL pattern. environ: An environ dict for the current request as defined in PEP-333. start_response: A function with semantics defined in PEP-333. Returns: An iterable over strings containing the body of the HTTP response. """ relative_path = match.expand(self._url_map.static_files) if not self._is_relative_path_valid(relative_path): if self._url_map.require_matching_file: return None else: return self._not_found_404(environ, start_response) full_path = os.path.join(self._root_path, relative_path) return self._handle_path(full_path, environ, start_response)
Example #6
Source File: tokenizer.py From SyferText with Apache License 2.0 | 6 votes |
def find_suffix(self, substring: str) -> int: """Find the length of a suffix that should be segmented from the string, or None if no suffix rules match. Args: substring: The string to segment. Returns: The length of the suffix if present, otherwise 0. """ # Return 0 if no suffix match is found in substring. if self.suffix_search is None: return 0 # The MatchObject with the end and start postion of the suffix in the substring. match = self.suffix_search(substring) # Return the length of the suffix match in the substring. return (match.end() - match.start()) if match is not None else 0
Example #7
Source File: tokenizer.py From SyferText with Apache License 2.0 | 6 votes |
def find_prefix(self, substring: str) -> int: """Find the length of a prefix that should be segmented from the string, or None if no prefix rules match. Args: substring: The string to segment. Returns: The length of the prefix if present, otherwise 0. """ # Return 0 if no prefix match is found in substring. if self.prefix_search is None: return 0 # The MatchObject with the end and start postion of the prefix in the substring. match = self.prefix_search(substring) # Return the length of the prefix match in the substring. return (match.end() - match.start()) if match is not None else 0
Example #8
Source File: tokenizer.py From SyferText with Apache License 2.0 | 6 votes |
def infix_matches(self, substring: str) -> List[Match]: """Find internal split points of the string, such as hyphens. Args: substring : The string to segment. Returns: A list of `re.MatchObject` objects that have `.start()` and `.end()` methods, denoting the placement of internal segment separators, e.g. hyphens. """ # Return empty list if no infix matches are in substring. if self.infix_finditer is None: return [] # Return a list of MatchObject instances over all non-overlapping # matches for the infixes in the substring. return list(self.infix_finditer(substring))
Example #9
Source File: expression_parser.py From plaso with Apache License 2.0 | 6 votes |
def _StringEscape(self, string='', match='', **unused_kwargs): """Escapes backslashes found inside an expression string. Backslashes followed by anything other than [\\'"rnbt.ws] will raise an Error. Note that this function is used as a callback by _GetNextToken. Args: string (Optional[str]): expression string. match (Optional[re.MatchObject]): the regular expression match object, where match.group(1) contains the escaped code. Returns: str: next state, which is None. Raises: ParseError: when the escaped string is not one of [\\'"rnbt]. """ if match.group(1) not in '\\\'"rnbt\\.ws': raise errors.ParseError('Invalid escape character {0:s}.'.format(string)) decoded_string = codecs.decode(string, 'unicode_escape') return self._StringInsert(string=decoded_string)
Example #10
Source File: completion_providers.py From king-phisher with BSD 3-Clause "New" or "Revised" License | 6 votes |
def populate(self, context, match): """ Utilizes the match from the regular expression check to check for possible matches of :py:attr:`.jinja_vars`. :param context: The context for the completion. :type context: :py:class:`GtkSource.CompletionContext` :param match: The matching object. :types match: `re.MatchObject` :return: List of strings to be used for creation of proposals. :rtype: list """ proposal_terms = [] if match.group('is_filter'): jinja_filter = match.group('filter') or '' proposal_terms = [term for term in self.jinja_filters if term.startswith(jinja_filter)] elif match.group('is_test'): jinja_test = match.group('test') or '' proposal_terms = [term for term in self.jinja_tests if term.startswith(jinja_test)] elif match.group('var'): tokens = match.group('var') tokens = tokens.split('.') proposal_terms = get_proposal_terms(self.jinja_tokens, tokens) proposal_terms = [(term.split('(', 1)[0], term) for term in proposal_terms] return proposal_terms
Example #11
Source File: static_files_handler.py From browserscope with Apache License 2.0 | 6 votes |
def handle(self, match, environ, start_response): """Serves the file content matching the request. Args: match: The re.MatchObject containing the result of matching the URL against this handler's URL pattern. environ: An environ dict for the current request as defined in PEP-333. start_response: A function with semantics defined in PEP-333. Returns: An iterable over strings containing the body of the HTTP response. """ full_path = os.path.join(self._root_path, self._url_map.static_dir, match.group('file')) return self._handle_path(full_path, environ, start_response)
Example #12
Source File: completion_providers.py From king-phisher with BSD 3-Clause "New" or "Revised" License | 5 votes |
def populate(self, context, match): """ This is called when the :py:attr:`.extraction_regex` returns a match. Subclasses must then use this opportunity to populate the *context* with proposals. :param context: The context for the completion. :type context: :py:class:`GtkSource.CompletionContext` :param match: The resulting match from the :py:attr:`.extraction_regex`. :type match: :py:class:`re.MatchObject` """ raise NotImplementedError()
Example #13
Source File: php_runtime.py From browserscope with Apache License 2.0 | 5 votes |
def handle(self, environ, start_response, url_map, match, request_id, request_type): """Serves a request by displaying an error page. Args: environ: An environ dict for the request as defined in PEP-333. start_response: A function with semantics defined in PEP-333. url_map: An appinfo.URLMap instance containing the configuration for the handler matching this request. match: A re.MatchObject containing the result of the matched URL pattern. request_id: A unique string id associated with the request. request_type: The type of the request. See instance.*_REQUEST module constants. Yields: A sequence of strings containing the body of the HTTP response. """ start_response('500 Internal Server Error', [('Content-Type', 'text/html')]) yield '<html><head><title>Invalid PHP Configuration</title></head>' yield '<body>' yield '<title>Invalid PHP Configuration</title>' yield '<b>The PHP interpreter specified with the --php_executable_path flag' yield ' ("%s") is not compatible with the App Engine PHP ' % ( self._php_executable_path) yield 'development environment.</b><br>' yield '<br>' yield '<pre>%s</pre>' % self._problem_description yield '</body></html>'
Example #14
Source File: module.py From python-compat-runtime with Apache License 2.0 | 5 votes |
def _handle_script_request(self, environ, start_response, url_map, match, request_id, inst=None, request_type=instance.NORMAL_REQUEST): """Handles a HTTP request that has matched a script handler. Args: environ: An environ dict for the request as defined in PEP-333. start_response: A function with semantics defined in PEP-333. url_map: An appinfo.URLMap instance containing the configuration for the handler that matched. match: A re.MatchObject containing the result of the matched URL pattern. request_id: A unique string id associated with the request. inst: The instance.Instance to send the request to. If None then an appropriate instance.Instance will be chosen. request_type: The type of the request. See instance.*_REQUEST module constants. Returns: An iterable over strings containing the body of the HTTP response. """ if ((request_type in (instance.NORMAL_REQUEST, instance.READY_REQUEST) and self._suspended) or self._quit_event.is_set()): return self._error_response(environ, start_response, 404) environ['BACKEND_ID'] = ( self._module_configuration.module_name if self._module_configuration.is_backend else self._module_configuration.version_id.split('.', 1)[0]) return self._handle_instance_request( environ, start_response, url_map, match, request_id, inst or self._instance, request_type)
Example #15
Source File: module.py From python-compat-runtime with Apache License 2.0 | 5 votes |
def _handle_instance_request(self, environ, start_response, url_map, match, request_id, inst, request_type): """Handles a request routed a particular Instance. Args: environ: An environ dict for the request as defined in PEP-333. start_response: A function with semantics defined in PEP-333. url_map: An appinfo.URLMap instance containing the configuration for the handler that matched. match: A re.MatchObject containing the result of the matched URL pattern. request_id: A unique string id associated with the request. inst: The instance.Instance to send the request to. request_type: The type of the request. See instance.*_REQUEST module constants. Returns: An iterable over strings containing the body of the HTTP response. """ if request_type != instance.READY_REQUEST: with self._condition: self._num_outstanding_instance_requests += 1 self._outstanding_request_history.append( (time.time(), self.num_outstanding_instance_requests)) try: logging.debug('Dispatching request to %s', inst) return inst.handle(environ, start_response, url_map, match, request_id, request_type) finally: with self._condition: if request_type != instance.READY_REQUEST: self._num_outstanding_instance_requests -= 1 self._condition.notify()
Example #16
Source File: server.py From browserscope with Apache License 2.0 | 5 votes |
def _handle_instance_request(self, environ, start_response, url_map, match, request_id, inst, request_type): """Handles a request routed a particular Instance. Args: environ: An environ dict for the request as defined in PEP-333. start_response: A function with semantics defined in PEP-333. url_map: An appinfo.URLMap instance containing the configuration for the handler that matched. match: A re.MatchObject containing the result of the matched URL pattern. request_id: A unique string id associated with the request. inst: The instance.Instance to send the request to. request_type: The type of the request. See instance.*_REQUEST module constants. Returns: An iterable over strings containing the body of the HTTP response. """ if request_type != instance.READY_REQUEST: with self._condition: self._num_outstanding_instance_requests += 1 self._outstanding_request_history.append( (time.time(), self.num_outstanding_instance_requests)) try: logging.debug('Dispatching request to %s', inst) return inst.handle(environ, start_response, url_map, match, request_id, request_type) finally: with self._condition: if request_type != instance.READY_REQUEST: self._num_outstanding_instance_requests -= 1 self._condition.notify()
Example #17
Source File: static_files_handler.py From browserscope with Apache License 2.0 | 5 votes |
def handle(self, match, environ, start_response): """Serves the file content matching the request. Args: match: The re.MatchObject containing the result of matching the URL against this handler's URL pattern. environ: An environ dict for the current request as defined in PEP-333. start_response: A function with semantics defined in PEP-333. Returns: An iterable over strings containing the body of the HTTP response. """ full_path = os.path.join(self._root_path, match.expand(self._url_map.static_files)) return self._handle_path(full_path, environ, start_response)
Example #18
Source File: cli_agent.py From citest with Apache License 2.0 | 5 votes |
def match_regex(self, regex): """Attempt to match a regular expression against the error. Args: regex: The regular expression to match against Returns: re.MatchObject or None """ return re.search(regex, self.__run_response.error, re.MULTILINE)
Example #19
Source File: completion_providers.py From king-phisher with BSD 3-Clause "New" or "Revised" License | 5 votes |
def extract(self, context): """ Used to extract the text according to the :py:attr:`.left_delimiter` and :py:attr:`.extraction_regex`. If the extraction regular expression does not match, None is returned. :param context: The context for the completion. :type context: :py:class:`GtkSource.CompletionContext` :return: The resulting match from the :py:attr:`.extraction_regex`. :rtype: :py:class:`re.MatchObject` """ end_iter = context.get_iter() if not isinstance(end_iter, Gtk.TextIter): _, end_iter = context.get_iter() if not end_iter: return buf = end_iter.get_buffer() mov_iter = end_iter.copy() limit_iter = end_iter.copy() if self.left_limit: limit_iter.backward_chars(self.left_limit) mov_iter = mov_iter.backward_search(self.left_delimiter, Gtk.TextSearchFlags.VISIBLE_ONLY, limit=limit_iter) if not mov_iter: return mov_iter, _ = mov_iter if self.left_delimiter_adjustment > 0: mov_iter.forward_chars(self.left_delimiter_adjustment) elif self.left_delimiter_adjustment < 0: mov_iter.backward_chars(abs(self.left_delimiter_adjustment)) left_text = buf.get_text(mov_iter, end_iter, True) return self.extraction_regex.match(left_text)
Example #20
Source File: server.py From browserscope with Apache License 2.0 | 4 votes |
def _handle_script_request(self, environ, start_response, url_map, match, request_id, inst=None, request_type=instance.INTERACTIVE_REQUEST): """Handles a interactive request by forwarding it to the managed Instance. Args: environ: An environ dict for the request as defined in PEP-333. start_response: A function with semantics defined in PEP-333. url_map: An appinfo.URLMap instance containing the configuration for the handler that matched. match: A re.MatchObject containing the result of the matched URL pattern. request_id: A unique string id associated with the request. inst: The instance.Instance to send the request to. request_type: The type of the request. See instance.*_REQUEST module constants. This must be instance.INTERACTIVE_REQUEST. Returns: An iterable over strings containing the body of the HTTP response. """ assert inst is None assert request_type == instance.INTERACTIVE_REQUEST start_time = time.time() timeout_time = start_time + self._MAX_REQUEST_WAIT_TIME while time.time() < timeout_time: new_instance = False with self._inst_lock: if not self._inst: self._inst = self._instance_factory.new_instance( AutoScalingServer.generate_instance_id(), expect_ready_request=False) new_instance = True inst = self._inst if new_instance: self._inst.start() try: return inst.handle(environ, start_response, url_map, match, request_id, request_type) except instance.CannotAcceptRequests: inst.wait(timeout_time) except Exception: # If the instance is restarted while handling a request then the # exception raises is unpredictable. if inst != self._inst: start_response('503 Service Unavailable', []) return ['Instance was restarted while executing command'] logging.exception('Unexpected exception handling command: %r', environ) raise else: start_response('503 Service Unavailable', []) return ['The command timed-out while waiting for another one to complete']
Example #21
Source File: server.py From browserscope with Apache License 2.0 | 4 votes |
def _handle_script_request(self, environ, start_response, url_map, match, request_id, inst=None, request_type=instance.NORMAL_REQUEST): """Handles a HTTP request that has matched a script handler. Args: environ: An environ dict for the request as defined in PEP-333. start_response: A function with semantics defined in PEP-333. url_map: An appinfo.URLMap instance containing the configuration for the handler that matched. match: A re.MatchObject containing the result of the matched URL pattern. request_id: A unique string id associated with the request. inst: The instance.Instance to send the request to. If None then an appropriate instance.Instance will be chosen. request_type: The type of the request. See instance.*_REQUEST module constants. Returns: An iterable over strings containing the body of the HTTP response. """ if self._quit_event.is_set(): return self._error_response(environ, start_response, 404) if self._server_configuration.is_backend: environ['BACKEND_ID'] = self._server_configuration.server_name else: environ['BACKEND_ID'] = ( self._server_configuration.version_id.split('.', 1)[0]) if inst is not None: return self._handle_instance_request( environ, start_response, url_map, match, request_id, inst, request_type) start_time = time.time() timeout_time = start_time + self._MAX_REQUEST_WAIT_TIME while time.time() < timeout_time: if self._quit_event.is_set(): return self._error_response(environ, start_response, 404) inst = self._choose_instance(timeout_time) if inst: try: logging.debug('Dispatching request to %s after %0.4fs pending', inst, time.time() - start_time) return inst.handle(environ, start_response, url_map, match, request_id, request_type) except instance.CannotAcceptRequests: continue finally: with self._condition: self._condition.notify() else: return self._error_response(environ, start_response, 503)
Example #22
Source File: server.py From browserscope with Apache License 2.0 | 4 votes |
def _handle_script_request(self, environ, start_response, url_map, match, request_id, inst=None, request_type=instance.NORMAL_REQUEST): """Handles a HTTP request that has matched a script handler. Args: environ: An environ dict for the request as defined in PEP-333. start_response: A function with semantics defined in PEP-333. url_map: An appinfo.URLMap instance containing the configuration for the handler that matched. match: A re.MatchObject containing the result of the matched URL pattern. request_id: A unique string id associated with the request. inst: The instance.Instance to send the request to. If None then an appropriate instance.Instance will be chosen. request_type: The type of the request. See instance.*_REQUEST module constants. Returns: An iterable over strings containing the body of the HTTP response. """ if ((request_type in (instance.NORMAL_REQUEST, instance.READY_REQUEST) and self._suspended) or self._quit_event.is_set()): return self._error_response(environ, start_response, 404) if self._server_configuration.is_backend: environ['BACKEND_ID'] = self._server_configuration.server_name else: environ['BACKEND_ID'] = ( self._server_configuration.version_id.split('.', 1)[0]) if inst is not None: return self._handle_instance_request( environ, start_response, url_map, match, request_id, inst, request_type) start_time = time.time() timeout_time = start_time + self._MAX_REQUEST_WAIT_TIME while time.time() < timeout_time: if ((request_type in (instance.NORMAL_REQUEST, instance.READY_REQUEST) and self._suspended) or self._quit_event.is_set()): return self._error_response(environ, start_response, 404) inst = self._choose_instance(timeout_time) if inst: try: logging.debug('Dispatching request to %s after %0.4fs pending', inst, time.time() - start_time) return inst.handle(environ, start_response, url_map, match, request_id, request_type) except instance.CannotAcceptRequests: continue finally: with self._condition: self._condition.notify() else: return self._error_response(environ, start_response, 503)
Example #23
Source File: server.py From browserscope with Apache License 2.0 | 4 votes |
def _handle_instance_request(self, environ, start_response, url_map, match, request_id, inst, request_type): """Handles a request routed a particular Instance. Args: environ: An environ dict for the request as defined in PEP-333. start_response: A function with semantics defined in PEP-333. url_map: An appinfo.URLMap instance containing the configuration for the handler that matched. match: A re.MatchObject containing the result of the matched URL pattern. request_id: A unique string id associated with the request. inst: The instance.Instance to send the request to. request_type: The type of the request. See instance.*_REQUEST module constants. Returns: An iterable over strings containing the body of the HTTP response. """ start_time = time.time() timeout_time = start_time + self._MAX_REQUEST_WAIT_TIME try: while time.time() < timeout_time: logging.debug('Dispatching request to %s after %0.4fs pending', inst, time.time() - start_time) try: return inst.handle(environ, start_response, url_map, match, request_id, request_type) except instance.CannotAcceptRequests: pass inst.wait(timeout_time) if inst.has_quit: return self._error_response(environ, start_response, 503) else: return self._error_response(environ, start_response, 503) finally: with self._condition: self._condition.notify()
Example #24
Source File: module.py From python-compat-runtime with Apache License 2.0 | 4 votes |
def _handle_instance_request(self, environ, start_response, url_map, match, request_id, inst, request_type): """Handles a request routed a particular Instance. Args: environ: An environ dict for the request as defined in PEP-333. start_response: A function with semantics defined in PEP-333. url_map: An appinfo.URLMap instance containing the configuration for the handler that matched. match: A re.MatchObject containing the result of the matched URL pattern. request_id: A unique string id associated with the request. inst: The instance.Instance to send the request to. request_type: The type of the request. See instance.*_REQUEST module constants. Returns: An iterable over strings containing the body of the HTTP response. """ start_time = time.time() timeout_time = start_time + self._get_wait_time() try: while time.time() < timeout_time: logging.debug('Dispatching request to %s after %0.4fs pending', inst, time.time() - start_time) try: return inst.handle(environ, start_response, url_map, match, request_id, request_type) except instance.CannotAcceptRequests: pass inst.wait(timeout_time) if inst.has_quit: return self._error_response(environ, start_response, 503) else: return self._error_response(environ, start_response, 503) finally: with self._condition: self._condition.notify()
Example #25
Source File: module.py From python-compat-runtime with Apache License 2.0 | 4 votes |
def _handle_instance_request(self, environ, start_response, url_map, match, request_id, inst, request_type): """Handles a request routed a particular Instance. Args: environ: An environ dict for the request as defined in PEP-333. start_response: A function with semantics defined in PEP-333. url_map: An appinfo.URLMap instance containing the configuration for the handler that matched. match: A re.MatchObject containing the result of the matched URL pattern. request_id: A unique string id associated with the request. inst: The instance.Instance to send the request to. request_type: The type of the request. See instance.*_REQUEST module constants. Returns: An iterable over strings containing the body of the HTTP response. """ start_time = time.time() timeout_time = start_time + self._get_wait_time() try: while time.time() < timeout_time: logging.debug('Dispatching request to %s after %0.4fs pending', inst, time.time() - start_time) try: return inst.handle(environ, start_response, url_map, match, request_id, request_type) except instance.CannotAcceptRequests: pass inst.wait(timeout_time) if inst.has_quit: return self._error_response(environ, start_response, 503) return self._error_response(environ, start_response, 503) finally: with self._condition: self._condition.notify()
Example #26
Source File: keyboard.py From deepWordBug with Apache License 2.0 | 4 votes |
def _read_until(term, pattern, timeout): """ Convenience read-until-pattern function, supporting :meth:`~.get_location`. :arg blessed.Terminal term: :class:`~.Terminal` instance. :arg float timeout: timeout period, may be set to None to indicate no timeout (where 0 is always returned). :arg str pattern: target regular expression pattern to seek. :rtype: tuple :returns: tuple in form of ``(match, str)``, *match* may be :class:`re.MatchObject` if pattern is discovered in input stream before timeout has elapsed, otherwise None. ``str`` is any remaining text received exclusive of the matching pattern). The reason a tuple containing non-matching data is returned, is that the consumer should push such data back into the input buffer by :meth:`~.Terminal.ungetch` if any was received. For example, when a user is performing rapid input keystrokes while its terminal emulator surreptitiously responds to this in-band sequence, we must ensure any such keyboard data is well-received by the next call to term.inkey() without delay. """ stime = time.time() match, buf = None, u'' # first, buffer all pending data. pexpect library provides a # 'searchwindowsize' attribute that limits this memory region. We're not # concerned about OOM conditions: only (human) keyboard input and terminal # response sequences are expected. while True: # block as long as necessary to ensure at least one character is # received on input or remaining timeout has elapsed. ucs = term.inkey(timeout=_time_left(stime, timeout)) if ucs: buf += ucs # while the keyboard buffer is "hot" (has input), we continue to # aggregate all awaiting data. We do this to ensure slow I/O # calls do not unnecessarily give up within the first 'while' loop # for short timeout periods. while True: ucs = term.inkey(timeout=0) if not ucs: break buf += ucs match = re.search(pattern=pattern, string=buf) if match is not None: # match break if timeout is not None: if not _time_left(stime, timeout): # timeout break return match, buf
Example #27
Source File: module.py From python-compat-runtime with Apache License 2.0 | 4 votes |
def _handle_instance_request(self, environ, start_response, url_map, match, request_id, inst, request_type): """Handles a request routed a particular Instance. Args: environ: An environ dict for the request as defined in PEP-333. start_response: A function with semantics defined in PEP-333. url_map: An appinfo.URLMap instance containing the configuration for the handler that matched. match: A re.MatchObject containing the result of the matched URL pattern. request_id: A unique string id associated with the request. inst: The instance.Instance to send the request to. request_type: The type of the request. See instance.*_REQUEST module constants. Returns: An iterable over strings containing the body of the HTTP response. """ instance_id = inst.instance_id start_time = time.time() timeout_time = start_time + self._get_wait_time() try: while time.time() < timeout_time: logging.debug('Dispatching request to %s after %0.4fs pending', inst, time.time() - start_time) try: return inst.handle(environ, start_response, url_map, match, request_id, request_type) except instance.CannotAcceptRequests: pass if inst.has_quit: return self._error_response(environ, start_response, 503) with self._condition: if self._instance_running[instance_id]: should_start = False else: self._instance_running[instance_id] = True should_start = True if should_start: self._start_instance(instance_id) else: inst.wait(timeout_time) else: return self._error_response(environ, start_response, 503) finally: with self._condition: self._condition.notify()
Example #28
Source File: module.py From python-compat-runtime with Apache License 2.0 | 4 votes |
def _handle_script_request(self, environ, start_response, url_map, match, request_id, inst=None, request_type=instance.NORMAL_REQUEST): """Handles a HTTP request that has matched a script handler. Args: environ: An environ dict for the request as defined in PEP-333. start_response: A function with semantics defined in PEP-333. url_map: An appinfo.URLMap instance containing the configuration for the handler that matched. match: A re.MatchObject containing the result of the matched URL pattern. request_id: A unique string id associated with the request. inst: The instance.Instance to send the request to. If None then an appropriate instance.Instance will be chosen. request_type: The type of the request. See instance.*_REQUEST module constants. Returns: An iterable over strings containing the body of the HTTP response. """ if self._quit_event.is_set(): return self._error_response(environ, start_response, 404) if self._module_configuration.is_backend: environ['BACKEND_ID'] = self._module_configuration.module_name else: environ['BACKEND_ID'] = ( self._module_configuration.version_id.split('.', 1)[0]) if inst is not None: return self._handle_instance_request( environ, start_response, url_map, match, request_id, inst, request_type) start_time = time.time() timeout_time = start_time + self._get_wait_time() while time.time() < timeout_time: if self._quit_event.is_set(): return self._error_response(environ, start_response, 404) inst = self._choose_instance(timeout_time) if inst: try: logging.debug('Dispatching request to %s after %0.4fs pending', inst, time.time() - start_time) return inst.handle(environ, start_response, url_map, match, request_id, request_type) except instance.CannotAcceptRequests: continue finally: with self._condition: self._condition.notify() else: return self._error_response(environ, start_response, 503, _TIMEOUT_HTML)
Example #29
Source File: module.py From python-compat-runtime with Apache License 2.0 | 4 votes |
def _handle_script_request(self, environ, start_response, url_map, match, request_id, inst=None, request_type=instance.INTERACTIVE_REQUEST): """Handles a interactive request by forwarding it to the managed Instance. Args: environ: An environ dict for the request as defined in PEP-333. start_response: A function with semantics defined in PEP-333. url_map: An appinfo.URLMap instance containing the configuration for the handler that matched. match: A re.MatchObject containing the result of the matched URL pattern. request_id: A unique string id associated with the request. inst: The instance.Instance to send the request to. request_type: The type of the request. See instance.*_REQUEST module constants. This must be instance.INTERACTIVE_REQUEST. Returns: An iterable over strings containing the body of the HTTP response. """ assert inst is None assert request_type == instance.INTERACTIVE_REQUEST start_time = time.time() timeout_time = start_time + self._get_wait_time() while time.time() < timeout_time: new_instance = False with self._inst_lock: if not self._inst: self._inst = self._instance_factory.new_instance( AutoScalingModule.generate_instance_id(), expect_ready_request=False) new_instance = True inst = self._inst if new_instance: self._inst.start() try: return inst.handle(environ, start_response, url_map, match, request_id, request_type) except instance.CannotAcceptRequests: inst.wait(timeout_time) except Exception: # If the instance is restarted while handling a request then the # exception raises is unpredictable. if inst != self._inst: start_response('503 Service Unavailable', []) return ['Instance was restarted while executing command'] logging.exception('Unexpected exception handling command: %r', environ) raise else: start_response('503 Service Unavailable', []) return ['The command timed-out while waiting for another one to complete']