pygobject r764 - in trunk: . gio tests



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]