diff --git a/.github/workflows/pythonapp.yml b/.github/workflows/pythonapp.yml index 9f18186..5023db7 100644 --- a/.github/workflows/pythonapp.yml +++ b/.github/workflows/pythonapp.yml @@ -4,7 +4,6 @@ on: [push] jobs: build: - runs-on: ubuntu-latest steps: @@ -17,6 +16,9 @@ jobs: run: | pip install --upgrade pip pipenv pipenv sync -d + - name: Unit tests + run: | + pipenv run python -m unittest -v test - name: Lint run: | pipenv run pylint kosmorro *.py kosmorrolib/*.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c2a95c..1161159 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + - Update Numpy to v1.17.4 +- Add JSON output (#6) + +### Changed + + + +### Removed + + ## [0.1.0] - 2019-11-10 diff --git a/kosmorrolib/data.py b/kosmorrolib/data.py index 2ba310d..159ff90 100644 --- a/kosmorrolib/data.py +++ b/kosmorrolib/data.py @@ -55,7 +55,7 @@ class AsterEphemerides: culmination_time: Union[Time, None], set_time: Union[Time, None]): self.rise_time = rise_time - self.maximum_time = culmination_time + self.culmination_time = culmination_time self.set_time = set_time diff --git a/kosmorrolib/dumper.py b/kosmorrolib/dumper.py index d2b8c9a..1e49c47 100644 --- a/kosmorrolib/dumper.py +++ b/kosmorrolib/dumper.py @@ -26,7 +26,7 @@ from .data import Object, AsterEphemerides, MOON_PHASES class Dumper(ABC): - def __init__(self, ephemeris, date: datetime.date = datetime.date.today()): + def __init__(self, ephemeris: dict, date: datetime.date = datetime.date.today()): self.ephemeris = ephemeris self.date = date @@ -62,7 +62,7 @@ class JsonDumper(Dumper): class TextDumper(Dumper): def to_string(self): return '\n\n'.join(['Ephemerides of %s' % self.date.strftime('%A %B %d, %Y'), - self.get_asters(self.ephemeris['planets']), + self.get_asters(self.ephemeris['details']), self.get_moon(self.ephemeris['moon_phase']), 'Note: All the hours are given in UTC.']) @@ -78,21 +78,21 @@ class TextDumper(Dumper): else: planet_rise = '-' - if aster.ephemerides.maximum_time is not None: - planet_maximum = aster.ephemerides.maximum_time.utc_strftime('%H:%M') + if aster.ephemerides.culmination_time is not None: + planet_culmination = aster.ephemerides.culmination_time.utc_strftime('%H:%M') else: - planet_maximum = '-' + planet_culmination = '-' if aster.ephemerides.set_time is not None: planet_set = aster.ephemerides.set_time.utc_strftime('%H:%M') else: planet_set = '-' - data.append([name, planet_rise, planet_maximum, planet_set]) + data.append([name, planet_rise, planet_culmination, planet_set]) return tabulate(data, headers=['Planet', 'Rise time', 'Culmination time', 'Set time'], tablefmt='simple', stralign='center', colalign=('left',)) @staticmethod - def get_moon(moon): - return 'Moon phase: %s' % MOON_PHASES[moon['phase']] + def get_moon(moon_phase: str) -> str: + return 'Moon phase: %s' % MOON_PHASES[moon_phase] diff --git a/kosmorrolib/ephemerides.py b/kosmorrolib/ephemerides.py index 0c2b42a..eb0b1d5 100644 --- a/kosmorrolib/ephemerides.py +++ b/kosmorrolib/ephemerides.py @@ -42,13 +42,13 @@ class EphemeridesComputer: return {'rise': sunrise, 'set': sunset} @staticmethod - def get_moon(year, month, day) -> dict: + def get_moon(year, month, day) -> str: time1 = get_timescale().utc(year, month, day - 10) time2 = get_timescale().utc(year, month, day) _, moon_phase = almanac.find_discrete(time1, time2, almanac.moon_phases(get_skf_objects())) - return {'phase': skyfield_to_moon_phase(moon_phase[-1])} + return skyfield_to_moon_phase(moon_phase[-1]) @staticmethod def get_asters_ephemerides_for_aster(aster, date: datetime.date, position: Position) -> Object: @@ -90,7 +90,7 @@ class EphemeridesComputer: def compute_ephemerides_for_day(self, year: int, month: int, day: int) -> dict: return {'moon_phase': self.get_moon(year, month, day), - 'planets': [self.get_asters_ephemerides_for_aster(aster, datetime.date(year, month, day), self.position) + 'details': [self.get_asters_ephemerides_for_aster(aster, datetime.date(year, month, day), self.position) for aster in ASTERS]} def compute_ephemerides_for_month(self, year: int, month: int) -> [dict]: diff --git a/test/__init__.py b/test/__init__.py new file mode 100644 index 0000000..3b6d8eb --- /dev/null +++ b/test/__init__.py @@ -0,0 +1 @@ +from .dumper import * \ No newline at end of file diff --git a/test/dumper.py b/test/dumper.py new file mode 100644 index 0000000..a922e0e --- /dev/null +++ b/test/dumper.py @@ -0,0 +1,32 @@ +import unittest +from kosmorrolib.data import AsterEphemerides, Planet +from kosmorrolib.dumper import JsonDumper + + +class DumperTestCase(unittest.TestCase): + def test_json_dumper_returns_correct_json(self): + data = self._get_data() + self.assertEqual('{\n' + ' "moon_phase": "FULL_MOON",\n' + ' "details": [\n' + ' {\n' + ' "name": "Mars",\n' + ' "ephemerides": {\n' + ' "rise_time": null,\n' + ' "culmination_time": null,\n' + ' "set_time": null\n' + ' }\n' + ' }\n' + ' ]\n' + '}', JsonDumper(data).to_string()) + + @staticmethod + def _get_data(): + return { + 'moon_phase': 'FULL_MOON', + 'details': [Planet('Mars', 'MARS', AsterEphemerides(None, None, None))] + } + + +if __name__ == '__main__': + unittest.main()