Skip to content
Snippets Groups Projects
Commit 11392444 authored by Thomas Reifenberger's avatar Thomas Reifenberger
Browse files

Also encode info as json

parent 7afb735a
No related branches found
No related tags found
No related merge requests found
import ast
import io
import json
import os
import os.path
import pprint
import tarfile
from ._version import get_versions
__version__ = get_versions()['version']
del get_versions
_DIRECTORIES = [
'agents', 'checkman', 'checks', 'doc', 'inventory', 'notifications',
'pnp-templates', 'web',
]
_VERSION_PACKAGED = 'python-mkp'
_DIST_DIR = 'dist'
......@@ -83,6 +82,7 @@ def pack_to_bytes(info, path):
bytes_io = io.BytesIO()
with tarfile.open(fileobj=bytes_io, mode='w:gz') as archive:
_add_to_archive(archive, 'info', encode_info(info))
_add_to_archive(archive, 'info.json', encode_info_json(info))
for directory in _DIRECTORIES:
files = info['files'].get(directory, [])
......@@ -124,6 +124,10 @@ def encode_info(info):
return pprint.pformat(info).encode()
def encode_info_json(info):
return json.dumps(info).encode()
def decode_info(info_bytes):
return ast.literal_eval(info_bytes.decode())
......@@ -133,15 +137,27 @@ class Package(object):
def __init__(self, fileobj):
self.archive = tarfile.open(fileobj=fileobj)
self._info = self._get_info()
self._json_info = self._get_json_info()
def _get_info(self):
info_file = self.archive.extractfile('info')
return decode_info(info_file.read())
def _get_json_info(self):
try:
info_file = self.archive.extractfile('info.json')
return json.loads(info_file.read())
except KeyError:
return None
@property
def info(self):
return self._info
@property
def json_info(self):
return self._json_info
def extract_files(self, path):
for directory in _DIRECTORIES:
self._extract_files_in_directory(path, directory)
......
......@@ -2,6 +2,8 @@ import ast
import io
import tarfile
import pytest
import mkp
DIRECTORIES = [
......@@ -10,6 +12,23 @@ DIRECTORIES = [
]
@pytest.fixture
def sample_files(tmpdir):
tmpdir.join('agents', 'special', 'agent_test').write_binary(b'hello', ensure=True)
tmpdir.join('checks', 'foo').write_binary(b'Check Me!', ensure=True)
@pytest.fixture
def sample_info():
return {
'author': 'John Doe',
'name': 'foo',
'version': '42',
'version.min_required': '1.2.6p5',
'version.usable_until': None,
}
def test_load_bytes(original_mkp_file):
package = mkp.load_bytes(original_mkp_file)
......@@ -130,18 +149,8 @@ def test_pack_and_unpack_covers_all_known_directories(tmpdir):
assert dest.join(directory, 'test').exists()
def test_dist(tmpdir):
tmpdir.join('agents', 'special', 'agent_test').write_binary(b'hello', ensure=True)
tmpdir.join('checks', 'foo').write_binary(b'Check Me!', ensure=True)
info = {
'author': 'John Doe',
'name': 'foo',
'version': '42',
'version.min_required': '1.2.6p5',
'version.usable_until': None,
}
mkp.dist(info, str(tmpdir))
def test_dist(tmpdir, sample_files, sample_info):
mkp.dist(sample_info, str(tmpdir))
assert tmpdir.join('dist', 'foo-42.mkp').exists()
package = mkp.load_file(str(tmpdir.join('dist', 'foo-42.mkp')))
......@@ -156,8 +165,23 @@ def test_dist(tmpdir):
assert package.info['version.usable_until'] is None
def test_dist_uses_script_path_when_no_path_is_given(tmpdir):
def test_dist_json(tmpdir, sample_files, sample_info):
mkp.dist(sample_info, str(tmpdir))
assert tmpdir.join('dist', 'foo-42.mkp').exists()
package = mkp.load_file(str(tmpdir.join('dist', 'foo-42.mkp')))
assert package.json_info['author'] == 'John Doe'
assert package.json_info['name'] == 'foo'
assert package.json_info['files']['agents'] == ['special/agent_test']
assert package.json_info['files']['checks'] == ['foo']
assert package.json_info['num_files'] == 2
assert package.json_info['version'] == '42'
assert package.json_info['version.packaged'] == 'python-mkp'
assert package.json_info['version.min_required'] == '1.2.6p5'
assert package.json_info['version.usable_until'] is None
def test_dist_uses_script_path_when_no_path_is_given(tmpdir):
script = tmpdir.join('dist.py')
script.write_text(u'''#!/usr/bin/env python
......@@ -184,4 +208,4 @@ dist({
assert package.info['files']['checks'] == ['foo']
assert package.info['version'] == '42'
assert package.info['version.packaged'] == 'python-mkp'
assert package.info['num_files'] == 2
\ No newline at end of file
assert package.info['num_files'] == 2
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment