/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/urlutils.py

  • Committer: John Arbash Meinel
  • Date: 2006-05-10 18:39:30 UTC
  • mto: This revision was merged to the branch mainline in revision 1752.
  • Revision ID: john@arbash-meinel.com-20060510183930-1dbe0bc58695ee47
Added an re for handling scheme paths.

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
 
21
21
import os
22
22
from posixpath import split as _posix_split
 
23
import re
 
24
import sys
23
25
import urllib
24
 
import sys
25
26
 
26
27
import bzrlib.errors as errors
27
28
import bzrlib.osutils
154
155
    MIN_ABS_FILEURL_LENGTH = len('file:///C|/')
155
156
 
156
157
 
 
158
_url_scheme_re = re.compile(r'^(?P<scheme>[^:/]{2,})://(?P<path>.*)$')
 
159
 
 
160
 
 
161
def normalize_url(url):
 
162
    """Make sure that a path string is in fully normalized URL form.
 
163
    
 
164
    This handles URLs which have unicode characters, spaces, 
 
165
    special characters, etc.
 
166
 
 
167
    It has two basic modes of operation, depending on whether the
 
168
    supplied string starts with a url specifier (scheme://) or not.
 
169
    If it does not have a specifier it is considered a local path,
 
170
    and will be converted into a file:/// url. Non-ascii characters
 
171
    will be encoded using utf-8.
 
172
    If it does have a url specifier, it will be treated as a "hybrid"
 
173
    URL. Basically, a URL that should have URL special characters already
 
174
    escaped (like +?&# etc), but may have unicode characters, etc
 
175
    which would not be valid in a real URL.
 
176
 
 
177
    :param url: Either a hybrid URL or a local path
 
178
    :return: A normalized URL which only includes 7-bit ASCII characters.
 
179
    """
 
180
    if '://' not in url:
 
181
        return local_path_from_url(url)
 
182
 
 
183
 
 
184
 
157
185
def split(url, exclude_trailing_slash=True):
158
186
    """Split a URL into its parent directory and a child directory.
159
187
 
264
292
_no_decode_ords = [ord(c) for c in _no_decode_chars]
265
293
_no_decode_hex = (['%02x' % o for o in _no_decode_ords] 
266
294
                + ['%02X' % o for o in _no_decode_ords])
267
 
_hex_display_map = urllib._hextochr.copy()
 
295
_hex_display_map = dict(([('%02x' % o, chr(o)) for o in range(256)]
 
296
                    + [('%02X' % o, chr(o)) for o in range(256)]))
268
297
_hex_display_map.update((hex,'%'+hex) for hex in _no_decode_hex)
269
298
#These entries get mapped to themselves
270
299