in cid/common.py [0:0]
def create_view(self, view_name: str) -> None:
# For account mappings create a view using a special helper
if view_name in ['account_map', 'aws_accounts']:
self.accountMap.create(view_name)
return
# Create a view
print(f'\nCreating view: {view_name}')
logger.info(f'Creating view: {view_name}')
logger.info(f'Getting view definition')
view_definition = self.resources.get('views').get(view_name, dict())
logger.debug(f'View definition: {view_definition}')
# Discover dependency views (may not be discovered earlier)
dependency_views = view_definition.get(
'dependsOn', dict()).get('views', list())
logger.info(f"Dependency views: {', '.join(dependency_views)}" if dependency_views else 'No dependency views')
self.athena.discover_views(dependency_views)
while dependency_views:
dep = dependency_views.copy().pop()
# for dep in dependency_views:
if dep not in self.athena._metadata.keys():
print(f'Missing dependency view: {dep}, trying to create')
logger.info(f'Missing dependency view: {dep}, trying to create')
self.create_view(dep)
dependency_views.remove(dep)
view_query = self.get_view_query(view_name=view_name)
if view_definition.get('type') == 'Glue_Table':
try:
self.glue.create_table(json.loads(view_query))
except self.glue.client.exceptions.AlreadyExistsException:
print(f'\nError: Glue table "{view_name}" exists but not found, please check your configuration, exiting')
exit(1)
else:
self.athena.execute_query(view_query)