Mercurial > dive4elements > river
diff flys-backend/contrib/shpimporter/utils.py @ 4874:b1d7e600b43b
(importer) Add utility function to convert paths to utf-8
- Add utility function to generically copy fields
author | Andre Heinecke <aheinecke@intevation.de> |
---|---|
date | Fri, 25 Jan 2013 10:41:09 +0100 |
parents | 59ca5dab2782 |
children | e9880b224c2f |
line wrap: on
line diff
--- a/flys-backend/contrib/shpimporter/utils.py Fri Jan 25 10:34:47 2013 +0100 +++ b/flys-backend/contrib/shpimporter/utils.py Fri Jan 25 10:41:09 2013 +0100 @@ -1,4 +1,5 @@ import os +import sys from shpimporter import DEBUG, INFO, ERROR SHP='.shp' @@ -19,3 +20,31 @@ return shapes +def getUTF8Path(path): + """ + Tries to convert path to utf-8 by first checking the filesystemencoding + and trying the default windows encoding afterwards. + Returns a valid UTF-8 encoded unicode object or throws a UnicodeDecodeError + """ + try: + return unicode.encode(unicode(path, sys.getfilesystemencoding()), "UTF-8") + except UnicodeDecodeError: + # Probably Windows iso-8859-x names so lets try again + return unicode.encode(unicode(path, "iso-8859-15"), "UTF-8") + +def copyFields(src, target, mapping): + """ + Checks the mapping dictonary for key value pairs to + copy from the source to the destination feature. + + The Key is the attribute of the source feature to be copied + into the target attribute named by the dict's value. + """ + for key, value in mapping.items(): + if src.GetFieldIndex(key) == -1: + continue + if src.IsFieldSet(src.GetFieldIndex(key)): + if src.GetFieldType(key) == 2: + target.SetField(value, src.GetFieldAsDouble(key)) + else: + target.SetField(value, src.GetField(key))