示例#1
0
def config(general_config, config_options, config_file):
    """View and optionally update existing Bob's configuration."""
    emitter = setup_emitter(general_config)
    if not config_file:
        config_file = select_config_file(
            emitter=emitter,
            checksum_address=config_options.checksum_address,
            config_class=BobConfiguration)
    updates = config_options.get_updates()
    get_or_update_configuration(emitter=emitter,
                                config_class=BobConfiguration,
                                filepath=config_file,
                                updates=updates)
示例#2
0
def destroy(general_config, config_options, config_file, force):
    """
    Delete Ursula node configuration.
    """
    emitter = setup_emitter(general_config, config_options.worker_address)
    _pre_launch_warnings(emitter, dev=config_options.dev, force=force)
    if not config_file:
        config_file = select_config_file(
            emitter=emitter,
            checksum_address=config_options.worker_address,
            config_class=UrsulaConfiguration)
    ursula_config = config_options.create_config(emitter, config_file)
    destroy_configuration(emitter, character_config=ursula_config, force=force)
示例#3
0
def config(general_config, config_options, config_file):
    """View and optionally update the Ursula node's configuration."""
    emitter = setup_emitter(general_config, config_options.worker_address)
    if not config_file:
        config_file = select_config_file(
            emitter=emitter,
            checksum_address=config_options.worker_address,
            config_class=UrsulaConfiguration)
    updates = config_options.get_updates()
    get_or_update_configuration(emitter=emitter,
                                config_class=UrsulaConfiguration,
                                filepath=config_file,
                                updates=updates)
示例#4
0
文件: alice.py 项目: xmkchen/nucypher
def config(general_config, config_file, full_config_options):
    """View and optionally update existing Alice's configuration."""
    emitter = setup_emitter(general_config)
    if not config_file:
        config_file = select_config_file(
            emitter=emitter,
            checksum_address=full_config_options.config_options.pay_with,
            config_class=AliceConfiguration)
    updates = full_config_options.get_updates()
    get_or_update_configuration(emitter=emitter,
                                config_class=AliceConfiguration,
                                filepath=config_file,
                                updates=updates)
示例#5
0
def run(general_config, character_options, config_file, interactive, dry_run,
        prometheus, metrics_port, metrics_listen_address, metrics_prefix,
        metrics_interval, force, ip_checkup):
    """Run an "Ursula" node."""

    worker_address = character_options.config_options.worker_address
    emitter = setup_emitter(general_config)
    dev_mode = character_options.config_options.dev
    lonely = character_options.config_options.lonely

    if prometheus and not metrics_port:
        # Require metrics port when using prometheus
        raise click.BadOptionUsage(
            option_name='metrics-port',
            message='--metrics-port is required when using --prometheus')

    _pre_launch_warnings(emitter, dev=dev_mode, force=None)

    if not config_file and not dev_mode:
        config_file = select_config_file(emitter=emitter,
                                         checksum_address=worker_address,
                                         config_class=UrsulaConfiguration)

    prometheus_config: 'PrometheusMetricsConfig' = None
    if prometheus and not dev_mode:
        # Locally scoped to prevent import without prometheus explicitly installed
        from nucypher.utilities.prometheus.metrics import PrometheusMetricsConfig
        prometheus_config = PrometheusMetricsConfig(
            port=metrics_port,
            metrics_prefix=metrics_prefix,
            listen_address=metrics_listen_address,
            collection_interval=metrics_interval)

    ursula_config, URSULA = character_options.create_character(
        emitter=emitter,
        config_file=config_file,
        json_ipc=general_config.json_ipc)

    if ip_checkup and not (dev_mode or lonely):
        # Always skip startup IP checks for dev and lonely modes.
        perform_startup_ip_check(emitter=emitter, ursula=URSULA, force=force)

    try:
        URSULA.run(emitter=emitter,
                   start_reactor=not dry_run,
                   interactive=interactive,
                   prometheus_config=prometheus_config,
                   preflight=not dev_mode)
    finally:
        if dry_run:
            URSULA.stop()
示例#6
0
 def create_config(self, emitter, config_file):
     if self.dev:
         return UrsulaConfiguration(
             emitter=emitter,
             dev_mode=True,
             domain=TEMPORARY_DOMAIN,
             poa=self.poa,
             light=self.light,
             registry_filepath=self.registry_filepath,
             provider_uri=self.provider_uri,
             signer_uri=self.signer_uri,
             gas_strategy=self.gas_strategy,
             max_gas_price=self.max_gas_price,
             checksum_address=self.worker_address,
             federated_only=self.federated_only,
             rest_host=self.rest_host,
             rest_port=self.rest_port,
             db_filepath=self.db_filepath,
             availability_check=self.availability_check)
     else:
         if not config_file:
             config_file = select_config_file(
                 emitter=emitter,
                 checksum_address=self.worker_address,
                 config_class=UrsulaConfiguration)
         try:
             return UrsulaConfiguration.from_configuration_file(
                 emitter=emitter,
                 filepath=config_file,
                 domain=self.domain,
                 registry_filepath=self.registry_filepath,
                 provider_uri=self.provider_uri,
                 signer_uri=self.signer_uri,
                 gas_strategy=self.gas_strategy,
                 max_gas_price=self.max_gas_price,
                 rest_host=self.rest_host,
                 rest_port=self.rest_port,
                 db_filepath=self.db_filepath,
                 poa=self.poa,
                 light=self.light,
                 federated_only=self.federated_only,
                 availability_check=self.availability_check)
         except FileNotFoundError:
             return handle_missing_configuration_file(
                 character_config_class=UrsulaConfiguration,
                 config_file=config_file)
         except NucypherKeyring.AuthenticationFailed as e:
             emitter.echo(str(e), color='red', bold=True)
             # TODO: Exit codes (not only for this, but for other exceptions)
             return click.get_current_context().exit(1)
示例#7
0
    def create_config(self, emitter, config_file):

        if self.dev:

            # Can be None as well, meaning it is unset - no error in this case
            if self.federated_only is False:
                raise click.BadOptionUsage(
                    option_name="--federated-only",
                    message="--federated-only cannot be explicitly set to False when --dev is set")

            return AliceConfiguration(
                emitter=emitter,
                dev_mode=True,
                network_middleware=self.middleware,
                domain=TEMPORARY_DOMAIN,
                provider_uri=self.provider_uri,
                signer_uri=self.signer_uri,
                gas_strategy=self.gas_strategy,
                max_gas_price=self.max_gas_price,
                federated_only=True,
                lonely=self.lonely
            )

        else:
            if not config_file:
                config_file = select_config_file(emitter=emitter,
                                                 checksum_address=self.pay_with,
                                                 config_class=AliceConfiguration)
            try:
                return AliceConfiguration.from_configuration_file(
                    emitter=emitter,
                    dev_mode=False,
                    network_middleware=self.middleware,
                    domain=self.domain,
                    provider_uri=self.provider_uri,
                    signer_uri=self.signer_uri,
                    gas_strategy=self.gas_strategy,
                    max_gas_price=self.max_gas_price,
                    filepath=config_file,
                    rest_port=self.discovery_port,
                    checksum_address=self.pay_with,
                    registry_filepath=self.registry_filepath,
                    lonely=self.lonely
                )
            except FileNotFoundError:
                return handle_missing_configuration_file(
                    character_config_class=AliceConfiguration,
                    config_file=config_file
                )
示例#8
0
def run(general_config, character_options, config_file, interactive, dry_run,
        prometheus, metrics_port, metrics_listen_address, metrics_prefix,
        metrics_interval):
    """Run an "Ursula" node."""

    worker_address = character_options.config_options.worker_address
    emitter = setup_emitter(general_config)
    _pre_launch_warnings(emitter,
                         dev=character_options.config_options.dev,
                         force=None)

    if not character_options.config_options.dev and not config_file:
        config_file = select_config_file(emitter=emitter,
                                         checksum_address=worker_address,
                                         config_class=UrsulaConfiguration)

    ursula_config, URSULA = character_options.create_character(
        emitter=emitter,
        config_file=config_file,
        json_ipc=general_config.json_ipc)

    prometheus_config: 'PrometheusMetricsConfig' = None
    if prometheus:
        # ensure metrics port is provided
        if not metrics_port:
            raise click.BadOptionUsage(
                option_name='metrics-port',
                message='--metrics-port is required when using --prometheus')

        # Locally scoped to prevent import without prometheus explicitly installed
        from nucypher.utilities.prometheus.metrics import PrometheusMetricsConfig
        prometheus_config = PrometheusMetricsConfig(
            port=metrics_port,
            metrics_prefix=metrics_prefix,
            listen_address=metrics_listen_address,
            collection_interval=metrics_interval)

    # TODO should we just not call run at all for "dry_run"
    try:
        URSULA.run(emitter=emitter,
                   start_reactor=not dry_run,
                   interactive=interactive,
                   prometheus_config=prometheus_config)
    finally:
        if dry_run:
            URSULA.stop()
示例#9
0
def config(general_config, config_options, config_file, force, action):
    """View and optionally update the Ursula node's configuration."""
    emitter = setup_emitter(general_config, config_options.worker_address)
    if not config_file:
        config_file = select_config_file(
            emitter=emitter,
            checksum_address=config_options.worker_address,
            config_class=UrsulaConfiguration)
    if action == 'ip-address':
        rest_host = collect_worker_ip_address(emitter=emitter,
                                              network=config_options.domain,
                                              force=force)
        config_options.rest_host = rest_host
    updates = config_options.get_updates()
    get_or_update_configuration(emitter=emitter,
                                config_class=UrsulaConfiguration,
                                filepath=config_file,
                                updates=updates)
示例#10
0
 def create_config(self, emitter: StdoutEmitter,
                   config_file: Path) -> BobConfiguration:
     if self.dev:
         return BobConfiguration(emitter=emitter,
                                 dev_mode=True,
                                 domain=TEMPORARY_DOMAIN,
                                 provider_uri=self.provider_uri,
                                 gas_strategy=self.gas_strategy,
                                 max_gas_price=self.max_gas_price,
                                 signer_uri=self.signer_uri,
                                 federated_only=True,
                                 checksum_address=self.checksum_address,
                                 network_middleware=self.middleware,
                                 lonely=self.lonely)
     else:
         if not config_file:
             config_file = select_config_file(
                 emitter=emitter,
                 checksum_address=self.checksum_address,
                 config_class=BobConfiguration)
         try:
             return BobConfiguration.from_configuration_file(
                 emitter=emitter,
                 filepath=config_file,
                 domain=self.domain,
                 checksum_address=self.checksum_address,
                 rest_port=self.discovery_port,
                 provider_uri=self.provider_uri,
                 signer_uri=self.signer_uri,
                 gas_strategy=self.gas_strategy,
                 max_gas_price=self.max_gas_price,
                 registry_filepath=self.registry_filepath,
                 network_middleware=self.middleware,
                 lonely=self.lonely)
         except FileNotFoundError:
             handle_missing_configuration_file(
                 character_config_class=BobConfiguration,
                 config_file=config_file)
示例#11
0
 def create_config(self, emitter, config_file):
     # Load Felix from Configuration File with overrides
     if not config_file:
         config_file = select_config_file(emitter=emitter,
                                          checksum_address=self.checksum_address,
                                          config_class=FelixConfiguration)
     try:
         return FelixConfiguration.from_configuration_file(
             emitter=emitter,
             filepath=config_file,
             domain=self.domain,
             registry_filepath=self.registry_filepath,
             provider_uri=self.provider_uri,
             signer=self.signer_uri,
             rest_host=self.host,
             rest_port=self.port,
             db_filepath=self.db_filepath,
             poa=self.poa)
     except FileNotFoundError:
         return handle_missing_configuration_file(
             character_config_class=FelixConfiguration,
             config_file=config_file
         )