summaryrefslogtreecommitdiff
path: root/reconfigure/items/crontab.py
diff options
context:
space:
mode:
Diffstat (limited to 'reconfigure/items/crontab.py')
-rw-r--r--reconfigure/items/crontab.py64
1 files changed, 64 insertions, 0 deletions
diff --git a/reconfigure/items/crontab.py b/reconfigure/items/crontab.py
new file mode 100644
index 0000000..185ff94
--- /dev/null
+++ b/reconfigure/items/crontab.py
@@ -0,0 +1,64 @@
+from reconfigure.nodes import Node, PropertyNode
+from reconfigure.items.bound import BoundData
+
+
+class CrontabData(BoundData):
+ """Data class for crontab configs"""
+ pass
+
+
+class CrontabNormalTaskData(BoundData):
+ fields = ['minute', 'hour', 'day_of_month', 'month', 'day_of_week', 'command']
+
+ def describe(self):
+ return ' '.join(getattr(self, x) for x in self.fields)
+
+ def template(self, **kwargs):
+ return Node('normal_task', children=[
+ PropertyNode('minute', '0'),
+ PropertyNode('hour', '0'),
+ PropertyNode('day_of_month', '1'),
+ PropertyNode('month', '1'),
+ PropertyNode('day_of_week', '1'),
+ PropertyNode('command', 'false')
+ ])
+
+
+class CrontabSpecialTaskData(BoundData):
+ fields = ['special', 'command']
+
+ def template(self, **kwargs):
+ return Node('special_task', children=[
+ PropertyNode('special', '@reboot'),
+ PropertyNode('command', 'false')
+ ])
+
+
+class CrontabEnvSettingData(BoundData):
+ fields = ['name', 'value']
+
+ def template(self, **kwargs):
+ return Node('env_setting', children=[
+ PropertyNode('name', 'ENV_NAME'),
+ PropertyNode('value', 'ENV_VALUE')
+ ])
+
+
+def bind_for_fields(bound_data_class):
+ for field in bound_data_class.fields:
+ bound_data_class.bind_property(field, field)
+
+CrontabData.bind_collection('normal_tasks', selector=lambda x: x.name == 'normal_task', item_class=CrontabNormalTaskData)
+bind_for_fields(CrontabNormalTaskData)
+
+CrontabNormalTaskData.bind_attribute('comment', 'comment')
+
+CrontabData.bind_collection('env_settings', selector=lambda x: x.name == 'env_setting', item_class=CrontabEnvSettingData)
+bind_for_fields(CrontabEnvSettingData)
+
+CrontabEnvSettingData.bind_attribute('comment', 'comment')
+
+CrontabData.bind_collection('special_tasks', selector=lambda x: x.name == 'special_task', item_class=CrontabSpecialTaskData)
+bind_for_fields(CrontabSpecialTaskData)
+
+CrontabSpecialTaskData.bind_attribute('comment', 'comment')