Source code for railgun.userhost.userpool
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# @file: railgun/userhost/userpool.py
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# This file is released under BSD 2-clause license.
import time
[docs]class UserPool(object):
"""Manages the available account."""
def __init__(self, users):
self.users = users
self._expires = {u: 0 for u in users}
[docs] def current_time(self):
"""Get the current timestamp."""
return int(time.time())
[docs] def acquire(self, expires=10):
"""Get a free user, which will expire in `expires` seconds.
:param expires: Seconds before the user is exipred and recycled for
next request.
:type expires: :class:`int`
:return: The user name if available, :data:`None` otherwise.
"""
now_time = self.current_time()
for u in self.users:
user_expire = self._expires[u]
if user_expire < now_time:
self._expires[u] = now_time + expires
return u
[docs] def release(self, user):
"""Release the acquired user immediately.
:param user: The name of acquired user.
:type user: :class:`str`
"""
self._expires[user] = 0