APEtype
The apetype python package unites the builtin modules argparse
and
typing
. Central is the ConfigBase class, which user classes can
inherit from, to define their configurations. This is similar to
configurations in the luigi
package but with a much cleaner
interface. Build upon the config class is a task class, in analogy to
luigi
.
Documentation
https://apetype.readthedocs.io/en/latest/
Examples
Settings
from apetype import ConfigBase
class Settings(ConfigBase):
a: int = 0 # an integer
d: float = .1 # a float
c: str = 'a'
settings = Settings()
print(settings.a, settings['a'])
This will generate a CLI with one group of arguments.
from apetype import ConfigBase
class SettingsDeep(ConfigBase):
class group1:
a: int = 0
b: float = 0.
class group2:
c: str = 'a'
d: bool = 'b'
settings = Settings()
print(settings.a, settings['a'])
This will generate a CLI with grouped arguments, each group having the name of the inner class.
Tasks
from argtype.tasks import TaskBase
class TaskDep(TaskBase):
a: str = '/tmp/file1'
def generate_output(_) -> str:
return _.a
class Task(TaskBase):
# Task settings
a: int = 10
b: str = 'a'
def generate_output1(_, task_dependence1: TaskDep) -> int:
print(task_dependence1.a)
return 0
def generate_output2(_) -> str:
with _.env('sh') as env:
env.exec('which python')
return env.output
def generate_output3(_) -> str:
with _.env('py') as env:
env.exec(f'''
for i in range({_.a}):
print(i)
''')
return env.output
task = Task()
task.run()
print(task._input, task._output)
Perspective
This is just the initial setup of this project, but already having a basic working implementation. In the future different inherited ConfigBase
classes should be mergeable to make a argparse parser with subparsers.
Features
- a class that inherits from the task to test, but also from testcase mixin
the mixin contains test data for everything that needs to be tested
- TODO generator to create a range of testcases based on a range of attribute values
- TODO search a package for all defined ConfigBase classes and offer
automated CLI interface