Mercurial > p > roundup > code
annotate roundup/backends/portalocker.py @ 5296:b48e2fe4a7bd
Make tracker user native (postgres) test indexer. This is apparently
how things are expected to be set up on the server. Leaving
it blank pulls in the xapian indexer which they don't want.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Thu, 28 Sep 2017 19:22:21 -0400 |
| parents | a76fbb9f5535 |
| children | 64b05e24dbd8 |
| rev | line source |
|---|---|
|
4686
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
1 #!/usr/bin/env python |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
2 # |
|
690
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3 # portalocker.py - Cross-platform (posix/nt) API for flock-style file locking. |
|
4686
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
4 # |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
5 # http://code.activestate.com/recipes/65203-portalocker-cross-platform-posixnt-api-for-flock-s/ |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
6 # |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
7 """ |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
8 Cross-platform (posix/nt) API for flock-style file locking. |
|
690
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
9 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1755
diff
changeset
|
10 Synopsis:: |
|
690
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
11 |
|
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
12 import portalocker |
|
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
13 file = open("somefile", "r+") |
|
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
14 portalocker.lock(file, portalocker.LOCK_EX) |
|
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
15 file.seek(12) |
|
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
16 file.write("foo") |
|
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
17 file.close() |
|
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
18 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1755
diff
changeset
|
19 If you know what you're doing, you may choose to:: |
|
690
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
20 |
|
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
21 portalocker.unlock(file) |
|
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
22 |
|
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
23 before closing the file, but why? |
|
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
24 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1755
diff
changeset
|
25 Methods:: |
|
690
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
26 |
|
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
27 lock( file, flags ) |
|
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
28 unlock( file ) |
|
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
29 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1755
diff
changeset
|
30 Constants:: |
|
690
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
31 |
|
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
32 LOCK_EX |
|
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
33 LOCK_SH |
|
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
34 LOCK_NB |
|
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
35 |
|
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
36 I learned the win32 technique for locking files from sample code |
|
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
37 provided by John Nielsen <nielsenjf@my-deja.com> in the documentation |
|
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
38 that accompanies the win32 modules. |
|
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
39 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1755
diff
changeset
|
40 :Author: Jonathan Feinberg <jdf@pobox.com> |
|
4686
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
41 |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
42 Roundup Changes |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
43 --------------- |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
44 2012-11-28 (anatoly techtonik) |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
45 - Ported to ctypes |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
46 - Dropped support for Win95, Win98 and WinME |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
47 - Added return result |
|
690
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
48 """ |
|
4686
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
49 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1755
diff
changeset
|
50 __docformat__ = 'restructuredtext' |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1755
diff
changeset
|
51 |
|
690
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
52 import os |
|
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
53 |
|
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
54 if os.name == 'nt': |
|
4680
b6b600ff61e2
win32: Replace win32file._get_osfhandle with function from msvcrt module
anatoly techtonik <techtonik@gmail.com>
parents:
4679
diff
changeset
|
55 import msvcrt |
|
5076
d27de8f08c31
Remove 'import *' statement from roundup/backends/portalocker.py
John Kristensen <john@jerrykan.com>
parents:
4686
diff
changeset
|
56 import ctypes |
|
5174
a76fbb9f5535
Fix Traceback in backends/portalocker.py (windows)
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5076
diff
changeset
|
57 from ctypes import windll |
|
4686
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
58 from ctypes.wintypes import BOOL, DWORD, HANDLE |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
59 |
|
4679
d269f5f04f7a
win32: Remove dependency on external win32con module
anatoly techtonik <techtonik@gmail.com>
parents:
4570
diff
changeset
|
60 LOCK_SH = 0 # the default |
|
d269f5f04f7a
win32: Remove dependency on external win32con module
anatoly techtonik <techtonik@gmail.com>
parents:
4570
diff
changeset
|
61 LOCK_NB = 0x1 # LOCKFILE_FAIL_IMMEDIATELY |
|
d269f5f04f7a
win32: Remove dependency on external win32con module
anatoly techtonik <techtonik@gmail.com>
parents:
4570
diff
changeset
|
62 LOCK_EX = 0x2 # LOCKFILE_EXCLUSIVE_LOCK |
|
4686
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
63 |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
64 # --- the code is taken from pyserial project --- |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
65 # |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
66 # detect size of ULONG_PTR |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
67 def is_64bit(): |
|
5076
d27de8f08c31
Remove 'import *' statement from roundup/backends/portalocker.py
John Kristensen <john@jerrykan.com>
parents:
4686
diff
changeset
|
68 return ctypes.sizeof(ctypes.c_ulong) != ctypes.sizeof(ctypes.c_void_p) |
|
4686
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
69 if is_64bit(): |
|
5076
d27de8f08c31
Remove 'import *' statement from roundup/backends/portalocker.py
John Kristensen <john@jerrykan.com>
parents:
4686
diff
changeset
|
70 ULONG_PTR = ctypes.c_int64 |
|
4686
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
71 else: |
|
5076
d27de8f08c31
Remove 'import *' statement from roundup/backends/portalocker.py
John Kristensen <john@jerrykan.com>
parents:
4686
diff
changeset
|
72 ULONG_PTR = ctypes.c_ulong |
|
d27de8f08c31
Remove 'import *' statement from roundup/backends/portalocker.py
John Kristensen <john@jerrykan.com>
parents:
4686
diff
changeset
|
73 PVOID = ctypes.c_void_p |
|
4686
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
74 |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
75 # --- Union inside Structure by stackoverflow:3480240 --- |
|
5076
d27de8f08c31
Remove 'import *' statement from roundup/backends/portalocker.py
John Kristensen <john@jerrykan.com>
parents:
4686
diff
changeset
|
76 class _OFFSET(ctypes.Structure): |
|
4686
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
77 _fields_ = [ |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
78 ('Offset', DWORD), |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
79 ('OffsetHigh', DWORD)] |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
80 |
|
5076
d27de8f08c31
Remove 'import *' statement from roundup/backends/portalocker.py
John Kristensen <john@jerrykan.com>
parents:
4686
diff
changeset
|
81 class _OFFSET_UNION(ctypes.Union): |
|
4686
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
82 _anonymous_ = ['_offset'] |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
83 _fields_ = [ |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
84 ('_offset', _OFFSET), |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
85 ('Pointer', PVOID)] |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
86 |
|
5076
d27de8f08c31
Remove 'import *' statement from roundup/backends/portalocker.py
John Kristensen <john@jerrykan.com>
parents:
4686
diff
changeset
|
87 class OVERLAPPED(ctypes.Structure): |
|
4686
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
88 _anonymous_ = ['_offset_union'] |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
89 _fields_ = [ |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
90 ('Internal', ULONG_PTR), |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
91 ('InternalHigh', ULONG_PTR), |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
92 ('_offset_union', _OFFSET_UNION), |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
93 ('hEvent', HANDLE)] |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
94 |
|
5076
d27de8f08c31
Remove 'import *' statement from roundup/backends/portalocker.py
John Kristensen <john@jerrykan.com>
parents:
4686
diff
changeset
|
95 LPOVERLAPPED = ctypes.POINTER(OVERLAPPED) |
|
4686
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
96 |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
97 # --- Define function prototypes for extra safety --- |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
98 LockFileEx = windll.kernel32.LockFileEx |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
99 LockFileEx.restype = BOOL |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
100 LockFileEx.argtypes = [HANDLE, DWORD, DWORD, DWORD, DWORD, LPOVERLAPPED] |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
101 UnlockFileEx = windll.kernel32.UnlockFileEx |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
102 UnlockFileEx.restype = BOOL |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
103 UnlockFileEx.argtypes = [HANDLE, DWORD, DWORD, DWORD, LPOVERLAPPED] |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
104 |
|
690
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
105 elif os.name == 'posix': |
|
1387
e975db910d9f
latest version of portalocker fixed for win98 and winnt, thanks James Kew
Richard Jones <richard@users.sourceforge.net>
parents:
1244
diff
changeset
|
106 import fcntl |
|
4679
d269f5f04f7a
win32: Remove dependency on external win32con module
anatoly techtonik <techtonik@gmail.com>
parents:
4570
diff
changeset
|
107 LOCK_SH = fcntl.LOCK_SH # shared lock |
|
d269f5f04f7a
win32: Remove dependency on external win32con module
anatoly techtonik <techtonik@gmail.com>
parents:
4570
diff
changeset
|
108 LOCK_NB = fcntl.LOCK_NB # non-blocking |
|
1387
e975db910d9f
latest version of portalocker fixed for win98 and winnt, thanks James Kew
Richard Jones <richard@users.sourceforge.net>
parents:
1244
diff
changeset
|
109 LOCK_EX = fcntl.LOCK_EX |
|
690
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
110 else: |
|
1387
e975db910d9f
latest version of portalocker fixed for win98 and winnt, thanks James Kew
Richard Jones <richard@users.sourceforge.net>
parents:
1244
diff
changeset
|
111 raise RuntimeError("PortaLocker only defined for nt and posix platforms") |
|
690
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
112 |
|
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
113 if os.name == 'nt': |
|
1387
e975db910d9f
latest version of portalocker fixed for win98 and winnt, thanks James Kew
Richard Jones <richard@users.sourceforge.net>
parents:
1244
diff
changeset
|
114 def lock(file, flags): |
|
4686
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
115 """ Return True on success, False otherwise """ |
|
4680
b6b600ff61e2
win32: Replace win32file._get_osfhandle with function from msvcrt module
anatoly techtonik <techtonik@gmail.com>
parents:
4679
diff
changeset
|
116 hfile = msvcrt.get_osfhandle(file.fileno()) |
|
4686
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
117 overlapped = OVERLAPPED() |
|
5076
d27de8f08c31
Remove 'import *' statement from roundup/backends/portalocker.py
John Kristensen <john@jerrykan.com>
parents:
4686
diff
changeset
|
118 if LockFileEx(hfile, flags, 0, 0, 0xFFFF0000, ctypes.byref(overlapped)): |
|
4686
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
119 return True |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
120 else: |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
121 return False |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
122 |
|
1387
e975db910d9f
latest version of portalocker fixed for win98 and winnt, thanks James Kew
Richard Jones <richard@users.sourceforge.net>
parents:
1244
diff
changeset
|
123 def unlock(file): |
|
4680
b6b600ff61e2
win32: Replace win32file._get_osfhandle with function from msvcrt module
anatoly techtonik <techtonik@gmail.com>
parents:
4679
diff
changeset
|
124 hfile = msvcrt.get_osfhandle(file.fileno()) |
|
4686
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
125 overlapped = OVERLAPPED() |
|
5076
d27de8f08c31
Remove 'import *' statement from roundup/backends/portalocker.py
John Kristensen <john@jerrykan.com>
parents:
4686
diff
changeset
|
126 if UnlockFileEx(hfile, 0, 0, 0xFFFF0000, ctypes.byref(overlapped)): |
|
4686
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
127 return True |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
128 else: |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
129 return False |
|
690
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
130 |
|
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
131 elif os.name =='posix': |
|
1387
e975db910d9f
latest version of portalocker fixed for win98 and winnt, thanks James Kew
Richard Jones <richard@users.sourceforge.net>
parents:
1244
diff
changeset
|
132 def lock(file, flags): |
|
4686
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
133 if fcntl.flock(file.fileno(), flags) == 0: |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
134 return True |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
135 else: |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
136 return False |
|
690
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
137 |
|
1387
e975db910d9f
latest version of portalocker fixed for win98 and winnt, thanks James Kew
Richard Jones <richard@users.sourceforge.net>
parents:
1244
diff
changeset
|
138 def unlock(file): |
|
4686
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
139 if fcntl.flock(file.fileno(), fcntl.LOCK_UN) == 0: |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
140 return True |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
141 else: |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
142 return False |
|
690
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
143 |
|
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
144 if __name__ == '__main__': |
|
1387
e975db910d9f
latest version of portalocker fixed for win98 and winnt, thanks James Kew
Richard Jones <richard@users.sourceforge.net>
parents:
1244
diff
changeset
|
145 from time import time, strftime, localtime |
|
e975db910d9f
latest version of portalocker fixed for win98 and winnt, thanks James Kew
Richard Jones <richard@users.sourceforge.net>
parents:
1244
diff
changeset
|
146 import sys |
|
690
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
147 |
|
1387
e975db910d9f
latest version of portalocker fixed for win98 and winnt, thanks James Kew
Richard Jones <richard@users.sourceforge.net>
parents:
1244
diff
changeset
|
148 log = open('log.txt', "a+") |
|
4357
13b3155869e0
Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents:
3701
diff
changeset
|
149 lock(log, LOCK_EX) |
|
690
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
150 |
|
1387
e975db910d9f
latest version of portalocker fixed for win98 and winnt, thanks James Kew
Richard Jones <richard@users.sourceforge.net>
parents:
1244
diff
changeset
|
151 timestamp = strftime("%m/%d/%Y %H:%M:%S\n", localtime(time())) |
|
e975db910d9f
latest version of portalocker fixed for win98 and winnt, thanks James Kew
Richard Jones <richard@users.sourceforge.net>
parents:
1244
diff
changeset
|
152 log.write( timestamp ) |
|
690
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
153 |
|
1387
e975db910d9f
latest version of portalocker fixed for win98 and winnt, thanks James Kew
Richard Jones <richard@users.sourceforge.net>
parents:
1244
diff
changeset
|
154 print "Wrote lines. Hit enter to release lock." |
|
e975db910d9f
latest version of portalocker fixed for win98 and winnt, thanks James Kew
Richard Jones <richard@users.sourceforge.net>
parents:
1244
diff
changeset
|
155 dummy = sys.stdin.readline() |
|
690
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
156 |
|
1387
e975db910d9f
latest version of portalocker fixed for win98 and winnt, thanks James Kew
Richard Jones <richard@users.sourceforge.net>
parents:
1244
diff
changeset
|
157 log.close() |
|
690
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
158 |
