pygobject r764 - in trunk: . gio tests
- From: johan svn gnome org
- To: svn-commits-list gnome org
- Subject: pygobject r764 - in trunk: . gio tests
- Date: Mon, 7 Apr 2008 13:37:27 +0100 (BST)
Author: johan
Date: Mon Apr 7 13:37:27 2008
New Revision: 764
URL: http://svn.gnome.org/viewvc/pygobject?rev=764&view=rev
Log:
2008-04-07 Johan Dahlin <johan gnome org>
* gio/__init__.py:
* gio/gfile.override:
* gio/gio-types.defs:
* gio/gio.override:
* tests/test_gio.py:
Make gio.File() (calling on an interface) a factory for creating
files. Add tests and a docstring.
Modified:
trunk/ChangeLog
trunk/gio/__init__.py
trunk/gio/gfile.override
trunk/gio/gio-types.defs
trunk/gio/gio.override
trunk/tests/test_gio.py
Modified: trunk/gio/__init__.py
==============================================================================
--- trunk/gio/__init__.py (original)
+++ trunk/gio/__init__.py Mon Apr 7 13:37:27 2008
@@ -27,11 +27,17 @@
except ImportError:
pass
+from gobject import GObjectMeta
from _gio import *
-
+from _gio import _file_init, _install_file_meta
try:
import unix
unix # pyflakes
except ImportError:
unix = None
del _gio
+
+class GFileMeta(GObjectMeta):
+ __call__ = _file_init
+
+_install_file_meta(GFileMeta)
Modified: trunk/gio/gfile.override
==============================================================================
--- trunk/gio/gfile.override (original)
+++ trunk/gio/gfile.override Mon Apr 7 13:37:27 2008
@@ -20,6 +20,70 @@
* USA
*/
%%
+define _install_file_meta
+static PyObject *
+_wrap__install_file_meta(PyObject *self, PyObject *args)
+{
+ PyObject *metaclass;
+
+ if (!PyArg_ParseTuple(args, "O", &metaclass))
+ return NULL;
+
+ Py_INCREF(metaclass);
+ PyGFile_Type.ob_type = (PyTypeObject*)metaclass;
+
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+%%
+define _file_init kwargs
+static PyObject*
+_wrap__file_init(PyGObject *self, PyObject *args, PyObject *kwargs)
+{
+ GFile *file;
+ Py_ssize_t n_args, n_kwargs;
+ char *arg;
+
+ n_args = PyTuple_Size(args);
+ n_kwargs = kwargs != NULL ? PyDict_Size(kwargs) : 0;
+ if (n_args == 1 && n_kwargs == 0) {
+ if (!PyArg_ParseTuple(args, "s:GFile", &arg))
+ return NULL;
+ file = g_file_new_for_commandline_arg(arg);
+ } else if (n_args == 0 && n_kwargs == 1) {
+ if (PyDict_GetItemString(kwargs, "path")) {
+ char *kwlist[] = { "uri", NULL };
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs,
+ "s:GFile", kwlist, &arg))
+ return NULL;
+ file = g_file_new_for_path(arg);
+ } else if (PyDict_GetItemString(kwargs, "uri")) {
+ char *kwlist[] = { "path", NULL };
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs,
+ "s:GFile", kwlist, &arg))
+ return NULL;
+ file = g_file_new_for_uri(arg);
+ } else {
+ PyErr_Format(PyExc_TypeError,
+ "GFile() got an unexpected keyword argument '%s'",
+ "unknown");
+ return NULL;
+ }
+ } else {
+ PyErr_Format(PyExc_TypeError,
+ "GFile() takes exactly 1 argument (%d given)",
+ n_args + n_kwargs);
+ return NULL;
+ }
+
+ if (!file) {
+ PyErr_SetString(PyExc_RuntimeError,
+ "could not create GFile object");
+ return NULL;
+ }
+ return pygobject_new((GObject *)file);
+}
+%%
override g_file_read_async kwargs
static PyObject *
_wrap_g_file_read_async(PyGObject *self, PyObject *args, PyObject *kwargs)
@@ -73,3 +137,29 @@
Py_INCREF(Py_None);
return Py_None;
}
+/* GFile.append_to_async */
+/* GFile.create_async */
+/* GFile.enumerate_children_async */
+/* GFile.eject_mountable */
+/* GFile.find_enclosing_mount_async */
+/* GFile.load_contents_async */
+/* GFile.mount_enclosing_volume */
+/* GFile.mount_mountable */
+/* GFile.query_info_async */
+/* GFile.replace_async */
+/* GFile.replace_contents_async */
+/* GFile.set_attributes_async */
+/* GFile.set_display_name_async */
+/* GFile.unmount_mountable */
+/* GFile.load_partial_contents_async: No ArgType for GFileReadMoreCallback */
+/* GFile.copy: No ArgType for GFileProgressCallback */
+/* GFile.move: No ArgType for GFileProgressCallback */
+/* GFile.query_settable_attributes: No ArgType for GFileAttributeInfoList* */
+/* GFile.query_writable_namespaces: No ArgType for GFileAttributeInfoList* */
+/* GFile.set_attribute: No ArgType for gpointer */
+/* GFile.set_attributes_finish: No ArgType for GFileInfo** */
+/* GFile.load_contents: No ArgType for char** */
+/* GFile.load_contents_finish: No ArgType for char** */
+/* GFile.load_partial_contents_finish: No ArgType for char** */
+/* GFile.replace_contents: No ArgType for char** */
+/* GFile.replace_contents_finish: No ArgType for char** */
Modified: trunk/gio/gio-types.defs
==============================================================================
--- trunk/gio/gio-types.defs (original)
+++ trunk/gio/gio-types.defs Mon Apr 7 13:37:27 2008
@@ -15,6 +15,16 @@
)
(define-interface File
+ (docstring
+"File(arg, path=None, uri=None) -> gio.File subclass\n"
+"\n"
+"If arg is specified; creates a GFile with the given argument from the\n"
+"command line. The value of arg can be either a URI, an absolute path\n"
+"or a relative path resolved relative to the current working directory.\n"
+"If path is specified, create a file from an absolute or relative path.\n"
+"If uri is specified, create a file from a URI.\n\n"
+"This operation never fails, but the returned object might not \n"
+"support any I/O operation if arg points to a malformed path.")
(in-module "gio")
(c-name "GFile")
(gtype-id "G_TYPE_FILE")
Modified: trunk/gio/gio.override
==============================================================================
--- trunk/gio/gio.override (original)
+++ trunk/gio/gio.override Mon Apr 7 13:37:27 2008
@@ -89,6 +89,9 @@
*free
g_simple_async_result_new_error
g_simple_async_report_error_in_idle
+ g_file_new_from_commandline_arg
+ g_file_new_from_path
+ g_file_new_from_uri
%%
override g_drive_get_volumes noargs
static PyObject *
Modified: trunk/tests/test_gio.py
==============================================================================
--- trunk/tests/test_gio.py (original)
+++ trunk/tests/test_gio.py Mon Apr 7 13:37:27 2008
@@ -32,6 +32,25 @@
loop = gobject.MainLoop()
loop.run()
+ def testConstructor(self):
+ for gfile in [gio.File("/"),
+ gio.File("file:///"),
+ gio.File(uri="file:///"),
+ gio.File(path="/"),
+ gio.File(u"/"),
+ gio.File(path=u"/")]:
+ self.failUnless(isinstance(gfile, gio.File))
+ self.assertEquals(gfile.get_path(), "/")
+ self.assertEquals(gfile.get_uri(), "file:///")
+
+ def testConstructorError(self):
+ self.assertRaises(TypeError, gio.File)
+ self.assertRaises(TypeError, gio.File, 1)
+ self.assertRaises(TypeError, gio.File, "foo", "bar")
+ self.assertRaises(TypeError, gio.File, foo="bar")
+ self.assertRaises(TypeError, gio.File, uri=1)
+ self.assertRaises(TypeError, gio.File, path=1)
+
class TestGFileEnumerator(unittest.TestCase):
def setUp(self):
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]