Package: python-sendfile
Severity: wishlist

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

I have made a (not very strongly tested, though) Python 3 port of
py-sendfile (I've already sent the patch upstream, too.)  I'd appreciate
a python3 version in Debian.

cheers
- -- vbi


- -- System Information:
Debian Release: squeeze/sid
  APT prefers testing
  APT policy: (700, 'testing'), (600, 'unstable'), (1, 'experimental')
Architecture: i386 (i686)

Kernel: Linux 2.6.37-rc5-686 (SMP w/2 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)

iEYEARECAAYFAk0bcIsACgkQKqpm2L3fmXpHegCfUwLF7W9AfbRn6NEgtPTV3tV6
LcoAoI7B8Newn8fRU7BuAI1uPDYnJ2OT
=RttH
-----END PGP SIGNATURE-----
diff --git a/sendfilemodule.c b/sendfilemodule.c
--- a/sendfilemodule.c
+++ b/sendfilemodule.c
@@ -286,20 +286,41 @@
     {NULL, NULL, 0, NULL}        /* Sentinel */
 };
 
+#if PY_MAJOR_VERSION >= 3
+static struct PyModuleDef SendfileModuleDef = {
+    PyModuleDef_HEAD_INIT,
+    "sendfile",
+    NULL,
+    -1,
+    SendfileMethods,
+    NULL,
+    NULL,
+    NULL,
+    NULL
+};
+#endif
+
 static void
 insint (PyObject *d, char *name, int value)
 {
-    PyObject *v = PyInt_FromLong((long) value);
+    PyObject *v = PyLong_FromLong((long) value);
     if (!v || PyDict_SetItemString(d, name, v))
         PyErr_Clear();
 
     Py_XDECREF(v);
 }
 
+#if PY_MAJOR_VERSION >= 3
+PyMODINIT_FUNC
+PyInit_sendfile(void)
+{
+    PyObject *m = PyModule_Create(&SendfileModuleDef);
+#else
 PyMODINIT_FUNC
 initsendfile(void)
 {
     PyObject *m = Py_InitModule("sendfile", SendfileMethods);
+#endif
 
     PyObject *d = PyModule_GetDict (m);
 
@@ -310,4 +331,8 @@
 #endif
     PyModule_AddStringConstant(m, "__doc__", "Direct interface to FreeBSD and Linux sendfile(2), for sending file data to a socket directly via the kernel.");
     PyModule_AddStringConstant(m, "__version__", "1.2.4");
+
+#if PY_MAJOR_VERSION >= 3
+    return m;
+#endif
 }
diff --git a/test.py b/test.py
--- a/test.py
+++ b/test.py
@@ -1,17 +1,21 @@
-import SocketServer, os, socket, sendfile
+try:
+    from socketserver import BaseRequestHandler, ThreadingTCPServer
+except ImportError:
+    from SocketServer import BaseRequestHandler, ThreadingTCPServer
+import os, socket, sendfile
 datafile = open('sendfilemodule.c', 'rb')
 datafileblocksize = os.fstat(datafile.fileno()).st_blksize
-print datafileblocksize
-class handler(SocketServer.BaseRequestHandler):
+print(datafileblocksize)
+class handler(BaseRequestHandler):
 	def handle (self):
 		if sendfile.has_sf_hdtr:
 			#print sendfile.sendfile(self.request.fileno(), datafile.fileno(), 0, 0, (["HTTP/1.1 200 OK\r\n", "Content-Type: text/html\r\n", "Connection: close\r\n\r\n"], 'test'))
-			print sendfile.sendfile(self.request.fileno(), datafile.fileno(), 0, 0, ["HTTP/1.1 200 OK\r\n", "Content-Type: text/html\r\n", "Connection: close\r\n\r\n"])
+			print(sendfile.sendfile(self.request.fileno(), datafile.fileno(), 0, 0, ["HTTP/1.1 200 OK\r\n", "Content-Type: text/html\r\n", "Connection: close\r\n\r\n"]))
 			#print sendfile.sendfile(self.request.fileno(), datafile.fileno(), 0, 0, "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nConnection: close\r\n\r\n", 'test')
 		else:
-			print sendfile.sendfile(self.request.fileno(), datafile.fileno(), 0, 0)
+			print(sendfile.sendfile(self.request.fileno(), datafile.fileno(), 0, 0))
 		self.request.close()
-SocketServer.ThreadingTCPServer.request_queue_size = socket.SOMAXCONN
-SocketServer.ThreadingTCPServer.allow_reuse_address = True
-server = SocketServer.ThreadingTCPServer (('', 8079), handler)
+ThreadingTCPServer.request_queue_size = socket.SOMAXCONN
+ThreadingTCPServer.allow_reuse_address = True
+server = ThreadingTCPServer (('', 8079), handler)
 server.serve_forever()

Reply via email to