Source code for tcpnetlock.common

import tcpnetlock.constants


# def ignore_client_disconnected_exception(f):
#     """Swallows ClientDisconnected. Use this in method that can receive this exception but can safely ignore it"""
#     @functools.wraps(f)
#     def wrapper(*args, **kwargs):
#         try:
#             return f(*args, **kwargs)
#         except ClientDisconnected:
#             pass
#     return wrapper


[docs]class TcpNetLockException(Exception): """ Base class for exceptions. """
[docs]class ClientDisconnected(TcpNetLockException): pass
[docs]class InvalidClientIdError(TcpNetLockException): """ Raised by the client if the provided client-id is not valid. """
[docs]class InvalidLockNameError(TcpNetLockException): """ Raised by the client if the provided LOCK name is not valid. """
[docs]class Utils:
[docs] @staticmethod def valid_lock_name(lock_name): """Returns True if the provided lock name is valid""" return bool(tcpnetlock.constants.VALID_LOCK_NAME_RE.match(lock_name))
[docs] @staticmethod def validate_client_id(client_id, accept_none=True): """Raises InvalidClientIdError if client-id is invalid. Pass if it's None""" if client_id is None: if accept_none: return else: raise InvalidClientIdError("You must provide a client-id") if not tcpnetlock.constants.VALID_CLIENT_ID_RE.match(client_id): raise InvalidClientIdError("The provided client-id is not valid")
[docs]class Counter: """Counter, just that. We don't care about atomicity. """ def __init__(self): self._count = 0 @property def count(self): return self._count
[docs] def incr(self): self._count += 1