src/p4l/management/commands/import_record.py
author ymh <ymh.work@gmail.com>
Tue, 01 Oct 2013 02:14:08 +0200
changeset 126 a345f1a67bf1
parent 119 ece69ca3ac24
child 131 f1854630734f
permissions -rw-r--r--
Python licence headers
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
# -*- coding: utf-8 -*-
126
a345f1a67bf1 Python licence headers
ymh <ymh.work@gmail.com>
parents: 119
diff changeset
     2
#
a345f1a67bf1 Python licence headers
ymh <ymh.work@gmail.com>
parents: 119
diff changeset
     3
# Copyright IRI (2013)
a345f1a67bf1 Python licence headers
ymh <ymh.work@gmail.com>
parents: 119
diff changeset
     4
#
a345f1a67bf1 Python licence headers
ymh <ymh.work@gmail.com>
parents: 119
diff changeset
     5
# contact@iri.centrepompidou.fr
a345f1a67bf1 Python licence headers
ymh <ymh.work@gmail.com>
parents: 119
diff changeset
     6
#
a345f1a67bf1 Python licence headers
ymh <ymh.work@gmail.com>
parents: 119
diff changeset
     7
# This software is governed by the CeCILL-B license under French law and
a345f1a67bf1 Python licence headers
ymh <ymh.work@gmail.com>
parents: 119
diff changeset
     8
# abiding by the rules of distribution of free software.  You can  use, 
a345f1a67bf1 Python licence headers
ymh <ymh.work@gmail.com>
parents: 119
diff changeset
     9
# modify and/ or redistribute the software under the terms of the CeCILL-B
a345f1a67bf1 Python licence headers
ymh <ymh.work@gmail.com>
parents: 119
diff changeset
    10
# license as circulated by CEA, CNRS and INRIA at the following URL
a345f1a67bf1 Python licence headers
ymh <ymh.work@gmail.com>
parents: 119
diff changeset
    11
# "http://www.cecill.info". 
a345f1a67bf1 Python licence headers
ymh <ymh.work@gmail.com>
parents: 119
diff changeset
    12
#
a345f1a67bf1 Python licence headers
ymh <ymh.work@gmail.com>
parents: 119
diff changeset
    13
# As a counterpart to the access to the source code and  rights to copy,
a345f1a67bf1 Python licence headers
ymh <ymh.work@gmail.com>
parents: 119
diff changeset
    14
# modify and redistribute granted by the license, users are provided only
a345f1a67bf1 Python licence headers
ymh <ymh.work@gmail.com>
parents: 119
diff changeset
    15
# with a limited warranty  and the software's author,  the holder of the
a345f1a67bf1 Python licence headers
ymh <ymh.work@gmail.com>
parents: 119
diff changeset
    16
# economic rights,  and the successive licensors  have only  limited
a345f1a67bf1 Python licence headers
ymh <ymh.work@gmail.com>
parents: 119
diff changeset
    17
# liability. 
a345f1a67bf1 Python licence headers
ymh <ymh.work@gmail.com>
parents: 119
diff changeset
    18
#
a345f1a67bf1 Python licence headers
ymh <ymh.work@gmail.com>
parents: 119
diff changeset
    19
# In this respect, the user's attention is drawn to the risks associated
a345f1a67bf1 Python licence headers
ymh <ymh.work@gmail.com>
parents: 119
diff changeset
    20
# with loading,  using,  modifying and/or developing or reproducing the
a345f1a67bf1 Python licence headers
ymh <ymh.work@gmail.com>
parents: 119
diff changeset
    21
# software by the user in light of its specific status of free software,
a345f1a67bf1 Python licence headers
ymh <ymh.work@gmail.com>
parents: 119
diff changeset
    22
# that may mean  that it is complicated to manipulate,  and  that  also
a345f1a67bf1 Python licence headers
ymh <ymh.work@gmail.com>
parents: 119
diff changeset
    23
# therefore means  that it is reserved for developers  and  experienced
a345f1a67bf1 Python licence headers
ymh <ymh.work@gmail.com>
parents: 119
diff changeset
    24
# professionals having in-depth computer knowledge. Users are therefore
a345f1a67bf1 Python licence headers
ymh <ymh.work@gmail.com>
parents: 119
diff changeset
    25
# encouraged to load and test the software's suitability as regards their
a345f1a67bf1 Python licence headers
ymh <ymh.work@gmail.com>
parents: 119
diff changeset
    26
# requirements in conditions enabling the security of their systems and/or 
a345f1a67bf1 Python licence headers
ymh <ymh.work@gmail.com>
parents: 119
diff changeset
    27
# data to be ensured and,  more generally, to use and operate it in the 
a345f1a67bf1 Python licence headers
ymh <ymh.work@gmail.com>
parents: 119
diff changeset
    28
# same conditions as regards security. 
a345f1a67bf1 Python licence headers
ymh <ymh.work@gmail.com>
parents: 119
diff changeset
    29
#
a345f1a67bf1 Python licence headers
ymh <ymh.work@gmail.com>
parents: 119
diff changeset
    30
# The fact that you are presently reading this means that you have had
a345f1a67bf1 Python licence headers
ymh <ymh.work@gmail.com>
parents: 119
diff changeset
    31
# knowledge of the CeCILL-B license and that you accept its terms.
a345f1a67bf1 Python licence headers
ymh <ymh.work@gmail.com>
parents: 119
diff changeset
    32
#
0
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
101
71532a54d1c4 update virtualenv + implement record serialization
ymh <ymh.work@gmail.com>
parents: 22
diff changeset
    34
import logging
71532a54d1c4 update virtualenv + implement record serialization
ymh <ymh.work@gmail.com>
parents: 22
diff changeset
    35
from optparse import make_option
71532a54d1c4 update virtualenv + implement record serialization
ymh <ymh.work@gmail.com>
parents: 22
diff changeset
    36
6
ff4d2d4f1fb0 correct import of VolumeIssue
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    37
from django.core.management import BaseCommand
ff4d2d4f1fb0 correct import of VolumeIssue
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    38
from django.db import reset_queries, transaction
107
48440ff95906 small code reorg
ymh <ymh.work@gmail.com>
parents: 106
diff changeset
    39
from rdflib import BNode
101
71532a54d1c4 update virtualenv + implement record serialization
ymh <ymh.work@gmail.com>
parents: 22
diff changeset
    40
107
48440ff95906 small code reorg
ymh <ymh.work@gmail.com>
parents: 106
diff changeset
    41
from p4l.mapping.constants import get_empty_graph, IIEP
48440ff95906 small code reorg
ymh <ymh.work@gmail.com>
parents: 106
diff changeset
    42
from p4l.mapping.parsers import RecordParser, QueryCache
13
6296aa12fd71 model simplification, correct import on language. We do not try to impose a language when none is found. add forgotten abstract field on import.
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    43
from p4l.utils import show_progress
0
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
import xml.etree.cElementTree as ET
114
93b45b4f423c add corporate authors and small adjustments
ymh <ymh.work@gmail.com>
parents: 108
diff changeset
    45
from django.conf import settings
0
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
101
71532a54d1c4 update virtualenv + implement record serialization
ymh <ymh.work@gmail.com>
parents: 22
diff changeset
    47
0
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
logger = logging.getLogger(__name__)
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
DEFAULT_LANGUAGE_URI = "http://psi.oasis-open.org/iso/639/#eng"
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
DEFAULT_LANGUAGE_QUERY =  """SELECT ( COALESCE(?lang, ?other_lang) as ?main_lang) WHERE {
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
    OPTIONAL { ?s dct:language ?lang }.
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
    OPTIONAL { ?s iiep:otherLanguage ?other_lang }.
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
}"""
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
class Command(BaseCommand):
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
    args = "record_url ..."
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
    help = "Import p4l record rdf format"
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
    option_list = BaseCommand.option_list + (
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
        make_option('-b', '--batch-size',
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
            dest= 'batch_size',
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
            type='int',
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
            default= 50,
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
            help= 'number of object to import in bulk operations' 
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
        ),
106
71684a2ea502 delete record by default when importing
ymh <ymh.work@gmail.com>
parents: 105
diff changeset
    72
        make_option('-p', '--preserve',
71684a2ea502 delete record by default when importing
ymh <ymh.work@gmail.com>
parents: 105
diff changeset
    73
            dest= 'preserve',
71684a2ea502 delete record by default when importing
ymh <ymh.work@gmail.com>
parents: 105
diff changeset
    74
            action='store_true',
71684a2ea502 delete record by default when importing
ymh <ymh.work@gmail.com>
parents: 105
diff changeset
    75
            default=False,
71684a2ea502 delete record by default when importing
ymh <ymh.work@gmail.com>
parents: 105
diff changeset
    76
            help= 'preserve existing record' 
71684a2ea502 delete record by default when importing
ymh <ymh.work@gmail.com>
parents: 105
diff changeset
    77
        ),
114
93b45b4f423c add corporate authors and small adjustments
ymh <ymh.work@gmail.com>
parents: 108
diff changeset
    78
        make_option('-i', '--index',
93b45b4f423c add corporate authors and small adjustments
ymh <ymh.work@gmail.com>
parents: 108
diff changeset
    79
            dest= 'index',
93b45b4f423c add corporate authors and small adjustments
ymh <ymh.work@gmail.com>
parents: 108
diff changeset
    80
            action='store_true',
93b45b4f423c add corporate authors and small adjustments
ymh <ymh.work@gmail.com>
parents: 108
diff changeset
    81
            default=False,
93b45b4f423c add corporate authors and small adjustments
ymh <ymh.work@gmail.com>
parents: 108
diff changeset
    82
            help= 'index while importing' 
93b45b4f423c add corporate authors and small adjustments
ymh <ymh.work@gmail.com>
parents: 108
diff changeset
    83
        ),
0
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
    )
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
    def __init__(self, *args, **kwargs):
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
        super(Command, self).__init__(*args, **kwargs)
107
48440ff95906 small code reorg
ymh <ymh.work@gmail.com>
parents: 106
diff changeset
    88
        self.record_parser = RecordParser(query_cache=QueryCache())
106
71684a2ea502 delete record by default when importing
ymh <ymh.work@gmail.com>
parents: 105
diff changeset
    89
        
0
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
    def filter_node(self, node, graph, res_graph):
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
        for p,o in graph[node]:
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
            res_graph.add((node,p,o))
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
            if isinstance(o, BNode):
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
                self.filter_node(o, graph, res_graph)
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
    def calculate_records_nb(self, records_url):
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
        context = ET.iterparse(records_url, events=("end",))
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
        i = 0
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
        for _,elem in context:
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
            if elem.tag == "{%s}Record" % IIEP:
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
                i += 1
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
        return i
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
    def process_url(self, records_url, options):
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
        total_records = self.calculate_records_nb(records_url)
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
        writer = None
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
        errors=[]
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
        context = ET.iterparse(records_url, events=("end",))
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
        i = 0
6
ff4d2d4f1fb0 correct import of VolumeIssue
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   115
        for _,elem in context:
0
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
            if elem.tag == "{%s}Record" % IIEP:
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
                i += 1
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
                writer = show_progress(i, total_records, "Processing record nb %d " % i, 50, writer=writer)
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
                try:
101
71532a54d1c4 update virtualenv + implement record serialization
ymh <ymh.work@gmail.com>
parents: 22
diff changeset
   120
                    record_graph = get_empty_graph()
106
71684a2ea502 delete record by default when importing
ymh <ymh.work@gmail.com>
parents: 105
diff changeset
   121
                    record_graph.parse(data=ET.tostring(elem, encoding='utf-8'), format='xml')                    
107
48440ff95906 small code reorg
ymh <ymh.work@gmail.com>
parents: 106
diff changeset
   122
                    self.record_parser.build_record(record_graph, delete=(not self.preserve))                    
0
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
                except Exception as e:
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
                    transaction.rollback()
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
                    msg = "Error processing resource %d in %s : %s" % (i, records_url, repr(e))
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
                    logger.exception(msg)
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
                    errors.append((i, records_url, msg))
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
                else:
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
                    transaction.commit()
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
                if i%self.batch_size == 0:                    
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
                    reset_queries()
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
        return errors
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
    # def process_url(self, records_url, options):
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
    #     #open graph with rdflib
13
6296aa12fd71 model simplification, correct import on language. We do not try to impose a language when none is found. add forgotten abstract field on import.
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   139
    #             
0
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
    #     g = Graph()
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
    #     print("Loading %s" % records_url)
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
    #     g.parse(records_url)
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
    #     print("Parsing %s done" % records_url)
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
    #     for i,record_uri in enumerate(g[:RDF.type:IIEP.Record]):
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
    #         print(i, repr(record_uri))
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
    #         record_graph = self.get_empty_graph()
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
    #         self.filter_node(record_uri, g, record_graph)
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
    #         self.build_record(record_graph)
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
    #         if i > 3:
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
    #             break
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
    def handle(self, *args, **options):
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
        self.batch_size = options.get('batch_size', 50)
106
71684a2ea502 delete record by default when importing
ymh <ymh.work@gmail.com>
parents: 105
diff changeset
   156
        self.preserve = options.get("preserve", False)
114
93b45b4f423c add corporate authors and small adjustments
ymh <ymh.work@gmail.com>
parents: 108
diff changeset
   157
        self.index = options.get("index", False)
93b45b4f423c add corporate authors and small adjustments
ymh <ymh.work@gmail.com>
parents: 108
diff changeset
   158
        
93b45b4f423c add corporate authors and small adjustments
ymh <ymh.work@gmail.com>
parents: 108
diff changeset
   159
        if not self.index:
119
ece69ca3ac24 - correct import pour indexation
ymh <ymh.work@gmail.com>
parents: 114
diff changeset
   160
            old_realtime_indexing = getattr(settings, "REALTIME_INDEXING", None)
114
93b45b4f423c add corporate authors and small adjustments
ymh <ymh.work@gmail.com>
parents: 108
diff changeset
   161
            #this is not recommended by the django manual, but in case of management command it seems to work
119
ece69ca3ac24 - correct import pour indexation
ymh <ymh.work@gmail.com>
parents: 114
diff changeset
   162
            settings.REALTIME_INDEXING = False 
114
93b45b4f423c add corporate authors and small adjustments
ymh <ymh.work@gmail.com>
parents: 108
diff changeset
   163
        
0
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
        transaction.enter_transaction_management()
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
        transaction.managed(True)
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
        for records_url in args:
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
            print("Processing %s" % records_url)
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
            errors = self.process_url(records_url, options)
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
            print("Processing %s Done" % records_url)
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
            if errors:
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
                print("%d error(s) when processing %s, check your log file." % (len(errors), records_url))
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
        transaction.leave_transaction_management()
114
93b45b4f423c add corporate authors and small adjustments
ymh <ymh.work@gmail.com>
parents: 108
diff changeset
   175
        
119
ece69ca3ac24 - correct import pour indexation
ymh <ymh.work@gmail.com>
parents: 114
diff changeset
   176
        if not self.index and old_realtime_indexing:
ece69ca3ac24 - correct import pour indexation
ymh <ymh.work@gmail.com>
parents: 114
diff changeset
   177
            settings.REALTIME_INDEXING = old_realtime_indexing
0
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178