Skip to content

Commit

Permalink
Added datetime and file as included converters.
Browse files Browse the repository at this point in the history
  • Loading branch information
epsy committed Feb 20, 2015
1 parent a31d46b commit 698b74a
Show file tree
Hide file tree
Showing 4 changed files with 103 additions and 2 deletions.
18 changes: 18 additions & 0 deletions clize/extra/converters.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# clize -- A command-line argument parser for Python
# Copyright (C) 2011-2015 by Yann Kaiser <kaiser.yann@gmail.com>
# See COPYING for details.

import io

from dateutil import parser as dparser


def datetime(arg):
return dparser.parse(arg)


def file(**kwargs):
def file_(arg):
return io.open(arg, **kwargs)
return file_

78 changes: 78 additions & 0 deletions clize/tests/extra/test_converters.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
# clize -- A command-line argument parser for Python
# Copyright (C) 2011-2015 by Yann Kaiser <kaiser.yann@gmail.com>
# See COPYING for details.

from datetime import datetime
import unittest
import tempfile
import shutil
import os

from sigtools import support

from clize import parser, errors
from clize.extra import converters
from clize.tests import util


@util.repeated_test
class ConverterRepTests(object):
def _test_func(self, conv, rep):
sig = support.s('*, par: c', locals={'c': conv})
csig = parser.CliSignature.from_signature(sig)
self.assertEqual(str(csig), rep)

datetime = converters.datetime, '--par=DATETIME'
file = converters.file(), '--par=FILE'


@util.repeated_test
class ConverterTests(object):
def _test_func(self, conv, inp, out):
sig = support.s('*, par: c', locals={'c': conv})
csig = parser.CliSignature.from_signature(sig)
ba = util.read_arguments(csig, ['--par', inp])
self.assertEqual(out, ba.kwargs['par'])

dt_jan1 = (
converters.datetime, '2014-01-01 12:00', datetime(2014, 1, 1, 12, 0))


class FileConverterTests(unittest.TestCase):
def setUp(self):
self.temp = tempfile.mkdtemp()

def tearDown(self):
shutil.rmtree(self.temp)

def run_conv(self, conv, path):
sig = support.s('*, par: c', locals={'c': conv})
csig = parser.CliSignature.from_signature(sig)
ba = util.read_arguments(csig, ['--par', path])
return ba.kwargs['par']

def test_file_read(self):
path = os.path.join(self.temp, 'afile')
open(path, 'w').close()
arg = self.run_conv(converters.file(), path)
self.assertEqual(arg.name, path)
self.assertEqual(arg.mode, 'r')
self.assertTrue(arg.closed)

def test_file_write(self):
path = os.path.join(self.temp, 'afile')
arg = self.run_conv(converters.file(mode='w'), path)
self.assertEqual(arg.name, path)
self.assertEqual(arg.mode, 'w')
self.assertTrue(arg.closed)


@util.repeated_test
class ConverterErrorTests(object):
def _test_func(self, conv, inp):
sig = support.s('*, par: c', locals={'c': conv})
csig = parser.CliSignature.from_signature(sig)
self.assertRaises(errors.BadArgumentFormat,
util.read_arguments, csig, ['--par', inp])

dt_baddate = converters.datetime, 'not a date'
2 changes: 1 addition & 1 deletion clize/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ def name_type2cli(typ):
if typ is identity or typ in six.string_types:
return 'STR'
else:
return typ.__name__.upper()
return typ.__name__.strip('_').upper()

def maybe_iter(x):
try:
Expand Down
7 changes: 6 additions & 1 deletion tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,14 @@
envlist=py26,py27,py32,py33,py34

[testenv]
deps=
python-dateutil
commands=python -m setup test

[testenv:py26]
deps=ordereddict
deps=
ordereddict
python-dateutil


[testenv:docs]
Expand All @@ -16,6 +20,7 @@ commands=
[testenv:cover]
basepython=python3.4
deps=
python-dateutil
coverage
commands=
coverage erase
Expand Down

0 comments on commit 698b74a

Please sign in to comment.