def __init__(self, server): super(WorkbookManager, self).__init__(server) self.sample_project_id = None sample_project_entry = Project.get_by_name( self.server.environment.envid, 'Tableau Samples') if sample_project_entry: self.sample_project_id = sample_project_entry.id
def load(self, agent): # pylint: disable=too-many-locals # pylint: disable=too-many-statements envid = self.server.environment.envid if not self.sample_project_id: sample_project_entry = Project.get_by_name(envid, 'Tableau Samples') if sample_project_entry: self.sample_project_id = sample_project_entry.id stmt = \ 'SELECT id, name, repository_url, description,' +\ ' created_at, updated_at, owner_id, project_id,' +\ ' view_count, size, embedded, thumb_user,' +\ ' refreshable_extracts, extracts_refreshed_at, lock_version,' +\ ' state, version, checksum, display_tabs, data_engine_extracts,' +\ ' incrementable_extracts, site_id, revision,' +\ ' repository_data_id, repository_extract_data_id,' +\ ' first_published_at, primary_content_url, share_description,' +\ ' show_toolbar, extracts_incremented_at, default_view_index,' +\ ' luid, asset_key_id, document_version ' +\ 'FROM workbooks' session = meta.Session() last_updated_at = WorkbookEntry.get_last_updated_at(envid) if last_updated_at: stmt += " WHERE updated_at > '" + last_updated_at + "'" data = agent.odbc.execute(stmt) updates = [] if 'error' in data or '' not in data: logger.debug("workbooks load: bad data: %s", str(data)) return data logger.debug(data) # Get users only if needed users = None for odbcdata in ODBC.load(data): name = odbcdata.data['name'] revision = odbcdata.data['revision'] site_id = odbcdata.data['site_id'] project_id = odbcdata.data['project_id'] luid = odbcdata.data['luid'] if project_id == self.sample_project_id: logger.debug( "workbooks load: Ignoring Tableau Sample wb: %s, %s", name, revision) continue wbe = WorkbookEntry.get(envid, site_id, project_id, luid, default=None) if wbe is None: wbe = WorkbookEntry(envid=envid, site_id=site_id, project_id=project_id, luid=luid) session.add(wbe) # NOTE: id is updated with each revision. odbcdata.copyto(wbe, excludes=['revision']) if not users: users = self.load_users(agent) system_user_id = users.get(wbe.site_id, wbe.owner_id) wbe.system_user_id = system_user_id # must commit here so that update foreign keys work. session.commit() wbu = WorkbookUpdateEntry.get(wbe.workbookid, revision, default=None) if not wbu: # The updated_at time is the publish time. wbu = WorkbookUpdateEntry(workbookid=wbe.workbookid, revision=revision, system_user_id=system_user_id, timestamp=wbe.updated_at, url='') session.add(wbu) updates.append(wbu) logger.debug("workbook update '%s', revision %s", name, revision) session.commit() prune_count = self._prune_missed_revisions() if not self.system[SystemKeys.WORKBOOK_RETAIN_COUNT]: result = {u'disabled': 'Workbook Archives are not enabled. Will not archive.'} elif not self.cred_check(): result = {u'error': 'Can not load workbooks: missing credentials.'} else: # Second pass - build the archive files. result = self._archive_updates(agent, updates) result[u'schema'] = self.schema(data) result[u'updates-new'] = len(updates) result[u'updates-missed'] = prune_count return result