28 lines
1,009 B
Python
28 lines
1,009 B
Python
import logging
|
|
import tarfile
|
|
import cStringIO
|
|
|
|
from flask import request, make_response
|
|
|
|
from config_app.c_app import config_provider
|
|
from config_app.config_endpoints.api import resource, ApiResource, nickname, validate_json_request
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
@resource('/v1/configapp/tarconfig')
|
|
class TarConfigLoader(ApiResource):
|
|
""" Resource for validating a block of configuration against an external service. """
|
|
|
|
@nickname('uploadTarballConfig')
|
|
def post(self):
|
|
""" Loads tarball config into the config provider """
|
|
input_stream = request.stream
|
|
|
|
# since we're working with a tar file, shouldn't be larger than ~20KB, so just read the whole thing into mem
|
|
buf = input_stream.read()
|
|
config = tarfile.open(mode="r:gz", fileobj=cStringIO.StringIO(buf))
|
|
|
|
# TODO(sam): refactor config provider to accept a stream write to avoid loading into memory
|
|
config_provider.load_from_tarball(config)
|
|
|
|
return make_response('OK')
|