uripath (version $Id: uripath.html,v 1.11 2004/03/21 04:24:35 timbl Exp $)
index
/devel/WWW/2000/10/swap/uripath.py

Uniform Resource Identifier (URI) path manipulation,
above the access layer
 
The name of this module and the functions are somewhat
arbitrary; they hark to other parts of the python
library; e.g. uripath.join() is somewhat like os.path.join().
 
REFERENCES
 
  Uniform Resource Identifiers (URI): Generic Syntax
  http://www.ietf.org/rfc/rfc2396.txt
 
  The Web Model: Information hiding and URI syntax (Jan 98)
  http://www.w3.org/DesignIssues/Model.html
 
  URI API design [was: URI Test Suite] Dan Connolly (Sun, Aug 12 2001)
  http://lists.w3.org/Archives/Public/uri/2001Aug/0021.html

 
Modules
            
os
re
string
unittest
 
Classes
            
unittest.TestCase
Tests
 
class Tests(unittest.TestCase)
       
   Methods defined here:
testPaths(self)
testRFCCases(self)
testSplit(self)

Data and non-method functions defined here:
__doc__ = None
__module__ = 'uripath'

Methods inherited from unittest.TestCase:
_TestCase__exc_info = __exc_info(self)
Return a version of sys.exc_info() with the traceback frame
minimised; usually the top level of the traceback frame is not
needed.
__call__(self, result=None)
__init__(self, methodName='runTest')
Create an instance of the class that will use the named test
method when executed. Raises a ValueError if the instance does
not have a method with the specified name.
__repr__(self)
__str__(self)
assertEqual = failUnlessEqual(self, first, second, msg=None)
Fail if the two objects are unequal as determined by the '!='
operator.
assertEquals = failUnlessEqual(self, first, second, msg=None)
Fail if the two objects are unequal as determined by the '!='
operator.
assertNotEqual = failIfEqual(self, first, second, msg=None)
Fail if the two objects are equal as determined by the '=='
operator.
assertNotEquals = failIfEqual(self, first, second, msg=None)
Fail if the two objects are equal as determined by the '=='
operator.
assertRaises = failUnlessRaises(self, excClass, callableObj, *args, **kwargs)
Fail unless an exception of class excClass is thrown
by callableObj when invoked with arguments args and keyword
arguments kwargs. If a different type of exception is
thrown, it will not be caught, and the test case will be
deemed to have suffered an error, exactly as for an
unexpected exception.
assert_ = failUnless(self, expr, msg=None)
Fail the test unless the expression is true.
countTestCases(self)
debug(self)
Run the test without collecting errors in a TestResult
defaultTestResult(self)
fail(self, msg=None)
Fail immediately, with the given message.
failIf(self, expr, msg=None)
Fail the test if the expression is true.
failIfEqual(self, first, second, msg=None)
Fail if the two objects are equal as determined by the '=='
operator.
failUnless(self, expr, msg=None)
Fail the test unless the expression is true.
failUnlessEqual(self, first, second, msg=None)
Fail if the two objects are unequal as determined by the '!='
operator.
failUnlessRaises(self, excClass, callableObj, *args, **kwargs)
Fail unless an exception of class excClass is thrown
by callableObj when invoked with arguments args and keyword
arguments kwargs. If a different type of exception is
thrown, it will not be caught, and the test case will be
deemed to have suffered an error, exactly as for an
unexpected exception.
id(self)
run(self, result=None)
setUp(self)
Hook method for setting up the test fixture before exercising it.
shortDescription(self)
Returns a one-line description of the test, or None if no
description has been provided.
 
The default implementation of this method returns the first line of
the specified test method's docstring.
tearDown(self)
Hook method for deconstructing the test fixture after testing it.

Data and non-method functions inherited from unittest.TestCase:
failureException = <class exceptions.AssertionError>
Assertion failed.
 
Functions
            
_fixslash(str)
 Fix windowslike filename to unixlike - (#ifdef WINDOWS)
_test()
base()
The base URI for this process - the Web equiv of cwd
 
Relative or abolute unix-standard filenames parsed relative to
this yeild the URI of the file.
If we had a reliable way of getting a computer name,
we should put it in the hostname just to prevent ambiguity
join(here, there)
join an absolute URI and URI reference
(non-ascii characters are supported/doctested;
haven't checked the details of the IRI spec though)
 
here is assumed to be absolute.
there is URI reference.
 
>>> join('http://example/x/y/z', '../abc')
'http://example/x/abc'
 
Raise ValueError if there uses relative path
syntax but here has no hierarchical path.
 
>>> join('mid:foo@example', '../foo')
Traceback (most recent call last):
    raise ValueError, here
ValueError: Base <mid:foo@example> has no slash after colon - with relative '../foo'.
 
 
We grok IRIs
 
>>> len(u'Andr\xe9')
5
 
>>> join('http://example.org/', u'#Andr\xe9')
u'http://example.org/#Andr\xe9'
refTo(base, uri)
figure out a relative URI reference from base to uri
 
>>> refTo('http://example/x/y/z', 'http://example/x/abc')
'../abc'
 
>>> refTo('file:/ex/x/y', 'file:/ex/x/q/r#s')
'q/r#s'
 
>>> refTo(None, 'http://ex/x/y')
'http://ex/x/y'
 
>>> refTo('http://ex/x/y', 'http://ex/x/y')
''
 
Note the relationship between refTo and join:
join(x, refTo(x, y)) == y
which points out certain strings which cannot be URIs. e.g.
>>> x='http://ex/x/y';y='http://ex/x/q:r';join(xrefTo(x, y)) == y
0
 
So 'http://ex/x/q:r' is not a URI. Use 'http://ex/x/q%3ar' instead:
>>> x='http://ex/x/y';y='http://ex/x/q%3ar';join(xrefTo(x, y)) == y
1
 
This one checks that it uses a root-realtive one where that is
all they share.  Now uses root-relative where no path is shared.
This is a matter of taste but tends to give more resilience IMHO
-- and shorter paths
 
Note that base may be None, meaning no base.  In some situations, there
just ain't a base. Slife. In these cases, relTo returns the absolute value.
The axiom abs(,rel(b,x))=x still holds.
This saves people having to set the base to "bogus:".
 
>>> refTo('http://ex/x/y/z', 'http://ex/r')
'/r'
splitFrag(uriref)
split a URI reference between the fragment and the rest.
 
Punctuation is thrown away.
 
e.g.
 
>>> splitFrag("abc#def")
('abc', 'def')
 
>>> splitFrag("abcdef")
('abcdef', None)
splitFragP(uriref, punct=0)
split a URI reference before the fragment
 
Punctuation is kept.
 
e.g.
 
>>> splitFragP("abc#def")
('abc', '#def')
 
>>> splitFragP("abcdef")
('abcdef', '')
 
Data
             __file__ = './uripath.pyc'
__name__ = 'uripath'
__version__ = '$Id: uripath.html,v 1.11 2004/03/21 04:24:35 timbl Exp $'
commonHost = <_sre.SRE_Pattern object>