Skip to main content

the set of common tools

Project description


the set of common tools


Class EventManager

provide event sending and listening. use a hashable key to identify an event.

def f(key, data):
    print data

manager = EventManager()
manager.start() # start listen

manager.addListener(key='evnet_key', listener=f)

manager.sendEvent(key='evnet_key', 'print hello')

# other methods
manager.removeListener(key='evnet_key', f)
manager.stop() # stop listen
manager.clear() # clear event

Class Path

convenient to join file path in a chain manner:

s = Path('.')
s = s.join('a', 'b').join('..')
# s == 'a'

it uses os.path.join and always normalizes the path with os.path.normpath
because os.path.join join the 'a', '..' to 'a/..'

Module properties

read/write .properties file in line-oriented format
key=value per line through function.

the code refers to java.util.Properties in Java 1.6.

Common Usage

  • file I/O:

    # input
    properties = load(file)
    # or update existing dictionary
    load(file, properties)
    # output
    store(file, properties)
  • custom input:
    class LineReader read in one key-value data. It skips all comment lines,
    blank lines, leading whitespace, and processes multi-line data.
    loadSingle(string) read each piece of data given above to key-value.

    for line in LineReader(file): # each key-value line has no line seperator
        key, value = loadSingle(line)
        # do something
  • custom output:
    storeComments(writable, comments, linesep=os.linesep))
    write comment (accept multi-line), can specify the line terminator.
    storeSingle(writable, key, value, sep='=', linesep=os.linesep)
    write one key-value, can specify the seperator and the line terminator.

    storeComments(file, 'this is a comment')
    storeSingle(file, 'key', 'value')

File Format

normally each line is comment line or a key-value pair.

main features:

  • seperate key and value by one of =, :, , \t
  • ignore whitespaces leading in a line or around = or :
  • comment line begin with # or !
  • escape unicode by \uxxxx
  • escape special characters by adding \


  • data line ends with \ discard the line break

differences with Java:

  • store method will not write datetime comment

Thread classes

def func(a, b, stop_event):
    while 1:
        if stop_event.is_set():
        # do your work

thread = StoppableThread(target=func, args=('a', 'b'))
# ...
thread.stop(-1) # stop and join forever
# thread.stopped() == True

thread = ReStartableThread(target=func, args=('a', 'b'), event_name='stop_event') # can specify the parameter's name
# ...
thread.stop(1) # stop and join for 1 second
# ...
# ...
# ...


provide simple reliable persistence for string data base on a string key.

data changes will append to the file like logging while update. data are store in csv format. you can compress the data anytime reliably.


# common use
storage = getStorage('./data.csv')
author = storage.setdefault('author', 'sine')
storage['author'] = 'Sine'
del storage['author']

for k in storage.keys():
    print(k, storage[k])

# compress data

Change Log

v0.1.1, 2019-12-14

  • EventManager's process thread defaults to be daemon, can be set.

v0.1.0, 2019-7-21

collect from exist package:

  • sine.path-v0.1.3
  • sine.threads-v0.1.7
  • sine.event-v0.0.2

and the new 'storage'.


  • EventManager: change arguments passing, include the key (just like calling the sendEvent)
  • threads: fix about args appending

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for sine.utils, version 0.1.1
Filename, size File type Python version Upload date Hashes
Filename, size sine.utils-0.1.1.tar.gz (22.4 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page