Source code for railgun.userhost.client

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# @file: railgun/userhost/client.py
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# This file is released under BSD 2-clause license.

import socket


[docs]class UserHostClient(object): """Client to communicate with user host server.""" def __init__(self, host, port): self.host = host self.port = port def _communicate(self, payload): sck = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sck.settimeout(10) sck.connect((self.host, self.port)) f = sck.makefile('rw') f.write('%s\n' % payload) f.flush() ret = f.readline().strip() sck.close() return ret
[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. """ ret = self._communicate('get %d' % expires).split(' ') if ret[0] == 'okay': return ret[1]
[docs] def release(self, user): """Release the acquired user immediately. :param user: The name of acquired user. :type user: :class:`str` :return: :data:`True` if succeeded, :data:`False` otherwise. """ ret = self._communicate('put %s' % user) return ret == 'okay'