cliutil: Add date_arg() function.

Meant to be used as an argument type.
This commit is contained in:
Brett Smith 2020-06-15 18:11:21 -04:00
parent 4a28596db2
commit 7660700e6c
2 changed files with 25 additions and 0 deletions

View file

@ -17,6 +17,7 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.""" along with this program. If not, see <https://www.gnu.org/licenses/>."""
import argparse import argparse
import datetime
import enum import enum
import io import io
import logging import logging
@ -231,6 +232,9 @@ def add_version_argument(parser: argparse.ArgumentParser) -> argparse.Action:
help="Show program version and license information", help="Show program version and license information",
) )
def date_arg(arg: str) -> datetime.date:
return datetime.datetime.strptime(arg, '%Y-%m-%d').date()
def make_entry_point(mod_name: str, prog_name: str=sys.argv[0]) -> Callable[[], int]: def make_entry_point(mod_name: str, prog_name: str=sys.argv[0]) -> Callable[[], int]:
"""Create an entry_point function for a tool """Create an entry_point function for a tool

View file

@ -15,6 +15,7 @@
# along with this program. If not, see <https://www.gnu.org/licenses/>. # along with this program. If not, see <https://www.gnu.org/licenses/>.
import argparse import argparse
import datetime
import errno import errno
import io import io
import inspect import inspect
@ -74,6 +75,26 @@ def test_bytes_output_stream(path):
actual = cliutil.bytes_output(path, stream) actual = cliutil.bytes_output(path, stream)
assert actual is stream assert actual is stream
@pytest.mark.parametrize('year,month,day', [
(2000, 1, 1),
(2016, 2, 29),
(2020, 12, 31),
])
def test_date_arg_valid(year, month, day):
arg = f'{year}-{month}-{day}'
expected = datetime.date(year, month, day)
assert cliutil.date_arg(arg) == expected
@pytest.mark.parametrize('arg', [
'2000',
'20-02-12',
'2019-02-29',
'two thousand',
])
def test_date_arg_invalid(arg):
with pytest.raises(ValueError):
cliutil.date_arg(arg)
@pytest.mark.parametrize('func_name', [ @pytest.mark.parametrize('func_name', [
'bytes_output', 'bytes_output',
'text_output', 'text_output',