Opened 13 years ago
Closed 13 years ago
#1485 closed defect (fixed)
Cannot save workspace from wxGUI
Reported by: | venkat | Owned by: | martinl |
---|---|---|---|
Priority: | blocker | Milestone: | 6.4.2 |
Component: | wxGUI | Version: | 6.4.2 RCs |
Keywords: | wingrass, cp932 | Cc: | grass-dev@… |
CPU: | Unspecified | Platform: | MSWindows 7 |
Description
Cannot save workspace from wxGUI
Please see the error in attached PDF
Attachments (1)
Change History (25)
by , 13 years ago
Attachment: | save_workspace.pdf added |
---|
comment:1 by , 13 years ago
Component: | Default → wxGUI |
---|---|
Summary: | GRASS6.4.2RC1 WX-Python GUI, menu does not work at all → Cannot save workspace from wxGUI |
comment:3 by , 13 years ago
Keywords: | wingrass added |
---|
comment:4 by , 13 years ago
Version: | svn-trunk → 6.4.2 RCs |
---|
comment:5 by , 13 years ago
I see same problem with path mismatch (see #1380)
C:\Program Files...
versus
c:\osgeo4w
How did you installed winGRASS?
comment:6 by , 13 years ago
Venka, the only way I see is to clean up the machine and remove both OSGeo4W and winGRASS standalone to avoid the current mixture.
comment:7 by , 13 years ago
Tried on brand new computer. The issue is about unicode encoding. GRASS-6.4.2RC1, 6.4.1 do no seem to support Unicode. As I mentioned in http://trac.osgeo.org/grass/ticket/1380#comment:15
On Window-7 System local needs to be changed from Contro Panel --> Region and Language --> Change system locale. On Japanese Windows-7 the system locale is set to "Japanese". (Japanese/Chinese/Korean? are use double byte encoding, unlike English, German etc.). d.rast wxGUI works if I set the "system locale" to English or German (I tried with German too).
So something needs to be done about getting wxGUI working when System Locale is set to Japanese (and/or Chinese, Korean).
Venka
comment:8 by , 13 years ago
So something needs to be done about getting wxGUI working when System Locale is set to Japanese
It's unclear whether GRASS can be made to work reliably with the Shift-JIS (CP932) encoding, due to the use of 0x5C (backslash/yen) as the second byte of a double-byte sequence. On Windows, GRASS always treats 0x5C as a directory separator. Similar use of 0x7C (vertical bar) may also cause problems, as it's commonly used as a field separator.
So far, we've yet to find a solution which doesn't involve far more work than is feasible.
follow-up: 11 comment:9 by , 13 years ago
This #1485 probably same cause as #1380. I'd like to add a fixed code for 6.4.1. This has done by another GRASS User, who fixed this also in 6.4.0. Note that this fix, as it is, does not fit for 6.4.2, because base source code has changed a lot.
There are comment-out in etc/wxpython/gui_modules/menuform.py, line 2016 - 2019
2011 def ParseInterface(self, cmd, parser = processTask):
2012 """!Parse interface
2013
2014 @param cmd command to be parsed (given as list)
2015 """
2016 # enc = locale.getdefaultlocale()[1]
2017 # if enc and enc.lower() not in ("utf8", "utf-8"):
2018 # tree = etree.fromstring(getInterfaceDescription(cmd[0]).decode(enc).encode("utf-8"))
2019 # else:
2020 tree = etree.fromstring(getInterfaceDescription(cmd[0]))
2021
2022 return processTask(tree).GetTask()
Enabling these line by removing comment-out, will fix this problem in 6.4.1.
Also, there need to be two more fix.
in menuform.py, near line 2132
2132 def GetCommandInputMapParamKey(self, cmd):
2133 """!Get parameter key for input raster/vector map
2134
2135 @param cmd module name
2136
2137 @return parameter key
2138 @return None on failure
2139 """
2140 # parse the interface decription
2141 if not self.grass_task:
2142 tree = etree.fromstring(getInterfaceDescription(cmd))
2143 self.grass_task = processTask(tree).GetTask()
2144
2145 for p in self.grass_task.params:
2146 if p.get('name', ) in ('input', 'map'):
2147 age = p.get('age', )
2148 prompt = p.get('prompt', )
2149 element = p.get('element', )
2150 if age == 'old' and
2151 element in ('cell', 'grid3', 'vector') and
2152 prompt in ('raster', '3d-raster', 'vector'):
2153 return p.get('name', None)
2154 return None
change as follows
Before:
2141 if not self.grass_task:
2142 tree = etree.fromstring(getInterfaceDescription(cmd))
2143 self.grass_task = processTask(tree).GetTask()
After Fix:
2141 if not self.grass_task:
2142 enc = locale.getdefaultlocale()[1]
2143 if enc and enc.lower() not in ("utf8″, “utf-8″):
2144 p = re.compile(enc, re.IGNORECASE)
2145 tree = etree.fromstring(p.sub(’utf-8′, getInterfaceDescription(cmd)).decode(enc).encode("utf-8″))
2146 else:
2147 tree = etree.fromstring(getInterfaceDescription(cmd))
Also in menuform.py line 1957
1957 def getInterfaceDescription(cmd):
1958 """!Returns the XML description for the GRASS cmd.
1959
1960 The DTD must be located in $GISBASE/etc/grass-interface.dtd,
1961 otherwise the parser will not succeed.
1962
1963 @param cmd command (name of GRASS module)
1964 """
1965 try:
1966 cmdout, cmderr = grass.Popen([cmd, '--interface-description'], stdout = grass.PIPE,
1967 stderr = grass.PIPE).communicate()
1968 except OSError, e:
1969 raise gcmd.GException, _("Unable to fetch interface description for command '%s'. "
1970 "Details: %s") % (cmd, e.value)
1971 if cmderr and cmderr[:7] != 'WARNING':
1972 raise gcmd.GException, _("Unable to fetch interface description for command '%s'. "
1973 "Details: %s") % (cmd, cmderr)
1974
1975 return cmdout.replace('grass-interface.dtd', os.path.join(globalvar.ETCDIR, 'grass-interface.dtd'))
Before:
1971 if cmderr and cmderr[:7] != 'WARNING':
After Fix:
1971 if cmderr and cmderr[12:19] != 'WARNING':
This has to be done because this condition see if error string start with "WARNING" or not, but as a matter of fact, errot string was "GRASSINFO_WARNING".
There three fixes above solve issue in 6.4.2 (in multi-byte environmrnt).
comment:10 by , 13 years ago
I'd like to also add this fix in 6.4.0. Base source code is 6.4.0 RC6
I think porting fixes above and below can solve this ticket issue and #1380. GRASS used to handle double byte characters before..
Before:
def GetCommandInputMapParamKey(self, cmd):
"""Get parameter key for input raster/vector map
@param cmd module name
@return parameter key
@return None on failure
"""
# parse the interface decription
if not self.grass_task:
self.grass_task = grassTask()
handler = processTask(self.grass_task)
xml.sax.parseString(getInterfaceDescription(cmd), handler)
After Fix:
def GetCommandInputMapParamKey(self, cmd):
"""Get parameter key for input raster/vector map
@param cmd module name
@return parameter key
@return None on failure
"""
# parse the interface decription
if not self.grass_task:
self.grass_task = grassTask()
handler = processTask(self.grass_task)
# xml.sax.parseString(getInterfaceDescription(cmd), handler)
enc = locale.getdefaultlocale()[1]
if enc and enc.lower() not in ("utf8", "utf-8"):
xml.sax.parseString(getInterfaceDescription(cmd).decode(enc).split('\n',1)[1].replace(, '<?xml version="1.0" encoding="utf-8"?>\n', 1).encode("utf-8"),
handler)
else:
xml.sax.parseString(getInterfaceDescription(cmd),
handler)
follow-up: 12 comment:11 by , 13 years ago
Replying to naokiueda:
This #1485 probably same cause as #1380. I'd like to add a fixed code for 6.4.1. This has done by another GRASS User, who fixed this also in 6.4.0. Note that this fix, as it is, does not fit for 6.4.2, because base source code has changed a lot.
Done for devbr6
(GRASS 6.5) in r49064. Could you try the next daily build from http://wingrass.fsv.cvut.cz/grass65/ ?
comment:12 by , 13 years ago
Replying to martinl:
Done for
devbr6
(GRASS 6.5) in r49064. Could you try the next daily build from http://wingrass.fsv.cvut.cz/grass65/ ?
To track changes - small typo in r49068
comment:13 by , 13 years ago
Cc: | added |
---|---|
Owner: | changed from | to
Status: | new → assigned |
comment:14 by , 13 years ago
Keywords: | cp932 added |
---|
follow-up: 16 comment:15 by , 13 years ago
I tested with r49086 that is just build. Problem still remains, and looks same as before.
I got an following error in GRASS console, when I click d.rast icon.
Traceback (most recent call last):
File "C:/Program Files/GRASS
6.5.SVN/etc/wxpython/wxgui.py", line 1376, in OnAddRaster
self.curr_page.maptree.AddLayer('raster')
File "c:/osgeo4w/usr/src/grass6_devel/dist.i686-pc-
mingw32/etc/wxpython/gui_modules/layertree.py", line 852, in AddLayer
File "c:/osgeo4w/usr/src/grass6_devel/dist.i686-pc-
mingw32/etc/wxpython/gui_modules/layertree.py", line 917, in PropertiesDialog
File "C:\Program Files\GRASS
6.5.SVN\etc\wxpython\gui_modules\menuform.py", line 1818, in ParseCommand
blackList = _blackList)
File "C:\Program Files\GRASS
6.5.SVN\etc\python\grass\script\task.py", line 453, in parse_interface
tree = etree.fromstring(get_interface_description(name).deco de(enc).encode("utf-8"))
File "C:\Program Files\GRASS
6.5.SVN\Python25\lib\xml\etree\ElementTree.py", line 963, in XML
parser.feed(text)
File "C:\Program Files\GRASS
6.5.SVN\Python25\lib\xml\etree\ElementTree.py", line 1245, in feed
self._parser.Parse(data, 0) xml.parsers.expat . ExpatError : unknown encoding: line 1, column 30 Traceback (most recent call last):
File "c:/osgeo4w/usr/src/grass6_devel/dist.i686-pc-
mingw32/etc/wxpython/gui_modules/layertree.py", line 992, in OnActivateLayer
File "c:/osgeo4w/usr/src/grass6_devel/dist.i686-pc-
mingw32/etc/wxpython/gui_modules/layertree.py", line 917, in PropertiesDialog
File "C:\Program Files\GRASS
6.5.SVN\etc\wxpython\gui_modules\menuform.py", line 1818, in ParseCommand
blackList = _blackList)
File "C:\Program Files\GRASS
6.5.SVN\etc\python\grass\script\task.py", line 453, in parse_interface
tree = etree.fromstring(get_interface_description(name).deco de(enc).encode("utf-8"))
File "C:\Program Files\GRASS
6.5.SVN\Python25\lib\xml\etree\ElementTree.py", line 963, in XML
parser.feed(text)
File "C:\Program Files\GRASS
6.5.SVN\Python25\lib\xml\etree\ElementTree.py", line 1245, in feed
self._parser.Parse(data, 0) xml.parsers.expat . ExpatError : unknown encoding: line 1, column 30
follow-up: 17 comment:16 by , 13 years ago
Replying to naokiueda:
I tested with r49086 that is just build. Problem still remains, and looks same as before.
I have applied changes that you have suggested. I thought that it could help.
I got an following error in GRASS console, when I click d.rast icon.
Please next time use pre-formated text http://trac.osgeo.org/grass/wiki/WikiFormatting (-> Preformatted Text
). Otherwise it's hard to read it.
comment:17 by , 13 years ago
follow-up: 20 comment:18 by , 13 years ago
I tested with r49105 that should contain r49091.
I still got "ExpatError" "unknown encoding: line 1, column 30".
When I download r49105, the Python scripts (menuform.py, task.py) does not contain changes of 49064, 49086 , or 49091. So I ported chages by referencing diffs, and test it.
Result is still same.
follow-up: 21 comment:19 by , 13 years ago
I tested with winGRASS r49125-1 on Windows-7 (Japanese). The multi-byte Japanese encoding issue wxGUI seems to be solved. Tested d.rast, r.in.gdal and save workspace for the wxGUI and they all seem to work.
Will these changes in winGRASS r49125-1 to support multi-byte encoding back-ported to GRASS-6.4.2? We would like to continue with testing wxGUI in winGRASS, should be wait for the GRASS-6.4.2 back port or continue testing with winGRASS-6.5.
As a final goal we would like to use GRASS-6.4.2 in Japanese environment for our training materials.
comment:20 by , 13 years ago
Replying to naokiueda:
I tested with r49105 that should contain r49091.
I still got "ExpatError" "unknown encoding: line 1, column 30".
When I download r49105, the Python scripts (menuform.py, task.py) does not contain changes of 49064, 49086 , or 49091. So I ported chages by referencing diffs, and test it.
Result is still same.
Do you mean GRASS 6.5?
follow-up: 22 comment:21 by , 13 years ago
Replying to Venkat:
Will these changes in winGRASS r49125-1 to support multi-byte encoding back-ported to GRASS-6.4.2? We would like to continue with testing wxGUI in winGRASS, should be wait for the GRASS-6.4.2 back port or continue testing with winGRASS-6.5.
done in r49141. Try out the next daily build from http://wingrass.fsv.cvut.cz/grass64/ or grass64-dev
package from OSGeo4W.
comment:22 by , 13 years ago
Replying to martinl:
done in r49141. Try out the next daily build from http://wingrass.fsv.cvut.cz/grass64/ or
grass64-dev
package from OSGeo4W.
Please could you confirm that it's also fixed for G64? Thanks. Martin
follow-up: 24 comment:23 by , 13 years ago
Tested with WinGRASS-6.4.SVN-r49145-1. d,rast, r,in.gdal, save workspace in wxGUI seem to be working fine. Will do further test wxGUI.
Sorry for the delay in reporting the test results. Many thanks for unstinting support from Martin L and Markus N.
comment:24 by , 13 years ago
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
Replying to venkat:
Tested with WinGRASS-6.4.SVN-r49145-1. d,rast, r,in.gdal, save workspace in wxGUI seem to be working fine. Will do further test wxGUI.
Good news, I am closing the tickets. Feel free to re-open if needed.
Sorry for the delay in reporting the test results. Many thanks for unstinting support from Martin L and Markus N.
You are welcome:-) Martin
screen-shot