code: def canonicalize(url, surt_ordered=True):
      
      try:
          key = surt.surt(url)
      except Exception as e:  #pragma: no cover
          # doesn't happen with surt from 0.3b
          # urn is already canonical, so just use as-is
          if url.startswith('urn:'):
              return url
  
          raise UrlCanonicalizeException('Invalid Url: ' + url)
  
      # if not surt, unsurt the surt to get canonicalized non-surt url
      if not surt_ordered:
          key = unsurt(key)
  
      return key
docs: Canonicalize url and convert to surt
      If not in surt ordered mode, convert back to url form
      as surt conversion is currently part of canonicalization
  
      >>> canonicalize('http://example.com/path/file.html', surt_ordered=True)
      'com,example)/path/file.html'
  
      >>> canonicalize('http://example.com/path/file.html', surt_ordered=False)
      'example.com/path/file.html'
  
      >>> canonicalize('urn:some:id')
      'urn:some:id'