root/tools.py

Revision 294:17a4cdcc0619, 1.9 kB (checked in by Stefan Schwarzer <sschwarzer@sschwarzer.net>, 1 year ago)
Changed implementation to generate an anchor from an URL path and put
it into module `tools.py`.
Line 
1 # Copyright (C) 2007, Stefan Schwarzer
2 #
3 # Permission is hereby granted, free of charge, to any person
4 # obtaining a copy of this software and associated documentation files
5 # (the "Software"), to deal in the Software without restriction,
6 # including without limitation the rights to use, copy, modify, merge,
7 # publish, distribute, sublicense, and/or sell copies of the Software,
8 # and to permit persons to whom the Software is furnished to do so,
9 # subject to the following conditions:
10 #
11 # The above copyright notice and this permission notice shall be
12 # included in all copies or substantial portions of the Software.
13 #
14 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16 # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17 # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
18 # BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
19 # ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 # SOFTWARE.
22
23 import md5
24 import os
25 import re
26
27
28 def normalize_path(path):
29     """
30     Return the file system path `path` in "normalized" form:
31     - change each sequence of path separators to a single path separator
32     - change path by evaluating "." and ".." occurences
33     - make path absolute
34     """
35     # funny workaround for backslash separator :-/
36     if os.sep == "\\":
37         replacement = "\\\\"
38     else:
39         replacement = os.sep
40     path = re.sub("(?:%s)+" % re.escape(os.sep), replacement, path)
41     path = os.path.normcase(os.path.normpath(path))
42     return os.path.abspath(path)
43
44 def url_to_anchor(url):
45     """
46     Return a string, specific for the URL `url`, which is usable as an
47     anchor in HTML links.
48     """
49     # this implementation has a _very_ small chance to reuse the same
50     #  anchor for different URLs
51     return md5.new(url).hexdigest()[:10]
52
Note: See TracBrowser for help on using the browser.