class OrientDBPluginExecutor(object):
    def __init__(self, server_host, server_port):
        self.command = OrientDBServerCommand(server_host, server_port)

    def execute(self, pluginname, classname, settings=None):
        data = {"plugin": pluginname, "class": classname, "settings": settings}
        json_data = json.dumps(data)
        self.command.execute_post_command("/executeplugin/", json_data)
class OrientDBProjectManager(ProjectManager):
    def __init__(self, server_host, server_port):
        self.command = OrientDBServerCommand(server_host, server_port)

    def create(self, project_name):
        return self.command.execute_get_command("/manageprojects/create/{}".format(project_name))

    def delete(self, project_name):
        return self.command.execute_get_command("/manageprojects/delete/{}".format(project_name))

    def list(self):
        return self.command.execute_get_command("/manageprojects/list")
class OrientDBProjectManager(ProjectManager):
    def __init__(self, server_host, server_port):
        self.command = OrientDBServerCommand(server_host, server_port)

    def create(self, project_name):
        return self.command.execute_get_command(
            "/manageprojects/create/{}".format(project_name))

    def delete(self, project_name):
        return self.command.execute_get_command(
            "/manageprojects/delete/{}".format(project_name))

    def list(self):
        return self.command.execute_get_command("/manageprojects/list")
    def testUnreachableServer(self):

        self.hostname = 'localhost'
        self.port = '1337'

        cmd = OrientDBServerCommand(self.hostname, self.port)
        self.assertRaises(ConnectionRefusedError, cmd.execute_get_command, "foo")
class OrientDBShellManager(ShellManager):
    def __init__(self, server_host, server_port):
        self.command = OrientDBServerCommand(server_host, server_port)

    def create(self, project_name):
        response = self.command.execute_get_command("/manageshells/create/{}".format(project_name))
        port = int(response)
        return port

    def list(self, project_name=None, shell_port=None):
        response = self.command.execute_get_command("/manageshells/list")
        if not response:
            return
        for shell in response.split('\n'):
            port, dbName, name, occupied = shell.split('\t')
            port = int(port)
            if (not project_name or name == project_name) and (not shell_port or port == shell_port):
                yield port, dbName, name, ('occupied' if occupied == 'true' else 'free')
class OrientDBPluginExecutor(object):
    def __init__(self, server_host, server_port):
        self.command = OrientDBServerCommand(server_host, server_port)

    def execute(self, pluginname, classname, settings=None):
        data = {"plugin": pluginname, "class": classname, "settings": settings}
        json_data = json.dumps(data)
        return self.post(json_data)

    def post(self, json_data):
        return self.command.execute_post_command("/executeplugin/", json_data)
class OrientDBProjectManager(ProjectManager):
    def __init__(self, server_host, server_port):
        self.command = OrientDBServerCommand(server_host, server_port)

    def create(self, project_name):
        return self.command.execute_get_command("/manageprojects/create/{}".format(project_name))

    def delete(self, project_name):
        return self.command.execute_get_command("/manageprojects/delete/{}".format(project_name))

    def list(self):
        return self.command.execute_get_command("/manageprojects/list")

    def upload_file(self, project_name, file):
        file_content = file.read()
        content_type = "text/plain;charset=us/ascii"

        name = "/manageprojects/uploadfile/{}/binary".format(project_name)
        body = base64.b64encode(file_content)
        headers = {"Content-type": content_type}

        return self.command.execute_post_command(name, body, headers)
class OrientDBShellManager(ShellManager):
    def __init__(self, server_host, server_port):
        self.command = OrientDBServerCommand(server_host, server_port)

    def create(self, project_name, shellname='noname'):
        response = self.command.execute_get_command(
            "/manageshells/create/{}/{}".format(project_name, shellname))
        port = int(response)
        return port

    def list(self, project_name=None, shell_port=None, filter_occupied=False):
        response = self.command.execute_get_command("/manageshells/list")
        if not response:
            return
        for shell in response.split('\n'):
            port, dbName, name, occupied = shell.split('\t')
            port = int(port)
            occupied = True if occupied == 'true' else False
            if (not project_name or dbName == project_name) \
                    and (not shell_port or port == shell_port) \
                    and (not filter_occupied or not occupied):
                yield port, dbName, name, ('occupied' if occupied else 'free')
 def __init__(self, server_host, server_port):
     self.command = OrientDBServerCommand(server_host, server_port)
 def __init__(self, server_host, server_port):
     self.command = OrientDBServerCommand(server_host, server_port)