Inelegant, a directory of weird helpers for tests.
- “Inelegant” is a set of not very elegant tools to help testing. So far
there are eight packages:
inelegant.net: the most important tools are the waiter functions. inelegant.net.wait_server_down() will block until a port in a host is not accepting connections anymore, and inelegant.net.wait_server_up() will block until a port in the host will be ready for receiving data. There is also inelegant.net.Server, that sets up a very dumb SocketServer.TCPServer subclass for testing.
inelegant.finder: contains the inelegant.finder.TestFinder class. It is a unittest.TestSuite subclass that makes the task of finding test cases and doctests way less annoying.
inelegant.module: with inelegant.module.create_module(), one can create fully importable Python modules. inelegant.module.installed_module() will create and remove the importable module. There are other related functions.
inelegant.process: home of inelegant.process.Process, a nice multiprocessing.Process subclass that makes the process of starting, stopping and communicating with a function in another process easier enough.
inelegant.fs: tools for file system operations. Most notably, context managers to make such operations reverted. So, now once can “cd” into a directory and be back to the original one, create a temporary file and have it automatically deleted after the context, and the same with temporary directories.
inelegant.dict: it provides the temp_key() context manager. It adds a key to a dictionary and, once its context is done, removes the key.
inelegant.toggle: it provides the Toggle class. It is used to create flags to enable global behaviors. A toggle is, indeed, something you would rather avoid but may need.
inelegant.io: tools to process standard input/output/error. Right now it has four context managers: redirect_stdout() and redirect_stderr(), that redirect the standard output and the standard error, respectively, to a file, and suppress_stdout() and suppress_stderr(), that only discard content written to these files.
For more info, check the project page.