fix pickling for styles since they have state and no initial args
This commit is contained in:
parent
424980d92b
commit
6825541057
1 changed files with 26 additions and 4 deletions
|
@ -28,23 +28,45 @@
|
||||||
|
|
||||||
using mapnik::feature_type_style;
|
using mapnik::feature_type_style;
|
||||||
using mapnik::rules;
|
using mapnik::rules;
|
||||||
|
using mapnik::rule_type;
|
||||||
|
|
||||||
struct style_pickle_suite : boost::python::pickle_suite
|
struct style_pickle_suite : boost::python::pickle_suite
|
||||||
{
|
{
|
||||||
static boost::python::tuple
|
static boost::python::tuple
|
||||||
getinitargs(const feature_type_style& s)
|
getstate(const feature_type_style& s)
|
||||||
{
|
{
|
||||||
boost::python::list r;
|
boost::python::list rule_list;
|
||||||
|
|
||||||
rules::const_iterator it = s.get_rules().begin();
|
rules::const_iterator it = s.get_rules().begin();
|
||||||
rules::const_iterator end = s.get_rules().end();
|
rules::const_iterator end = s.get_rules().end();
|
||||||
for (; it != end; ++it)
|
for (; it != end; ++it)
|
||||||
{
|
{
|
||||||
r.append( *it );
|
rule_list.append( *it );
|
||||||
}
|
}
|
||||||
|
|
||||||
return boost::python::make_tuple(r);
|
return boost::python::make_tuple(rule_list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
setstate (feature_type_style& s, boost::python::tuple state)
|
||||||
|
{
|
||||||
|
using namespace boost::python;
|
||||||
|
if (len(state) != 1)
|
||||||
|
{
|
||||||
|
PyErr_SetObject(PyExc_ValueError,
|
||||||
|
("expected 1-item tuple in call to __setstate__; got %s"
|
||||||
|
% state).ptr()
|
||||||
|
);
|
||||||
|
throw_error_already_set();
|
||||||
|
}
|
||||||
|
|
||||||
|
boost::python::list rules = extract<boost::python::list>(state[0]);
|
||||||
|
for (int i=0; i<len(rules); ++i)
|
||||||
|
{
|
||||||
|
s.add_rule(extract<rule_type>(rules[i]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void export_style()
|
void export_style()
|
||||||
|
|
Loading…
Reference in a new issue