Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 8 additions & 21 deletions tests/test_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
from wilfred.api.servers import Servers
from wilfred.docker_conn import docker_client
from wilfred.api.server_config import ServerConfig
from wilfred.database import Server, EnvironmentVariable, session
from wilfred.api.config_parser import Config

config = Config()
Expand All @@ -33,36 +32,24 @@

def test_create_server():
# create
server = Server(
server = servers.create(
id="test",
name="test",
image_uid="minecraft-paper",
memory="1024",
port="25565",
custom_startup=None,
status="installing",
environment_variables=[
{"variable": "MINECRAFT_VERSION", "value": "latest"},
{"variable": "EULA_ACCEPTANCE", "value": "true"},
],
)
session.add(server)
session.commit()

minecraft_version = EnvironmentVariable(
server_id=server.id, variable="MINECRAFT_VERSION", value="latest"
)

eula_acceptance = EnvironmentVariable(
server_id=server.id, variable="EULA_ACCEPTANCE", value="true"
)

session.add(minecraft_version)
session.add(eula_acceptance)
session.commit()

servers.install(server, skip_wait=False)
servers.sync()


def test_start_server():
server = session.query(Server).filter_by(id="test").first()
server = servers.query(name="test")

if server.status == "installing":
raise Exception("server is installing")
Expand All @@ -72,7 +59,7 @@ def test_start_server():


def test_pseudo_config_write():
server = session.query(Server).filter_by(id="test").first()
server = servers.query(name="test")

image = images.get_image(server.image_uid)

Expand All @@ -87,5 +74,5 @@ def test_pseudo_config_write():


def test_delete_server():
server = session.query(Server).filter_by(id="test").first()
server = servers.query(name="test")
servers.remove(server)
2 changes: 1 addition & 1 deletion wilfred/api/config_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
from os.path import isfile, isdir
from pathlib import Path

from wilfred.errors import WilfredException, ParseError, WriteError
from wilfred.api.errors import WilfredException, ParseError, WriteError

API_VERSION = 1

Expand Down
File renamed without changes.
File renamed without changes.
2 changes: 1 addition & 1 deletion wilfred/api/images.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
from copy import deepcopy
from datetime import datetime, timedelta

from wilfred.errors import WilfredException, ReadError, ParseError
from wilfred.api.errors import WilfredException, ReadError, ParseError
from wilfred.version import version

API_VERSION = 2
Expand Down
2 changes: 1 addition & 1 deletion wilfred/api/server_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
from tabulate import tabulate

from wilfred.container_variables import ContainerVariables
from wilfred.errors import WilfredException, ParseError, WriteError
from wilfred.api.errors import WilfredException, ParseError, WriteError

from wilfred.api.parser.properties import properties_read, properties_write
from wilfred.api.parser.yaml import yaml_read, yaml_write
Expand Down
91 changes: 83 additions & 8 deletions wilfred/api/servers.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,17 +20,22 @@
from subprocess import call
from sqlalchemy import inspect

from wilfred.database import session, Server, EnvironmentVariable, Port
from wilfred.api.database import session, Server, EnvironmentVariable, Port
from wilfred.keyboard import KeyboardThread
from wilfred.container_variables import ContainerVariables
from wilfred.api.images import Images
from wilfred.errors import WilfredException, WriteError
from wilfred.api.errors import WilfredException, WriteError
from wilfred.core import random_string


class ServerNotRunning(WilfredException):
"""Server is not running"""


class ServerNotFound(WilfredException):
"""Specified server was not found"""


class Servers(object):
def __init__(
self, docker_client: docker.DockerClient, configuration: dict, images: Images
Expand Down Expand Up @@ -161,7 +166,7 @@ def remove(self, server: Server):
Removes specified server

Args:
server (wilfred.database.Server): Server database object
server (wilfred.api.database.Server): Server database object
"""

path = f"{self._configuration['data_path']}/{server.name}_{server.id}"
Expand Down Expand Up @@ -192,7 +197,7 @@ def console(self, server: Server, disable_user_input=False):
Enters server console

Args:
server (wilfred.database.Server): Server database object
server (wilfred.api.database.Server): Server database object
disable_user_input (bool): Blocks user input if `True`. By default this is `False`.

Raises:
Expand All @@ -218,12 +223,82 @@ def console(self, server: Server, disable_user_input=False):
except docker.errors.NotFound:
raise ServerNotRunning(f"server {server.id} is not running")

def create(
self,
name,
image_uid,
memory,
port,
custom_startup=None,
environment_variables=[],
id=None,
):
"""
Creates a new server

Args:
name (str): Name of new server
image_uid (str): UID of server image to use
memory (int): Memory to configure server with (in megabytes, i.e. 1024)
port (int): Port server should listen to
custom_startup (str, optional): Optional custom startup command (by default uses image command)
environment_variables (:obj:`list` of :obj:`dict`, optional): Optional list of environment variables
id (str, optional): Override generating random string as id by specifying it here

Returns:
wilfred.api.database.Server: Server database object of newly created server
"""

server = Server(id=random_string() if not id else id)

server.name = name
server.image_uid = image_uid
server.memory = memory
server.port = port
server.custom_startup = custom_startup
server.status = "installing"

# commit changes to database
session.add(server)
session.commit()

for environment_variable in environment_variables:
session.add(
EnvironmentVariable(
server_id=server.id,
variable=environment_variable["variable"],
value=environment_variable["value"],
)
)

session.commit()

return server

def query(self, name):
"""
Returns :class:`wilfred.api.database.Server` object of specified server

Args:
name (str): Name of server to query for

Returns:
wilfred.api.database.Server: Server database object of specified server
"""

server = session.query(Server).filter_by(name=name.lower()).first()

if not server:
raise ServerNotFound(f"Could not find server by name {name}")

return server

def install(self, server: Server, skip_wait=False, spinner=None):
"""
Performs installation

Args:
server (wilfred.database.Server): Server database object
server (wilfred.api.database.Server): Server database object
skip_wait (bool): Doesn't stall while waiting for server installation to complete if `True`.
spinner (Halo): If `Halo` spinner object is defined, will then write and perform actions to it.

Expand Down Expand Up @@ -288,7 +363,7 @@ def kill(self, server):
Kills server container

Args:
server (wilfred.database.Server): Server database object
server (wilfred.api.database.Server): Server database object

Raises:
:py:class:`ServerNotRunning`
Expand All @@ -307,7 +382,7 @@ def rename(self, server, name):
Renames server and moves server folder

Args:
server (wilfred.database.Server): Server database object
server (wilfred.api.database.Server): Server database object
name (str): New name of the server

Raises:
Expand Down Expand Up @@ -339,7 +414,7 @@ def command(self, server, command):
Sends command to server console

Args:
server (wilfred.database.Server): Server database object
server (wilfred.api.database.Server): Server database object
command (str): The command to send to the stdin of the server

Raises:
Expand Down
2 changes: 1 addition & 1 deletion wilfred/container_variables.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
# #
#################################################################

from wilfred.database import session, EnvironmentVariable
from wilfred.api.database import session, EnvironmentVariable


class ContainerVariables(object):
Expand Down
2 changes: 1 addition & 1 deletion wilfred/migrate.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
from os import remove

from wilfred.message_handler import error
from wilfred.database import session, Server, EnvironmentVariable
from wilfred.api.database import session, Server, EnvironmentVariable


class Migrate:
Expand Down
8 changes: 7 additions & 1 deletion wilfred/wilfred.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,13 @@
from wilfred.docker_conn import docker_client
from wilfred.version import version, commit_hash, commit_date
from wilfred.api.config_parser import Config, NoConfiguration
from wilfred.database import session, database_path, Server, EnvironmentVariable, Port
from wilfred.api.database import (
session,
database_path,
Server,
EnvironmentVariable,
Port,
)
from wilfred.api.servers import Servers
from wilfred.api.images import Images, ImageAPIMismatch, ImagesOutdated
from wilfred.message_handler import warning, error, ui_exception
Expand Down