class_docstr: A rule-based router that implements ``reverse_url`` method.
  
  Each rule added to this router may have a ``name`` attribute that can be
  used to reconstruct an original uri. The actual reconstruction takes place
  in a rule's matcher (see `Matcher.reverse`).
class_docstr_tok: ["A","rule-based","router","that","implements","``","reverse_url","``","method",".","Each","rule","added","to","this","router","may","have","a","``","name","``","attribute","that","can","be","used","to","reconstruct","an","original","uri",".","The","actual","reconstruction","takes","place","in","a","rule","'s","matcher","(","see","`","Matcher.reverse","`",")","."]
code: def process_rule(self, rule):
      rule = super(ReversibleRuleRouter, self).process_rule(rule)
  
      if rule.name:
          if rule.name in self.named_rules:
              app_log.warning(
                  "Multiple handlers named %s; replacing previous value",
                  rule.name,
              )
          self.named_rules[rule.name] = rule
  
      return rule
  
imports: from __future__ import absolute_import, division, print_function
  import re
  from functools import partial
  from tornado import httputil
  from tornado.httpserver import _CallableAdapter
  from tornado.escape import url_escape, url_unescape, utf8
  from tornado.log import app_log
  from tornado.util import basestring_type, import_object, re_unescape, unicode_type
label_desc: Use image node_id 2 for calling the ReversibleRuleRouter obj's underlying member method code with example usage: obj.process_rule(rule) and returns: rule