def get_target(target_fname, spider_target_fname):
    def printer(msg):
        print msg

    raw_target, err = local_dal.read_utf_file_to_list_lines(target_fname)
    target = get_target_object(raw_target)
    
    print 'Source target: '
    map(printer, target.items())

    rpt = check_crawler_target(target)
    print 
    print 'Rpt:'
    map(printer, rpt)

    # Можно передавать краулеру на посик файлов - DataIsSafe
    # поиск
    print 
    print 'Begin finding'
    roots = target[kKeyRoot]
    extension_list = target[kKeyTargetExts]
    ignored_dirs = target[kKeyIgnoredDir]
    result_list, err = os_walker.find_files_down_tree_roots(roots, extension_list, ignored_dirs)
    if err[0]:
        print err[1]
    print 'End finding'
        
    # Разбираем не узлы
    target_for_spider, rpt = fill_target_for_spider(result_list)
    if rpt:
        print 
        print 'Rpt:'
        map(printer, rpt)
    
    fname = spider_target_fname
    local_dal.write_result_file(target_for_spider, fname)
    
    #print '\nResult target:'
    #map(printer, target.items())
    print
    print 'Nodes and urls write to file - '+fname
    return target
    sys.path.append('../src')
    from crawlers import get_target
    from dals.local_host.local_host_io_wrapper import write_result_file
except:
    formatted_lines = traceback.format_exc().splitlines()
    err_msg = '\n'.join(formatted_lines) 
    print err_msg
    print sys.path
    var = raw_input("Press any key.")
    exit()

def printer(msg):
    print msg

if __name__=='__main__':
    target_fname = 'targets/crawler_schedule.txt'
    spider_target_fname = 'targets/spider_extractor_target'#.txt'
    target = get_target(target_fname, spider_target_fname+'.txt')
    print target
    
    json_target = json.dumps(target, sort_keys=True, indent=2)
    print '\nResult target:'
    print json_target
    
    # Эти настройки и настройки узлов лучше хранить раздельно
    spider_target_fname = spider_target_fname+'.json'
    write_result_file([json_target], spider_target_fname)

    print 'Done'
    var = raw_input("Press any key.")
    def process(self, input_fname, path_to_node):
        def get_fname_for_save(fname):
            fname = fname.replace('\\','/')
            only_fname = fname.split('/')[-1]
            output_fname = path_to_node+'/'+only_fname+'.ptxt'
            return output_fname
        
        def get_fname_for_save_meta(fname):
            fname = fname.replace('\\','/')
            only_fname = fname.split('/')[-1]
            output_fname = path_to_node+'/'+only_fname+'.meta'
            return output_fname
        
        
        def file_is_enabled(fname):
            extention = fname.split('.')[-1]
            if extention in self._enabled_extentons:
                return True
            return False
        
        def purge_line(one_line):
            if not is_content_letter(one_line):
                return None
            result = one_line.replace('\t','')
            return result
        """ 
        Присутствует фильта входных файлов, что упрощает обработку папок с разнородными
        файлами.
        
        TODO(zaqwes): Используется детектор языков от Tika, хотя детектирует правильно, 
            но выдает, что недостаточно. Возможно можно заменить на другую библитеку
        
        Postcond.:
            Текстовой файл с полностью снятым форматированием. Язык не определен.
            
        Trouble:
            - Если программа содержит код
        """

        print 'Processing file : ', input_fname
        if not file_is_enabled(input_fname):
            return None, (1, 'File must *.doc, *.docx, *.pdf, *.odt. File skipped.')
        
        
        input_var = None
        
        output_fname = get_fname_for_save(input_fname)  # Файл временный, он же выходной
        print output_fname
        out_file = File(output_fname)  # Врядли выкенет исключение
        ofile_stream = FileOutputStream(out_file)
        lang = None
        try:
            # TODO(zaqwes): не очень понятно, что здесь происходит
            url = URL
            file_obj = File(input_fname);
            if file_obj.isFile():
                url = file_obj.toURI().toURL();
            else:
                url = URL(input_fname);
            # TODO(zaqwes): не очень понятно, что здесь происходит
              
            # Начинаем обработку
            metadata = {'url':input_fname}
            
            result_utf8 = []#['metadata','']  # формат строгий!!
              
            # На данный момент сохраняем в промежуточный файл на диске, но можно и ускорить
            # например, через отображение на память
            input_var = TikaInputStream.get(url, self._metadata);
            handler = BodyContentHandler(ofile_stream)
            self._parser.parse(input_var, handler, self._metadata, self._context);
            
            if ofile_stream:
                ofile_stream.close()
                
            return 'TEST', (1, 'TEST')
            # Преобразуем в unicode
            java_in = BufferedReader(FileReader(output_fname))
            writer = ProfilingWriter();
            while True:
                s = String()
                s = java_in.readLine()
                print s
                if s == None:
                    break
                
                # Строку нужно подчистить
                one_line = unicode(str(s), 'utf-8')
                one_line = purge_line(one_line)
                if one_line:
                    result_utf8.append(one_line)
                    writer.append(one_line);
                
            identifier = writer.getLanguage();
            lang = identifier.getLanguage()
            metadata['lang'] = lang
            #print identifier.isReasonablyCertain()  # Всегда False
            #System.out.println(identifier.getLanguage());
            
            meta_fname = get_fname_for_save_meta(input_fname)
            # Сохраняем результат 
            dal.write_result_file(result_utf8, output_fname)
            dal.write_result_file([json.dumps(metadata, sort_keys=True, indent=2)], meta_fname)
        
        except IOException as e:
            err_code = 1
            err_msg = 'Error: io.'
            e.printStackTrace()
            return output_fname, err_code, err_msg
        except TikaException as e:
            # Отключит обработку? Нет не отключит, т.к. исключение поймано
            e.printStackTrace()
        except SAXException as e:
            e.printStackTrace()
        finally:
            if input_var:
                try:
                    input_var.close()
                except IOException as e:
                    e.printStackTrace();
                    
        # Подводим итоги
        return ((output_fname, lang), (0, ''))