Пример #1
0
def do_freenet_insert(ui_, repo, params, insert_uri, progress_func):
    """ INTERNAL: Helper does the actual insert.

                  Caller must delete TMP_DUMP_DIR!
    """
    default_mime_type = "text/plain" # put_complex_dir() default. Hmmmm.
    if not params['ISWIKI']:
        site_root = os.path.join(repo.root, params['SITE_DIR'])
    else:
        # Because wiki html files have no extension to guess from.
        default_mime_type = 'text/html'

        ui_.status("Dumping wiki as HTML...\n")
        site_root = os.path.join(params['TMP_DIR'], TMP_DUMP_DIR)
        dump_wiki_html(os.path.join(repo.root, params['WIKI_ROOT']),
                       site_root,
                       params['OVERLAYED'])

    ui_.status('Default file: %s\n' % params['SITE_DEFAULT_FILE'])
    ui_.status('Reading files from:\n%s\n' % site_root)

    infos = get_file_infos(site_root)

    try:
        set_index_file(infos, params['SITE_DEFAULT_FILE'])
    except ValueError:
        raise util.Abort("Couldn't read %s" % params['SITE_DEFAULT_FILE'])

    ui_.status('--- files ---\n')

    for info in infos:
        ui_.status('%s %s\n' % (info[0], info[1]))
    ui_.status('---\n')

    if params['DRYRUN']:
        ui_.status('Would have inserted to:\n%s\n' % insert_uri)
        ui_.status('But --dryrun was set.\n')
        return

    client = FCPClient.connect(params['FCP_HOST'],
                               params['FCP_PORT'])
    client.in_params.default_fcp_params['DontCompress'] = False
    client.message_callback = progress_func
    try:
        ui_.status('Inserting to:\n%s\n' % insert_uri)
        try:
            request_uri = client.put_complex_dir(insert_uri, infos,
                                                 default_mime_type)[1]['URI']
            show_request_uri(ui_, params, request_uri)
        except FCPError, err:
            if err.is_code(9): # magick number for collision
                ui_.warn('An update was already inserted on that index.\n'
                         + 'Set a later index with --index and try again.\n')
                raise util.Abort("Key collision.")
            else:
                ui_.warn(str(err) + '\n')
                raise util.Abort("FCP Error")
    finally:
        client.close()
Пример #2
0
def do_freenet_insert(ui_, repo, params, insert_uri, progress_func):
    """ INTERNAL: Helper does the actual insert.

                  Caller must delete TMP_DUMP_DIR!
    """
    default_mime_type = "text/plain"  # put_complex_dir() default. Hmmmm.
    if not params['ISWIKI']:
        site_root = os.path.join(repo.root, params['SITE_DIR'])
    else:
        # Because wiki html files have no extension to guess from.
        default_mime_type = 'text/html'

        ui_.status("Dumping wiki as HTML...\n")
        site_root = os.path.join(params['TMP_DIR'], TMP_DUMP_DIR)
        dump_wiki_html(os.path.join(repo.root, params['WIKI_ROOT']), site_root,
                       params['OVERLAYED'])

    ui_.status('Default file: %s\n' % params['SITE_DEFAULT_FILE'])
    ui_.status('Reading files from:\n%s\n' % site_root)

    infos = get_file_infos(site_root)

    try:
        set_index_file(infos, params['SITE_DEFAULT_FILE'])
    except ValueError:
        raise util.Abort("Couldn't read %s" % params['SITE_DEFAULT_FILE'])

    ui_.status('--- files ---\n')

    for info in infos:
        ui_.status('%s %s\n' % (info[0], info[1]))
    ui_.status('---\n')

    if params['DRYRUN']:
        ui_.status('Would have inserted to:\n%s\n' % insert_uri)
        ui_.status('But --dryrun was set.\n')
        return

    client = FCPClient.connect(params['FCP_HOST'], params['FCP_PORT'])
    client.in_params.default_fcp_params['DontCompress'] = False
    client.message_callback = progress_func
    try:
        ui_.status('Inserting to:\n%s\n' % insert_uri)
        try:
            request_uri = client.put_complex_dir(insert_uri, infos,
                                                 default_mime_type)[1]['URI']
            show_request_uri(ui_, params, request_uri)
        except FCPError, err:
            if err.is_code(9):  # magick number for collision
                ui_.warn('An update was already inserted on that index.\n' +
                         'Set a later index with --index and try again.\n')
                raise util.Abort("Key collision.")
            else:
                ui_.warn(str(err) + '\n')
                raise util.Abort("FCP Error")
    finally:
        client.close()
Пример #3
0
    def _start_freesite_insert(self):
        """ INTERNAL: Start asynchronous insert of Wiki freesite. """
        assert self.update_sm is None
        self.debug("start_freesite_insert -- starting insert of edition: %i" %
                   (latest_site_index(self.repo) + 1))

        self.update_sm = setup_sm(self.ui_, self.repo, self.runner, self.params)
        # LATER: Replace UICallbacks and back out dorky chaining?
        self.update_sm.transition_callback = (
            ChainedCallback.chain((self.update_sm.transition_callback,
                                   self._freesite_transition)))

        # DCI: try block, with file cleanup
        # DCI: need to check that there are no uncommited files!
        site_root = os.path.join(self.params['TMP_DIR'], HTML_DUMP_DIR)
        dump_wiki_html(os.path.join(self.repo.root, self.params['WIKI_ROOT']),
                       site_root, False)

        infos = get_file_infos(site_root)
        set_index_file(infos, self.params['SITE_DEFAULT_FILE'])
        self.debug('start_freesite_insert -- dumped %i files' % len(infos))
        self.trace('--- files ---')
        for info in infos:
            self.trace('%s %s' % (info[0], info[1]))
        self.trace('---')

        request = StatefulRequest(self.update_sm)
        request.tag = 'freesite_insert'
        request.in_params.definition = PUT_COMPLEX_DIR_DEF
        request.in_params.fcp_params = self.params.copy()
        request.in_params.fcp_params['DontCompress'] = False
        request.in_params.fcp_params['URI'] = self._freesite_insert_uri()

        # dir_data_source() creates an IDataSource which allows
        # the FCPConnection to slurp the files up over the
        # FCP socket as one contiguous blob.

        # Sets up in_params for ClientPutComplexDir as a side effect.
        request.custom_data_source = (
            dir_data_source(infos, request.in_params, 'text/html'))

        request.cancel_time_secs = (time.time() +
                                    self.params['CANCEL_TIME_SECS'])
        self.update_sm.start_single_request(request)
Пример #4
0
    def _start_freesite_insert(self):
        """ INTERNAL: Start asynchronous insert of Wiki freesite. """
        assert self.update_sm is None
        self.debug("start_freesite_insert -- starting insert of edition: %i" %
                   (latest_site_index(self.repo) + 1))

        self.update_sm = setup_sm(self.ui_, self.repo, self.runner,
                                  self.params)
        # LATER: Replace UICallbacks and back out dorky chaining?
        self.update_sm.transition_callback = (ChainedCallback.chain(
            (self.update_sm.transition_callback, self._freesite_transition)))

        # DCI: try block, with file cleanup
        # DCI: need to check that there are no uncommited files!
        site_root = os.path.join(self.params['TMP_DIR'], HTML_DUMP_DIR)
        dump_wiki_html(os.path.join(self.repo.root, self.params['WIKI_ROOT']),
                       site_root, False)

        infos = get_file_infos(site_root)
        set_index_file(infos, self.params['SITE_DEFAULT_FILE'])
        self.debug('start_freesite_insert -- dumped %i files' % len(infos))
        self.trace('--- files ---')
        for info in infos:
            self.trace('%s %s' % (info[0], info[1]))
        self.trace('---')

        request = StatefulRequest(self.update_sm)
        request.tag = 'freesite_insert'
        request.in_params.definition = PUT_COMPLEX_DIR_DEF
        request.in_params.fcp_params = self.params.copy()
        request.in_params.fcp_params['DontCompress'] = False
        request.in_params.fcp_params['URI'] = self._freesite_insert_uri()

        # dir_data_source() creates an IDataSource which allows
        # the FCPConnection to slurp the files up over the
        # FCP socket as one contiguous blob.

        # Sets up in_params for ClientPutComplexDir as a side effect.
        request.custom_data_source = (dir_data_source(infos, request.in_params,
                                                      'text/html'))

        request.cancel_time_secs = (time.time() +
                                    self.params['CANCEL_TIME_SECS'])
        self.update_sm.start_single_request(request)