Exemplo n.º 1
0
    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
Exemplo n.º 3
0
 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])
Exemplo n.º 4
0
 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])
Exemplo n.º 5
0
 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)])
Exemplo n.º 6
0
 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])
Exemplo n.º 11
0
 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])
Exemplo n.º 13
0
 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])
Exemplo n.º 14
0
 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)])
Exemplo n.º 18
0
 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)])