Last active
August 17, 2016 03:15
-
-
Save otherwiseguy/3bdc5566f3896bfffb9d5ab34d7e2736 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class FakeSchemaHelper(object): | |
def register_table(self, table): | |
print "register_table(%s)" % table | |
def register_columns(self, table, columns, read_only=None): | |
print "register_column(%s, %s, %s)" % (table, str(columns), | |
str(read_only)) | |
def register_all(self): | |
print "register_all" | |
class SchemaHelperCommand(object): | |
def __init__(self, method, *args, **kwargs): | |
self.method = method | |
self.args = args | |
self.kwargs = kwargs | |
def execute(self, helper): | |
return self.method(helper, *self.args, **self.kwargs) | |
class Connection(object): | |
def __init__(self): | |
self.schema_filter = [] | |
def register_table(self, table, *args, **kwargs): | |
self.schema_filter.append( | |
SchemaHelperCommand(FakeSchemaHelper.register_table, table, | |
*args, **kwargs)) | |
def register_columns(self, table, columns, *args, **kwargs): | |
self.schema_filter.append( | |
SchemaHelperCommand(FakeSchemaHelper.register_columns, table, | |
columns, *args, **kwargs)) | |
def get_schema_helper(self): | |
return FakeSchemaHelper() | |
def update_schema_helper(self, helper): | |
if not self.schema_filter: | |
helper.register_all() | |
else: | |
for sfilter in self.schema_filter: | |
sfilter.execute(helper) | |
def start(self, table_name_list=None): | |
"""Start the OVSDB connection | |
:param table_name_list: limit schema to these tables (deprecated) | |
""" | |
helper = self.get_schema_helper() | |
for table in table_name_list or []: | |
self.register_table(table) | |
self.update_schema_helper(helper) | |
if __name__ == '__main__': | |
c = Connection() | |
c.start() # Should call register_all() | |
c.register_table("Table1") | |
c.register_columns("Table2", ['col1', 'col2', 'col3']) | |
c.start() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I am not sure that using a Command object is clearer, but I don't have a lot of experience with the OVSDB native lib.
It doesn't have to be a lambda - it can be any callable that accepts the helper, e.g. a (client) function, or a class implementing call(self, helper).