def getContentForGivenItem(self, key, item, page=None): """ Take content from template file corresponding to the key and assign data from item """ # First check previous stored content if 'keepContent' in item and item['keepContent'] \ and self.contentKeeped[key]: return self.contentKeeped[key] content = '' replaceDict = '' # Build template file path tplPath = os.path.join(self.plugin_dir, "templates", "%s.tpl" % key) # Build replace dict depending on source type if item['type'] == 'sql': data = None # Load SQL query and get data # Get sql file sqlFile = tplPath + '.sql' fin = open(sqlFile, 'rt', encoding='utf-8') sql = fin.read() fin.close() # Add schema to search_path if postgis if self.dbType == 'postgis': sql = cadastre_common.setSearchPath( sql, self.connectionParams['schema']) # Add where clause depending on etype sql = sql.replace('$and', item['and'][self.etype]) # Limit results if asked if page and key in list(self.mainTables.keys()) \ and key in list(self.lineCount.keys()): offset = int((page - 1) * self.maxLineNumber) # ~ sql+= " LIMIT %s" % self.maxLineNumber # ~ sql+= " OFFSET %s" % offset # Get data from previous fetched full data data = self.lineCount[key]['data'][offset:self.maxLineNumber + offset] # Run SQL if self.dbType == 'spatialite': sql = cadastre_common.postgisToSpatialite(sql) # Run SQL only if data has not already been defined if data is None: # print(sql) [header, data, rowCount, ok] = cadastre_common.fetchDataFromSqlQuery( self.connector, sql) # Page no defined = means the query is here to # get line count and whole data for proprietes_baties & proprietes_non_baties if not page: if key in list(self.lineCount.keys()): # line count self.lineCount[key]['count'] = rowCount # keep data self.lineCount[key]['data'] = data if page: # Get content for each line of data for line in data: replaceDict = {} for i in range(len(item['names'])): replaceDict['$%s' % item['names'][i]] = u'%s' % line[i] content += self.getHtmlFromTemplate(tplPath, replaceDict) # fill empty data to have full size table if key in list(self.mainTables.keys()) \ and key not in list(self.contentKeeped.keys()) \ and len(data) < self.maxLineNumber: for _ in range(self.maxLineNumber - len(data)): replaceDict = {} for i in range(len(item['names'])): replaceDict['$%s' % item['names'][i]] = u' ' content += self.getHtmlFromTemplate( tplPath, replaceDict) elif item['type'] == 'properties': # build replace dict from properties replaceDict = {} for i in range(len(item['names'])): replaceDict['$' + item['names'][i]] = item['source'][i] content = self.getHtmlFromTemplate(tplPath, replaceDict) elif item['type'] == 'parent': replaceDict = {} for i in range(len(item['names'])): replaceDict['$' + item['names'][i]] = self.mainTables[ item['source']]['content'] content = self.getHtmlFromTemplate(tplPath, replaceDict) # Keep somme content globally if 'keepContent' in item and item['keepContent']: self.contentKeeped[key] = content # replace some unwanted content content = content.replace('None', '') return content
def getContentForGivenItem(self, key, item, page=None): ''' Take content from template file corresponding to the key and assign data from item ''' # First check previous stored content if 'keepContent' in item and item['keepContent'] \ and self.contentKeeped[key]: return self.contentKeeped[key] content = '' replaceDict = '' # Build template file path tplPath = os.path.join( self.plugin_dir, "templates", "%s.tpl" % key ) # Build replace dict depending on source type if item['type'] == 'sql': data = None # Load SQL query and get data # Get sql file sqlFile = tplPath + '.sql' fin = open(sqlFile, 'rt', encoding='utf-8') sql = fin.read() fin.close() # Add schema to search_path if postgis if self.dbType == 'postgis': sql = cadastre_common.setSearchPath(sql, self.connectionParams['schema']) # Add where clause depending on etype sql = sql.replace('$and', item['and'][self.etype] ) # Limit results if asked if page and key in list(self.mainTables.keys()) \ and key in list(self.lineCount.keys()): offset = int((page- 1) * self.maxLineNumber) #~ sql+= " LIMIT %s" % self.maxLineNumber #~ sql+= " OFFSET %s" % offset # Get data from previous fetched full data data = self.lineCount[key]['data'][offset:self.maxLineNumber+offset] # Run SQL if self.dbType == 'spatialite': sql = cadastre_common.postgisToSpatialite(sql) # Run SQL only if data has not already been defined if data is None: #print(sql) [header, data, rowCount, ok] = cadastre_common.fetchDataFromSqlQuery(self.connector, sql) # Page no defined = means the query is here to # get line count and whole data for proprietes_baties & proprietes_non_baties if not page: if key in list(self.lineCount.keys()): # line count self.lineCount[key]['count'] = rowCount # keep data self.lineCount[key]['data'] = data if page: # Get content for each line of data for line in data: replaceDict = {} for i in range(len(item['names'])): replaceDict['$%s' % item['names'][i] ] = u'%s' % line[i] content+= self.getHtmlFromTemplate(tplPath, replaceDict) # fill empty data to have full size table if key in list(self.mainTables.keys()) \ and key not in list(self.contentKeeped.keys()) \ and len(data) < self.maxLineNumber: for l in range(self.maxLineNumber - len(data)): replaceDict = {} for i in range(len(item['names'])): replaceDict['$%s' % item['names'][i] ] = u' ' content+= self.getHtmlFromTemplate(tplPath, replaceDict) elif item['type'] == 'properties': # build replace dict from properties replaceDict = {} for i in range(len(item['names'])): replaceDict['$' + item['names'][i]] = item['source'][i] content = self.getHtmlFromTemplate(tplPath, replaceDict) elif item['type'] == 'parent': replaceDict = {} for i in range(len(item['names'])): replaceDict['$' + item['names'][i]] = self.mainTables[ item['source'] ]['content'] content = self.getHtmlFromTemplate(tplPath, replaceDict) # Keep somme content globally if 'keepContent' in item and item['keepContent']: self.contentKeeped[key] = content # replace some unwanted content content = content.replace('None', '') return content