sdss-almanac 0.2.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. sdss_almanac-0.2.1/LICENSE.md +29 -0
  2. sdss_almanac-0.2.1/PKG-INFO +201 -0
  3. sdss_almanac-0.2.1/README.md +142 -0
  4. sdss_almanac-0.2.1/pyproject.toml +115 -0
  5. sdss_almanac-0.2.1/setup.cfg +4 -0
  6. sdss_almanac-0.2.1/src/almanac/__init__.py +4 -0
  7. sdss_almanac-0.2.1/src/almanac/apogee.py +300 -0
  8. sdss_almanac-0.2.1/src/almanac/cli.py +556 -0
  9. sdss_almanac-0.2.1/src/almanac/config.py +110 -0
  10. sdss_almanac-0.2.1/src/almanac/data_models/__init__.py +3 -0
  11. sdss_almanac-0.2.1/src/almanac/data_models/exposure.py +350 -0
  12. sdss_almanac-0.2.1/src/almanac/data_models/fps.py +109 -0
  13. sdss_almanac-0.2.1/src/almanac/data_models/plate.py +142 -0
  14. sdss_almanac-0.2.1/src/almanac/data_models/types.py +87 -0
  15. sdss_almanac-0.2.1/src/almanac/data_models/utils.py +185 -0
  16. sdss_almanac-0.2.1/src/almanac/database.py +22 -0
  17. sdss_almanac-0.2.1/src/almanac/display.py +422 -0
  18. sdss_almanac-0.2.1/src/almanac/etc/__init__.py +0 -0
  19. sdss_almanac-0.2.1/src/almanac/etc/bad_exposures.csv +432 -0
  20. sdss_almanac-0.2.1/src/almanac/io.py +320 -0
  21. sdss_almanac-0.2.1/src/almanac/logger.py +27 -0
  22. sdss_almanac-0.2.1/src/almanac/qa.py +24 -0
  23. sdss_almanac-0.2.1/src/almanac/stash/data_models.py +0 -0
  24. sdss_almanac-0.2.1/src/almanac/stash/plugmap_models.py +165 -0
  25. sdss_almanac-0.2.1/src/almanac/utils.py +141 -0
  26. sdss_almanac-0.2.1/src/sdss_almanac.egg-info/PKG-INFO +201 -0
  27. sdss_almanac-0.2.1/src/sdss_almanac.egg-info/SOURCES.txt +30 -0
  28. sdss_almanac-0.2.1/src/sdss_almanac.egg-info/dependency_links.txt +1 -0
  29. sdss_almanac-0.2.1/src/sdss_almanac.egg-info/entry_points.txt +2 -0
  30. sdss_almanac-0.2.1/src/sdss_almanac.egg-info/not-zip-safe +1 -0
  31. sdss_almanac-0.2.1/src/sdss_almanac.egg-info/requires.txt +37 -0
  32. sdss_almanac-0.2.1/src/sdss_almanac.egg-info/top_level.txt +1 -0
@@ -0,0 +1,29 @@
1
+ BSD 3-Clause License
2
+
3
+ Copyright (c) 2017, SDSS
4
+ All rights reserved.
5
+
6
+ Redistribution and use in source and binary forms, with or without
7
+ modification, are permitted provided that the following conditions are met:
8
+
9
+ * Redistributions of source code must retain the above copyright notice, this
10
+ list of conditions and the following disclaimer.
11
+
12
+ * Redistributions in binary form must reproduce the above copyright notice,
13
+ this list of conditions and the following disclaimer in the documentation
14
+ and/or other materials provided with the distribution.
15
+
16
+ * Neither the name of the copyright holder nor the names of its
17
+ contributors may be used to endorse or promote products derived from
18
+ this software without specific prior written permission.
19
+
20
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
24
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
26
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,201 @@
1
+ Metadata-Version: 2.4
2
+ Name: sdss-almanac
3
+ Version: 0.2.1
4
+ Summary: Everything we've got
5
+ Author-email: Andy Casey <andrew.casey@monash.edu>
6
+ License: BSD 3-Clause License
7
+ Project-URL: Homepage, https://github.com/sdss/almanac
8
+ Project-URL: Documentation, https://sdss-almanac.readthedocs.org
9
+ Project-URL: Repository, https://github.com/sdss/almanac
10
+ Keywords: astronomy,software
11
+ Classifier: Intended Audience :: Science/Research
12
+ Classifier: Natural Language :: English
13
+ Classifier: Operating System :: OS Independent
14
+ Classifier: Programming Language :: Python
15
+ Classifier: Programming Language :: Python :: 3.6
16
+ Classifier: Programming Language :: Python :: 3.7
17
+ Classifier: Programming Language :: Python :: 3.8
18
+ Classifier: Topic :: Documentation :: Sphinx
19
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
20
+ Requires-Python: >=3.8
21
+ Description-Content-Type: text/markdown
22
+ License-File: LICENSE.md
23
+ Requires-Dist: numpy
24
+ Requires-Dist: astropy
25
+ Requires-Dist: h5py
26
+ Requires-Dist: tqdm
27
+ Requires-Dist: click
28
+ Requires-Dist: pydl
29
+ Requires-Dist: sdssdb
30
+ Requires-Dist: colorlog
31
+ Requires-Dist: rich
32
+ Provides-Extra: dev
33
+ Requires-Dist: ipython>=7.9.0; extra == "dev"
34
+ Requires-Dist: matplotlib>=3.1.1; extra == "dev"
35
+ Requires-Dist: flake8>=3.7.9; extra == "dev"
36
+ Requires-Dist: doc8>=0.8.0; extra == "dev"
37
+ Requires-Dist: pytest>=5.2.2; extra == "dev"
38
+ Requires-Dist: pytest-asyncio>=0.10.0; extra == "dev"
39
+ Requires-Dist: pytest-cov>=2.8.1; extra == "dev"
40
+ Requires-Dist: pytest-mock>=1.13.0; extra == "dev"
41
+ Requires-Dist: pytest-sugar>=0.9.2; extra == "dev"
42
+ Requires-Dist: isort>=4.3.21; extra == "dev"
43
+ Requires-Dist: codecov>=2.0.15; extra == "dev"
44
+ Requires-Dist: coverage[toml]>=5.0; extra == "dev"
45
+ Requires-Dist: ipdb>=0.12.3; extra == "dev"
46
+ Requires-Dist: invoke>=1.3.0; extra == "dev"
47
+ Requires-Dist: twine>=3.1.1; extra == "dev"
48
+ Requires-Dist: wheel>=0.33.6; extra == "dev"
49
+ Requires-Dist: sphinx>=3.0.0; extra == "dev"
50
+ Provides-Extra: docs
51
+ Requires-Dist: Sphinx<8.0.0,>=5.0.0; extra == "docs"
52
+ Requires-Dist: furo>=2023.3.27; extra == "docs"
53
+ Requires-Dist: sphinx-autodoc-typehints>=1.12.0; extra == "docs"
54
+ Requires-Dist: myst-parser>=0.18.0; extra == "docs"
55
+ Requires-Dist: sphinxcontrib-bibtex>=2.4.0; extra == "docs"
56
+ Requires-Dist: sphinx-copybutton>=0.5.0; extra == "docs"
57
+ Requires-Dist: linkify-it-py; extra == "docs"
58
+ Dynamic: license-file
59
+
60
+ ## almanac
61
+ `almanac` scrapes headers from raw image files and cross-matches those against the SDSS database to create a comprehensive summary of everything ever observed with an APOGEE instrument.
62
+
63
+ ## Getting Started
64
+
65
+ Here are a few example cases of how `almanac` might be helpful:
66
+
67
+ List all exposures taken yesterday from either telescope:
68
+ ```bash
69
+ almanac --mjd -1 -vv
70
+ ```
71
+
72
+ Or just from Apache Point Observatory:
73
+ ```bash
74
+ almanac --mjd -1 -vv --apo
75
+ ```
76
+
77
+ Write out all exposures taken in the last month to `january.h5`:
78
+ ```bash
79
+ almanac -o january.h5 --mjd-start -30
80
+ ```
81
+
82
+ Write out all fiber observations during 2021, where we switched from plates to robotic fiber positioners:
83
+ ```bash
84
+ almanac -vv --date-start 2021-01-01 --date-end 2021-31-12 --fibers
85
+ ```
86
+
87
+ And it looks pretty, even when it warns you about missing exposures:
88
+
89
+ ![](https://github.com/sdss/almanac/blob/83159e03632e3edbb45bb0c8de9810dec2dc49f1/docs/almanac-example-1.gif)
90
+
91
+
92
+ ## Installation
93
+
94
+
95
+ ### At Utah
96
+
97
+ If you want to use this at Utah, you can install it with:
98
+
99
+ ```bash
100
+ module load almanac
101
+ ```
102
+
103
+ > [!TIP]
104
+ > We recommend you manage your own Python environment, but if you don't have one set up at Utah then you can use `module load miniconda/3.8.5_astra`.
105
+
106
+ ### Anywhere else
107
+
108
+ `almanac` needs local disk access to raw APOGEE data frames. If you are going to run it somewhere else, you should set up a Globus transfer of raw APOGEE frames, and ensure your internet address is whitelisted to remotely access the SDSS database.
109
+
110
+ We recommend using `uv` to manage Python environments. Using `uv`, you can install `almanac` with:
111
+ ```bash
112
+ uv pip install git+https://github.com/sdss/almanac
113
+ ```
114
+
115
+ ## Usage
116
+
117
+ Use `almanac` to see details on data taken today from both observatories, or specify the observatory:
118
+
119
+ ```bash
120
+ almanac
121
+ almanac --apo # Apache Point Observatory
122
+ almanac --lco # Las Campanas Observatory
123
+ ```
124
+
125
+ ### Specifying a date
126
+
127
+ If you want a particular day, either use the ``--mjd`` or ``--date`` (UTC) flags:
128
+
129
+ ```bash
130
+ almanac --mjd 59300
131
+ almanac --date 2021-01-01
132
+ ```
133
+
134
+ You can use negative MJD values to indicate days relative to today:
135
+
136
+ ```bash
137
+ almanac --mjd -1 # Yesterday
138
+ almanac --mjd -7 # Last week
139
+ ```
140
+
141
+ You can also specify a range of days:
142
+
143
+ ```bash
144
+ almanac --mjd-start 59300 --mjd-end 59310 # Give me these 10 days
145
+ almanac --date-start 2021-01-01 --date-end 2021-01-31 # Give me all of January 2021
146
+ ```
147
+
148
+ ### Fiber mappings
149
+
150
+ You can also use `almanac` to see the fiber mappings for a given plate (SDSS-IV) or FPS pointing (SDSS-V) by specifing the ``--fibers`` (or ``--fibres``) flag. This will give you the mapping of fibers to targets, and the target properties.
151
+
152
+ ```bash
153
+ almanac --mjd 60000 --fibres
154
+ ```
155
+
156
+ The fiber mapping tables are cross-matched to the SDSS database to include the SDSS identifiers for each target. If you don't want to do this cross-match, you can use the ``--no-x-match`` flag. The ``--no-x-match`` flag is ignored if ``--fibers`` is not used.
157
+
158
+ ### Verbosity
159
+
160
+ By default there is minimal output to the terminal. You can adjust the verbosity level using `-v`:
161
+ - `-v`: show progress display only
162
+ - `-vv`: show progress display and exposure metadata
163
+
164
+ In verbose mode you can see exposure information in the terminal, and additional per-fiber metadata is stored in the HDF5 files that `almanac` creates.
165
+
166
+ ![](https://github.com/sdss/almanac/blob/e3f46c8ce66b88843de943ca31eec88d12be8f06/docs/almanac-example-2.gif)
167
+
168
+ ### Outputs
169
+
170
+ You can write the outputs to a structured HDF5 file by specifying an output path with the ``--output`` (or ``-O``) flag. If the output path already exists, the default behaviour is to overwrite existing entries *only*. So if you run `almanac` once for MJD 60000 and output to a file, and then run it again for MJD 60001 and output to the same file, your file will have data for both MJDs.
171
+
172
+ ```bash
173
+ almanac --output /path/to/file.h5 # Append today's data to existing file
174
+ ```
175
+
176
+ An example structure of the HDF5 file is below:
177
+
178
+ ```
179
+ apo/59300/exposures # a data table of exposures
180
+ apo/59300/sequences # a Nx2 array of exposure numbers (inclusive) that form a sequence
181
+ apo/59300/fibers/fps/1 # a data table of fiber mappings for FPS configuration id 1
182
+ apo/59300/fibers/plates/2 # a data table of fiber mappings for plate id 2
183
+ ```
184
+
185
+ ## Configuration
186
+
187
+ You can view and change the `almanac` configuration settings through the `almanac config` interface. To view all current settings and to see the configuration file path:
188
+
189
+ ```bash
190
+ almanac config show
191
+ ```
192
+
193
+ ### To get a single configuration value
194
+ ```bash
195
+ almanac config get logging_level
196
+ ```
197
+
198
+ ### To set a configuration value
199
+ ```bash
200
+ almanac config set logging_level 10
201
+ ```
@@ -0,0 +1,142 @@
1
+ ## almanac
2
+ `almanac` scrapes headers from raw image files and cross-matches those against the SDSS database to create a comprehensive summary of everything ever observed with an APOGEE instrument.
3
+
4
+ ## Getting Started
5
+
6
+ Here are a few example cases of how `almanac` might be helpful:
7
+
8
+ List all exposures taken yesterday from either telescope:
9
+ ```bash
10
+ almanac --mjd -1 -vv
11
+ ```
12
+
13
+ Or just from Apache Point Observatory:
14
+ ```bash
15
+ almanac --mjd -1 -vv --apo
16
+ ```
17
+
18
+ Write out all exposures taken in the last month to `january.h5`:
19
+ ```bash
20
+ almanac -o january.h5 --mjd-start -30
21
+ ```
22
+
23
+ Write out all fiber observations during 2021, where we switched from plates to robotic fiber positioners:
24
+ ```bash
25
+ almanac -vv --date-start 2021-01-01 --date-end 2021-31-12 --fibers
26
+ ```
27
+
28
+ And it looks pretty, even when it warns you about missing exposures:
29
+
30
+ ![](https://github.com/sdss/almanac/blob/83159e03632e3edbb45bb0c8de9810dec2dc49f1/docs/almanac-example-1.gif)
31
+
32
+
33
+ ## Installation
34
+
35
+
36
+ ### At Utah
37
+
38
+ If you want to use this at Utah, you can install it with:
39
+
40
+ ```bash
41
+ module load almanac
42
+ ```
43
+
44
+ > [!TIP]
45
+ > We recommend you manage your own Python environment, but if you don't have one set up at Utah then you can use `module load miniconda/3.8.5_astra`.
46
+
47
+ ### Anywhere else
48
+
49
+ `almanac` needs local disk access to raw APOGEE data frames. If you are going to run it somewhere else, you should set up a Globus transfer of raw APOGEE frames, and ensure your internet address is whitelisted to remotely access the SDSS database.
50
+
51
+ We recommend using `uv` to manage Python environments. Using `uv`, you can install `almanac` with:
52
+ ```bash
53
+ uv pip install git+https://github.com/sdss/almanac
54
+ ```
55
+
56
+ ## Usage
57
+
58
+ Use `almanac` to see details on data taken today from both observatories, or specify the observatory:
59
+
60
+ ```bash
61
+ almanac
62
+ almanac --apo # Apache Point Observatory
63
+ almanac --lco # Las Campanas Observatory
64
+ ```
65
+
66
+ ### Specifying a date
67
+
68
+ If you want a particular day, either use the ``--mjd`` or ``--date`` (UTC) flags:
69
+
70
+ ```bash
71
+ almanac --mjd 59300
72
+ almanac --date 2021-01-01
73
+ ```
74
+
75
+ You can use negative MJD values to indicate days relative to today:
76
+
77
+ ```bash
78
+ almanac --mjd -1 # Yesterday
79
+ almanac --mjd -7 # Last week
80
+ ```
81
+
82
+ You can also specify a range of days:
83
+
84
+ ```bash
85
+ almanac --mjd-start 59300 --mjd-end 59310 # Give me these 10 days
86
+ almanac --date-start 2021-01-01 --date-end 2021-01-31 # Give me all of January 2021
87
+ ```
88
+
89
+ ### Fiber mappings
90
+
91
+ You can also use `almanac` to see the fiber mappings for a given plate (SDSS-IV) or FPS pointing (SDSS-V) by specifing the ``--fibers`` (or ``--fibres``) flag. This will give you the mapping of fibers to targets, and the target properties.
92
+
93
+ ```bash
94
+ almanac --mjd 60000 --fibres
95
+ ```
96
+
97
+ The fiber mapping tables are cross-matched to the SDSS database to include the SDSS identifiers for each target. If you don't want to do this cross-match, you can use the ``--no-x-match`` flag. The ``--no-x-match`` flag is ignored if ``--fibers`` is not used.
98
+
99
+ ### Verbosity
100
+
101
+ By default there is minimal output to the terminal. You can adjust the verbosity level using `-v`:
102
+ - `-v`: show progress display only
103
+ - `-vv`: show progress display and exposure metadata
104
+
105
+ In verbose mode you can see exposure information in the terminal, and additional per-fiber metadata is stored in the HDF5 files that `almanac` creates.
106
+
107
+ ![](https://github.com/sdss/almanac/blob/e3f46c8ce66b88843de943ca31eec88d12be8f06/docs/almanac-example-2.gif)
108
+
109
+ ### Outputs
110
+
111
+ You can write the outputs to a structured HDF5 file by specifying an output path with the ``--output`` (or ``-O``) flag. If the output path already exists, the default behaviour is to overwrite existing entries *only*. So if you run `almanac` once for MJD 60000 and output to a file, and then run it again for MJD 60001 and output to the same file, your file will have data for both MJDs.
112
+
113
+ ```bash
114
+ almanac --output /path/to/file.h5 # Append today's data to existing file
115
+ ```
116
+
117
+ An example structure of the HDF5 file is below:
118
+
119
+ ```
120
+ apo/59300/exposures # a data table of exposures
121
+ apo/59300/sequences # a Nx2 array of exposure numbers (inclusive) that form a sequence
122
+ apo/59300/fibers/fps/1 # a data table of fiber mappings for FPS configuration id 1
123
+ apo/59300/fibers/plates/2 # a data table of fiber mappings for plate id 2
124
+ ```
125
+
126
+ ## Configuration
127
+
128
+ You can view and change the `almanac` configuration settings through the `almanac config` interface. To view all current settings and to see the configuration file path:
129
+
130
+ ```bash
131
+ almanac config show
132
+ ```
133
+
134
+ ### To get a single configuration value
135
+ ```bash
136
+ almanac config get logging_level
137
+ ```
138
+
139
+ ### To set a configuration value
140
+ ```bash
141
+ almanac config set logging_level 10
142
+ ```
@@ -0,0 +1,115 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61.0"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "sdss-almanac"
7
+ version = "0.2.1"
8
+ authors = [
9
+ { name = "Andy Casey", email = "andrew.casey@monash.edu" }
10
+ ]
11
+ description = "Everything we've got"
12
+ readme = "README.md"
13
+ requires-python = ">=3.8"
14
+ license = { text = "BSD 3-Clause License" }
15
+ keywords = ["astronomy", "software"]
16
+ classifiers = [
17
+ "Intended Audience :: Science/Research",
18
+ "Natural Language :: English",
19
+ "Operating System :: OS Independent",
20
+ "Programming Language :: Python",
21
+ "Programming Language :: Python :: 3.6",
22
+ "Programming Language :: Python :: 3.7",
23
+ "Programming Language :: Python :: 3.8",
24
+ "Topic :: Documentation :: Sphinx",
25
+ "Topic :: Software Development :: Libraries :: Python Modules"
26
+ ]
27
+ dependencies = [
28
+ "numpy",
29
+ "astropy",
30
+ "h5py",
31
+ "tqdm",
32
+ "click",
33
+ "pydl",
34
+ "sdssdb",
35
+ "colorlog",
36
+ "rich"
37
+ ]
38
+
39
+ [project.urls]
40
+ Homepage = "https://github.com/sdss/almanac"
41
+ Documentation = "https://sdss-almanac.readthedocs.org"
42
+ Repository = "https://github.com/sdss/almanac"
43
+
44
+ [project.optional-dependencies]
45
+ dev = [
46
+ "ipython>=7.9.0",
47
+ "matplotlib>=3.1.1",
48
+ "flake8>=3.7.9",
49
+ "doc8>=0.8.0",
50
+ "pytest>=5.2.2",
51
+ "pytest-asyncio>=0.10.0",
52
+ "pytest-cov>=2.8.1",
53
+ "pytest-mock>=1.13.0",
54
+ "pytest-sugar>=0.9.2",
55
+ "isort>=4.3.21",
56
+ "codecov>=2.0.15",
57
+ "coverage[toml]>=5.0",
58
+ "ipdb>=0.12.3",
59
+ "invoke>=1.3.0",
60
+ "twine>=3.1.1",
61
+ "wheel>=0.33.6",
62
+ "sphinx>=3.0.0"
63
+ ]
64
+ docs = [
65
+ "Sphinx>=5.0.0,<8.0.0",
66
+ "furo>=2023.3.27",
67
+ "sphinx-autodoc-typehints>=1.12.0",
68
+ "myst-parser>=0.18.0",
69
+ "sphinxcontrib-bibtex>=2.4.0",
70
+ "sphinx-copybutton>=0.5.0",
71
+ "linkify-it-py"
72
+ ]
73
+
74
+ [project.scripts]
75
+ almanac = "almanac.cli:main"
76
+
77
+ [tool.uv]
78
+ package = true
79
+
80
+ [tool.setuptools]
81
+ zip-safe = false
82
+
83
+ [tool.setuptools.packages.find]
84
+ where = ["src"]
85
+ include = ["almanac*"]
86
+
87
+ [tool.setuptools.package-data]
88
+ almanac = ["etc/*"]
89
+
90
+ [tool.isort]
91
+ line_length = 79
92
+ known_first_party = ["almanac"]
93
+ known_sdss_party = ["sdssdb", "sdsstools"]
94
+ balanced_wrapping = true
95
+ include_trailing_comma = false
96
+ lines_after_imports = 2
97
+ use_parentheses = true
98
+ sections = ["FUTURE", "STDLIB", "THIRDPARTY", "SDSS", "FIRSTPARTY", "LOCALFOLDER"]
99
+ default_section = "THIRDPARTY"
100
+
101
+ [tool.flake8]
102
+ ignore = ["H101", "E722", "W504", "W505"]
103
+ per-file-ignores = ["*/__init__.py:E,W"]
104
+ max-line-length = 99
105
+
106
+ [tool.pytest.ini_options]
107
+ addopts = "--cov almanac --cov-report html -W ignore"
108
+
109
+ [tool.coverage.run]
110
+ branch = true
111
+ include = ["src/almanac/*"]
112
+ omit = ["*/utils/*.py", "*/__init__.py"]
113
+
114
+ [tool.coverage.report]
115
+ exclude_lines = []
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,4 @@
1
+ __version__ = "0.2.1"
2
+
3
+ from .config import config, get_config_path, ConfigManager
4
+ from .logger import logger