def get_pg_sql_insert_clause(self, document_language: str, document_ids: List) -> SQLInsertClause: document_ids = self.python_value_to_indexed_field_value( document_ids) # type: Set[int] links = list() # List[Tuple[str, str]] if document_ids: for document_id, document_name, document_type_code, project_id \ in Document.all_objects \ .filter(pk__in=document_ids) \ .values_list('id', 'name', 'document_type__code', 'project_id') \ .order_by('id'): links.append((document_name, doc_editor_url(document_type_code, project_id, document_id))) links = [ '<a href="{1}">{0}</a>'.format(doc_name, doc_id) for doc_name, doc_id in links ] document_ids = [str(doc_id) for doc_id in document_ids] return SQLInsertClause( '"{ids_column}", ' '"{links_column}"'.format(ids_column=self.document_ids_column, links_column=self.document_links_column), [], '%s, %s', [ ', '.join(document_ids) if document_ids else None, '\n'.join(links) if links else None ])
def _build_insert_clause(log: ProcessLogger, table_name: str, handlers: List[field_handlers.FieldHandler], document: Document, fields_to_python_values: Dict[str, Any]) -> SQLClause: insert_clauses = list() for handler in handlers: # type: field_handlers.FieldHandler python_value = fields_to_python_values.get(handler.field_code) try: insert_clause = handler.get_pg_sql_insert_clause( document.language, python_value) # type: SQLInsertClause insert_clauses.append(insert_clause) except Exception as ex: msg = render_error('Unable to cache field values.\n' 'Document: {0} (#{1}).\n' 'Field: {2}'.format(document.name, document.id, handler.field_code), caused_by=ex) log.error(msg) columns_clause, values_clause = SQLInsertClause.join(insert_clauses) insert_clause = format_clause( 'insert into "{table_name}" ({columns}) ' 'values ({values}) on conflict ({column_document_id}) ' 'do update set ({columns}) = ({values})', table_name=table_name, columns=columns_clause, values=values_clause, column_document_id=FIELD_CODE_DOC_ID) return insert_clause
def get_pg_sql_insert_clause(self, document_language: str, python_value: List) -> SQLInsertClause: address = self.python_value_to_indexed_field_value( python_value) # type: Dict[str, Any] db_value = str(address.get('address') or '') if address else None return SQLInsertClause('"{column}"'.format(column=self.column), [], '%s', [db_value])
def get_pg_sql_insert_clause(self, document_language: str, python_value: List) -> SQLInsertClause: python_value = self.python_value_to_indexed_field_value( python_value) # type: Set[str] db_value = ', '.join(sorted(python_value)) if python_value else None return SQLInsertClause('"{column}"'.format(column=self.column), [], '%s', [db_value])
def get_pg_sql_insert_clause( self, document_language: str, python_values: Dict[str, Any]) -> SQLInsertClause: python_value = python_values.get(self.field_code) return SQLInsertClause( '"{column}"'.format(column=self.column), [], '%s', [self.python_value_to_indexed_field_value(python_value)])
def get_pg_sql_insert_clause( self, document_language: str, python_values: Dict[str, Any]) -> SQLInsertClause: python_value = python_values.get(self.field_code) values = [i for i in python_value if i] if python_value else None db_value = '\n{}\n'.format('_' * 20).join(values) if values else None return SQLInsertClause('"{column}"'.format(column=self.column), [], '%s', [db_value])
def get_pg_sql_insert_clause(self, document_language: str, python_values: List) -> SQLInsertClause: yes_no = bool(python_values or self.default_value) related_info_text = '\n'.join([str(v) for v in python_values if v]) if python_values else None return SQLInsertClause( '"{column}", "{text_column}"'.format(column=self.column, text_column=self.text_column), [], '%s, %s', [yes_no, related_info_text])
def get_pg_sql_insert_clause(self, document_language: str, python_values: Dict[str, Any]) -> SQLInsertClause: python_value = python_values.get(self.field_code) res = self.python_value_to_indexed_field_value(python_value) # Dict numerator = res.get('numerator') if res else None denominator = res.get('denominator') if res else None return SQLInsertClause('"{numerator_column}", ' '"{denominator_column}"'.format(numerator_column=self.numerator, denominator_column=self.denominator), [], '%s, %s', [numerator, denominator])
def get_pg_sql_insert_clause(self, document_language: str, python_values: Dict[str, Any]) -> SQLInsertClause: python_value = python_values.get(self.field_code) money = self.python_value_to_indexed_field_value(python_value) # Dict currency = money.get('currency') if money else None amount = money.get('amount') if money else None return SQLInsertClause('"{currency_column}", ' '"{amount_column}"'.format(currency_column=self.currency_column, amount_column=self.amount_column), [], '%s, %s', [currency, amount])
def get_pg_sql_insert_clause(self, document_language: str, python_values: Dict[str, Any]) -> SQLInsertClause: python_value = python_values.get(self.field_code) db_value_for_search = self.python_value_to_single_db_value_for_text_search(python_value) db_value_for_output = self.python_value_to_indexed_field_value(python_value) return SQLInsertClause('"{output_column}", "{text_search_column}"' .format(output_column=self.output_column, text_search_column=self.text_search_column), [], '%s, to_tsvector(%s, %s)', [db_value_for_output, PG_DEFAULT_LANGUAGE, db_value_for_search])
def get_pg_sql_insert_clause(self, document_language: str, python_value) -> SQLInsertClause: yes_no = self.python_value_to_indexed_field_value(python_value) related_info_text = '\n'.join([str(v) for v in python_value if v]) if python_value else None return SQLInsertClause( '"{column}", "{text_column}"'.format(column=self.column, text_column=self.text_column), [], '%s, %s', [yes_no, related_info_text])
def get_pg_sql_insert_clause(self, document_language: str, python_values: List) -> SQLInsertClause: money = first_or_none(python_values) or self.default_value # Dict currency = money.get('currency') if money else None amount = money.get('amount') if money else None return SQLInsertClause( '"{currency_column}", ' '"{amount_column}"'.format(currency_column=self.currency_column, amount_column=self.amount_column), [], '%s, %s', [currency, amount])
def get_pg_sql_insert_clause( self, document_language: str, python_values: Dict[str, Any]) -> SQLInsertClause: ref_id = python_values.get(self.select_text_ref_id_field_code) return SQLInsertClause( columns_sql=f'"{self.output_column}", "{self.text_search_column}"', columns_params=[], values_sql= f'({self.select_text_sql}), to_tsvector(%s, ({self.select_text_sql}))', values_params=[ref_id, PG_DEFAULT_LANGUAGE, ref_id])
def get_pg_sql_insert_clause(self, document_language: str, python_value: List) -> SQLInsertClause: res = self.python_value_to_indexed_field_value(python_value) # Dict numerator = res.get('numerator') if res else None consequent = res.get('consequent') if res else None return SQLInsertClause( '"{numerator_column}", ' '"{consequent_column}"'.format(numerator_column=self.numerator, consequent_column=self.consequent), [], '%s, %s', [numerator, consequent])
def get_pg_sql_insert_clause(self, document_language: str, python_values: List) -> SQLInsertClause: db_value_for_search = self.python_values_to_single_db_value_for_text_search( python_values) db_value_for_output = self.python_values_to_single_db_value_for_output( python_values) return SQLInsertClause( '"{output_column}", "{text_search_column}"'.format( output_column=self.output_column, text_search_column=self.text_search_column), [], '%s, to_tsvector(%s, %s)', [db_value_for_output, PG_DEFAULT_LANGUAGE, db_value_for_search])
def get_pg_sql_insert_clause(self, document_language: str, python_values: Dict[str, Any]) -> SQLInsertClause: python_value = python_values.get(self.field_code) yes_no = self.python_value_to_indexed_field_value(python_value) related_info_text = None if python_value: if hasattr(python_value, '__iter__'): related_info_text = '\n'.join([str(v) for v in python_value if v]) if python_value else None else: related_info_text = str(python_value) return SQLInsertClause('"{column}", "{text_column}"'.format(column=self.column, text_column=self.text_column), [], '%s, %s', [yes_no, related_info_text])
def get_pg_sql_insert_clause(self, document_language: str, python_values: List) -> SQLInsertClause: return SQLInsertClause( '"{column}"'.format(column=self.column), [], '%s', [self.python_values_to_single_db_value(python_values)])
def get_pg_sql_insert_clause(self, document_language: str, python_value: List) -> SQLInsertClause: return SQLInsertClause( '"{column}"'.format(column=self.column), [], '%s', [self.python_value_to_indexed_field_value(python_value)])