summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--portato/__init__.py2
-rw-r--r--portato/ipc.pyx24
-rw-r--r--test.py2
3 files changed, 15 insertions, 13 deletions
diff --git a/portato/__init__.py b/portato/__init__.py
index 74145e7..7363429 100644
--- a/portato/__init__.py
+++ b/portato/__init__.py
@@ -91,7 +91,7 @@ def start():
from . import ipc
- mq = ipc.MessageQueue(None, ipc.MessageQueue.CREAT | ipc.MessageQueue.EXCL)
+ mq = ipc.MessageQueue(None, create = True, exclusive = True)
# start listener
lt = threading.Thread(target=get_listener().set_recv, args = (mq,))
diff --git a/portato/ipc.pyx b/portato/ipc.pyx
index 13743bc..f3fb4af 100644
--- a/portato/ipc.pyx
+++ b/portato/ipc.pyx
@@ -27,13 +27,10 @@ cdef class MessageQueue (object):
A simple interface to the SysV message queues.
"""
- CREAT = IPC_CREAT
- EXCL = IPC_EXCL
-
cdef int msgid
cdef readonly key_t key
- def __init__ (self, key = None, int flags = 0):
+ def __init__ (self, key = None, create = False, exclusive = False):
"""
Create a new MessageQueue instance. Depending on the passed in flags,
different behavior occurs. See man msgget for the details.
@@ -41,17 +38,20 @@ cdef class MessageQueue (object):
If key is None, a random key is created.
"""
- if (flags & IPC_EXCL) and not (flags & IPC_CREAT):
- raise ValueError("EXCL must be combined with CREAT.")
+ cdef int flags = 0600 # start mode
- if key is None and not (flags & IPC_EXCL):
- raise ValueError("The key can only be None if EXCL is set.")
+ if exclusive and not create:
+ raise ValueError("'exclusive' must be combined with 'create'.")
- # make sure there is nothing ... obscure
- flags &= (IPC_CREAT | IPC_EXCL)
+ if key is None and not exclusive:
+ raise ValueError("The key can only be None if 'exclusive' is set.")
- flags |= 0600 # mode
+ if create:
+ flags |= IPC_CREAT
+ if exclusive:
+ flags |= IPC_EXCL
+
if key is None:
check = True
while check:
@@ -68,7 +68,7 @@ cdef class MessageQueue (object):
elif errno == EEXIST:
raise MessageQueueError("Queue already exists.")
elif errno == ENOENT:
- raise MessageQueueError("Queue does not exist and CREAT is not set.")
+ raise MessageQueueError("Queue does not exist and 'create' is not set.")
elif errno == ENOMEM or errno == ENOSPC:
raise MemoryError("Insufficient ressources.")
else:
diff --git a/test.py b/test.py
index 5cf8621..ba741d2 100644
--- a/test.py
+++ b/test.py
@@ -1,3 +1,5 @@
+from __future__ import with_statement
+
from portato import _sub_start
_sub_start()
ss='deletions'>-3/+3 2014-04-19platform: Allow custom platform file before installJason A. Donenfeld2-3/+5 2014-04-18reencrypt: cleaner temp file declarationJason A. Donenfeld1-4/+4 2014-04-18Remove unneeded semicolon.Jason A. Donenfeld1-14/+14 2014-04-18Check sneaky paths.Jason A. Donenfeld1-0/+15 2014-04-18Pruning: turns out rmdir does it for us with -p.Jason A. Donenfeld1-9/+3 2014-04-18Abstract remove empty directories into function.Jason A. Donenfeld1-14/+11 2014-04-18Remember to prune empty folders.Jason A. Donenfeld1-0/+8 2014-04-18init: allow deinitializationJason A. Donenfeld2-2/+18 2014-04-18bash-completion: filter dot files from resultsJason A. Donenfeld1-3/+8 2014-04-18reencrypt: remove option, do automaticallyJason A. Donenfeld5-39/+25 2014-04-18reencryption: add to completion filesJason A. Donenfeld3-1/+5 2014-04-18Specify variable gpg.Jason A. Donenfeld1-1/+1 2014-04-18style: don't escape new line on &&Jason A. Donenfeld1-2/+2 2014-04-18reencryption: remove temporary file on failureJason A. Donenfeld1-1/+1 2014-04-18reencryption: only reencrypt files when requiredJason A. Donenfeld2-16/+37 2014-04-17cp: typo as cvJason A. Donenfeld1-1/+1 2014-04-17bash: gpg_id is localJason A. Donenfeld1-0/+1 2014-04-17move/copy: always reencrypt passwords at destinationJason A. Donenfeld5-25/+56 2014-04-17makefile: allow platform files with gnu sedJason A. Donenfeld1-7/+8 2014-04-17mv: Add pass mv/rename supportJason A. Donenfeld5-3/+78 2014-04-17revelation2pass: add plain XML importJavali1-11/+15 2014-04-17platform: add cygwin supportJason A. Donenfeld2-1/+17