mirror of
				https://github.com/avatao-content/baseimage-tutorial-framework
				synced 2025-11-04 13:12:55 +00:00 
			
		
		
		
	Correct whitespaces and add context manager for file locking
This commit is contained in:
		
				
					committed by
					
						
						therealkrispet
					
				
			
			
				
	
			
			
			
						parent
						
							25bd9aa0f3
						
					
				
				
					commit
					96c6c9b358
				
			@@ -1,4 +1,5 @@
 | 
			
		||||
from os import remove
 | 
			
		||||
from contextlib import contextmanager
 | 
			
		||||
from fcntl import flock, LOCK_EX, LOCK_UN
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -6,9 +7,14 @@ class RefCounter:
 | 
			
		||||
    def __init__(self, lockpath):
 | 
			
		||||
        self.lockpath = lockpath
 | 
			
		||||
        self._lockfile = open(self.lockpath, 'a+')
 | 
			
		||||
        with self.locked():
 | 
			
		||||
            counter = self._read_counter()
 | 
			
		||||
            self._write_counter(counter+1)
 | 
			
		||||
 | 
			
		||||
    @contextmanager
 | 
			
		||||
    def locked(self):
 | 
			
		||||
        flock(self._lockfile, LOCK_EX)
 | 
			
		||||
        counter = self._read_counter()
 | 
			
		||||
        self._write_counter(counter+1)
 | 
			
		||||
        yield
 | 
			
		||||
        flock(self._lockfile, LOCK_UN)
 | 
			
		||||
 | 
			
		||||
    def _read_counter(self):
 | 
			
		||||
@@ -26,14 +32,13 @@ class RefCounter:
 | 
			
		||||
        self._lockfile.flush()
 | 
			
		||||
 | 
			
		||||
    def teardown_instance(self):
 | 
			
		||||
        flock(self._lockfile, LOCK_EX)
 | 
			
		||||
        counter = self._read_counter()
 | 
			
		||||
        if counter <= 1:
 | 
			
		||||
            remove(self.lockpath)
 | 
			
		||||
            self.deallocate()
 | 
			
		||||
        else:
 | 
			
		||||
            self._write_counter(counter-1)
 | 
			
		||||
            flock(self._lockfile, LOCK_UN)
 | 
			
		||||
        with self.locked():
 | 
			
		||||
            counter = self._read_counter()
 | 
			
		||||
            if counter <= 1:
 | 
			
		||||
                remove(self.lockpath)
 | 
			
		||||
                self.deallocate()
 | 
			
		||||
            else:
 | 
			
		||||
                self._write_counter(counter-1)
 | 
			
		||||
        self._lockfile.close()
 | 
			
		||||
 | 
			
		||||
    def deallocate(self):
 | 
			
		||||
 
 | 
			
		||||
@@ -39,6 +39,7 @@ def context():
 | 
			
		||||
        mkfifo(pipepath)
 | 
			
		||||
        yield CounterContext(join(workdir, 'test.lock'), pipepath)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_increment_decrement(context):
 | 
			
		||||
    counter, processes = 0, []
 | 
			
		||||
    for _ in range(5):
 | 
			
		||||
@@ -53,6 +54,7 @@ def test_increment_decrement(context):
 | 
			
		||||
        proc.send_signal(SIGINT)
 | 
			
		||||
        proc.wait()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_deallocate(context):
 | 
			
		||||
    state = False
 | 
			
		||||
    def trigger():
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user