Skip to content

Instantly share code, notes, and snippets.

@agrawalo
Last active March 3, 2019 16:47
Show Gist options
  • Save agrawalo/4b149de5b73cee1ed6c2dd01d2e506a0 to your computer and use it in GitHub Desktop.
Save agrawalo/4b149de5b73cee1ed6c2dd01d2e506a0 to your computer and use it in GitHub Desktop.
python = <<EOF
from batchutil import bazzinga
def foo():
return f"foo: I am {self.name}"
def bar():
return f"bar: I am {self.name}"
def baz():
return bazzinga(self)
EOF
<batch>
name p&l_calulator
exec_str echo %foo()%
</batch>
def bazzinga(batch):
return f"baz: I am {batch.name}"
from apacheconfig import *
class BatchJobSpec:
def __init__(self, pythoncode , batch):
self.pythoncode = pythoncode
self.name = batch.get("name")
self._exec_str = batch.get("exec_str")
self.exec()
@property
def exec_str(self):
_exec = self._exec_str.split("%")
for i in range(len(_exec)):
if _exec[i].endswith('()'):
f = self.__getattribute__(_exec[i][:-2])
_exec[i] = f()
return ''.join(_exec)
def exec(self):
locals_ = {'self': self}
exec(self.pythoncode, locals_)
_exec = []
for attrib in locals_.keys():
if not attrib in ['__builtins__', 'self']:
print('__setattr__({})'.format(attrib))
self.__setattr__(attrib, locals_[attrib])
with make_loader() as loader:
config = loader.load('batch.spec')
batchjobspec = BatchJobSpec(config.get("python"), config.get("batch"))
print(batchjobspec.pythoncode)
print(batchjobspec.name)
print(batchjobspec.exec_str)
print(batchjobspec.baz())
@agrawalo
Copy link
Author

agrawalo commented Mar 3, 2019

I actually made it a staticmethod. Please review the code https://gist.github.com/agrawalo/407caf4dcd44687fae6989f46b54975a

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment