https://github.com/RadioAstronomySoftwareGroup/pyuvdata
Tip revision: d1829efacb60da384f64a8f25a280441bfa9d68a authored by Bryna Hazelton on 24 May 2019, 01:18:43 UTC
increase version to 1.4.0
increase version to 1.4.0
Tip revision: d1829ef
test_version.py
# -*- mode: python; coding: utf-8 -*
# Copyright (c) 2018 Radio Astronomy Software Group
# Licensed under the 2-clause BSD License
"""Tests for version.py.
"""
from __future__ import absolute_import, division, print_function
import sys
import os
import six
import subprocess
import json
import pyuvdata
from pyuvdata.data import DATA_PATH
def test_get_gitinfo_file():
pyuvdata_dir = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
git_file = os.path.join(pyuvdata_dir, 'GIT_INFO')
if not os.path.exists(git_file):
# write a file to read in
temp_git_file = os.path.join(DATA_PATH, 'test/GIT_INFO')
version_info = pyuvdata.version.construct_version_info()
data = [version_info['git_origin'], version_info['git_origin'],
version_info['git_origin'], version_info['git_origin']]
with open(temp_git_file, 'w') as outfile:
json.dump(data, outfile)
git_file = temp_git_file
with open(git_file) as data_file:
data = [pyuvdata.version._unicode_to_str(x) for x in json.loads(data_file.read().strip())]
git_origin = data[0]
git_hash = data[1]
git_description = data[2]
git_branch = data[3]
test_file_info = {'git_origin': git_origin, 'git_hash': git_hash,
'git_description': git_description, 'git_branch': git_branch}
if 'temp_git_file' in locals():
file_info = pyuvdata.version._get_gitinfo_file(git_file=temp_git_file)
os.remove(temp_git_file)
else:
file_info = pyuvdata.version._get_gitinfo_file()
assert file_info == test_file_info
def test_construct_version_info():
# this test is a bit silly because it uses the nearly the same code as the original,
# but it will detect accidental changes that could cause problems.
# It does test that the __version__ attribute is set on pyuvdata.
# this line is modified from the main implementation since we're in pyuvdata/tests/
pyuvdata_dir = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
def get_git_output(args, capture_stderr=False):
"""Get output from Git, ensuring that it is of the ``str`` type,
not bytes."""
argv = ['git', '-C', pyuvdata_dir] + args
if capture_stderr:
data = subprocess.check_output(argv, stderr=subprocess.STDOUT)
else:
data = subprocess.check_output(argv)
data = data.strip()
if six.PY2:
return data
return data.decode('utf8')
def unicode_to_str(u):
if six.PY2:
return u.encode('utf8')
return u
try:
git_origin = get_git_output(['config', '--get', 'remote.origin.url'], capture_stderr=True)
if git_origin.split('/')[-1] != 'pyuvdata.git':
# this is version info for a non-pyuvdata repo, don't use it
raise ValueError('This is not a pyuvdata repo')
git_hash = get_git_output(['rev-parse', 'HEAD'], capture_stderr=True)
git_description = get_git_output(['describe', '--dirty', '--tag', '--always'])
git_branch = get_git_output(['rev-parse', '--abbrev-ref', 'HEAD'], capture_stderr=True)
git_version = get_git_output(['describe', '--tags', '--abbrev=0'])
except (subprocess.CalledProcessError, ValueError):
try:
# Check if a GIT_INFO file was created when installing package
git_file = os.path.join(pyuvdata_dir, 'GIT_INFO')
with open(git_file) as data_file:
data = [unicode_to_str(x) for x in json.loads(data_file.read().strip())]
git_origin = data[0]
git_hash = data[1]
git_description = data[2]
git_branch = data[3]
except (IOError, OSError):
git_origin = ''
git_hash = ''
git_description = ''
git_branch = ''
test_version_info = {'version': pyuvdata.__version__, 'git_origin': git_origin,
'git_hash': git_hash, 'git_description': git_description,
'git_branch': git_branch}
assert pyuvdata.version.construct_version_info() == test_version_info
def test_main():
version_info = pyuvdata.version.construct_version_info()
saved_stdout = sys.stdout
try:
out = six.StringIO()
sys.stdout = out
pyuvdata.version.main()
output = out.getvalue()
assert output == ('Version = {v}\ngit origin = {o}\n'
'git branch = {b}\ngit description = {d}\n'
.format(v=version_info['version'],
o=version_info['git_origin'],
b=version_info['git_branch'],
d=version_info['git_description']))
finally:
sys.stdout = saved_stdout