sbws.util package¶
Submodules¶
sbws.util.config module¶
Util functions to manage sbws configuration files.
sbws.util.filelock module¶
- class sbws.util.filelock.DirectoryLock(dname)[source]¶
Bases:
_FLock
Holds a lock on a file in dname so that other sbws processes/threads won’t try to read/write while we are reading/writing in this directory.
>>> with DirectoryLock(dname): >>> # do some reading/writing in dname >>> # no longer have the lock
Note: The directory must already exist.
- Parameters:
dname (str) – Name of directory for which we want to obtain a lock
- class sbws.util.filelock.FileLock(fname)[source]¶
Bases:
_FLock
Holds a lock on fname so that other sbws processes/threads won’t try to read/write while we are reading/writing this file.
>>> with FileLock(fname): >>> # do some reading/writing of fname >>> # no longer have the lock
- Parameters:
fname (str) – Name of the file for which we want to obtain a lock
sbws.util.parser module¶
sbws.util.state module¶
- class sbws.util.state.State(fname)[source]¶
Bases:
object
json wrapper to read a json file every time it gets a key and to write to the file every time a key is set.
Every time a key is got or set, the file is locked, to atomically access and update the file across threads and across processes.
>>> state = State('foo.state') >>> # state == {}
>>> state['linux'] = True >>> # 'foo.state' now exists on disk with the JSON for {'linux': True}
>>> # We read 'foo.state' from disk in order to get the most up-to-date >>> # state info. Pretend another process has updated 'linux' to be >>> # False >>> state['linux'] >>> # returns False
>>> # Pretend another process has added the user's age to the state file. >>> # As before, we read the state file from disk for the most >>> # up-to-date info. >>> state['age'] >>> # Returns 14
>>> # We now set their name. We read the state file first, set the option, >>> # and then write it out. >>> state['name'] = 'John'
>>> # We can do many of the same things with a State object as with a dict >>> for key in state: print(key) >>> # Prints 'linux', 'age', and 'name'
sbws.util.stem module¶
- sbws.util.stem.attach_stream_to_circuit_listener(controller, circ_id, bwscanner_cc)[source]¶
Returns a function that should be given to add_event_listener(). It looks for newly created streams and attaches them to the given circ_id
- sbws.util.stem.get_socks_info(controller)[source]¶
Returns the first SocksPort Tor is configured to listen on, in the form of an (address, port) tuple
- sbws.util.stem.is_torrc_starting_point_set(tor_controller)[source]¶
Verify that the tor controller has the correct configuration.
When connecting to a tor controller that has not been launched by sbws, it should have been configured to work with sbws.
- sbws.util.stem.only_relays_with_bandwidth(relays, min_bw=None, max_bw=None)[source]¶
Given a list of relays, only return those that optionally have above min_bw and optionally have below max_bw, inclusively. If neither min_bw nor max_bw are given, essentially just returns the input list of relays.
- sbws.util.stem.parse_user_torrc_config(torrc, torrc_text)[source]¶
Parse the user configuration torrc text call extra_lines to a dictionary suitable to use with stem and return a new torrc dictionary that merges that dictionary with the existing torrc. Example:
[tor] extra_lines = Log debug file /tmp/tor-debug.log NumCPUs 1