pidl/python: Allow passing in UTF8 string objects as well as unicode
authorJelmer Vernooij <jelmer@samba.org>
Tue, 21 Sep 2010 05:18:45 +0000 (22:18 -0700)
committerAndrew Tridgell <tridge@samba.org>
Tue, 21 Sep 2010 06:17:41 +0000 (23:17 -0700)
objects for IDL strings.

Signed-off-by: Andrew Tridgell <tridge@samba.org>
pidl/lib/Parse/Pidl/Samba4/Python.pm

index d4db4c08344326d15da249938719eaa4aebfc962..ed43ba4d3e58183bb43858b43c45d0d659ea6e75 100644 (file)
@@ -987,9 +987,21 @@ sub ConvertObjectFromPythonLevel($$$$$$$$)
                }
 
                if (is_charset_array($e, $l)) {
-                       $self->pidl("PY_CHECK_TYPE(&PyUnicode_Type, $py_var, $fail);");
+                       $self->pidl("if (PyUnicode_Check($py_var)) {");
+                       $self->indent;
                        # FIXME: Use Unix charset setting rather than utf-8
                        $self->pidl($var_name . " = PyString_AsString(PyUnicode_AsEncodedString($py_var, \"utf-8\", \"ignore\"));");
+                       $self->deindent;
+                       $self->pidl("} else if (PyString_Check($py_var)) {");
+                       $self->indent;
+                       $self->pidl($var_name . " = PyString_AsString($py_var);");
+                       $self->deindent;
+                       $self->pidl("} else {");
+                       $self->indent;
+                       $self->pidl("PyErr_Format(PyExc_TypeError, \"Expected string or unicode object, got %s\", Py_TYPE($py_var)->tp_name);");
+                       $self->pidl("$fail;");
+                       $self->deindent;
+                       $self->pidl("}");
                } else {
                        my $counter = "$e->{NAME}_cntr_$l->{LEVEL_INDEX}";
                        $self->pidl("PY_CHECK_TYPE(&PyList_Type, $py_var, $fail);");