Ignore:
Timestamp:
Jul 29, 2008, 10:35:08 PM (16 years ago)
Author:
y_z
Message:
  • added file locking around cache
  • cleanup
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/packages/sipb-xen-base/files/usr/share/python-support/sipb-xen-base/invirt/common.py

    r778 r781  
    11import unittest
     2from fcntl import flock, LOCK_EX, LOCK_UN
     3from os import remove
    24
    35class struct(object):
    46    'A simple namespace object.'
    5     def __init__(self, d = {}):
     7    def __init__(self, d = {}, **kwargs):
    68        'd is the dictionary to update my __dict__ with.'
    79        self.__dict__.update(d)
     10        self.__dict__.update(kwargs)
    811
    912def dicts2struct(x):
     
    1922        return x
    2023
    21 def wrap(rsrc, func):
    22     "Utility to that emulates with Python 2.5's `with closing(rsrc)`."
    23     try: return func(rsrc)
    24     finally: rsrc.close()
     24#
     25# Hacks to work around lack of Python 2.5's `with` statement.
     26#
     27
     28def with_closing(rsrc):
     29    "Utility to emulate Python 2.5's `with closing(rsrc)` context manager."
     30    def wrapper(func):
     31        try: return func(rsrc)
     32        finally: rsrc.close()
     33    return wrapper
     34
     35def with_lock_file(path):
     36    """
     37    Context manager for lock files.  Example:
     38
     39    @with_lock_file('/tmp/mylock')
     40    def input():
     41        print 'locked'
     42        return raw_input()
     43    # decorator is executed immediately
     44    print input # prints the input text
     45    """
     46    def wrapper(func):
     47        @with_closing(file(path, 'w'))
     48        def g(f):
     49            flock(f, LOCK_EX)
     50            try: return func()
     51            finally: flock(f, LOCK_UN)
     52        remove(path)
     53        return g
     54    return wrapper
     55
     56#
     57# Tests.
     58#
    2559
    2660class common_tests(unittest.TestCase):
Note: See TracChangeset for help on using the changeset viewer.