From 898e9d6fbc0dfdbdc864cfd7be560c8e7f6f2515 Mon Sep 17 00:00:00 2001 From: lionel Date: Wed, 14 Sep 2016 17:16:22 +0200 Subject: [PATCH] Cleanup : lot of garbage in tmp/ --- .gitignore | 3 + client | 29 -- key | 17 -- test.py | 93 ------ tmp/lockfile-0.12.2.tar.gz | Bin 20874 -> 0 bytes tmp/lockfile-0.12.2/ACKS | 6 - tmp/lockfile-0.12.2/AUTHORS | 12 - tmp/lockfile-0.12.2/ChangeLog | 193 ------------ tmp/lockfile-0.12.2/LICENSE | 21 -- tmp/lockfile-0.12.2/PKG-INFO | 56 ---- tmp/lockfile-0.12.2/README.rst | 33 -- tmp/lockfile-0.12.2/RELEASE-NOTES | 50 --- tmp/lockfile-0.12.2/doc/source/Makefile | 73 ----- tmp/lockfile-0.12.2/doc/source/conf.py | 179 ----------- tmp/lockfile-0.12.2/doc/source/index.rst | 287 ------------------ .../lockfile.egg-info/PKG-INFO | 56 ---- .../lockfile.egg-info/SOURCES.txt | 27 -- .../lockfile.egg-info/dependency_links.txt | 1 - .../lockfile.egg-info/not-zip-safe | 1 - .../lockfile.egg-info/pbr.json | 1 - .../lockfile.egg-info/top_level.txt | 1 - tmp/lockfile-0.12.2/setup.cfg | 41 --- tmp/lockfile-0.12.2/setup.py | 29 -- tmp/lockfile-0.12.2/test-requirements.txt | 5 - tmp/lockfile-0.12.2/test/compliancetest.py | 262 ---------------- tmp/lockfile-0.12.2/test/test_lockfile.py | 41 --- tmp/lockfile-0.12.2/tox.ini | 27 -- tmp/python-daemon-2.1.1.tar.gz | Bin 74276 -> 0 bytes 28 files changed, 3 insertions(+), 1541 deletions(-) create mode 100644 .gitignore delete mode 100755 client delete mode 100755 key delete mode 100755 test.py delete mode 100644 tmp/lockfile-0.12.2.tar.gz delete mode 100644 tmp/lockfile-0.12.2/ACKS delete mode 100644 tmp/lockfile-0.12.2/AUTHORS delete mode 100644 tmp/lockfile-0.12.2/ChangeLog delete mode 100644 tmp/lockfile-0.12.2/LICENSE delete mode 100644 tmp/lockfile-0.12.2/PKG-INFO delete mode 100644 tmp/lockfile-0.12.2/README.rst delete mode 100644 tmp/lockfile-0.12.2/RELEASE-NOTES delete mode 100644 tmp/lockfile-0.12.2/doc/source/Makefile delete mode 100644 tmp/lockfile-0.12.2/doc/source/conf.py delete mode 100644 tmp/lockfile-0.12.2/doc/source/index.rst delete mode 100644 tmp/lockfile-0.12.2/lockfile.egg-info/PKG-INFO delete mode 100644 tmp/lockfile-0.12.2/lockfile.egg-info/SOURCES.txt delete mode 100644 tmp/lockfile-0.12.2/lockfile.egg-info/dependency_links.txt delete mode 100644 tmp/lockfile-0.12.2/lockfile.egg-info/not-zip-safe delete mode 100644 tmp/lockfile-0.12.2/lockfile.egg-info/pbr.json delete mode 100644 tmp/lockfile-0.12.2/lockfile.egg-info/top_level.txt delete mode 100644 tmp/lockfile-0.12.2/setup.cfg delete mode 100644 tmp/lockfile-0.12.2/setup.py delete mode 100644 tmp/lockfile-0.12.2/test-requirements.txt delete mode 100644 tmp/lockfile-0.12.2/test/compliancetest.py delete mode 100644 tmp/lockfile-0.12.2/test/test_lockfile.py delete mode 100644 tmp/lockfile-0.12.2/tox.ini delete mode 100644 tmp/python-daemon-2.1.1.tar.gz diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..92e470c --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +# Ignore tmp directory +tmp/ + diff --git a/client b/client deleted file mode 100755 index e9e342a..0000000 --- a/client +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/python3 - -import socket -import os,sys,inspect # for the following -cmd_subfolder = os.path.realpath(os.path.abspath(os.path.join(os.path.split(inspect.getfile( inspect.currentframe() ))[0],"modules"))) -if cmd_subfolder not in sys.path: - sys.path.insert(0, cmd_subfolder) - -from pydes import pyDes # DES encryption - -TCP_IP = '127.0.0.1' -TCP_PORT = 5005 -BUFFER_SIZE = 1024 -MESSAGE = bytes("HB", 'UTF-8') - -k = pyDes.des(b"DEADJACK", pyDes.CBC, b"\2\2\2\2\2\2\2\2", pad=None, padmode=2) -MESSAGE = k.encrypt(MESSAGE) - -s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) -s.connect((TCP_IP, TCP_PORT)) -s.send(MESSAGE) -data = s.recv(BUFFER_SIZE) -#data = s.recv(BUFFER_SIZE).decode('UTF-8') -s.close() - -data = k.decrypt(data).decode('UTF-8') - -print("sent data:", MESSAGE) -print("received data:", data) diff --git a/key b/key deleted file mode 100755 index 9217585..0000000 --- a/key +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/python3 -# -*- coding:Utf-8 -*- - -import os,sys,inspect # for the following -cmd_subfolder = os.path.realpath(os.path.abspath(os.path.join(os.path.split(inspect.getfile( inspect.currentframe() ))[0],"modules"))) -if cmd_subfolder not in sys.path: - sys.path.insert(0, cmd_subfolder) - -from pydes import pyDes - -data = b"Please encrypt my data" -k = pyDes.des(b"DEADJACK", pyDes.CBC, b"\2\2\2\2\2\2\2\2", pad=None, padmode=2) -d = k.encrypt(data) -print("Encrypted: %r" % d) -print("Decrypted: %r" % k.decrypt(d)) -assert k.decrypt(d, padmode=2) == data - diff --git a/test.py b/test.py deleted file mode 100755 index fa0441b..0000000 --- a/test.py +++ /dev/null @@ -1,93 +0,0 @@ -#!/usr/bin/python3 -# -*- coding:Utf-8 -*- - -import logging # Logs -import time # sleep -import string # split strings - -import os,sys,inspect # for the following -cmd_subfolder = os.path.realpath(os.path.abspath(os.path.join(os.path.split(inspect.getfile( inspect.currentframe() ))[0],"modules"))) -if cmd_subfolder not in sys.path: - sys.path.insert(0, cmd_subfolder) - -import lockfile # daemonization -from daemon import runner # daemonization - -from multiprocessing import Process -#import subprocess -#import shlex - -# logger.debug("Debug message") -# logger.info("Info message") -# logger.warn("Warning message") -# logger.error("Error message") - -class App(): - - def __init__(self): - self.stdin_path = "/dev/null" - self.stdout_path = "/home/lionel/work/python/rome/log/stdout.log" - self.stderr_path = "/home/lionel/work/python/rome/log/stderr.log" - self.pidfile_path = "/home/lionel/work/python/rome/pid/horusd.pid" - self.pidfile_timeout = 5 - - def run(self): -# We must put all functions before the 'if __name__ blabla' - - def heartbeat(min): - seconds = int(min) * 60 - while True: - logger.info("HB : alive") - time.sleep(seconds) - return False - - -# All functions definitions took place above - if __name__ == '__main__': - logger.info("Rome test started") - - ''' - Launching the heartbeat function - ''' - p = Process(target=heartbeat, args=(2,)) - p.daemon = True - p.start() - heartbeat_pid = p.pid - logger.info("heartbeat loop launched (pid " + str(heartbeat_pid) + ")") - - ''' - Entering infinite loop - ''' - - try: - while True: - time.sleep(30) - except: - logger.error("While loop interrupted : aborting") - # Faut arrêter les Process ... - -# Invocation of the daemon part -# Means : if it's working : DON'T TOUCH ANYTHING -if __name__ == "__main__": - app = App() - logger = logging.getLogger("horusd") - loglevel = "debug" - if (loglevel=="DEBUG") or (loglevel=="debug"): - logger.setLevel(logging.DEBUG) - elif (loglevel=="INFO") or (loglevel=="info"): - logger.setLevel(logging.INFO) - elif (loglevel=="WARN") or (loglevel=="warn"): - logger.setLevel(logging.WARN) - elif (loglevel=="ERROR") or (loglevel=="error"): - logger.setLevel(logging.ERROR) - else: - logger.setLevel(logging.DEBUG) - formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") - handler = logging.FileHandler("log/horusd.log") - handler.setFormatter(formatter) - logger.addHandler(handler) - - daemon_runner = runner.DaemonRunner(app) - #This ensures that the logger file handle does not get closed during daemonization - daemon_runner.daemon_context.files_preserve=[handler.stream] - daemon_runner.do_action() diff --git a/tmp/lockfile-0.12.2.tar.gz b/tmp/lockfile-0.12.2.tar.gz deleted file mode 100644 index 8965ed48ed74a4d8256bff003fd7925b6ae3757a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20874 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 diff --git a/tmp/lockfile-0.12.2/ACKS b/tmp/lockfile-0.12.2/ACKS deleted file mode 100644 index 44519d1..0000000 --- a/tmp/lockfile-0.12.2/ACKS +++ /dev/null @@ -1,6 +0,0 @@ -Thanks to the following people for help with lockfile. - - Scott Dial - Ben Finney - Frank Niessink - Konstantin Veretennicov diff --git a/tmp/lockfile-0.12.2/AUTHORS b/tmp/lockfile-0.12.2/AUTHORS deleted file mode 100644 index 690325f..0000000 --- a/tmp/lockfile-0.12.2/AUTHORS +++ /dev/null @@ -1,12 +0,0 @@ -(no author) <(no author)> -ChangBo Guo(gcb) -Davanum Srinivas -Doug Hellmann -Elmo Todurov -Joshua Harlow -Julien Danjou -Skip Montanaro -Thomas Grainger -Thomas Grainger -Victor Stinner -skip.montanaro diff --git a/tmp/lockfile-0.12.2/ChangeLog b/tmp/lockfile-0.12.2/ChangeLog deleted file mode 100644 index 2d4aeb9..0000000 --- a/tmp/lockfile-0.12.2/ChangeLog +++ /dev/null @@ -1,193 +0,0 @@ -CHANGES -======= - -0.12.2 ------- - -* Add warning to README.rst - -0.12.1 ------- - -* Remove Python 2.6 classifier -* Remove python 2.6 -* Remove two unused variables: fix flake8 F841 warn -* Fix flake8 warnings -* PBR setup requirement only -* Support universal wheels - -0.11.0 ------- - -* Add deprecated warnings to index.rst -* Fix PIDLockFile.acquire() may loop indefinitely -* Fix failure - from lockfile import * -* lockfile.acquire doesn't accept a timeout of 0 -* Update README format for our release script -* Begin moving some of the common code to a shared base -* Add pbr to dependency list -* The version of sphinx being brought in is broken -* Fix Git URLs - -0.10.2 ------- - -* Fix package name - -0.10.1 ------- - -* Add missing cover env in tox - -0.10.0 ------- - -* Fix documentation bug report address -* Add py34 in tox -* Remove old diff file -* Add .gitreview, tox targets and use pbr -* fix for timeout=0 -* remove 2.5, 3.1 and 3.4 from the list for the time being - may get added back later -* Bugfix: locking two different files in the same directory caused an error during unlocking the last unlocking -* typo - -0.9.1 ------ - -* ignore dist dir -* update to python 3 imports -* python 3 tweaks -* python 3 tweaks -* ignore Emacs backups -* note nose as a dependency -* remove this test file - way incompatible with current code -* stuff to ignore -* Add py33, py34, delete py24, py25 -* Update source location -* merge delete -* merge delete -* more merge stuff -* this didn't come across with svn merge -* all screwed up now -* merge -* merge -* Make it clear that the path and threaded attributes to SymlinkLockFile and MkdirLockFile have the same constraints as for LinkLockFile. In particular, the directory which will contain path must be writable -* add pidlockfile test stuff from Ben Finney - still a few problems - maybe I can get him to solve them :-) -* ignore Sphinx build directory -* Catch up on a little documentation -* adapt decorator patch from issue 5 -* Allow timeout in constructor - resolves issue 3 -* add info to raise statements - from issue 6, yyurevich@jellycrystal.com -* add useful repr() - from issue 6, yyurevich@jellycrystal.com -* add symlinklockfile module -* + py24 -* good for the branch? must be good for the trunk -* add tox stuff, ignore dist dir -* new version, move to Google Code -* -* -* * Thread support is currently broken. This is more likely because of problems in this module, but suppress those tests for now just the same -* By the nature of what it's trying to do PIDLockFile doesn't support threaded operation -* defer creating testdb until we've instantiated a SQLiteLockFile instance -* tweak unique_name slightly -* Specify mode in octal -* update to match pidlockfile change -* missing import -* I think I finally have this correct -* patch pidlockfile module too -* use abs import here as well -* *argh* -* Update to elide new import syntax -* * Move future import for division where it's used. * Use __absolute_import__ to spell relative imports -* Some PIDLockFile tests are failing. Check in anyway so others can consider the problems -* Account for fact that Thread objects in Python 2.4 and earlier do not have an ident attribute -* Make this a daemon thread so if things go awry the test run won't hang -* * Add pidlockfile (not quite working properly) * Rearrange MANIFEST.in slightly to include test directory -* Split those test methods which try both threaded and non-threaded naming schemes. More to do. Obviously you need to have test cases when using the non-threaded naming scheme from multiple threads -* acknowledge Ben and Frank, alphabetize list -* I don't think these are needed any longer - they came back during the hg->svn conversion -* grand renaming: "filelock" -> "lockfile" & "FileLock" -> "LockFile" -* Update for packages -* Avoid using the backwards compatibility functions for FileLock. That object is not deprecated -* how does the test dir keep sneaking into MANIFEST? also, include 2.4.diff in dist -* update for new structure, use of ident attr -* adjust build setup -* move test helpers into test dir -* first cut at packagized lockfile -* Protect some more complex locking stuff so if they fail we don't deadlock -* merge r75 from head -* * One implementation of tname, not two - make it an instance attribute as a result -* beginnings of a packagized lockfile -* get the structure right -* start over with the branches.. -* hmmm -* hmmm -* get us back to lockfile 0.8 -* r72 from hg -* r70 from hg -* r69 from hg -* r68 from hg -* r67 from hg -* r66 from hg -* r65 from hg -* r64 from hg -* r64 from hg -* r63 from hg -* r62 from hg -* r61 from hg -* r60 from hg -* r59 from hg -* r58 from hg -* r57 from hg -* r56 from hg -* r55 from hg -* r54 from hg -* r53 from hg -* r52 from hg -* r51 from hg -* r50 from hg -* r49 from hg -* r47 from hg -* r46 from hg -* r45 from hg -* r44 from hg -* r43 from hg -* r42 from hg -* r41 from hg -* r38 from hg -* r37 from hg -* r36 from hg -* r35 from hg -* r34 from hg -* r33 from hg -* r32 from hg -* r31 from hg -* r29 from hg -* r28 from hg -* r27 from hg -* r26 from hg -* r25 from hg -* r24 from hg -* r23 from hg -* r22 from hg -* r21 from hg -* r20 from hg -* r19 from hg -* r18 from hg -* r16 from hg -* r14 from hg -* r13 from hg -* r12 from hg -* r11 from hg -* r10 from hg -* r9 from hg -* r8 from hg -* r7 from hg -* r6 from hg -* r5 from hg -* r4 from hg -* r3 from hg -* r2 from hg -* r1 from hg -* r0 from hg -* Initial directory structure diff --git a/tmp/lockfile-0.12.2/LICENSE b/tmp/lockfile-0.12.2/LICENSE deleted file mode 100644 index 610c079..0000000 --- a/tmp/lockfile-0.12.2/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -This is the MIT license: http://www.opensource.org/licenses/mit-license.php - -Copyright (c) 2007 Skip Montanaro. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. diff --git a/tmp/lockfile-0.12.2/PKG-INFO b/tmp/lockfile-0.12.2/PKG-INFO deleted file mode 100644 index d348d5d..0000000 --- a/tmp/lockfile-0.12.2/PKG-INFO +++ /dev/null @@ -1,56 +0,0 @@ -Metadata-Version: 1.1 -Name: lockfile -Version: 0.12.2 -Summary: Platform-independent file locking module -Home-page: http://launchpad.net/pylockfile -Author: OpenStack -Author-email: openstack-dev@lists.openstack.org -License: UNKNOWN -Description: Note: This package is **deprecated**. It is highly preferred that instead of - using this code base that instead `fasteners`_ or `oslo.concurrency`_ is - used instead. For any questions or comments or further help needed - please email `openstack-dev`_ and prefix your email subject - with ``[oslo][pylockfile]`` (for a faster response). - - The lockfile package exports a LockFile class which provides a simple API for - locking files. Unlike the Windows msvcrt.locking function, the fcntl.lockf - and flock functions, and the deprecated posixfile module, the API is - identical across both Unix (including Linux and Mac) and Windows platforms. - The lock mechanism relies on the atomic nature of the link (on Unix) and - mkdir (on Windows) system calls. An implementation based on SQLite is also - provided, more as a demonstration of the possibilities it provides than as - production-quality code. - - Note: In version 0.9 the API changed in two significant ways: - - * It changed from a module defining several classes to a package containing - several modules, each defining a single class. - - * Where classes had been named SomethingFileLock before the last two words - have been reversed, so that class is now SomethingLockFile. - - The previous module-level definitions of LinkFileLock, MkdirFileLock and - SQLiteFileLock will be retained until the 1.0 release. - - To install: - - python setup.py install - - * Documentation: http://docs.openstack.org/developer/pylockfile - * Source: http://git.openstack.org/cgit/openstack/pylockfile - * Bugs: http://bugs.launchpad.net/pylockfile - - -Platform: UNKNOWN -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: MIT License -Classifier: Operating System :: POSIX :: Linux -Classifier: Operating System :: MacOS -Classifier: Operating System :: Microsoft :: Windows :: Windows NT/2000 -Classifier: Operating System :: POSIX -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 2 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.3 -Classifier: Topic :: Software Development :: Libraries :: Python Modules diff --git a/tmp/lockfile-0.12.2/README.rst b/tmp/lockfile-0.12.2/README.rst deleted file mode 100644 index a439f10..0000000 --- a/tmp/lockfile-0.12.2/README.rst +++ /dev/null @@ -1,33 +0,0 @@ -Note: This package is **deprecated**. It is highly preferred that instead of -using this code base that instead `fasteners`_ or `oslo.concurrency`_ is -used instead. For any questions or comments or further help needed -please email `openstack-dev`_ and prefix your email subject -with ``[oslo][pylockfile]`` (for a faster response). - -The lockfile package exports a LockFile class which provides a simple API for -locking files. Unlike the Windows msvcrt.locking function, the fcntl.lockf -and flock functions, and the deprecated posixfile module, the API is -identical across both Unix (including Linux and Mac) and Windows platforms. -The lock mechanism relies on the atomic nature of the link (on Unix) and -mkdir (on Windows) system calls. An implementation based on SQLite is also -provided, more as a demonstration of the possibilities it provides than as -production-quality code. - -Note: In version 0.9 the API changed in two significant ways: - - * It changed from a module defining several classes to a package containing - several modules, each defining a single class. - - * Where classes had been named SomethingFileLock before the last two words - have been reversed, so that class is now SomethingLockFile. - -The previous module-level definitions of LinkFileLock, MkdirFileLock and -SQLiteFileLock will be retained until the 1.0 release. - -To install: - - python setup.py install - -* Documentation: http://docs.openstack.org/developer/pylockfile -* Source: http://git.openstack.org/cgit/openstack/pylockfile -* Bugs: http://bugs.launchpad.net/pylockfile diff --git a/tmp/lockfile-0.12.2/RELEASE-NOTES b/tmp/lockfile-0.12.2/RELEASE-NOTES deleted file mode 100644 index 8b452ed..0000000 --- a/tmp/lockfile-0.12.2/RELEASE-NOTES +++ /dev/null @@ -1,50 +0,0 @@ -Version 0.9.1 -============= - -* This release moves the source location to Google Code. - -* Threaded support is currently broken. (It might not actually be broken. - It might just be the tests which are broken.) - -Version 0.9 -=========== - -* The lockfile module was reorganized into a package. - -* The names of the three main classes have changed as follows: - - LinkFileLock -> LinkLockFile - MkdirFileLock -> MkdirLockFile - SQLiteFileLock -> SQLiteLockFile - -* A PIDLockFile class was added. - -Version 0.3 -=========== - -* Fix 2.4.diff file error. - -* More documentation updates. - -Version 0.2 -=========== - -* Added 2.4.diff file to patch lockfile to work with Python 2.4 (removes use - of with statement). - -* Renamed _FileLock base class to LockBase to expose it (and its docstrings) - to pydoc. - -* Got rid of time.sleep() calls in tests (thanks to Konstantin - Veretennicov). - -* Use thread.get_ident() as the thread discriminator. - -* Updated documentation a bit. - -* Added RELEASE-NOTES. - -Version 0.1 -=========== - -* First release - All basic functionality there. diff --git a/tmp/lockfile-0.12.2/doc/source/Makefile b/tmp/lockfile-0.12.2/doc/source/Makefile deleted file mode 100644 index 1b1e8d2..0000000 --- a/tmp/lockfile-0.12.2/doc/source/Makefile +++ /dev/null @@ -1,73 +0,0 @@ -# Makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -PAPER = - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d .build/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . - -.PHONY: help clean html web pickle htmlhelp latex changes linkcheck - -help: - @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " pickle to make pickle files (usable by e.g. sphinx-web)" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " changes to make an overview over all changed/added/deprecated items" - @echo " linkcheck to check all external links for integrity" - -clean: - -rm -rf .build/* - -html: - mkdir -p .build/html .build/doctrees - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) .build/html - @echo - @echo "Build finished. The HTML pages are in .build/html." - -pickle: - mkdir -p .build/pickle .build/doctrees - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) .build/pickle - @echo - @echo "Build finished; now you can process the pickle files or run" - @echo " sphinx-web .build/pickle" - @echo "to start the sphinx-web server." - -web: pickle - -htmlhelp: - mkdir -p .build/htmlhelp .build/doctrees - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) .build/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in .build/htmlhelp." - -latex: - mkdir -p .build/latex .build/doctrees - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) .build/latex - @echo - @echo "Build finished; the LaTeX files are in .build/latex." - @echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \ - "run these through (pdf)latex." - -changes: - mkdir -p .build/changes .build/doctrees - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) .build/changes - @echo - @echo "The overview file is in .build/changes." - -linkcheck: - mkdir -p .build/linkcheck .build/doctrees - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) .build/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in .build/linkcheck/output.txt." - -html.zip: html - (cd .build/html ; zip -r ../../$@ *) diff --git a/tmp/lockfile-0.12.2/doc/source/conf.py b/tmp/lockfile-0.12.2/doc/source/conf.py deleted file mode 100644 index 623edcb..0000000 --- a/tmp/lockfile-0.12.2/doc/source/conf.py +++ /dev/null @@ -1,179 +0,0 @@ -# -*- coding: utf-8 -*- -# -# lockfile documentation build configuration file, created by -# sphinx-quickstart on Sat Sep 13 17:54:17 2008. -# -# This file is execfile()d with the current directory set to its containing dir. -# -# The contents of this file are pickled, so don't put values in the namespace -# that aren't pickleable (module imports are okay, they're removed automatically). -# -# All configuration values have a default value; values that are commented out -# serve to show the default value. - -import sys, os - -# If your extensions are in another directory, add it here. If the directory -# is relative to the documentation root, use os.path.abspath to make it -# absolute, like shown here. -#sys.path.append(os.path.abspath('some/directory')) - -# General configuration -# --------------------- - -# Add any Sphinx extension module names here, as strings. They can be extensions -# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = [] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['.templates'] - -# The suffix of source filenames. -source_suffix = '.rst' - -# The master toctree document. -master_doc = 'index' - -# General substitutions. -project = 'lockfile' -copyright = '2008, Skip Montanaro' - -# The default replacements for |version| and |release|, also used in various -# other places throughout the built documents. -# -# The short X.Y version. -version = '0.3' -# The full version, including alpha/beta/rc tags. -release = '0.3' - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -#today = '' -# Else, today_fmt is used as the format for a strftime call. -today_fmt = '%B %d, %Y' - -# List of documents that shouldn't be included in the build. -#unused_docs = [] - -# List of directories, relative to source directories, that shouldn't be searched -# for source files. -#exclude_dirs = [] - -# The reST default role (used for this markup: `text`) to use for all documents. -#default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -#add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -#show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - - -# Options for HTML output -# ----------------------- - -# The style sheet to use for HTML and HTML Help pages. A file of that name -# must exist either in Sphinx' static/ path, or in one of the custom paths -# given in html_static_path. -html_style = 'default.css' - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -#html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None - -# The name of an image file (within the static path) to place at the top of -# the sidebar. -#html_logo = None - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -#html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -#html_static_path = ['.static'] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -#html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -#html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -#html_additional_pages = {} - -# If false, no module index is generated. -#html_use_modindex = True - -# If false, no index is generated. -#html_use_index = True - -# If true, the index is split into individual pages for each letter. -#html_split_index = False - -# If true, the reST sources are included in the HTML build as _sources/. -#html_copy_source = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -#html_use_opensearch = '' - -# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = '' - -# Output file base name for HTML help builder. -htmlhelp_basename = 'lockfiledoc' - - -# Options for LaTeX output -# ------------------------ - -# The paper size ('letter' or 'a4'). -#latex_paper_size = 'letter' - -# The font size ('10pt', '11pt' or '12pt'). -#latex_font_size = '10pt' - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, author, document class [howto/manual]). -latex_documents = [ - ('lockfile', 'lockfile.tex', 'lockfile Documentation', - 'Skip Montanaro', 'manual'), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -#latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -#latex_use_parts = False - -# Additional stuff for the LaTeX preamble. -#latex_preamble = '' - -# Documents to append as an appendix to all manuals. -#latex_appendices = [] - -# If false, no module index is generated. -#latex_use_modindex = True diff --git a/tmp/lockfile-0.12.2/doc/source/index.rst b/tmp/lockfile-0.12.2/doc/source/index.rst deleted file mode 100644 index 5f1f2dd..0000000 --- a/tmp/lockfile-0.12.2/doc/source/index.rst +++ /dev/null @@ -1,287 +0,0 @@ - -:mod:`lockfile` --- Platform-independent file locking -===================================================== - -.. module:: lockfile - :synopsis: Platform-independent file locking -.. moduleauthor:: Skip Montanaro -.. sectionauthor:: Skip Montanaro - -.. warning:: - - This package is **deprecated**. It is highly preferred that instead of - using this code base that instead `fasteners`_ or `oslo.concurrency`_ is - used instead. For any questions or comments or further help needed - please email `openstack-dev`_ and prefix your email subject - with ``[oslo][pylockfile]`` (for a faster response). - -.. note:: - - This package is pre-release software. Between versions 0.8 and 0.9 it - was changed from a module to a package. It is quite possible that the - API and implementation will change again in important ways as people test - it and provide feedback and bug fixes. In particular, if the mkdir-based - locking scheme is sufficient for both Windows and Unix platforms, the - link-based scheme may be deleted so that only a single locking scheme is - used, providing cross-platform lockfile cooperation. - -.. note:: - - The implementation uses the `with` statement, both in the tests and in the - main code, so will only work out-of-the-box with Python 2.5 or later. - However, the use of the `with` statement is minimal, so if you apply the - patch in the included 2.4.diff file you can use it with Python 2.4. It's - possible that it will work in Python 2.3 with that patch applied as well, - though the doctest code relies on APIs new in 2.4, so will have to be - rewritten somewhat to allow testing on 2.3. As they say, patches welcome. - ``;-)`` - -The :mod:`lockfile` package exports a :class:`LockFile` class which provides -a simple API for locking files. Unlike the Windows :func:`msvcrt.locking` -function, the Unix :func:`fcntl.flock`, :func:`fcntl.lockf` and the -deprecated :mod:`posixfile` module, the API is identical across both Unix -(including Linux and Mac) and Windows platforms. The lock mechanism relies -on the atomic nature of the :func:`link` (on Unix) and :func:`mkdir` (On -Windows) system calls. It also contains several lock-method-specific -modules: :mod:`lockfile.linklockfile`, :mod:`lockfile.mkdirlockfile`, and -:mod:`lockfile.sqlitelockfile`, each one exporting a single class. For -backwards compatibility with versions before 0.9 the :class:`LinkFileLock`, -:class:`MkdirFileLock` and :class:`SQLiteFileLock` objects are exposed as -attributes of the top-level lockfile package, though this use was deprecated -starting with version 0.9 and will be removed in version 1.0. - -.. note:: - - The current implementation uses :func:`os.link` on Unix, but since that - function is unavailable on Windows it uses :func:`os.mkdir` there. At - this point it's not clear that using the :func:`os.mkdir` method would be - insufficient on Unix systems. If it proves to be adequate on Unix then - the implementation could be simplified and truly cross-platform locking - would be possible. - -.. note:: - - The current implementation doesn't provide for shared vs. exclusive - locks. It should be possible for multiple reader processes to hold the - lock at the same time. - -The module defines the following exceptions: - -.. exception:: Error - - This is the base class for all exceptions raised by the :class:`LockFile` - class. - -.. exception:: LockError - - This is the base class for all exceptions raised when attempting to lock - a file. - -.. exception:: UnlockError - - This is the base class for all exceptions raised when attempting to - unlock a file. - -.. exception:: LockTimeout - - This exception is raised if the :func:`LockFile.acquire` method is - called with a timeout which expires before an existing lock is released. - -.. exception:: AlreadyLocked - - This exception is raised if the :func:`LockFile.acquire` detects a - file is already locked when in non-blocking mode. - -.. exception:: LockFailed - - This exception is raised if the :func:`LockFile.acquire` detects some - other condition (such as a non-writable directory) which prevents it from - creating its lock file. - -.. exception:: NotLocked - - This exception is raised if the file is not locked when - :func:`LockFile.release` is called. - -.. exception:: NotMyLock - - This exception is raised if the file is locked by another thread or - process when :func:`LockFile.release` is called. - -The following classes are provided: - -.. class:: linklockfile.LinkLockFile(path, threaded=True) - - This class uses the :func:`link(2)` system call as the basic lock - mechanism. *path* is an object in the file system to be locked. It need - not exist, but its directory must exist and be writable at the time the - :func:`acquire` and :func:`release` methods are called. *threaded* is - optional, but when set to :const:`True` locks will be distinguished - between threads in the same process. - -.. class:: symlinklockfile.SymlinkLockFile(path, threaded=True) - - This class uses the :func:`symlink(2)` system call as the basic lock - mechanism. The parameters have the same meaning and constraints as for - the :class:`LinkLockFile` class. - -.. class:: mkdirlockfile.MkdirLockFile(path, threaded=True) - - This class uses the :func:`mkdir(2)` system call as the basic lock - mechanism. The parameters have the same meaning and constraints as for - the :class:`LinkLockFile` class. - -.. class:: sqlitelockfile.SQLiteLockFile(path, threaded=True) - - This class uses the :mod:`sqlite3` module to implement the lock - mechanism. The parameters have the same meaning as for the - :class:`LinkLockFile` class. - -.. class:: LockBase(path, threaded=True) - - This is the base class for all concrete implementations and is available - at the lockfile package level so programmers can implement other locking - schemes. - -.. function:: locked(path, timeout=None) - - This function provides a decorator which insures the decorated function - is always called with the lock held. - -By default, the :const:`LockFile` object refers to the -:class:`mkdirlockfile.MkdirLockFile` class on Windows. On all other -platforms it refers to the :class:`linklockfile.LinkLockFile` class. - -When locking a file the :class:`linklockfile.LinkLockFile` class creates a -uniquely named hard link to an empty lock file. That hard link contains the -hostname, process id, and if locks between threads are distinguished, the -thread identifier. For example, if you want to lock access to a file named -"README", the lock file is named "README.lock". With per-thread locks -enabled the hard link is named HOSTNAME-THREADID-PID. With only per-process -locks enabled the hard link is named HOSTNAME--PID. - -When using the :class:`mkdirlockfile.MkdirLockFile` class the lock file is a -directory. Referring to the example above, README.lock will be a directory -and HOSTNAME-THREADID-PID will be an empty file within that directory. - -.. seealso:: - - Module :mod:`msvcrt` - Provides the :func:`locking` function, the standard Windows way of - locking (parts of) a file. - - Module :mod:`posixfile` - The deprecated (since Python 1.5) way of locking files on Posix systems. - - Module :mod:`fcntl` - Provides the current best way to lock files on Unix systems - (:func:`lockf` and :func:`flock`). - -LockFile Objects ----------------- - -:class:`LockFile` objects support the `context manager` protocol used by the -statement:`with` statement. The timeout option is not supported when used in -this fashion. While support for timeouts could be implemented, there is no -support for handling the eventual :exc:`Timeout` exceptions raised by the -:func:`__enter__` method, so you would have to protect the `with` statement with -a `try` statement. The resulting construct would not be any simpler than just -using a `try` statement in the first place. - -:class:`LockFile` has the following user-visible methods: - -.. method:: LockFile.acquire(timeout=None) - - Lock the file associated with the :class:`LockFile` object. If the - *timeout* is omitted or :const:`None` the caller will block until the - file is unlocked by the object currently holding the lock. If the - *timeout* is zero or a negative number the :exc:`AlreadyLocked` exception - will be raised if the file is currently locked by another process or - thread. If the *timeout* is positive, the caller will block for that - many seconds waiting for the lock to be released. If the lock is not - released within that period the :exc:`LockTimeout` exception will be - raised. - -.. method:: LockFile.release() - - Unlock the file associated with the :class:`LockFile` object. If the - file is not currently locked, the :exc:`NotLocked` exception is raised. - If the file is locked by another thread or process the :exc:`NotMyLock` - exception is raised. - -.. method:: is_locked() - - Return the status of the lock on the current file. If any process or - thread (including the current one) is locking the file, :const:`True` is - returned, otherwise :const:`False` is returned. - -.. method:: break_lock() - - If the file is currently locked, break it. - -.. method:: i_am_locking() - - Returns true if the caller holds the lock. - -Examples --------- - -This example is the "hello world" for the :mod:`lockfile` package:: - - from lockfile import LockFile - lock = LockFile("/some/file/or/other") - with lock: - print lock.path, 'is locked.' - -To use this with Python 2.4, you can execute:: - - from lockfile import LockFile - lock = LockFile("/some/file/or/other") - lock.acquire() - print lock.path, 'is locked.' - lock.release() - -If you don't want to wait forever, you might try:: - - from lockfile import LockFile - lock = LockFile("/some/file/or/other") - while not lock.i_am_locking(): - try: - lock.acquire(timeout=60) # wait up to 60 seconds - except LockTimeout: - lock.break_lock() - lock.acquire() - print "I locked", lock.path - lock.release() - -You can also insure that a lock is always held when appropriately decorated -functions are called:: - - from lockfile import locked - @locked("/tmp/mylock") - def func(a, b): - return a + b - -Other Libraries ---------------- - -The idea of implementing advisory locking with a standard API is not new -with :mod:`lockfile`. There are a number of other libraries available: - -* locknix - http://pypi.python.org/pypi/locknix - Unix only -* mx.MiscLockFile - from Marc André Lemburg, part of the mx.Base - distribution - cross-platform. -* Twisted - http://twistedmatrix.com/trac/browser/trunk/twisted/python/lockfile.py -* zc.lockfile - http://pypi.python.org/pypi/zc.lockfile - - -Contacting the Author ---------------------- - -If you encounter any problems with ``lockfile``, would like help or want to -submit a patch, check http://launchpad.net/pylockfile - - -.. _fasteners: http://fasteners.readthedocs.org/ -.. _openstack-dev: mailto:openstack-dev@lists.openstack.org -.. _oslo.concurrency: http://docs.openstack.org/developer/oslo.concurrency/ diff --git a/tmp/lockfile-0.12.2/lockfile.egg-info/PKG-INFO b/tmp/lockfile-0.12.2/lockfile.egg-info/PKG-INFO deleted file mode 100644 index d348d5d..0000000 --- a/tmp/lockfile-0.12.2/lockfile.egg-info/PKG-INFO +++ /dev/null @@ -1,56 +0,0 @@ -Metadata-Version: 1.1 -Name: lockfile -Version: 0.12.2 -Summary: Platform-independent file locking module -Home-page: http://launchpad.net/pylockfile -Author: OpenStack -Author-email: openstack-dev@lists.openstack.org -License: UNKNOWN -Description: Note: This package is **deprecated**. It is highly preferred that instead of - using this code base that instead `fasteners`_ or `oslo.concurrency`_ is - used instead. For any questions or comments or further help needed - please email `openstack-dev`_ and prefix your email subject - with ``[oslo][pylockfile]`` (for a faster response). - - The lockfile package exports a LockFile class which provides a simple API for - locking files. Unlike the Windows msvcrt.locking function, the fcntl.lockf - and flock functions, and the deprecated posixfile module, the API is - identical across both Unix (including Linux and Mac) and Windows platforms. - The lock mechanism relies on the atomic nature of the link (on Unix) and - mkdir (on Windows) system calls. An implementation based on SQLite is also - provided, more as a demonstration of the possibilities it provides than as - production-quality code. - - Note: In version 0.9 the API changed in two significant ways: - - * It changed from a module defining several classes to a package containing - several modules, each defining a single class. - - * Where classes had been named SomethingFileLock before the last two words - have been reversed, so that class is now SomethingLockFile. - - The previous module-level definitions of LinkFileLock, MkdirFileLock and - SQLiteFileLock will be retained until the 1.0 release. - - To install: - - python setup.py install - - * Documentation: http://docs.openstack.org/developer/pylockfile - * Source: http://git.openstack.org/cgit/openstack/pylockfile - * Bugs: http://bugs.launchpad.net/pylockfile - - -Platform: UNKNOWN -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: MIT License -Classifier: Operating System :: POSIX :: Linux -Classifier: Operating System :: MacOS -Classifier: Operating System :: Microsoft :: Windows :: Windows NT/2000 -Classifier: Operating System :: POSIX -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 2 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.3 -Classifier: Topic :: Software Development :: Libraries :: Python Modules diff --git a/tmp/lockfile-0.12.2/lockfile.egg-info/SOURCES.txt b/tmp/lockfile-0.12.2/lockfile.egg-info/SOURCES.txt deleted file mode 100644 index 72948af..0000000 --- a/tmp/lockfile-0.12.2/lockfile.egg-info/SOURCES.txt +++ /dev/null @@ -1,27 +0,0 @@ -ACKS -AUTHORS -ChangeLog -LICENSE -README.rst -RELEASE-NOTES -setup.cfg -setup.py -test-requirements.txt -tox.ini -doc/source/Makefile -doc/source/conf.py -doc/source/index.rst -lockfile/__init__.py -lockfile/linklockfile.py -lockfile/mkdirlockfile.py -lockfile/pidlockfile.py -lockfile/sqlitelockfile.py -lockfile/symlinklockfile.py -lockfile.egg-info/PKG-INFO -lockfile.egg-info/SOURCES.txt -lockfile.egg-info/dependency_links.txt -lockfile.egg-info/not-zip-safe -lockfile.egg-info/pbr.json -lockfile.egg-info/top_level.txt -test/compliancetest.py -test/test_lockfile.py \ No newline at end of file diff --git a/tmp/lockfile-0.12.2/lockfile.egg-info/dependency_links.txt b/tmp/lockfile-0.12.2/lockfile.egg-info/dependency_links.txt deleted file mode 100644 index 8b13789..0000000 --- a/tmp/lockfile-0.12.2/lockfile.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tmp/lockfile-0.12.2/lockfile.egg-info/not-zip-safe b/tmp/lockfile-0.12.2/lockfile.egg-info/not-zip-safe deleted file mode 100644 index 8b13789..0000000 --- a/tmp/lockfile-0.12.2/lockfile.egg-info/not-zip-safe +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tmp/lockfile-0.12.2/lockfile.egg-info/pbr.json b/tmp/lockfile-0.12.2/lockfile.egg-info/pbr.json deleted file mode 100644 index 56252f0..0000000 --- a/tmp/lockfile-0.12.2/lockfile.egg-info/pbr.json +++ /dev/null @@ -1 +0,0 @@ -{"git_version": "c8798ce", "is_release": true} \ No newline at end of file diff --git a/tmp/lockfile-0.12.2/lockfile.egg-info/top_level.txt b/tmp/lockfile-0.12.2/lockfile.egg-info/top_level.txt deleted file mode 100644 index 5a13159..0000000 --- a/tmp/lockfile-0.12.2/lockfile.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -lockfile diff --git a/tmp/lockfile-0.12.2/setup.cfg b/tmp/lockfile-0.12.2/setup.cfg deleted file mode 100644 index e51b5c1..0000000 --- a/tmp/lockfile-0.12.2/setup.cfg +++ /dev/null @@ -1,41 +0,0 @@ -[metadata] -name = lockfile -summary = Platform-independent file locking module -description-file = - README.rst -author = OpenStack -author-email = openstack-dev@lists.openstack.org -home-page = http://launchpad.net/pylockfile -classifier = - Intended Audience :: Developers - License :: OSI Approved :: MIT License - Operating System :: POSIX :: Linux - Operating System :: MacOS - Operating System :: Microsoft :: Windows :: Windows NT/2000 - Operating System :: POSIX - Programming Language :: Python - Programming Language :: Python :: 2 - Programming Language :: Python :: 2.7 - Programming Language :: Python :: 3 - Programming Language :: Python :: 3.3 - Topic :: Software Development :: Libraries :: Python Modules - -[files] -packages = lockfile - -[pbr] -warnerrors = true - -[build_sphinx] -source-dir = doc/source -build-dir = doc/build -all_files = 1 - -[bdist_wheel] -universal = 1 - -[egg_info] -tag_date = 0 -tag_svn_revision = 0 -tag_build = - diff --git a/tmp/lockfile-0.12.2/setup.py b/tmp/lockfile-0.12.2/setup.py deleted file mode 100644 index 782bb21..0000000 --- a/tmp/lockfile-0.12.2/setup.py +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright (c) 2013 Hewlett-Packard Development Company, L.P. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# THIS FILE IS MANAGED BY THE GLOBAL REQUIREMENTS REPO - DO NOT EDIT -import setuptools - -# In python < 2.7.4, a lazy loading of package `pbr` will break -# setuptools if some other modules registered functions in `atexit`. -# solution from: http://bugs.python.org/issue15881#msg170215 -try: - import multiprocessing # noqa -except ImportError: - pass - -setuptools.setup( - setup_requires=['pbr>=1.8'], - pbr=True) diff --git a/tmp/lockfile-0.12.2/test-requirements.txt b/tmp/lockfile-0.12.2/test-requirements.txt deleted file mode 100644 index 446a41f..0000000 --- a/tmp/lockfile-0.12.2/test-requirements.txt +++ /dev/null @@ -1,5 +0,0 @@ -# The order of packages is significant, because pip processes them in the order -# of appearance. Changing the order has an impact on the overall integration -# process, which may cause wedges in the gate later. -nose -sphinx!=1.2.0,!=1.3b1,<1.3,>=1.1.2 diff --git a/tmp/lockfile-0.12.2/test/compliancetest.py b/tmp/lockfile-0.12.2/test/compliancetest.py deleted file mode 100644 index bf4e59c..0000000 --- a/tmp/lockfile-0.12.2/test/compliancetest.py +++ /dev/null @@ -1,262 +0,0 @@ -import os -import threading -import shutil - -import lockfile - - -class ComplianceTest(object): - def __init__(self): - self.saved_class = lockfile.LockFile - - def _testfile(self): - """Return platform-appropriate file. Helper for tests.""" - import tempfile - return os.path.join(tempfile.gettempdir(), 'trash-%s' % os.getpid()) - - def setup(self): - lockfile.LockFile = self.class_to_test - - def teardown(self): - try: - tf = self._testfile() - if os.path.isdir(tf): - shutil.rmtree(tf) - elif os.path.isfile(tf): - os.unlink(tf) - elif not os.path.exists(tf): - pass - else: - raise SystemError("unrecognized file: %s" % tf) - finally: - lockfile.LockFile = self.saved_class - - def _test_acquire_helper(self, tbool): - # As simple as it gets. - lock = lockfile.LockFile(self._testfile(), threaded=tbool) - lock.acquire() - assert lock.i_am_locking() - lock.release() - assert not lock.is_locked() - -# def test_acquire_basic_threaded(self): -# self._test_acquire_helper(True) - - def test_acquire_basic_unthreaded(self): - self._test_acquire_helper(False) - - def _test_acquire_no_timeout_helper(self, tbool): - # No timeout test - e1, e2 = threading.Event(), threading.Event() - t = _in_thread(self._lock_wait_unlock, e1, e2) - e1.wait() # wait for thread t to acquire lock - lock2 = lockfile.LockFile(self._testfile(), threaded=tbool) - assert lock2.is_locked() - if tbool: - assert not lock2.i_am_locking() - else: - assert lock2.i_am_locking() - - try: - lock2.acquire(timeout=-1) - except lockfile.AlreadyLocked: - pass - else: - lock2.release() - raise AssertionError("did not raise AlreadyLocked in" - " thread %s" % - threading.current_thread().get_name()) - - try: - lock2.acquire(timeout=0) - except lockfile.AlreadyLocked: - pass - else: - lock2.release() - raise AssertionError("did not raise AlreadyLocked in" - " thread %s" % - threading.current_thread().get_name()) - - e2.set() # tell thread t to release lock - t.join() - -# def test_acquire_no_timeout_threaded(self): -# self._test_acquire_no_timeout_helper(True) - -# def test_acquire_no_timeout_unthreaded(self): -# self._test_acquire_no_timeout_helper(False) - - def _test_acquire_timeout_helper(self, tbool): - # Timeout test - e1, e2 = threading.Event(), threading.Event() - t = _in_thread(self._lock_wait_unlock, e1, e2) - e1.wait() # wait for thread t to acquire lock - lock2 = lockfile.LockFile(self._testfile(), threaded=tbool) - assert lock2.is_locked() - try: - lock2.acquire(timeout=0.1) - except lockfile.LockTimeout: - pass - else: - lock2.release() - raise AssertionError("did not raise LockTimeout in thread %s" % - threading.current_thread().get_name()) - - e2.set() - t.join() - - def test_acquire_timeout_threaded(self): - self._test_acquire_timeout_helper(True) - - def test_acquire_timeout_unthreaded(self): - self._test_acquire_timeout_helper(False) - - def _test_context_timeout_helper(self, tbool): - # Timeout test - e1, e2 = threading.Event(), threading.Event() - t = _in_thread(self._lock_wait_unlock, e1, e2) - e1.wait() # wait for thread t to acquire lock - lock2 = lockfile.LockFile(self._testfile(), threaded=tbool, - timeout=0.2) - assert lock2.is_locked() - try: - lock2.acquire() - except lockfile.LockTimeout: - pass - else: - lock2.release() - raise AssertionError("did not raise LockTimeout in thread %s" % - threading.current_thread().get_name()) - - e2.set() - t.join() - - def test_context_timeout_unthreaded(self): - self._test_context_timeout_helper(False) - - def _test_release_basic_helper(self, tbool): - lock = lockfile.LockFile(self._testfile(), threaded=tbool) - lock.acquire() - assert lock.is_locked() - lock.release() - assert not lock.is_locked() - assert not lock.i_am_locking() - try: - lock.release() - except lockfile.NotLocked: - pass - except lockfile.NotMyLock: - raise AssertionError('unexpected exception: %s' % - lockfile.NotMyLock) - else: - raise AssertionError('erroneously unlocked file') - -# def test_release_basic_threaded(self): -# self._test_release_basic_helper(True) - - def test_release_basic_unthreaded(self): - self._test_release_basic_helper(False) - -# def test_release_from_thread(self): -# e1, e2 = threading.Event(), threading.Event() -# t = _in_thread(self._lock_wait_unlock, e1, e2) -# e1.wait() -# lock2 = lockfile.LockFile(self._testfile(), threaded=False) -# assert not lock2.i_am_locking() -# try: -# lock2.release() -# except lockfile.NotMyLock: -# pass -# else: -# raise AssertionError('erroneously unlocked a file locked' -# ' by another thread.') -# e2.set() -# t.join() - - def _test_is_locked_helper(self, tbool): - lock = lockfile.LockFile(self._testfile(), threaded=tbool) - lock.acquire(timeout=2) - assert lock.is_locked() - lock.release() - assert not lock.is_locked(), "still locked after release!" - -# def test_is_locked_threaded(self): -# self._test_is_locked_helper(True) - - def test_is_locked_unthreaded(self): - self._test_is_locked_helper(False) - -# def test_i_am_locking_threaded(self): -# self._test_i_am_locking_helper(True) - - def test_i_am_locking_unthreaded(self): - self._test_i_am_locking_helper(False) - - def _test_i_am_locking_helper(self, tbool): - lock1 = lockfile.LockFile(self._testfile(), threaded=tbool) - assert not lock1.is_locked() - lock1.acquire() - try: - assert lock1.i_am_locking() - lock2 = lockfile.LockFile(self._testfile(), threaded=tbool) - assert lock2.is_locked() - if tbool: - assert not lock2.i_am_locking() - finally: - lock1.release() - - def _test_break_lock_helper(self, tbool): - lock = lockfile.LockFile(self._testfile(), threaded=tbool) - lock.acquire() - assert lock.is_locked() - lock2 = lockfile.LockFile(self._testfile(), threaded=tbool) - assert lock2.is_locked() - lock2.break_lock() - assert not lock2.is_locked() - try: - lock.release() - except lockfile.NotLocked: - pass - else: - raise AssertionError('break lock failed') - -# def test_break_lock_threaded(self): -# self._test_break_lock_helper(True) - - def test_break_lock_unthreaded(self): - self._test_break_lock_helper(False) - - def _lock_wait_unlock(self, event1, event2): - """Lock from another thread. Helper for tests.""" - l = lockfile.LockFile(self._testfile()) - l.acquire() - try: - event1.set() # we're in, - event2.wait() # wait for boss's permission to leave - finally: - l.release() - - def test_enter(self): - lock = lockfile.LockFile(self._testfile()) - lock.acquire() - try: - assert lock.is_locked(), "Not locked after acquire!" - finally: - lock.release() - assert not lock.is_locked(), "still locked after release!" - - def test_decorator(self): - @lockfile.locked(self._testfile()) - def func(a, b): - return a + b - assert func(4, 3) == 7 - - -def _in_thread(func, *args, **kwargs): - """Execute func(*args, **kwargs) after dt seconds. Helper for tests.""" - def _f(): - func(*args, **kwargs) - t = threading.Thread(target=_f, name='/*/*') - t.setDaemon(True) - t.start() - return t diff --git a/tmp/lockfile-0.12.2/test/test_lockfile.py b/tmp/lockfile-0.12.2/test/test_lockfile.py deleted file mode 100644 index ca1ed06..0000000 --- a/tmp/lockfile-0.12.2/test/test_lockfile.py +++ /dev/null @@ -1,41 +0,0 @@ -import lockfile.linklockfile -import lockfile.mkdirlockfile -import lockfile.pidlockfile -import lockfile.symlinklockfile - -from compliancetest import ComplianceTest - - -class TestLinkLockFile(ComplianceTest): - class_to_test = lockfile.linklockfile.LinkLockFile - - -class TestSymlinkLockFile(ComplianceTest): - class_to_test = lockfile.symlinklockfile.SymlinkLockFile - - -class TestMkdirLockFile(ComplianceTest): - class_to_test = lockfile.mkdirlockfile.MkdirLockFile - - -class TestPIDLockFile(ComplianceTest): - class_to_test = lockfile.pidlockfile.PIDLockFile - - -# Check backwards compatibility -class TestLinkFileLock(ComplianceTest): - class_to_test = lockfile.LinkFileLock - - -class TestMkdirFileLock(ComplianceTest): - class_to_test = lockfile.MkdirFileLock - -try: - import sqlite3 # noqa -except ImportError: - pass -else: - import lockfile.sqlitelockfile - - class TestSQLiteLockFile(ComplianceTest): - class_to_test = lockfile.sqlitelockfile.SQLiteLockFile diff --git a/tmp/lockfile-0.12.2/tox.ini b/tmp/lockfile-0.12.2/tox.ini deleted file mode 100644 index 750ad5f..0000000 --- a/tmp/lockfile-0.12.2/tox.ini +++ /dev/null @@ -1,27 +0,0 @@ -# content of: tox.ini , put in same dir as setup.py -[tox] -envlist = py27,py32,py33,py34 - -[testenv] -deps = -r{toxinidir}/test-requirements.txt -commands=nosetests - -[testenv:venv] -commands = {posargs} - -[testenv:pep8] -deps = flake8 -commands = flake8 - -[testenv:docs] -commands = python setup.py build_sphinx - -[testenv:cover] -deps = {[testenv]deps} - coverage -commands = - nosetests --with-coverage --cover-erase --cover-package=lockfile --cover-inclusive [] - -[flake8] -exclude=.venv,.git,.tox,dist,doc -show-source = True diff --git a/tmp/python-daemon-2.1.1.tar.gz b/tmp/python-daemon-2.1.1.tar.gz deleted file mode 100644 index f5989e7969480da18947afae34ad0e0599587436..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74276 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

f5x%si^ucMoH@iPta3+ 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

nh!ZH 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