diff options
| author | RogueAI42 <[email protected]> | 2017-06-13 20:06:38 +1000 |
|---|---|---|
| committer | RogueAI42 <[email protected]> | 2017-06-13 20:06:38 +1000 |
| commit | 2acfa34596061a9236bb6a9df1e3f3a0c01d6ff0 (patch) | |
| tree | 72954044f3dde5f9a17d12f99cd57a819f1b0f58 /ShiftOS_TheReturn/Lib/nturl2path.py | |
| parent | a2db5d39096cbf4d32412ad40168769ca63d9493 (diff) | |
| download | shiftos_thereturn-2acfa34596061a9236bb6a9df1e3f3a0c01d6ff0.tar.gz shiftos_thereturn-2acfa34596061a9236bb6a9df1e3f3a0c01d6ff0.tar.bz2 shiftos_thereturn-2acfa34596061a9236bb6a9df1e3f3a0c01d6ff0.zip | |
Python API
It uses a meta-language and a CSharpCodeProvider on startup. I will
release a tutorial on the forums soon showing how to use it.
This commit also adds an extremely basic loading screen which shows
while Desktop is getting everything ready. Which can take a while
if you have any Python mods. Thanks, IronPython.
Diffstat (limited to 'ShiftOS_TheReturn/Lib/nturl2path.py')
| -rw-r--r-- | ShiftOS_TheReturn/Lib/nturl2path.py | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/ShiftOS_TheReturn/Lib/nturl2path.py b/ShiftOS_TheReturn/Lib/nturl2path.py new file mode 100644 index 0000000..9e6eb0d --- /dev/null +++ b/ShiftOS_TheReturn/Lib/nturl2path.py @@ -0,0 +1,68 @@ +"""Convert a NT pathname to a file URL and vice versa.""" + +def url2pathname(url): + """OS-specific conversion from a relative URL of the 'file' scheme + to a file system path; not recommended for general use.""" + # e.g. + # ///C|/foo/bar/spam.foo + # and + # ///C:/foo/bar/spam.foo + # become + # C:\foo\bar\spam.foo + import string, urllib + # Windows itself uses ":" even in URLs. + url = url.replace(':', '|') + if not '|' in url: + # No drive specifier, just convert slashes + if url[:4] == '////': + # path is something like ////host/path/on/remote/host + # convert this to \\host\path\on\remote\host + # (notice halving of slashes at the start of the path) + url = url[2:] + components = url.split('/') + # make sure not to convert quoted slashes :-) + return urllib.unquote('\\'.join(components)) + comp = url.split('|') + if len(comp) != 2 or comp[0][-1] not in string.ascii_letters: + error = 'Bad URL: ' + url + raise IOError, error + drive = comp[0][-1].upper() + path = drive + ':' + components = comp[1].split('/') + for comp in components: + if comp: + path = path + '\\' + urllib.unquote(comp) + # Issue #11474: url like '/C|/' should convert into 'C:\\' + if path.endswith(':') and url.endswith('/'): + path += '\\' + return path + +def pathname2url(p): + """OS-specific conversion from a file system path to a relative URL + of the 'file' scheme; not recommended for general use.""" + # e.g. + # C:\foo\bar\spam.foo + # becomes + # ///C:/foo/bar/spam.foo + import urllib + if not ':' in p: + # No drive specifier, just convert slashes and quote the name + if p[:2] == '\\\\': + # path is something like \\host\path\on\remote\host + # convert this to ////host/path/on/remote/host + # (notice doubling of slashes at the start of the path) + p = '\\\\' + p + components = p.split('\\') + return urllib.quote('/'.join(components)) + comp = p.split(':') + if len(comp) != 2 or len(comp[0]) > 1: + error = 'Bad path: ' + p + raise IOError, error + + drive = urllib.quote(comp[0].upper()) + components = comp[1].split('\\') + path = '///' + drive + ':' + for comp in components: + if comp: + path = path + '/' + urllib.quote(comp) + return path |
