Skip to content

Commit 3ca427c

Browse files
committed
Move hashTableObj extension to pyextend, fix image writing for py3, and fix regex deprecation warnings
1 parent 45e5c9a commit 3ca427c

File tree

1 file changed

+51
-7
lines changed

1 file changed

+51
-7
lines changed

mapscript/python/pyextend.i

+51-7
Original file line numberDiff line numberDiff line change
@@ -34,17 +34,17 @@ def fromstring(data, mappath=None):
3434
'test'
3535
"""
3636
import re
37-
if re.search("^\s*MAP", data, re.I):
37+
if re.search(r"^\s*MAP", data, re.I):
3838
return msLoadMapFromString(data, mappath)
39-
elif re.search("^\s*LAYER", data, re.I):
39+
elif re.search(r"^\s*LAYER", data, re.I):
4040
ob = layerObj()
4141
ob.updateFromString(data)
4242
return ob
43-
elif re.search("^\s*CLASS", data, re.I):
43+
elif re.search(r"^\s*CLASS", data, re.I):
4444
ob = classObj()
4545
ob.updateFromString(data)
4646
return ob
47-
elif re.search("^\s*STYLE", data, re.I):
47+
elif re.search(r"^\s*STYLE", data, re.I):
4848
ob = styleObj()
4949
ob.updateFromString(data)
5050
return ob
@@ -358,9 +358,13 @@ def fromstring(data, mappath=None):
358358
msSetError(MS_IMGERR, "failed to get image buffer", "write()");
359359
return MS_FAILURE;
360360
}
361-
362-
noerr = PyObject_CallMethod(file, "write", "s#", imgbuffer,
363-
imgsize);
361+
#if PY_MAJOR_VERSION >= 3
362+
// see https://docs.python.org/3/c-api/arg.html
363+
noerr = PyObject_CallMethod(file, "write", "y#", imgbuffer, imgsize);
364+
#else
365+
noerr = PyObject_CallMethod(file, "write", "s#", imgbuffer, imgsize);
366+
#endif
367+
364368
free(imgbuffer);
365369
if (noerr == NULL)
366370
return MS_FAILURE;
@@ -438,3 +442,43 @@ def fromstring(data, mappath=None):
438442
}
439443

440444
}
445+
446+
447+
/******************************************************************************
448+
* Extensions to hashTableObj - add dict methods
449+
*****************************************************************************/
450+
451+
%extend hashTableObj{
452+
%pythoncode %{
453+
454+
def __getitem__(self, key):
455+
return self.get(key)
456+
457+
def __setitem__(self, key, value):
458+
return self.set(key, value)
459+
460+
def __delitem__(self, key) :
461+
return self.remove(key)
462+
463+
def __contains__(self, key):
464+
return key.lower() in [k.lower() for k in self.keys()]
465+
466+
def __len__(self):
467+
return self.numitems
468+
469+
def keys(self):
470+
471+
keys = []
472+
k = None
473+
474+
while True :
475+
k = self.nextKey(k)
476+
if k :
477+
keys.append(k)
478+
else :
479+
break
480+
481+
return keys
482+
483+
%}
484+
};

0 commit comments

Comments
 (0)