Mercurial > p > roundup > code
annotate roundup/backends/portalocker.py @ 7800:2d4684e4702d
fix: enhancement to history command output and % template fix.
Rather than using the key field, use the label field for descriptions.
Call cls.labelprop(default_to_id=True) so it returns id rather than
the first sorted property name.
If labelprop() returns 'id' or 'title', we return nothing. 'id' means
there is no label set and no properties named 'name' or 'title'. So
have the caller do whatever it wants (prepend classname for example)
when there is no human readable name. This prevents %(name)s%(key)s
from producing: 23(23).
Also don't accept the 'title' property. Titles can be too
long. Arguably we could: '%(name)20s' to limit the title
length. However without ellipses or something truncating the title
might be confusing. So again pretend there is no human readable name.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Tue, 12 Mar 2024 11:52:17 -0400 |
| parents | a50712b6ad56 |
| children | 9c3ec0a5c7fc |
| 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 |
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5174
diff
changeset
|
50 from __future__ import print_function |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1755
diff
changeset
|
51 __docformat__ = 'restructuredtext' |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1755
diff
changeset
|
52 |
|
690
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
53 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
|
54 |
|
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
55 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
|
56 import msvcrt |
|
5076
d27de8f08c31
Remove 'import *' statement from roundup/backends/portalocker.py
John Kristensen <john@jerrykan.com>
parents:
4686
diff
changeset
|
57 import ctypes |
|
5174
a76fbb9f5535
Fix Traceback in backends/portalocker.py (windows)
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5076
diff
changeset
|
58 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
|
59 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
|
60 |
|
4679
d269f5f04f7a
win32: Remove dependency on external win32con module
anatoly techtonik <techtonik@gmail.com>
parents:
4570
diff
changeset
|
61 LOCK_SH = 0 # the default |
|
d269f5f04f7a
win32: Remove dependency on external win32con module
anatoly techtonik <techtonik@gmail.com>
parents:
4570
diff
changeset
|
62 LOCK_NB = 0x1 # LOCKFILE_FAIL_IMMEDIATELY |
|
d269f5f04f7a
win32: Remove dependency on external win32con module
anatoly techtonik <techtonik@gmail.com>
parents:
4570
diff
changeset
|
63 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
|
64 |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
65 # --- 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
|
66 # |
| 6035 | 67 # detect size of ULONG_PTR |
|
4686
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
68 def is_64bit(): |
|
5076
d27de8f08c31
Remove 'import *' statement from roundup/backends/portalocker.py
John Kristensen <john@jerrykan.com>
parents:
4686
diff
changeset
|
69 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
|
70 if is_64bit(): |
|
5076
d27de8f08c31
Remove 'import *' statement from roundup/backends/portalocker.py
John Kristensen <john@jerrykan.com>
parents:
4686
diff
changeset
|
71 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
|
72 else: |
|
5076
d27de8f08c31
Remove 'import *' statement from roundup/backends/portalocker.py
John Kristensen <john@jerrykan.com>
parents:
4686
diff
changeset
|
73 ULONG_PTR = ctypes.c_ulong |
|
d27de8f08c31
Remove 'import *' statement from roundup/backends/portalocker.py
John Kristensen <john@jerrykan.com>
parents:
4686
diff
changeset
|
74 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
|
75 |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
76 # --- 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
|
77 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
|
78 _fields_ = [ |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
79 ('Offset', DWORD), |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
80 ('OffsetHigh', DWORD)] |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
81 |
|
5076
d27de8f08c31
Remove 'import *' statement from roundup/backends/portalocker.py
John Kristensen <john@jerrykan.com>
parents:
4686
diff
changeset
|
82 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
|
83 _anonymous_ = ['_offset'] |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
84 _fields_ = [ |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
85 ('_offset', _OFFSET), |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
86 ('Pointer', PVOID)] |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
87 |
|
5076
d27de8f08c31
Remove 'import *' statement from roundup/backends/portalocker.py
John Kristensen <john@jerrykan.com>
parents:
4686
diff
changeset
|
88 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
|
89 _anonymous_ = ['_offset_union'] |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
90 _fields_ = [ |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
91 ('Internal', ULONG_PTR), |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
92 ('InternalHigh', ULONG_PTR), |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
93 ('_offset_union', _OFFSET_UNION), |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
94 ('hEvent', HANDLE)] |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
95 |
|
5076
d27de8f08c31
Remove 'import *' statement from roundup/backends/portalocker.py
John Kristensen <john@jerrykan.com>
parents:
4686
diff
changeset
|
96 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
|
97 |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
98 # --- 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
|
99 LockFileEx = windll.kernel32.LockFileEx |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
100 LockFileEx.restype = BOOL |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
101 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
|
102 UnlockFileEx = windll.kernel32.UnlockFileEx |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
103 UnlockFileEx.restype = BOOL |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
104 UnlockFileEx.argtypes = [HANDLE, DWORD, DWORD, DWORD, LPOVERLAPPED] |
| 6035 | 105 |
|
690
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
106 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
|
107 import fcntl |
|
4679
d269f5f04f7a
win32: Remove dependency on external win32con module
anatoly techtonik <techtonik@gmail.com>
parents:
4570
diff
changeset
|
108 LOCK_SH = fcntl.LOCK_SH # shared lock |
|
d269f5f04f7a
win32: Remove dependency on external win32con module
anatoly techtonik <techtonik@gmail.com>
parents:
4570
diff
changeset
|
109 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
|
110 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
|
111 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
|
112 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
|
113 |
|
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
114 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
|
115 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
|
116 """ 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
|
117 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
|
118 overlapped = OVERLAPPED() |
| 6035 | 119 if LockFileEx(hfile, flags, 0, 0, 0xFFFF0000, |
| 120 ctypes.byref(overlapped)): | |
|
4686
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
121 return True |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
122 else: |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
123 return False |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
124 |
|
1387
e975db910d9f
latest version of portalocker fixed for win98 and winnt, thanks James Kew
Richard Jones <richard@users.sourceforge.net>
parents:
1244
diff
changeset
|
125 def unlock(file): |
|
4680
b6b600ff61e2
win32: Replace win32file._get_osfhandle with function from msvcrt module
anatoly techtonik <techtonik@gmail.com>
parents:
4679
diff
changeset
|
126 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
|
127 overlapped = OVERLAPPED() |
|
5076
d27de8f08c31
Remove 'import *' statement from roundup/backends/portalocker.py
John Kristensen <john@jerrykan.com>
parents:
4686
diff
changeset
|
128 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
|
129 return True |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
130 else: |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
131 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
|
132 |
| 6035 | 133 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
|
134 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
|
135 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
|
136 return True |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
137 else: |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
138 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
|
139 |
|
1387
e975db910d9f
latest version of portalocker fixed for win98 and winnt, thanks James Kew
Richard Jones <richard@users.sourceforge.net>
parents:
1244
diff
changeset
|
140 def unlock(file): |
|
4686
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
141 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
|
142 return True |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
143 else: |
|
4e740f02e165
Remove pywin32 installation dependency by porting portalocker.py to ctypes.
anatoly techtonik <techtonik@gmail.com>
parents:
4681
diff
changeset
|
144 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
|
145 |
|
509a101305da
node ids are now generated from a lockable store - no more race conditions
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
146 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
|
147 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
|
148 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
|
149 |
|
1387
e975db910d9f
latest version of portalocker fixed for win98 and winnt, thanks James Kew
Richard Jones <richard@users.sourceforge.net>
parents:
1244
diff
changeset
|
150 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
|
151 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
|
152 |
|
1387
e975db910d9f
latest version of portalocker fixed for win98 and winnt, thanks James Kew
Richard Jones <richard@users.sourceforge.net>
parents:
1244
diff
changeset
|
153 timestamp = strftime("%m/%d/%Y %H:%M:%S\n", localtime(time())) |
| 6035 | 154 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
|
155 |
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5174
diff
changeset
|
156 print("Wrote lines. Hit enter to release lock.") |
|
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 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
|
158 |
|
1387
e975db910d9f
latest version of portalocker fixed for win98 and winnt, thanks James Kew
Richard Jones <richard@users.sourceforge.net>
parents:
1244
diff
changeset
|
159 log.close() |
