class Data: def __init__(self): self.db = Base(':memory:') self.db.create('container_manager', 'network_plugin', 'operating_system') def set(self, container_manager, network_plugin, operating_system): self.db.insert(container_manager=container_manager, network_plugin=network_plugin, operating_system=operating_system) self.db.commit() def exists(self, container_manager, network_plugin, operating_system): return len((self.db("container_manager") == container_manager) & (self.db("network_plugin") == network_plugin) & (self.db("operating_system") == operating_system)) > 0 def jinja(self): template = env.get_template('table.md.j2') container_engines = list(self.db.get_unique_ids('container_manager')) network_plugins = list(self.db.get_unique_ids("network_plugin")) operating_systems = list(self.db.get_unique_ids("operating_system")) container_engines.sort() container_engines.reverse( ) # reverse sort container_engines to get Docker first in the list network_plugins.sort() operating_systems.sort() return template.render(container_engines=container_engines, network_plugins=network_plugins, operating_systems=operating_systems, exists=self.exists) def markdown(self): out = '' for container_manager in self.db.get_unique_ids('container_manager'): # Prepare the headers out += "# " + container_manager + "\n" headers = '|OS / CNI| ' underline = '|----|' for network_plugin in self.db.get_unique_ids("network_plugin"): headers += network_plugin + ' | ' underline += '----|' out += headers + "\n" + underline + "\n" for operating_system in self.db.get_unique_ids("operating_system"): out += '| ' + operating_system + ' | ' for network_plugin in self.db.get_unique_ids("network_plugin"): if self.exists(container_manager, network_plugin, operating_system): emoji = ':white_check_mark:' else: emoji = ':x:' out += emoji + ' | ' out += "\n" pprint(self.db.get_unique_ids('operating_system')) pprint(self.db.get_unique_ids('network_plugin')) return out