telemetry: adding custom tags generates duplicated metrics

Bug Description
When adding custom tags to Istio standard metrics I get duplicated metrics.
Telemetry config:
apiVersion: telemetry.istio.io/v1alpha1
kind: Telemetry
metadata:
  name: custom-tags
  namespace: external-istiod
spec:
  metrics:
  - overrides:
    - match:
        metric: ALL_METRICS
        mode: CLIENT
      tagOverrides:
        destination_x:
          value: upstream_peer.labels['x'].value
        source_x:
          value: labels['x'].value
    - match:
        metric: ALL_METRICS
        mode: SERVER
      tagOverrides:
        destination_x:
          value: upstream_peer.labels['x'].value
        source_x:
          value: downstream_peer.labels['x'].value
    providers:
    - name: prometheus

The output of /stats/prometheus :
istio_requests_total{response_code="500",reporter="destination",source_workload="SRC_WORKLOAD",source_workload_namespace="default",source_principal="spiffe://cluster.local/ns/default/sa/default",source_app="SRC_APP",source_version="SRC_VERSION",source_cluster="SRC_CLUSTER",destination_workload="DST_WORKLOAD",destination_workload_namespace="default",destination_principal="spiffe://cluster.local/ns/default/sa/default",destination_app="DST_APP",destination_version="DST_VERSION",destination_service="DST_SERVICE",destination_service_name="DST_SERVICE_NAME",destination_service_namespace="default",destination_cluster="DST_CLUSTER",request_protocol="http",response_flags="-",grpc_response_status="",connection_security_policy="mutual_tls",source_canonical_service="SRC_CANONICAL_SERVICE",destination_canonical_service="DST_CANONICAL_SERVICE",source_canonical_revision="SRC_CANONICAL_REVISION",destination_canonical_revision="DST_CANONICAL_REVISION",destination_x="X",source_x="X"} 480
istio_requests_total{response_code="500",reporter="destination",source_workload="SRC_WORKLOAD",source_workload_namespace="default",source_principal="spiffe://cluster.local/ns/default/sa/default",source_app="SRC_APP",source_version="SRC_VERSION",source_cluster="SRC_CLUSTER",destination_workload="DST_WORKLOAD",destination_workload_namespace="default",destination_principal="spiffe://cluster.local/ns/default/sa/default",destination_app="DST_APP",destination_version="DST_VERSION",destination_service="DST_SERVICE",destination_service_name="DST_SERVICE_NAME",destination_service_namespace="default",destination_cluster="DST_CLUSTER",request_protocol="http",response_flags="-",grpc_response_status="",connection_security_policy="mutual_tls",source_canonical_service="SRC_CANONICAL_SERVICE",destination_canonical_service="DST_CANONICAL_SERVICE",source_canonical_revision="SRC_CANONICAL_REVISION",destination_canonical_revision="DST_CANONICAL_REVISION"} 480

As you can see, there is two separate metrics, with the exact same value, one has the custom tags and the other does not.
Is this intended behaviour? I was expecting to have only one metric with the custom tags.
Version
$ istioctl version
client version: 1.14.1
control plane version: 1.14.1
data plane version: 1.14.1
$ kubectl version --short
Client Version: v1.22
Server Version: v1.22

Additional Information
No response

@sschepens can you share me the listener configdump of the pod?

iop yaml
# export mesh_id cluster_id in metrics
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
  name: dup-metrics
  namespace: istio-system
spec:
  values:
    global:
      meshID: mesh1
  meshConfig:
    defaultConfig:
      extraStatTags:
        - destination_x
        - source_x

telemetry
apiVersion: telemetry.istio.io/v1alpha1
kind: Telemetry
metadata:
  name: custom-tags
  namespace: istio-system
spec:
  metrics:
    - overrides:
        - match:
            metric: ALL_METRICS
            mode: CLIENT
          tagOverrides:
            destination_x:
              value: upstream_peer.labels['app'].value
        - match:
            metric: ALL_METRICS
            mode: SERVER
          tagOverrides:
            source_x:
              value: downstream_peer.labels['app'].value
      providers:
        - name: prometheus

promethe output:
istio_requests_total{response_code="200",reporter="source",source_workload="sleep",source_workload_namespace="default",source_principal="spiffe://cluster.local/ns/default/sa/sleep",source_app="sleep",source_version="unknown",source_cluster="Kubernetes",destination_workload="httpbin",destination_workload_namespace="default",destination_principal="spiffe://cluster.local/ns/default/sa/httpbin",destination_app="httpbin",destination_version="v1",destination_service="httpbin.default.svc.cluster.local",destination_service_name="httpbin",destination_service_namespace="default",destination_cluster="Kubernetes",request_protocol="http",response_flags="-",grpc_response_status="",connection_security_policy="unknown",source_canonical_service="sleep",destination_canonical_service="httpbin",source_canonical_revision="latest",destination_canonical_revision="v1",destination_x="httpbin"} 1
istio_requests_total{response_code="200",reporter="source",source_workload="sleep",source_workload_namespace="default",source_principal="spiffe://cluster.local/ns/default/sa/sleep",source_app="sleep",source_version="unknown",source_cluster="Kubernetes",destination_workload="httpbin",destination_workload_namespace="default",destination_principal="spiffe://cluster.local/ns/default/sa/httpbin",destination_app="httpbin",destination_version="v1",destination_service="httpbin.default.svc.cluster.local",destination_service_name="httpbin",destination_service_namespace="default",destination_cluster="Kubernetes",request_protocol="http",response_flags="-",grpc_response_status="",connection_security_policy="unknown",source_canonical_service="sleep",destination_canonical_service="httpbin",source_canonical_revision="latest",destination_canonical_revision="v1"} 1

listener dump:
- address:
    socketAddress:
      address: <IP_ADDRESS>
      portValue: 8000
  bindToPort: false
  continueOnListenerFiltersTimeout: true
  defaultFilterChain:
    filterChainMatch: {}
    filters:
    - name: istio.stats
      typedConfig:
        '@type': type.googleapis.com/envoy.extensions.filters.network.wasm.v3.Wasm
        config:
          configuration:
            '@type': type.googleapis.com/google.protobuf.StringValue
            value: '{"metrics":[{"dimensions":{"destination_x":"upstream_peer.labels[''app''].value"},"name":"request_messages_total"},{"dimensions":{"destination_x":"upstream_peer.labels[''app''].value"},"name":"response_messages_total"},{"dimensions":{"destination_x":"upstream_peer.labels[''app''].value"},"name":"requests_total"},{"dimensions":{"destination_x":"upstream_peer.labels[''app''].value"},"name":"request_duration_milliseconds"},{"dimensions":{"destination_x":"upstream_peer.labels[''app''].value"},"name":"request_bytes"},{"dimensions":{"destination_x":"upstream_peer.labels[''app''].value"},"name":"response_bytes"},{"dimensions":{"destination_x":"upstream_peer.labels[''app''].value"},"name":"tcp_connections_closed_total"},{"dimensions":{"destination_x":"upstream_peer.labels[''app''].value"},"name":"tcp_connections_opened_total"},{"dimensions":{"destination_x":"upstream_peer.labels[''app''].value"},"name":"tcp_received_bytes_total"},{"dimensions":{"destination_x":"upstream_peer.labels[''app''].value"},"name":"tcp_sent_bytes_total"}]}'
          rootId: stats_outbound
          vmConfig:
            allowPrecompiled: true
            code:
              local:
                filename: /etc/istio/extensions/stats-filter.compiled.wasm
            runtime: envoy.wasm.runtime.v8
            vmId: tcp_stats_outbound
    - name: istio.stats
      typedConfig:
        '@type': type.googleapis.com/udpa.type.v1.TypedStruct
        typeUrl: type.googleapis.com/envoy.extensions.filters.network.wasm.v3.Wasm
        value:
          config:
            configuration:
              '@type': type.googleapis.com/google.protobuf.StringValue
              value: |
                {
                  "debug": "false",
                  "stat_prefix": "istio"
                }
            root_id: stats_outbound
            vm_config:
              allow_precompiled: true
              code:
                local:
                  filename: /etc/istio/extensions/stats-filter.compiled.wasm
              runtime: envoy.wasm.runtime.v8
              vm_id: tcp_stats_outbound
    - name: envoy.filters.network.tcp_proxy
      typedConfig:
        '@type': type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy
        cluster: PassthroughCluster
        idleTimeout: 0s
        statPrefix: PassthroughCluster
    name: PassthroughFilterChain
  filterChains:
  - filterChainMatch:
      applicationProtocols:
      - http/1.1
      - h2c
      transportProtocol: raw_buffer
    filters:
    - name: envoy.filters.network.http_connection_manager
      typedConfig:
        '@type': type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
        httpFilters:
        - name: istio.metadata_exchange
          typedConfig:
            '@type': type.googleapis.com/envoy.extensions.filters.http.wasm.v3.Wasm
            config:
              configuration:
                '@type': type.googleapis.com/envoy.tcp.metadataexchange.config.MetadataExchange
              vmConfig:
                allowPrecompiled: true
                code:
                  local:
                    filename: /etc/istio/extensions/metadata-exchange-filter.compiled.wasm
                runtime: envoy.wasm.runtime.v8
        - name: istio.alpn
          typedConfig:
            '@type': type.googleapis.com/istio.envoy.config.filter.http.alpn.v2alpha1.FilterConfig
            alpnOverride:
            - alpnOverride:
              - istio-http/1.0
              - istio
              - http/1.0
            - alpnOverride:
              - istio-http/1.1
              - istio
              - http/1.1
              upstreamProtocol: HTTP11
            - alpnOverride:
              - istio-h2
              - istio
              - h2
              upstreamProtocol: HTTP2
        - name: envoy.filters.http.fault
          typedConfig:
            '@type': type.googleapis.com/envoy.extensions.filters.http.fault.v3.HTTPFault
        - name: envoy.filters.http.cors
          typedConfig:
            '@type': type.googleapis.com/envoy.extensions.filters.http.cors.v3.Cors
        - name: istio.stats
          typedConfig:
            '@type': type.googleapis.com/envoy.extensions.filters.http.wasm.v3.Wasm
            config:
              configuration:
                '@type': type.googleapis.com/google.protobuf.StringValue
                value: '{"metrics":[{"dimensions":{"destination_x":"upstream_peer.labels[''app''].value"},"name":"request_messages_total"},{"dimensions":{"destination_x":"upstream_peer.labels[''app''].value"},"name":"response_messages_total"},{"dimensions":{"destination_x":"upstream_peer.labels[''app''].value"},"name":"requests_total"},{"dimensions":{"destination_x":"upstream_peer.labels[''app''].value"},"name":"request_duration_milliseconds"},{"dimensions":{"destination_x":"upstream_peer.labels[''app''].value"},"name":"request_bytes"},{"dimensions":{"destination_x":"upstream_peer.labels[''app''].value"},"name":"response_bytes"},{"dimensions":{"destination_x":"upstream_peer.labels[''app''].value"},"name":"tcp_connections_closed_total"},{"dimensions":{"destination_x":"upstream_peer.labels[''app''].value"},"name":"tcp_connections_opened_total"},{"dimensions":{"destination_x":"upstream_peer.labels[''app''].value"},"name":"tcp_received_bytes_total"},{"dimensions":{"destination_x":"upstream_peer.labels[''app''].value"},"name":"tcp_sent_bytes_total"}]}'
              rootId: stats_outbound
              vmConfig:
                allowPrecompiled: true
                code:
                  local:
                    filename: /etc/istio/extensions/stats-filter.compiled.wasm
                runtime: envoy.wasm.runtime.v8
                vmId: stats_outbound
        - name: istio.stats
          typedConfig:
            '@type': type.googleapis.com/udpa.type.v1.TypedStruct
            typeUrl: type.googleapis.com/envoy.extensions.filters.http.wasm.v3.Wasm
            value:
              config:
                configuration:
                  '@type': type.googleapis.com/google.protobuf.StringValue
                  value: |
                    {
                      "debug": "false",
                      "stat_prefix": "istio"
                    }
                root_id: stats_outbound
                vm_config:
                  allow_precompiled: true
                  code:
                    local:
                      filename: /etc/istio/extensions/stats-filter.compiled.wasm
                  runtime: envoy.wasm.runtime.v8
                  vm_id: stats_outbound
        - name: envoy.filters.http.router
          typedConfig:
            '@type': type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
        normalizePath: true
        pathWithEscapedSlashesAction: KEEP_UNCHANGED
        rds:
          configSource:
            ads: {}
            initialFetchTimeout: 0s
            resourceApiVersion: V3
          routeConfigName: "8000"
        requestIdExtension:
          typedConfig:
            '@type': type.googleapis.com/envoy.extensions.request_id.uuid.v3.UuidRequestIdConfig
            useRequestIdForTraceSampling: true
        statPrefix: outbound_<IP_ADDRESS>_8000
        streamIdleTimeout: 0s
        tracing:
          clientSampling:
            value: 100
          customTags:
          - metadata:
              kind:
                request: {}
              metadataKey:
                key: envoy.filters.http.rbac
                path:
                - key: istio_dry_run_allow_shadow_effective_policy_id
            tag: istio.authorization.dry_run.allow_policy.name
          - metadata:
              kind:
                request: {}
              metadataKey:
                key: envoy.filters.http.rbac
                path:
                - key: istio_dry_run_allow_shadow_engine_result
            tag: istio.authorization.dry_run.allow_policy.result
          - metadata:
              kind:
                request: {}
              metadataKey:
                key: envoy.filters.http.rbac
                path:
                - key: istio_dry_run_deny_shadow_effective_policy_id
            tag: istio.authorization.dry_run.deny_policy.name
          - metadata:
              kind:
                request: {}
              metadataKey:
                key: envoy.filters.http.rbac
                path:
                - key: istio_dry_run_deny_shadow_engine_result
            tag: istio.authorization.dry_run.deny_policy.result
          - literal:
              value: latest
            tag: istio.canonical_revision
          - literal:
              value: sleep
            tag: istio.canonical_service
          - literal:
              value: mesh1
            tag: istio.mesh_id
          - literal:
              value: default
            tag: istio.namespace
          overallSampling:
            value: 100
          randomSampling:
            value: 1
        upgradeConfigs:
        - upgradeType: websocket
        useRemoteAddress: false
  listenerFilters:
  - name: envoy.filters.listener.tls_inspector
    typedConfig:
      '@type': type.googleapis.com/envoy.extensions.filters.listener.tls_inspector.v3.TlsInspector
  - name: envoy.filters.listener.http_inspector
    typedConfig:
      '@type': type.googleapis.com/envoy.extensions.filters.listener.http_inspector.v3.HttpInspector
  listenerFiltersTimeout: 0s
  name: <IP_ADDRESS>_8000
  trafficDirection: OUTBOUND

cc @douglas-reid looks like we need remove duplicate istio.stats when telemetryv2 is enabled?

@zirain Telemetry API is fundamentally incompatible with the telemetry-focused EnvoyFilters that get applied. If one wants to use Telemetry API, the first step is really to delete those Filters. IIRC, this used to be documented somewhere, but I can't find it now. I think for the transition period, we need to handle mapping the default providers appropriately based on flags -- and properly handle upgrades with existing filters.

@zirain Telemetry API is fundamentally incompatible with the telemetry-focused EnvoyFilters that get applied. If one wants to use Telemetry API, the first step is really to delete those Filters. IIRC, this used to be documented somewhere, but I can't find it now. I think for the transition period, we need to handle mapping the default providers appropriately based on flags -- and properly handle upgrades with existing filters.

I'm thinking do something(like remove ) to avoid this, most of users will not read docs before getting errors.
One of my thought is somehting like  operation: INSERT_BEFORE_IF_NOEXIST, that will not apply istio.stats filter when there already have one with same named.

@zirain can we unstale this? Is there any plans for deprecating the old EnvotFilter based telemetry? Or is there a way to disabled them when installing Istio?

Yeah, disable EnvoyFilters by setting telemetry.v2.enabled to false: https://github.com/istio/istio/blob/master/manifests/profiles/default.yaml#L142
The question should be when do we make it that default, that's probably 1.17.

I have the same problem (https://github.com/istio/istio/issues/39932#issuecomment-1320827176)

and one more side effect:
if you have added custom metrics in mesh and then add the same metrics from Telemetry you have doubled score of istio metrics (i.e. for each request the istio_requests_total will be increased by 2)

@zirain Telemetry API is fundamentally incompatible with the telemetry-focused EnvoyFilters that get applied. If one wants to use Telemetry API, the first step is really to delete those Filters. IIRC, this used to be documented somewhere, but I can't find it now. I think for the transition period, we need to handle mapping the default providers appropriately based on flags -- and properly handle upgrades with existing filters.

I deleted all stats-filter-1.* envoy filters in istio-system namespace and metrics like 'istio_request_*' disappeared. Is it possible to get them back and use Telemetry API after that?
Istio version:
client version: 1.16.3
control plane version: 1.16.1
data plane version: 1.16.1

there's no magic behind it, you can generate manifests by running istioctl mainifest -f your_iop_file > temp.yaml, then you will see EnvoyFilter configuration in that file.

can this issue be closed @zirain ?

will review again after Telemetry API promoted to beta.

I am running into an issue / some issues here, and want to ask a question to make sure I'm understanding the issue correctly..
I want to use the "Telemetry API", which as I understand it means to do things like create a CRD like this to expose some more envoy properties in my prometheus stats for tcp traffic (in my specific case, istio_tcp_sent_bytes_total):
apiVersion: telemetry.istio.io/v1alpha1
kind: Telemetry
metadata:
  name: destination-endpoints
spec:
  metrics:
  - providers:
    - name: prometheus
    overrides:
    - match:
        metric: TCP_SENT_BYTES
      tagOverrides:
        source_address:
          value: source.address
        destination_address:
          value: destination.address
        upstream_address:
          value: upstream.address
        upstream_local_address:
          value: upstream.local_address
        requested_server_name:
          value: connection.requested_server_name
        upstream_cluster_id:
          value: upstream_peer.cluster_id
        upstream_mesh_id:
          value: upstream_peer.mesh_id
        upstream_controller_revision_hash:
          value: upstream_peer.labels['controller-revision-hash'].value
        upstream_host:
          value: upstream.host
        downstream_local_address:
          value: downstream.local_address
        downstream_remote_address:
          value: downstream.remote_address
        connection_mtls:
          value: connection.mtls

My specific goal is to understand the remote address of a tcp connection from the source (info I can see when access logs are dumped for tcp connections)
The problem I am currently seeing is that certain fields are not populated for certain metrics, and I don't really understand why.  Some info here maybe provides some insight: https://techblog.cisco.com/istio-mixerless-telemetry#istio-telemetry-v2

Out of mesh telemetry is not fully supported: some metrics are missing (the traffic source or destination is not injected by the sidecar).
Egress gateway telemetry is not supported.
TCP telemetry is only supported with mTLS.
Black Hole telemetry for TCP and HTTP protocols is not supported.
Histogram buckets are significantly different from the ones based on Mixer.
Custom metrics support is experimental and limited.

Some of these apply to out of mesh, but others aren't (mtls traffic in the mesh) - in the latter case and for some out of mesh traffic, I see all "unknown" values except for destination_canonical_service, and for others (I believe to external services), I see only these values populated:

connection_mtls
destination_address
upstream_address
upstream_local_address

I understand that this is experimental, but what I'm trying to find out is

is disabling telemetry.v2 everything and using defaultProviders the correct configuration in 1.14 for what I'm trying to achieve?
what can I actually expect for tcp traffic?  Do the ones I'm seeing that aren't "unknown" the best I can expect for in mesh mtls traffic?
Have expectations changed between 1.14.3 and now pertaining to the issues I'm seeing - we know we need to upgrade, don't know where these specific issues would be addressed

control plane version: 1.14.3

I'm seeing a similar issue but in my case the metric is completely duplicated with the custom tag but different values.
We have a Telemetry resource changing a metric like so:
      overrides:
        - match:
            metric: REQUEST_COUNT
            mode: CLIENT
          tagOverrides:
            custom_label:
              value: "request.headers['SOME-HEADER'].contains('some-value') ? request.headers['SOME-HEADER'] : 'unknown'"

and of course the Istiod config has the old EnvoyFilters disabled:
    telemetry:
      enabled: true
      v2:
        enabled: false

We end up with these duplicate metrics which causes some issues for the metrics collector sometimes picking one and sometimes the other, maybe we could find a fix on that side but the ideal solution would be to not have duplicate metrics in the first place. We don't see the issue if the Telemetry resource is removed.
istio_requests_total{reporter="source",source_workload="istio-ingressgateway-pub",source_canonical_service="istio-ingressgateway-pub",source_canonical_revision="latest",source_workload_namespace="istio-system",source_principal="spiffe://cluster.local/ns/istio-system/sa/istio-ingressgateway-pub",source_app="istio-ingressgateway",destination_workload="public-api",destination_workload_namespace="destination-namespace",destination_principal="spiffe://cluster.local/ns/destination-namespace/sa/default",destination_app="public-api",destination_service="public-api.destination-namespace.svc.cluster.local",destination_canonical_service="public-api",destination_canonical_revision="latest",destination_service_name="public-api",destination_service_namespace="destination-namespace",destination_cluster="Kubernetes",request_protocol="http",response_code="400",grpc_response_status="",custom_label="unknown"} 2064
istio_requests_total{reporter="source",source_workload="istio-ingressgateway-pub",source_canonical_service="istio-ingressgateway-pub",source_canonical_revision="latest",source_workload_namespace="istio-system",source_principal="spiffe://cluster.local/ns/istio-system/sa/istio-ingressgateway-pub",source_app="istio-ingressgateway",destination_workload="public-api",destination_workload_namespace="destination-namespace",destination_principal="spiffe://cluster.local/ns/destination-namespace/sa/default",destination_app="public-api",destination_service="public-api.destination-namespace.svc.cluster.local",destination_canonical_service="public-api",destination_canonical_revision="latest",destination_service_name="public-api",destination_service_namespace="destination-namespace",destination_cluster="Kubernetes",request_protocol="http",response_code="400",grpc_response_status="",custom_label="unknown"} 1434

This is on Istio 1.19.7.

@SamuelRosenqvist Sam    IMO, 1.19.7 do not auto remove the stats EnvoyFilter, you can manually verify that the EnvoyFilter is deleted

@nicole-lihui Thank you for the reply, I've removed the stats and tcp-stats EnvoyFilters previously as those caused all metrics to be duplicated, unfortuantely in my current setup it's only the metric overridden by the Telemetry resource that appears to have this issue. 😞


500 error when root api path "/" is visited on a browser

Description
The server exists with a status code of 500 when the http://localhost:4100 is visited on a browser.
Steps to reproduce
Using the following config file
{
  "port": "4100",
  "project_name": "Local",
  "default_currency": "NGN",
  "data_source": {
    "dns": "postgres://postgres:postgres@localhost:5432/blnk?sslmode=disable"
  },
  "redis": {
    "dns": "redis://localhost:6379"
  }
}

Start the server with
go run ./cmd start

PS: Certainly, the API wouldn't be used in this manner, but a 404 should be returned at least.

I just found the project, it was a comment on api/api.goL:25
Working on a fix


Support for legacy enum

Describe the problem
When upgrading from openapi-typescript-codegen the handling of enum is totally different and based on the thread #60 I understand why. But this causes so large upgrade issues in our code base.
Describe the proposed solution
It would be nice to have an --useLegacyEnum flag which would use the  typescript enum construct.
Alternatives considered
No response
Importance
nice to have
Additional information
No response

Hey @mlankamp, how many errors are we talking about? Are you able to use this approach to migrate your code? https://github.com/hey-api/openapi-ts?tab=readme-ov-file#useoptions-true

I think we have like 100+ different enums in our code, and because the models are different between the new and old this doesn't allow us to upgrade easily

@mlankamp  I have released this in version 0.29.0 of @hey-api/openapi-ts.

Thanks, I need to update 1 thing. The index.ts writes the enums as export type {} from ... where the type should be removed. Will send an update later today

@mlankamp  no need. I have made the fix https://github.com/hey-api/openapi-ts/pull/158 and will release as 0.29.1 shortly

I have just released the version with the fix.

I think the fix is to aggressive, nothing is export as type anymore.  I created a solution also, which only targets the enums


How do I test file upload

Hello
I am working on uploading a file to my absinthe api in a mutation. I have a definition like this:
    field :register_offset, non_null(:camera) do
      arg(:camera_id, non_null(:id))
      arg(:offset, :integer)
      arg(:film, :upload)

      middleware(ScorebreakWeb.Graphql.Middlewares.Authenticate)
      resolve(&ScorebreakWeb.Graphql.Mutations.RegisterOffset.resolve/2)
    end

And if a, :upload is passed, I am performing logic. This is working well with live application, but I need a test to make sure it stays this way. I did try to just simply
      upload = %Plug.Upload{
        content_type: "video/mp4",
        path: "test/assets/camera_registration_test.mp4",
        filename: "camera_registration_test.mp4"
      }

and send this to conn with a query, but it fails, since
     ** (Protocol.UndefinedError) protocol Enumerable not implemented for %Plug.Upload{content_type: "video/mp4", filename: "camera_registration_test.mp4", path: "test/assets/camera_registration_test.mp4"} of type Plug.Upload (a struct). This protocol is implemented for the following type(s): Ecto.Adapters.SQL.Stream, Postgrex.Stream, DBConnection.PrepareStream, DBConnection.Stream, Timex.Interval, Map, HashDict, List, Range, IO.Stream, HashSet, Function, GenEvent.Stream, Stream, Date.Range, MapSet, File.Stream

I understand that this would happen, since it probably is called here: https://github.com/absinthe-graphql/absinthe_plug/blob/master/lib/absinthe/plug/types.ex#L64
The only way to test it mentioned in the docs is to write a curl, but that hardly is a good way.
So my question is: How do I reasonably write a test alongside my other absinthe/phoenix application tests, that makes sure file upload handled by :upload type from absinthe_plug work well?

You can find an example within the Absinthe.Plug tests: https://github.com/absinthe-graphql/absinthe_plug/blob/master/test/lib/absinthe/plug_test.exs#L311

I did look at these tests, but this is a very different testing environment, I wasn't able to translate it to a test in phoenix app. I've seen some advices to use Plug.Upload, also in the file you mentioned, so I'm trying to do something like this:
    test "actually updates the with a film", %{conn: conn} do
      film = %Plug.Upload{
        content_type: "video/mp4",
        path: "test/assets/camera_registration_test.mp4",
        filename: "camera_registration_test.mp4"
      }

      result =
        conn
        |> post("/api/v1/graphql", query: @query, variables: %{film: film})
        |> json_response(200)

      assert result == -2
    end

And I am getting the mentioned error. Also, the stacktrace, if it's any helpful:
     stacktrace:
       (elixir 1.10.2) lib/enum.ex:1: Enumerable.impl_for!/1
       (elixir 1.10.2) lib/enum.ex:141: Enumerable.reduce/3
       (elixir 1.10.2) lib/enum.ex:3383: Enum.map/2
       (absinthe 1.5.0-rc.4) lib/absinthe/blueprint/input.ex:75: Absinthe.Blueprint.Input.parse/1
       (absinthe 1.5.0-rc.4) lib/absinthe/phase/document/variables.ex:64: anonymous fn/3 in Absinthe.Phase.Document.Variables.update_operation/2
       (elixir 1.10.2) lib/enum.ex:1520: Enum."-map_reduce/3-lists^mapfoldl/2-0-"/3
       (elixir 1.10.2) lib/enum.ex:1520: Enum."-map_reduce/3-lists^mapfoldl/2-0-"/3
       (absinthe 1.5.0-rc.4) lib/absinthe/phase/document/variables.ex:63: Absinthe.Phase.Document.Variables.update_operation/2
       (absinthe 1.5.0-rc.4) lib/absinthe/phase/document/variables.ex:55: anonymous fn/3 in Absinthe.Phase.Document.Variables.update_operations/2
       (elixir 1.10.2) lib/enum.ex:2111: Enum."-reduce/3-lists^foldl/2-0-"/3
       (absinthe 1.5.0-rc.4) lib/absinthe/phase/document/variables.ex:54: Absinthe.Phase.Document.Variables.update_operations/2
       (absinthe 1.5.0-rc.4) lib/absinthe/phase/document/variables.ex:49: Absinthe.Phase.Document.Variables.run/2
       (absinthe 1.5.0-rc.4) lib/absinthe/pipeline.ex:367: Absinthe.Pipeline.run_phase/3
       (absinthe_plug 1.5.0-rc.2) lib/absinthe/plug.ex:445: Absinthe.Plug.run_query/4
       (absinthe_plug 1.5.0-rc.2) lib/absinthe/plug.ex:258: Absinthe.Plug.call/2
       (phoenix 1.4.16) lib/phoenix/router/route.ex:41: Phoenix.Router.Route.call/2
       (phoenix 1.4.16) lib/phoenix/router.ex:288: Phoenix.Router.__call__/2
       (scorebreak 0.1.0) lib/plug/error_handler.ex:65: ScorebreakWeb.Router.call/2
       (scorebreak 0.1.0) lib/scorebreak_web/endpoint.ex:1: ScorebreakWeb.Endpoint.plug_builder_call/2
       (scorebreak 0.1.0) lib/scorebreak_web/endpoint.ex:1: ScorebreakWeb.Endpoint.call/2

Maybe it's a bug?

I figured out a way, kind of by accident. I'll leave it here for anybody who stumbles across the same issue:
result =
        conn
        |> post("/api/v1/graphql", query: @query, variables: %{film: "film"}, film: film)
        |> json_response(200)

Specifically send another variable with a request in body that is the Plug.Upload, and in graphql variables pass in the name of a variable holding that Plug.Upload.
Maybe I could send a PR with an example on how to get this done added to docs? It looks like it would be a fairly common use case.

PR is welcome!


chore: remove file noqa from utils fdb

Apparently this noqa wasn't hiding anything.
See #310

It looks like this failed with 2023-10-27T13:19:31.2300897Z     version = response.json()["name"] throwing a KeyError at yardstick/tool/syft.py line 139. This has passed on a retry before; possibly a temporary issue pulling the latest version of a release.
I'll retry, but also bring it to the team's attention in case something is off here.


Shadow not showing for right side menu

Every thing's OK with the left side menu's shadow, but there isn't shadow for right side menu.
I tried below code, and seems it only works for left side:
rootController.configs.shadowOppacity = 0.15
Shifting shadow offset to the left also didn't help:
rootController.configs.shadowOffset = CGSize(width: -5, height: 0)
Any suggestions to show shadow for the left menu too?

Try my repo:  https://github.com/sedwo/FAPanels


[Question]do this module work with nginx prebuilt ?

I'm using nginx-full installed from apt-get
after installed this module using apt-get install libnginx-mod-rtmp, I applied my config file and nginx gives me error
nginx: [emerg] unknown directive "rtmp" in /etc/nginx/conf.d/rtmp.conf:1

do I have to compile nginx from source and add this module or I just not loading this module correctly?

you can build dynamic module with --add-dynamic-module=nginx-rtmp-module instead of static module, then add load_module modules/ngx_rtmp_module.so add the first line of nginx.conf

I tried to build the module as describe and use it with nginx binary that comes with Fedora. I get
module "/usr/lib64/nginx/modules/ngx_rtmp_module.so" is not binary compatible

I downloaded nginx-1.16.1 sources (that's the version that Fedora uses), then this repo here, then
./configure --prefix=/usr --with-http_ssl_module --add-dynamic-module=../nginx-rtmp-module

then make and copied objs/ngx_rtmp_module.so to the location that I wrote in the load_module directive.

I downloaded nginx-1.16.1 sources (that's the version that Fedora uses

What is the output of nginx -V.
I prefer to use the exactly same parameters as prebuilt nginx.

Thanks,  didn't know about nginx -V. When I use their config, I get
checking for --with-ld-opt="-Wl,-z,relro -Wl,--as-needed -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E" ... not found

I will try to use the standard linker and hope that it works - or I need to set up more of Fedora's dev tools. But then it's not far from actually making this (nginx-rtmp) into an rpm?

Thanks for all the reply, I found out that I just not correctly loading this module with nginx.
And the rtmp { ... } section should be placed inside nginx.conf, not elsewhere.


E2e t

adding more test cases in Cypress and main.wasp to handle the redirection to / when authentication fails because was taking me to /login and that page doesnt exist in the app :)

👍


[Windows] Add Adoptium (Temurin-Hotspot) jdk 17 LTS

Description
It has been released
Related issue: https://github.com/actions/virtual-environments/issues/4085
Check list

[x] Related issue / work item is attached
[ n/a ] Tests are written (if applicable)
[ n/a ] Documentation is updated (if applicable)
[ n/a ] Changes are tested and related VM images are successfully generated

/azp run windows2016, windows2019, windows2022

/azp run windows2016, windows2019, windows2022

/azp run windows2016, windows2019, windows2022


bug: Item slide disabled is set to false on ngOnChanges, but is still disabled with HammerJS

Bug Report
Ionic version:

[x] 4.x
Current behavior:

Attempting to set disabled with Hammer JS gesture to ion-item-sliding on template based on Input variable only receives the first change, but never executes the changes made afterwards. This also happens if you try to set this with ngOnChanges, first change is executed, never the afterwards.
Expected behavior:

ion-item-sliding disable property should receive all changes via template when they happen or via controller with ngOnChanges. These changes should be identified with Hammer JS.
Steps to reproduce:

Include Hammer JS to your project
Create an ion-item-sliding component on your template
Bind a press event to your component
Make a condition to disable the item slide with the press event

Related code:

https://stackblitz.com/edit/ionic-v4-angular-tabs-gdokuu
The component is found inside the "tab1" folder, and its called on "tab1.page.html".
Press and hold the item "Test Item" to disable the item slide.
If you wish to see with ngOnChanges, just uncomment ngOnChanges and ViewChild on item-slide.component.ts, comment the second line and uncomment the first line on item-slide.component.html.
<ion-item-sliding>
  <ion-item-options side="end">
    <ion-item-option>Test 1</ion-item-option>
    <ion-item-option>Test 2</ion-item-option>
  </ion-item-options>
  <ion-item>
    Test Item
  </ion-item>
</ion-item-sliding>

import { Component, OnInit, Input, ViewChild, OnChanges, SimpleChanges } from '@angular/core';
import { IonItemSliding } from '@ionic/angular';

@Component({
  selector: 'app-item-slide-issue',
  templateUrl: './item-slide-issue.component.html',
  styleUrls: ['./item-slide-issue.component.scss'],
})
export class ItemSlideIssueComponent implements OnInit, OnChanges {

  @Input() selected: boolean = false;

  @ViewChild(IonItemSliding) itemSlide: IonItemSliding;

  constructor() { }

  ngOnInit() {}

  ngOnChanges(changes: SimpleChanges) {
    if (typeof changes.selected.currentValue != 'undefined') {
      if (changes.selected.currentValue == true) {
        console.log('Disables item sliding.');
        this.itemSlide.disabled = true;
      }
      else {
        console.log('Should enable item sliding again, but it won\'t. Disabled is set to false, but the slide remains disabled.');
        this.itemSlide.disabled = false;
      }
    }
  }
}

Other information:

Ionic info:

Ionic:

   Ionic CLI                     : 5.4.5 (/home/rodrigo/.nvm/versions/node/v10.15.3/lib/node_modules/ionic)
   Ionic Framework               : @ionic/angular 4.7.4
   @angular-devkit/build-angular : 0.13.9
   @angular-devkit/schematics    : 7.3.9
   @angular/cli                  : 7.3.9
   @ionic/angular-toolkit        : 1.5.1

Cordova:

   Cordova CLI       : 9.0.0<EMAIL_ADDRESS>   Cordova Platforms : android 8.1.0, ios 5.0.1
   Cordova Plugins   : cordova-plugin-ionic-keyboard 2.1.3, cordova-plugin-ionic-webview 4.0.1, (and 15 other plugins)

Utility:

   cordova-res : 0.6.0 (update available: 0.8.1)
   native-run  : 0.2.8 (update available: 0.2.9)

System:

   Android SDK Tools : 26.1.1 (/home/rodrigo/Android/Sdk)
   NodeJS            : v10.15.3 (/home/rodrigo/.nvm/versions/node/v10.15.3/bin/node)   npm               : 6.12.0
   OS                : Linux 4.15

Thanks for the issue. It looks like disabling/re-enabling the gesture via HammerJS leaves our internal gesture system at an inconsistent state. I will be putting up a PR soon that addresses this.

Can you give the following dev build a try and let me know if it resolves your issue?
npm i<EMAIL_ADDRESS>

Hi, apparently it works with this dev build.
I'm just in doubt if I can use<EMAIL_ADDRESS>with angular 7 without much problems, since I've tried upgrading it and there were a few issues with CSS due to how its set on my project, which led me to downgrade again.
Is this already usable for production or is it still testing?

Glad to hear the dev build works. The dev build I provided is essentially the contents of Ionic Framework v4.11.3 plus this bug fix, so it should be safe to use in production if you need to deploy a hotfix. Once this fix releases in an upcoming version of Ionic, I would recommend switching over to that version.

Thanks for the issue. This issue has been fixed via https://github.com/ionic-team/ionic/pull/19855 and will be available in an upcoming release of Ionic Framework.


DownloadExercise now creates a seperate folder for course

Course folder is named by course's name.
Also Course object now also knows all exercises of it.

This was part of exercise download user story. We noticed that we missed something in it, so here's the missing part of it.

Changes Unknown when pulling 4d8e9baf23b08af9d460b166af03f7fe95e09a7e on exercisedl into ** on master**.

Changes Unknown when pulling ccf587cc0e09bd5e370d12b7384b1ef320fea6ff on exercisedl into ** on master**.

Changes Unknown when pulling 3503ae6ddd22c07a84aadbe9150189d158253cf3 on exercisedl into ** on master**.

Changes Unknown when pulling c3175b4ecd6813e6fc924412186bcbd6dbc91d75 on exercisedl into ** on master**.

Waiting for final feedback from team members before merge


Feature/ndt pcl gpu

Status
DEVELOPMENT
Description
ndt_matching and ndt_mapping support CUDA
Todos

[ ] Tests
[ ] Documentation

Steps to Test or Reproduce
Set "use_gpu" true in ndt_matching/ndt_mapping before launching the nodes.

@kitsukawa there are conflicts to be resolved. In addition 2 more Qs:
a) how to install CUDA properly to run this PR?
b) who should review it?

@dejanpan
@YamatoAndo is refactoring ndt_localizer. He will resolve the conflicts.
You can install CUDA by following the steps in this page.
https://github.com/CPFL/Autoware/wiki/NVIDIA-Driver

This works very well in my environment, seems great implementation.
Would you add the runtime_manager option to 'app' like OpenMP's one? @kitsukawa

And please use clang-format.
https://github.com/davetcoleman/roscpp_code_format

@aohsato I added the use_gpu option in app dialog. And I applied clang-format.

@kitsukawa  Can the GPU accelerated NDT do real time mapping? thanks

@weisongwen If the map becomes larger, mapping is not still done in real-time. But it can be done much faster on GPU than ou CPU.

@kitsukawa  Thanks for your kind reply. my Autoware version is old without the ndt_gpu part. in this case, how can I implement the ndt_gpu? just download the latest Autoware (the master branch) package?
Futhermore, my linux have cuda already! Thanks !

@weisongwen Please pull the latest develop branch. I am not sure when but it will be merged into master branch soon.


How to return results set to other input ( interactive Report )

Hello Daniel Sun,
Thank you again for those great plugins you write.
Small question : I have bit customized your apexspotlight plugin to fit my needs, yet, I just wonder ( before playing too much around with code ) ### is there any easy way to place the results list in my input, rather the in dialog one ? ( I would like to return results set to Interactive Report input ).
Attach below is my implementation

Hi @etaygudai
if you want to set the search field of an IR and execute the search afterwords you could do the following:

Give your IR region a static id, e.g. TEST_IR
Define a JavaScript function on that page, which set the input and presses the search button of IR

function searchIR(pStaticRegionId, pSearchTerm) {
  $('input#' + pStaticRegionId + '_search_field').val(pSearchTerm);
  $('button#' + pStaticRegionId + '_search_button').click();
}

Add a new static entry to the spotlight search SQL query

-- static entry (link contains ~SEARCH_VALUE~)--> set item client side
SELECT 'Set Search field of IR' AS title,
       'Set search field of Interactive Report' AS description,
       'javascript:searchIR(''TEST_IR'',''~SEARCH_VALUE~'');' AS link,
       'fa-search' AS icon
  FROM dual

That should be it! :)


Partitioning in common deployment topologies

Performance Patterns: Leveraging Partition Feature
The patterns assume the following:

Understand the function of CockroachDB Leaseholder
Understand the impacts of the leaseholder on read and write activities
The leaseholders are local to reader and writers within the data center
The leaseholder migration among the data centers is minimized using the partitioning feature
Follow-the-workload tunable is set to properly for the workload
Application is designed to use the partitioning feature

Symmetrical
During normal operations:
App                App
 \                  /
West ---60ms--- East
     \        /
     60ms   60ms
        \   /
         \ /
       Central
          |
         App

CockroachDB Replicas and Leaseholders:

rows with the West partition will have the leaseholder in the West DC, the Central partition in the Central DC, and the East partition in the East DC
the 3 replicas will be evenly distributed among the three data centers

Availability expectations:

Can survive a single data center failure

Performance expectations:

The reader can expect to have a couple of ms response time.
The writers can expect to have 60ms response time.
The latency among the data centers is symmetrical 60ms.

Application expectations:

West App servers connect to the West CockroachDB nodes
Central App servers connect to the Central CockroachDB nodes
East App servers connect to the East CockroachDB nodes

CockroachDB configuration:
Abbreviated startup flag for each data center.
--loc=Region=East
--loc=Region=Central
--loc=Region=West

Dual East DCs
During normal operations:
App                App
 \                  /
West ---60ms--- East1
     \           |
       \        5ms
        60ms     |
           \____East2

CockroachDB Replicas and Leaseholders:

rows with the West partition will have the leaseholder in the West DC, the East partition in the East DC1
the 3 replicas will be evenly distributed among the three data centers

Availability expectations:

Can survive a single data center failure

Performance expectations:

The reader can expect to have a couple of ms response time.
The East writers can expect to have 5ms response time.
The West writers can expect to have 60ms response time.

Application expectations:

West App servers connect to the West CockroachDB nodes
East App servers connect to the East1 CockroachDB nodes

CockroachDB configuration:
Abbreviated startup flag for each data center.
--loc=Region=East,DC=1
--loc=Region=East,DC=2
--loc=Region=West

Dual East and West DCs
During normal operations:
App                App
 \                  /
West1 ---60ms--- East1
  |   \        /   |
  5ms  - 60ms -    5ms
  |   /        \   |
West2----60ms----East2

CockroachDB Replicas and Leaseholders:

rows with the West partition will have the leaseholder in the West DC1, the East partition in the East DC1
West partitions will have 1 replica each in West1 and West2, then 1 replica in East1 or East2
East partitions will have 1 replica each in East1 and East2, then 1 replica in West1 or West2

Availability expectations:

Can survive a single data center failure

Performance expectations:

The reader can expect to have a couple of ms response time.
The writers can expect to have 5ms response time.

Application expectations:

West App servers connect to the West CockroachDB nodes
East App servers connect to the East CockroachDB nodes

CockroachDB configuration:
Abbreviated startup flag for each data center.
--loc=Region=West,DC=1
--loc=Region=West,DC=2
--loc=Region=East,DC=1
--loc=Region=East,DC=2

Summary

Topology
West
Central
East

Symmetrical
Read local, Write 60ms
Read local, Write 60ms
Read local, Write 60ms

Dual East
Read local, Write 60ms

Read local, Write 5ms

Dual East and West
Read local, Write 5ms

Read local, Write 5ms

For 2.1, this is part of https://github.com/cockroachdb/docs/issues/2935.


chrome-cli list tabs returns strange changing tab ids

chrome-cli list tabs stops working for me since this morning.
It returns huge integers which change for each time:
% chrome-cli list tabs
[105553181738784] Google
[105553181779456] New Issue · prasmussen/chrome-cli
[105553181689664] Settings - About Chrome
[105553181689728] chrome Version 113.0.5672.92 (Official Build) (arm64)

% chrome-cli list tabs
[105553144861824] Google
[105553144861792] New Issue · prasmussen/chrome-cli
[105553144966592] Settings - About Chrome
[105553144957792] chrome Version 113.0.5672.92 (Official Build) (arm64)

The problem persists even after I restart Chrome or reboot the MacOS.
I use Chrome Version 113.0.5672.92 (Official Build) (arm64) but not sure when it was upgraded to this version.

Probably the same issue with #82

Also seeing this issue.  Everytime the tabs are listed the IDs are different

I had the same issue, for now, I installed version 112.0.5615.121 from here: https://google-chrome.en.uptodown.com/mac/download/99265871.
Then I disabled automatic updates.
To Disable Automatic Update:

Mount the DMG file and copy Google Chrome.app to /Applications.
Eject the DMG image.
Delete KeystoneRegistration

sudo rm /Applications/Google\ Chrome.app/Contents/Frameworks/Google\ Chrome\ Framework.framework/Versions/Current/Frameworks/KeystoneRegistration.framework/Versions/A/KeystoneRegistration
sudo rm /Applications/Google\ Chrome.app/Contents/Frameworks/Google\ Chrome\ Framework.framework/Versions/Current/Frameworks/KeystoneRegistration.framework/KeystoneRegistration

This is obviously not a fix, but a workaround to keep chrome-cli working.

Just as a quick and dirty way to stop Chrome updating after you revert, if you edit /etc/hosts and point tools.google.com to <IP_ADDRESS>, that works nicely.

A better solution for me was to get a Brave nightly build instead of dealing with multiple versions of chrome.
https://github.com/brave/brave-browser/releases?q=112.0.5615.12&expanded=true (brave-cli list tabs works in this version)

Same issue with Chrome window and tab IDs changing every time [chrome-cli list tabs|windows].
This is new behavior after installing Chrome 114.

This is fixed in 1.9.3. Homebrew formula not updated yet (I'm to lazy to do it at the moment)

Will update #82 when released in homebrew. Closing this.


remove private from i18n-common-dictionary

in order to publish it as a part of the @kogito-tooling/kie-editors-standalone nightly product otherwise
npm notice 📦<EMAIL_ADDRESS>npm notice === Tarball Contents ===
npm notice 11.4kB LICENSE
npm notice 0B     README.md
npm notice 1.1kB  package.json
npm notice === Tarball Details ===
npm notice name:          @kogito-tooling/i18n-common-dictionary
npm notice version:       0.0.0-redhat-20210803
npm notice filename:      @kogito-tooling/i18n-common-dictionary-0.0.0-redhat-20210803.tgz
npm notice package size:  4.6 kB
npm notice unpacked size: 12.5 kB
npm notice shasum:        d9c66eef04d40a3b9d112b8b2f90fc0acaf74c3c
npm notice integrity:     sha512-W5AKIkdsVWffY[...]tIzewzUuzFs/g==
npm notice total files:   3
npm notice
+<EMAIL_ADDRESS>npm ERR! code EPRIVATE
npm ERR! This package has been marked as private
npm ERR! Remove the 'private' field from the package.json to publish it.

Hi @Ginxo,
Please build this branch locally and commit the changes that will be automatically made in packages/build-env/graph.dot.

Hi @Ginxo,
Please build this branch locally and commit the changes that will be automatically made in packages/build-env/graph.dot.
Otherwise, the ubuntu build, which is our stable one right now, will keep failing.

@caponetto done! please find graph attached (i had to change .dot extension to .txt in order be able to attach it, please do the opposite)
graph.txt

@Ginxo That's more like it :) Thanks for the PR!


Plugin - initialisation resource & adding plugin multiple time

Objective

add more checks on plugin and app startup

Solution

allow the same plugin to be added only once to an application (can be changed by the plugin author)
add the concept of a startup resource
move LogSettings, WindowDescriptor, AssetServerSettings, DefaultTaskPoolOptions, WinitConfig and WgpuOptions to startup resources

fixes #2879 and replace #2886

Improves the situation of #1255.

I like it! The concept of a startup resource is pretty simple, and it pushes us further towards a safer, more structured plugin API.
The duplicate detection is much more powerful than #2886; I feel pretty strongly that this should be merged instead.
I left some code quality nits, but once those are cleaned up it LGTM.

I added a method contains_key that let you check if a plugin is already added before adding it.
This could be useful when using plugin A and B which both depends on plugin C, so that they add it only if not already present.

crashing on examples because of #3502

I'm not yet fully sold on "consumed setup resources" as a concept. I think accessing plugin settings at runtime / across contexts is a reasonable thing to do in some cases:
* I can see some users wanting to read AssetServerSettings at runtime (ex: AssetServerSettings::watch_for_changes, which currently only produces ephemeral / unqueryable state)
* I can see some plugins wanting to consume settings from the plugins they interact with (ex: maybe a plugin wants to know if the asset server is watching for changes)
* I can see some plugins wanting their settings to be editable "at runtime" (ex: turn off watching for changes)
This PR also doesn't fully cover the "multiple instances of a plugin" case because those instances cannot use the same configuration pattern (as setup resources are "consumed" by a plugin). Configuring these instances would require a different pattern, which feels wrong.
This implementation also adds a lot of "machinery" to enforce the "one setup resource per plugin" constraint.
I'd like to discuss some alternatives that largely retain the intent of the pr, but do it in a way that feels simpler / more consistent to me. Note that I'm not pushing for anything in particular yet.

Deferred Plugin init with settings tied directly to Plugin instances:#[derive(Default)]
struct FooPlugin {
    bar: bool,
}

impl Plugin for FooPlugin {
    fn build(&self, app: &mut App) {
        app.use_plugin::<BazPlugin>();
    }
}

app
    // init will not create duplicates if called multiple times. requires Default impl. builds are deferred
    .use_plugin::<FooPlugin>()
    // provides mutable access to the instance of FooPlugin created above. will fail if FooPlugin does not exist
    .configure_plugin::<FooPlugin>(|plugin| {
        plugin.bar = false;
    })
    // same as use, but doesn't require default and will create duplicates if called multiple times
    .add_plugin(FooPlugin {
        bar: true,
    })
    // plugins are built in the order they are "used" / "added"
    .run();

Same as (1), but correlate Plugin settings statically to a specific instance of a plugin using associated types:impl ConfigurablePlugin for FooPlugin {
    type Settings = FooSettings; // must impl Default
    fn build(&self, app: &mut App, settings: FooSettings) {
    }
}

app.add_plugin(FooPlugin) // implicitly gets converted to ConfiguredPlugin<FooPlugin> with default values
    // gets "default" or maybe "latest" instance of FooPlugin
    .configure_plugin::<FooPlugin>(FooSettings {
        bar: true,
        ..Default::default()
    })
    .add_plugin(FooPlugin.configure(FooSettings))

Of the two options presented, I think (1) has my preference. But deferred plugin init introduces its own share of problems (ex: it would likely require specifying plugin dependencies separately from other app setup code, to ensure that Plugins are built in the proper order / in a way that ensures they can rely on their dependencies' side effects) . But given that we've been discussing "deferred plugin init" for awhile, it seems valuable to consider solutions that incorporate that.

I can see some users wanting to read AssetServerSettings at runtime (ex: AssetServerSettings::watch_for_changes, which currently only produces ephemeral / unqueryable state)
I can see some plugins wanting to consume settings from the plugins they interact with (ex: maybe a plugin wants to know if the asset server is watching for changes)
I can see some plugins wanting their settings to be editable "at runtime" (ex: turn off watching for changes)

None of the resource I moved to a "setup" resources have any effect during runtime (at least at the time I moved them, that may have changed in another PR since). Keeping them up after setup would be better with the introduction of readonly resources (a new kind of resource? or a panic when trying to get it mutably?)

This PR also doesn't fully cover the "multiple instances of a plugin" case because those instances cannot use the same configuration pattern (as setup resources are "consumed" by a plugin). Configuring these instances would require a different pattern, which feels wrong.

🤔
I guess the "consumed" part could be removed, it just felt nice to me to be able to guarantee that the user didn't add a setup resource that was not used, but it doesn't bring anything else.

This implementation also adds a lot of "machinery" to enforce the "one setup resource per plugin" constraint.

My bad, I probably shouldn't have lumped those two changes together. Most of the machinery is to ensure a plugin can only be added once (unless it can be added multiple time) which is not really related to setup resources.

I'd like to discuss some alternatives that largely retain the intent of the pr, but do it in a way that feels simpler / more consistent to me. Note that I'm not pushing for anything in particular yet.

Deferred Plugin init with settings tied directly to Plugin instances:
Same as (1), but correlate Plugin settings statically to a specific instance of a plugin using associated types:

Of the two options presented, I think (1) has my preference. But deferred plugin init introduces its own share of problems (ex: it would likely require specifying plugin dependencies separately from other app setup code, to ensure that Plugins are built in the proper order / in a way that ensures they can rely on their dependencies' side effects) . But given that we've been discussing "deferred plugin init" for awhile, it seems valuable to consider solutions that incorporate that.

Those two alternatives stop using resources as the main way to configure a plugin, which felt nice to me. I think they also make it less obvious how to configure a plugin that's added as part of a plugin group.

I moved "plugin uniqueness" to its own pr as it's two unrelated changes: #3988

Can you update the name of this PR to match then?

I have left some comments, but I want to put a new one here:
How can I change setup resources in runtime? How can I change fullscreen mode?
Too weird, do bevy really need to have setup resources? I think that this is a question of efficient, not an application behavior

How can I change setup resources in runtime? How can I change fullscreen mode?

You don't, that's pretty much the point

@alice-i-cecile I rebased this PR, it should be ready if you want to start the controversial timer

Started: https://github.com/orgs/bevyengine/projects/6/views/1

Added ImageSettings, it's only used on setup (#5744)

Closing in favor of #6336


[HOW-TO] Add Product to a Quote

I've created a new Quote. When trying to add new products to the Quote, the Product list is displayed in a Dialog.
Three questions related to the dialog:

How can I use the Search box on top of the dialog? i.e. If I want to search all Products starting with "aws".
How can I set a numeric value in a column? i.e. if I have a quantity and a rate column, how can I update the value in these columns?
How can I select one of the products after searching? i.e. Searching for "aws" leaves a list with three products. How can I Add the second?

More info in the image below.
Thank you.

alonsoatunicc Such functionality is not implemented now, you can add it to Framework or implement your own.


Feature: Introduce Netbox 4.0 to the plugin

Upgrade from Netbox 3.7 - 4.0.5 seems no problem, tested this with my own production environments.
Obsolete #42
Closes #41

On 4.x the django admin interface is disabled by default (https://github.com/netbox-community/netbox/issues/12325) and it will probably be removed in the future. We should discuss alternatives for this & document re-enabling the old admin UI for now.


I deploy the project on the server and use https to upload screenshots to generate code, but it will make an error if I record the screen.

I deploy the project on the server and use https to upload screenshots to generate code, but it will make an error if I record the screen.
Error generating code. Check the Developer Console AND the backend logs for details. Feel free to open a Github issue
Connecting to backend @  wss://chatxm.top/generate-code
generateCode.ts:48 Connection closed 1006
generateCode.ts:56
Unknown server or connection error
CloseEvent {isTrusted: true, wasClean: false, code: 1006, reason: '', type: 'close', …}
isTrusted
:
true
bubbles
:
false
cancelBubble
:
false
cancelable
:
false
code
:
1006
composed
:
false
currentTarget
:
WebSocket {url: 'wss://chatxm.top/generate-code', readyState: 3, bufferedAmount: 0, onopen: null, onerror: null, …}
defaultPrevented
:
false
eventPhase
:
0
reason
:
""
returnValue
:
true
srcElement
:
WebSocket {url: 'wss://chatxm.top/generate-code', readyState: 3, bufferedAmount: 0, onopen: null, onerror: null, …}
target
:
WebSocket {url: 'wss://chatxm.top/generate-code', readyState: 3, bufferedAmount: 0, onopen: null, onerror: null, …}
timeStamp
:
463788.0999999996
type
:
"close"
wasClean
:
false
[[Prototype]]
:
CloseEvent
(匿名)	@	generateCode.ts:56

Could you share backend server logs? Need those to debug the video failure.

Closing due to inactivity


Support MFA for :password in :sentinel option

This PR makes it possible to specify a common :password option for sentinels as an MFA. For example:
Redix.start_link(
  sentinel: [
    group: "mymaster",
    sentinels: [
      [host: "localhost", port: 26379]
    ],
    password: {System, :fetch_env!, ["PASSWORD"]}
  ]
)

Currently, the schema in Redix.StartOptions only allows this option to be a string, even though it allows to use an MFA for the :password option in each individual sentinel in the :sentinels list. It already works in the implementation, however, so this PR simply expands the NimbleOptions :type for the option and adds additional test cases.

Pull Request Test Coverage Report for Build 493f62b931f23edc45564e7c9196902e6d5d6889-PR-257

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage increased (+0.1%) to 86.003%

Totals

Change from base Build 3a913079b5be8736e50cf83e7a0172fcfb44ee46:
0.1%

Covered Lines:
596

Relevant Lines:
693

💛  - Coveralls


npm install throws errors

Hello,
Attempting to install Eve by running npm install , but there are errors :( I am not a node or npm person and googling these errors has not revealed anything meaningful.
Node version : 7.0.0
npm version : 3.10.8
Errors:
npm ERR! unpack Could not read data for<EMAIL_ADDRESS>npm ERR! unpack Could not read data for<EMAIL_ADDRESS>npm ERR! unpack Could not read data for<EMAIL_ADDRESS>npm ERR! unpack Could not read data for<EMAIL_ADDRESS>npm ERR! unpack Could not read data for<EMAIL_ADDRESS>npm ERR! unpack Could not read data for<EMAIL_ADDRESS>npm ERR! unpack Could not read data for<EMAIL_ADDRESS>npm ERR! unpack Could not read data for<EMAIL_ADDRESS>npm ERR! unpack Could not read data for<EMAIL_ADDRESS>npm ERR! unpack Could not read data for<EMAIL_ADDRESS>npm ERR! unpack Could not read data for<EMAIL_ADDRESS>npm ERR! unpack Could not read data for<EMAIL_ADDRESS>npm ERR! unpack Could not read data for<EMAIL_ADDRESS>npm ERR! unpack Could not read data for<EMAIL_ADDRESS>
Running npm install again outputs :
npm ERR! Darwin 16.0.0
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install"
npm ERR! node v7.0.0
npm ERR! npm  v3.10.8

npm ERR! Invalid name: "@types/ws"
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR!     <https://github.com/npm/npm/issues>

npm ERR! Please include the following file with any support request:
npm ERR!     /Users/zm/Eve/npm-debug.log

Excited to try Eve! Can anyone please provide pointers on how to fix these errors? Much thanks! 😄

I get the same errors! Also, npm throws errors since the package.json is missing a name and a version description.

Re-installed node and npm using brew on OS X 10.11.6. Eve installed with error and can now start the project. Closing, as it seems to be some weirdness with my node/npm set up.


[Event Request] Table 274 "Bank Acc. Reconciliation Line"

Hi,
Could you please add event before each function that have case statement for "Account Type" - we need to extend logic with new type and handle it?
Functions affected :

GetAccountName
OpenAccountPage
DrillDownOnNoOfLedgerEntriesBasedOnAmount

 [IntegrationEvent(false, false)]
    local procedure OnBeforeGetAccountName(AccountType: Option; AccountNo: Code[20]; var Name: Text; var IsHandled: Boolean)
    begin
    end;

  [IntegrationEvent(false, false)]
  local procedure OnBeforeOpenAccountPage(AccountType: Option; AccountNo: Code[20]; var IsHandled: Boolean)
  begin
  end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeDrillDownOnNoOfLedgerEntriesBasedOnAmount(BankAccRecLine: Record "Bank Acc. Reconciliation Line"; AmountFilter: Text; var IsHandled: Boolean)
    begin
    end;

Thanks for reporting this. We agree, and we’ll publish a fix asap, either in an update for the current version or in the next major release. We will update this issue with information about availability. Please do not reply to this, as we do not monitor closed issues. If you have follow-up questions or requests, please create a new issue where you reference this one.


ModuleNotFoundError: No module named 'tensorflow_inference_service'

Hello, sir. First of all, I want to thank you for your attempt to make tensorflow serving friendlier for a regular developer.
After installing simple_tensorflow_serving from your source code I run
simple_tensorflow_serving --port=8500 --model_base_path="./examples/tensorflow_template_application_model"
and get the following error:
$ simple_tensorflow_serving --port=8500 --model_base_path="./examples/tensorflow_template_application_model"
/Users/Dude/anaconda3/lib/python3.6/importlib/_bootstrap.py:205: RuntimeWarning: compiletime version 3.5 of module 'tensorflow.python.framework.fast_tensor_util' does not match runtime version 3.6
  return f(*args, **kwds)
Traceback (most recent call last):
  File "/Users/Dude/anaconda3/bin/simple_tensorflow_serving", line 11, in <module>
    load_entry_point('simple-tensorflow-serving==0.1.2', 'console_scripts', 'simple_tensorflow_serving')()
  File "/Users/Dude/anaconda3/lib/python3.6/site-packages/pkg_resources/__init__.py", line 572, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/Users/Dude/anaconda3/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2769, in load_entry_point
    return ep.load()
  File "/Users/Dude/anaconda3/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2422, in load
    return self.resolve()
  File "/Users/Dude/anaconda3/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2428, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/Users/Dude/anaconda3/lib/python3.6/site-packages/simple_tensorflow_serving-0.1.2-py3.6.egg/simple_tensorflow_serving/server.py", line 10, in <module>
ModuleNotFoundError: No module named 'tensorflow_inference_service'

I have a macOS system. I'm sorry if this is a simple question, but I didn't find an answer in the internet. I'm looking forward to using your program for my bachelor project.

@dickensons How can you solve it? I also met the same problem.


draft init on Windows

Deleted the .draft directory, draft version below:
draft version
&version.Version{SemVer:"v0.14.0", GitCommit:"e7a92f6b2f05a23f4cd9cc15fc24eb98d628e5d7", GitTreeState:"clean"}

When doing draft init:
draft init
Installing default plugins...

After this step the terminal (Powershell or CMD) quits entirely - it cloned draft-pack-repo in the plugin directory. If I try to execute the scripts\get.ps1 manually, it's denied because of the execution policy.

If I'm not missing anything, we probably should add a note on the execution policy in the docs for draft init, then switch it back! Link to the docs for execution policy

If I set the execution policy to Unrestricted and execute the get script manually:
.\get.ps1
Downloading https://github.com/draftcreate/draft-pack-repo/releases/download/canary/pack-repo-vcanary-windows-amd64.zip
Exception calling "DownloadFile" with "2" argument(s): "The request was aborted: Could not create SSL/TLS secure
channel."
At C:\Users\radum\.draft\plugins\draft-pack-repo\scripts\get.ps1:13 char:1
+ (new-object System.Net.WebClient).DownloadFile($url, $file)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : WebException

Preparing to install into \plugins\draft-pack-repo\bin
Expand-Archive : The path 'C:\Users\radum\AppData\Local\Temp\pack-repo-vcanary-windows-amd64.zip' either does not
exist or is not a valid file system path.
At C:\Users\radum\.draft\plugins\draft-pack-repo\scripts\get.ps1:20 char:1
+ Expand-Archive -Path "$file" -DestinationPath "$tempDir" -Force
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (C:\Users\radum\...ndows-amd64.zip:String) [Expand-Archive], InvalidOpe
   rationException
    + FullyQualifiedErrorId : ArchiveCmdletPathNotFound,Expand-Archive

Move-Item : Cannot find path 'C:\Users\radum\AppData\Local\Temp\pack-repo\windows-amd64\pack-repo.exe' because it does
not exist.
At C:\Users\radum\.draft\plugins\draft-pack-repo\scripts\get.ps1:22 char:1
+ Move-Item -Path "$tempDir\windows-amd64\$name.exe" -Destination "$bin ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (C:\Users\radum\...4\pack-repo.exe:String) [Move-Item], ItemNotFoundExce
   ption
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.MoveItemCommand

This seems to be because of the deprecation of TLSv1/TLSv1.1 by GitHub
To check the (what I think is the default) security protocol:
[Net.ServicePointManager]::SecurityProtocol
Ssl3, Tls

appears to be Tls, which I think is TLSv1.
If you go further and set the protocol for this session to be TLSv1.2:
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12;

and try to execute the script again - not draft init, as the command above is only valid for the current session:
Downloading https://github.com/draftcreate/draft-pack-repo/releases/download/canary/pack-repo-vcanary-windows-amd64.zip
Exception calling "DownloadFile" with "2" argument(s): "The request was aborted: The connection was closed unexpectedly."
At C:\Users\radum\.draft\plugins\draft-pack-repo\scripts\get.ps1:13 char:1
+ (new-object System.Net.WebClient).DownloadFile($url, $file)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : WebException

The same error - The request was aborted: The connection was closed unexpectedly. also appears if I switch to Invoke-WebRequest
At this point I've started looking at what version of the .NET Framework I have installed - .NET Framework 4.7.1, which comes by default with Windows 10 Fall Creators Update.
I added all supported protocols:
$AllProtocols = [System.Net.SecurityProtocolType]'Ssl3,Tls,Tls11,Tls12'
[System.Net.ServicePointManager]::SecurityProtocol = $AllProtocols

[Net.ServicePointManager]::SecurityProtocol
Ssl3, Tls, Tls11, Tls12

Still the same error on a different network, and on another Windows PC.
This is annoying.

I'm having the same issue on Windows

For the record, you can still use Draft, just the pack repo functionality is missing, and you can manually add the executable:

download the release from this url - https://github.com/draftcreate/draft-pack-repo/releases/download/v0.4.1/pack-repo-v0.4.1-windows-amd64.zip

unzip it and copy the executable in DRAFT_HOME\plugins\draft-pack-repo\bin

This workaround works for me on Windows:
C:\Users\mafishe> draft init
C:\Users\mafishe> draft plugin remove pack-repo
C:\Users\mafishe> draft plugin install https://github.com/draftcreate/draft-pack-repo --version master
C:\Users\mafishe> draft init
Installing default plugins...Installation of default plugins complete
Installing default pack repositories...
Installing pack repo from https://github.com/Azure/draft
Installed pack repository github.com/Azure/draft
Installation of default pack repositories complete
$DRAFT_HOME has been configured at C:\Users\mafishe\.draft.
Happy Sailing

Honestly, the best move forward is to implement #688. The current install process for plugins is proving to be very fragile, and we were planning on doing that work anyways in 0.15. Rather than coming up with yet another crutch, we should just bite the bullet and get the work done.


Update libs

Current coverage is 75.28%

Merging #51 into master will not affect coverage as of 7376cfb

@@            master     #51   diff @@
======================================
  Files            5       5
  Stmts          174     174
  Branches        22      20     -2
  Methods          0
======================================
  Hit            131     131
  Partial          3       3
  Missed          40      40

Review entire Coverage Diff as of 7376cfb

Powered by Codecov. Updated on successful CI builds.


CodeFrame does not cache p5 library in service worker or browser cache on Chromium

Chromium browsers do not cache the p5 library used for examples. This is a limitation on the use of iframes with a srcdoc attribute on Chromium as documented here. As a result, pages like the arc() reference download the p5 library for each example. This happens regardless of service worker scope, origin, etc as far as I can tell. This does not happen on Firefox or Safari.

Some solution using iframe and srcdoc may exist that I do not see but afaik there are two possible approaches from here:

Generate HTML files to serve for the src attribute of the iframe ala _arc_reference_example_1.html. This is similar to what happens on the current p5 sites's example pages.
Make the CodeFrame component use p5 instance mode to render the canvas directly into the body without an iframe/document wrapper. This is how the current p5.js site handles reference sketches.

I believe that 2 is cleaner but I am open to alternatives. I think that the equivalent code from the current p5 website is here.
Potentially useful links:

This wiki which explains p5.js global versus instance mode
Astro's client directives, to prevent library code from running during static build

Mostly fixed but leaving open as this is still an issue with embed that asynchronously load their code assets (ie "SketchEmbed")


Cfscraper limiter fix

Motivation for changes:
Apparently cloudflare challenges get broken by our domain limiting system. This disables our limiting system when responding to a cloudflare challenge. Makes the solution in #2619 less heavy handed.
Haven't tested this myself, would be good if someone who had the issue can confirm this works.

Your change allows the first request in Challenge_Response to go without rate limiting.
For this change to work you assume:

there is exactly one request made in Challenge_Response
this is the only part where requests are made in the CloudScraper library
If one of these two are not true the implementation breaks.

It feels the cleaner solution would be to add the http method to the token limiter.
That way the POST would follow up immediately after a GET.
Also a POST/PUT/DEL could also reset the GET limiter.
That way it'll not be CFS specific and would work as intended without the assumption of the both points.
Anyway - If I figure out how to modify the docker container I'll happily test it

* there is exactly one request made in `Challenge_Response`

All requests in that function will have the disable_limiters keyword argument, so that shouldn't be true.

* this is the only part where requests are made in the CloudScraper library
  If one of these two are not true the implementation breaks.

It wasn't an assumption, I checked the source ;)

Hmm, I did see one potential issue: If it gets a captcha reponse, Challenge_Response calls super().request, which would crash because disable_limiters is an unknown arugment..

It feels the cleaner solution would be to add the http method to the token limiter.
That way the POST would follow up immediately after a GET.
Also a POST/PUT/DEL could also reset the GET limiter.
That way it'll not be CFS specific and would work as intended without the assumption of the both points.

Not exactly sure what you mean, but the whole point of the limiters is to make sure requests are not directly in a row, no matter the kind of request. This exception is meant to be cloudflare specific, based on your report that the challenge response doesn't work if delayed. (Did you verify that btw? In your original report it said that was a guess.)

It wasn't an assumption, I checked the source ;)

I thought so, but someone has to check the source every time it changes to ensure this is still true. Otherwise flexget will crash for users which have rate limiting in place but not for users who don't use it.

Not exactly sure what you mean, but the whole point of the limiters is to make sure requests are not directly in a row, no matter the kind of request.

I mean instead of one limiter per domain have four limiters. A successful POST/PUT/DEL call will increase the GET limiter, too.
There is still an effective rate limiting in place, but the next non GET request will always follow immediately after a GET request, e.g. the POST will always follow immediately upon a GET request.
That way all challenge response implementations will work without having to create exceptions for each one.

This exception is meant to be cloudflare specific, based on your report that the challenge response doesn't work if delayed. (Did you verify that btw? In your original report it said that was a guess.)

Yes, with the originally suggested 'GET' workaround everything works fine, without the 'GET' I get crashes.

But if you pop it after the first request it will not be there for the second request

The pop doesn't happen in Challenge_Response, so it will remain for all requests. it gets passed down to our requests method by **kwargs, which means any mutations won't be propagated back.
Is there a reason other than this cloudflare issue you think that other requests should have less rate limiting? If a site has e.g. a limit of 100 requests per hour, it won't care what kind of requests they are, so writing exceptions into the limiters risks running afoul of their rules.

The pop doesn't happen in Challenge_Response, so it will remain for all requests. it gets passed down to our requests method by **kwargs, which means any mutations won't be propagated back.

But doesn't Challenge_Response call request which will then pop the disable_limiters.
I am just confused - sorry.

Is there a reason other than this cloudflare issue you think that other requests should have less rate limiting? If a site has e.g. a limit of 100 requests per hour, it won't care what kind of requests they are, so writing exceptions into the limiters risks running afoul of their rules.

No

Here's a simplified example of what's happening
def request(**kwargs):
    kwargs.pop('something')

def Challenge_Response(**kwargs):
    kwargs['something'] = True
    request(**kwargs)
    # kwargs still has 'something' included here, it doesn't matter what happens in `request`,
    # as the actual dictionary isn't being passed when done via ** keyword arguments
    request(**kwargs)

I thought so, but someone has to check the source every time it changes to ensure this is still true. Otherwise flexget will crash for users which have rate limiting in place but not for users who don't use it.

This bit is still true, if cloudscraper changes how it does things our customization could break. I think I'd prefer to see if this happens rather than mess with how the domain limiters work for every request.

Here's a simplified example of what's happening

Thank you for your example.
I was under the assumption that **kwargs was the passed dict, but of course it is the keyword args from the function.
Now it's clear - thanks!


[usecase-webapi] Update bdd feature file path

Change bdd feature file path to match ATIP rule
Update CSP baseline for Crosswalk-19

Impacted tests(approved): new 0, update 2, delete 0
Unit test platform: Crosswalk Project for Android 19.49.506.0
Unit test result summary: pass 2, fail 0, block 0
BUG=https://crosswalk-project.org/jira/browse/XWALK-6429

LGTM


Support different versions of python on Travis

Makes progress towards Python 3.6 support (#110). Once codebase is 3.6 compatible (e.g. print, unicode, etc), adding appropriate invocations to script in .travis.yml will be enough to build and test under both 2.7 and 3.6.
Once unicode & 3.6 support is working, better packaging of weld and grizzly and publishing artifacts to conda-forge would be nice.

@cirla you are probably the right person to review this PR?

Hey @snakescott,
Can you rebase this and make sure it passes Travis again (in particular, make sure you run rustfmt to autoformat the code). I did a quick scan through it and it looks good, but I'll read it more closely once that's done.
Thanks!
Shoumik

This looks good to me! @snakescott is it still WIP?

yeah I think this should be g2g


Flaky test_setitem_extended_API_2d[index13-value13]

test_setitem_extended_API_2d[index13-value13] is flaky. It only runs in gpuCI, so regular Linux/MacOS/Windows builds will not report it. I couldn't reproduce it locally so far, even after hundreds of runs. For now it has been marked flaky in https://github.com/dask/dask/pull/7994 .

Looking through a few recent gpuCI builds, it looks like this may no longer be a flaky test?

Looking through a few recent gpuCI builds, it looks like this may no longer be a flaky test?

The test has been marked flaky, meaning it will be attempted to run for 10 times and only then fail. Unless I'm mistaken, there's no way to identify whether the test ran more than once and passed after a failure, is there?


Non-ASCII symbols support

I'm trying to use this project to generate text with non-ascii symbols (cyrilic) and keep getting spaces/tabs/commas but no text, is this related to string.printable which part i should modify to enable support of non-ascii symbols?
Thanks!
Output
python tf_model.py train --text-path Vojna_i_mir._Kniga_1.txt --checkpoint-path /home/norn/src/char-rnn-text-generation/tf_checkpoint/chk
2017-12-16 15:10:56,234 - main - INFO - corpus length: 1433026.
2017-12-16 15:10:56,235 - main - INFO - building model: {'clip_norm': 5.0, 'batch_size': 64, 'num_layers': 2, 'vocab_size': 98, 'rnn_size': 128, 'p_keep': 1.0, 'learning_rate': 0.001, 'embedding_size': 32}.
2017-12-16 15:10:57.231924: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA
2017-12-16 15:10:57,523 - main - INFO - model saved: /home/norn/src/char-rnn-text-generation/tf_checkpoint/chk.
2017-12-16 15:10:57,739 - main - INFO - tensorboard set up.
2017-12-16 15:10:57,740 - main - INFO - building model: {'clip_norm': 5.0, 'batch_size': 1, 'num_layers': 2, 'vocab_size': 98, 'rnn_size': 128, 'p_keep': 1.0, 'learning_rate': 0.001, 'embedding_size': 32}.
2017-12-16 15:10:57,996 - main - INFO - inference model loaded: /home/norn/src/char-rnn-text-generation/tf_checkpoint/chk.
2017-12-16 15:10:58,530 - main - INFO - start of training.
epoch 1/32:   0%|                                                                                | 0/349 [00:00<?, ?it/s]2017-12-16 15:10:58,532 - utils - INFO - number of batches: 349.
2017-12-16 15:10:58,532 - utils - INFO - effective text length: 1429504.
2017-12-16 15:10:58,532 - utils - INFO - x shape: (64, 22336).
2017-12-16 15:10:58,532 - utils - INFO - y shape: (64, 22336).
epoch 1/32: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████| 349/349 [02:53<00:00,  1.97it/s]
2017-12-16 15:13:51,930 - main - INFO - epoch: 1, duration: 173s, loss: 0.93437.
2017-12-16 15:13:52,082 - main - INFO - model saved: /home/norn/src/char-rnn-text-generation/tf_checkpoint/chk.
2017-12-16 15:13:52,114 - main - INFO - generating 512 characters from top 10 choices.
2017-12-16 15:13:52,115 - main - INFO - generating with seed: "а помощь к брату, кто бы он ни б".
2017-12-16 15:13:53,027 - main - INFO - generated text:
а помощь к брату, кто бы он ни б     ,      , ,
,               ,-
,          ,         .
,   .        ,
epoch 2/32:

You are right. Currently the dictionary of characters is fixed regardless of inputs and only accepts characters string.printable, which is ASCII only.
You can overcome this by generating the id2char and char2id dictionary mapping based on the data input and correct the code where encode_text() or ID2CHAR is used. encode_text() accepts a second argument of the char2id mapping.
Creating dictionary based on data input can be done with slight modification of the create_dictionary() code in utils.py as follows:
chars = sorted(set(text))

Hope this helps.

Thank you, yeah I figured out how to expand dictionary.
BTW side question what you think about generating not char by char but word by word?

Generating word by word requires a bit more text preprocessing. Especially problematic would be the handling of punctuation and tokenisation, although a naive approach may work.
Another matter to consider would be the large size of vocabulary due to rare and misspelled words. Some form of vocabulary trimming would be necessary. The large vocabulary size may also be problematic during training due to the large number of parameters to update for the embedding and dense layers.


Add OAuthAuthentication class to setup the SDK

Codecov Report

Merging #83 (aa9686c) into devel (975a685) will decrease coverage by 0.30%.
The diff coverage is 79.41%.

@@            Coverage Diff             @@
##            devel      #83      +/-   ##
==========================================
- Coverage   77.75%   77.45%   -0.31%
==========================================
  Files          37       46       +9
  Lines        2841     3805     +964
==========================================
+ Hits         2209     2947     +738
- Misses        632      858     +226

Impacted Files
Coverage Δ

transifex/native/__init__.py
100.00% <ø> (ø)

transifex/native/django/apps.py
54.16% <ø> (ø)

transifex/native/cds.py
89.14% <42.10%> (-8.16%)
:arrow_down:

transifex/api/jsonapi/auth.py
62.85% <62.85%> (ø)

transifex/api/jsonapi/compat.py
65.21% <65.21%> (ø)

transifex/native/django/management/utils/push.py
86.36% <66.00%> (-9.26%)
:arrow_down:

transifex/native/django/utils/__init__.py
81.25% <66.66%> (-10.42%)
:arrow_down:

transifex/native/core.py
91.04% <72.72%> (-3.88%)
:arrow_down:

transifex/common/utils.py
97.77% <75.00%> (+0.02%)
:arrow_up:

transifex/api/jsonapi/collections.py
75.88% <75.88%> (ø)

... and 16 more

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.


update tf>=2.0 enhanced with NMT with attention.

Hi, please review and merge.

Hi, @mommi84
analyse.py
generator_test.py
split_in_train_dev_test.py
i saw these files, currently, they are not included in the pipeline, I will add these files for now and include them later in the pipeline as well.


[#24801] ValueState.read() should allow returning null

Also clarify documentation.
Fixes #24801

Thank you for your contribution! Follow this checklist to help us incorporate your contribution quickly and easily:

[ ] Mention the appropriate issue in your description (for example: addresses #123), if applicable. This will automatically add a link to the pull request in the issue. If you would like the issue to automatically close on merging the pull request, comment fixes #<ISSUE NUMBER> instead.
[ ] Update CHANGES.md with noteworthy changes.
[ ] If this contribution is large, please file an Apache Individual Contributor License Agreement.

See the Contributor Guide for more tips on how to make review process smoother.
To check the build health, please visit https://github.com/apache/beam/blob/master/.test-infra/BUILD_STATUS.md
GitHub Actions Tests Status (on master branch)

See CI.md for more information about GitHub Actions CI.

R: @kennknowles @jlentin

Run Java_Pulsar_IO_Direct PreCommit

Run Java_GCP_IO_Direct PreCommit


Async Actions

Hey!
I'm using this because of Ignite, awesome work on that!
I was wondering how I could handle async requests. I'm definitely missing a piece of the puzzle somewhere.

const { Types, Creators } = createActions({
  search: ['searchTerm'],
  cancelSearch: null,
  fetchRequest: null,
  fetchSuccess: ['data'],
  fetchFailure: ['error'],
})

// ...

export const onSuccess = (state: Object, {data}) => {
 return state.merge ({ results: data });
}

// ...

[Types.FETCH_SUCCESS]: onSuccess,
// ... etc

This top part I think I understand, but where would something like this then go?

export const searchRestos = () => (dispatch: Function, getState: Function) => {
    dispatch(startFetching());

    return api.getRestos()
        .then(response => {
            return dispatch(fetchedData({ response.data }));
        })
        .catch(response => dispatch(errorFetching(response.error)));
};

Thank you again!

Heyo!  Thanks man.
For me, that goes in saga using redux-saga.
createActions does have the ability to assign a function to the right hand side though.  it'll still create the FETCH_SUCCESS (for example) but then allows you to provide your own custom action creator (which you can do anything).
I feel like I'm not quite answering your question though.
Another thing you can do is just assign more action creators to the Creators object after it gets created.
Creators.doWhatever = () => ...

But ya, I prefer the saga route for side effects like you're describing in searchRestos().

You totally answered my question!
I was missing the big piece around sagas which Ignite includes. I can't believe how easy it's been to string stuff together!
Thanks again, you rock :)


עיצוב בסיסי

TODO:

[x] import and use RHDS elements
[x] use red hat design tokens
[x] update the footer content (in _data/footer.yml) @Liadredhat will do this
[x] add rtl
[ ] Sidebar nav styles
[ ] Pagination styles
[ ] Post list (index) styles
[ ] stub out a landing page for homepage
[x] stick footer to bottom on all pages
[ ] Israel site logo (@ronniemcbride can you whip one up for me in the style of the RHDS logo svg?)
[ ] RHDS prism theme (lower priority)
[ ] Hebrew Typography (Noto Sans? font weight and size vs latin?)

@heyMP can you take a look at the global footer positioning in the PR preview here? I can kind of fix it with position: absolute but that's meh. Am I holding it wrong?

@heyMP fixed it, i had forgotten to specify a row template in the grid settings for the body. https://github.com/RedHat-Israel/red-hat-israel-site/pull/11/commits/25fcd80eb7bb1040f6c75b55eb3eeeedcd807cc7 set's the footer's grid aria row template to max-content, and makes it all better.

Israel site logo (@ronniemcbride can you whip one up for me in the style of the RHDS logo svg?)
@bennypowers  Sorry I missed this. Do you still need a logo for this?

Thanks @ronniemcbride, @ShiranHi here at the Israel site offered her expertise, so you're free 🐦

@bennypowers It is something we need to ask the Red Hat brand team, I am not sure we can create a new Red Hat logo. As soon as I hear back from them, I'll let you know

@bennypowers It seems it is better to use the Red Hat logo as it is... This is the answer I got from the brand team:
No, we don’t do specific versions of our logo for countries or offices, or use local translations of “Red Hat” in our logo.
I’d recommend using the usual Red Hat logo in the website header and then using the body of the site to celebrate the work happening in Israel.

@bennypowers It seems it is better to use the Red Hat logo as it is... This is the answer I got from the brand team:
No, we don’t do specific versions of our logo for countries or offices, or use local translations of “Red Hat” in our logo. I’d recommend using the usual Red Hat logo in the website header and then using the body of the site to celebrate the work happening in Israel.

TYVM @ShiranHi for researching this. I'll open a new issue for some other design related things, and ping you on slack when it's ready


files uploaded to hubiC are not listed in the browser

I can use the rclone perfectly via terminal, but uploaded files do not appear when I access the hubiC by the browser (https://hubic.com/home/browser/#). It's like if they were hidden but there.

Sorry, I see my problem. HubiC has a folder called "default". I need send my files and folders to there if I want to see it in browser mode.

you can also go to
https://hubic.com/home/browser/#containername/
then
https://hubic.com/home/browser/#containername
It should show your files.
Yes, it's awful, but storage is cheap.

Yeah, this works too. I didn't know. Thanks!

Glad you got it sorted out.  Would a bit in the docs help here do you think?

First time I've tried Hubic backend it was not obvious that I have to use "default" container to access files in hubic. And It is not mentioned in rclone docs. I've only found it in hubic api docs.

You don't have to use the default container. It's just that your files will not show (easily) in the web interface or at all in the android app if you don't. But the files are there and can be accessed by other means, including of course rclone.
Maybe a quick word in the docs might save other people some time, though...

I completely agree, I'm having this problem right now, and here I am browsing through closed tickets.

@rlapray fancy suggesting an update to the hubic docs?

You're right : https://github.com/ncw/rclone/pull/503

How do you create a bucket outside "default" ? seems impossible to me...

rclone mkdir hubic:bucket

Should work when ovh fix hubic: http://status.ovh.co.uk/?do=details&id=12305

I have the similar problem with rclone and hubic app. I'm uploading my files to default/some_directory bucket, and It is visible by browser app. I see all my files, and directories. But when I use a android app, I see only a some_directory directory, but it is empty. I've tried to use a desktop app, and windows application see that files. After synchronization on my windows app this files appears also in hubic android app. Of course I don't want to synchronize this files to my desktop to make it visible. Is there any other option?

@komw is this a specific problem with the android app?  Which one is it?

It is hard to say is it a specific problem with this android apps, because all files is listed in web version, and files from official desktop app is also visible in android app. Only files from rclone are not visible in android app (maybe some permissions for those files?)
I'm using an official android hubic application.

@komw try creating a directory with the android app then uploading some files into it with rclone - does that work?

The same situation. On the phone directory is empty, on web-browser I see my files.

@komw  Copying on "default" bucket does the job. But that's right that's not trivial. I spent 1h to understand what I did bad.
You should do:
rclone sync Images Hubic:default/Images

I wonder if I can move bucket to bucket (I'm waiting my sync to finish, Hubic is slow) but I should be able to do:
rclone move Hubic:Images Hubic:default/Images


Features should be documented

I know how the plugin works, but other people may not know and thus struggle to operate it properly.

https://github.com/beastslash/roblox-dialogue-maker/wiki/How-to-use-the-Dialogue-Maker

The settings menu has changed and needs documentation. Also, dialogue children need better documentation.

https://github.com/beastslash/roblox-dialogue-maker/wiki/How-to-use-the-Dialogue-Maker
https://github.com/beastslash/roblox-dialogue-maker/wiki/How-to-make-a-conversation


Feature/ingestor

Initial merge w/ master, as I believe the ingestor is complete enough to move forward with development. I can come back to the branch and work on the ingestor as necessary going forward, but I think this is a good time to merge the 'feature.'

Superb work. Merging.


SubmissionError in redux-saga

Seems like a few people are struggling with this, but no clear answer - how are people handling submit validation with redux-saga?
For example, I have:
const response = yield call(auth.login, email, password);
...
yield put({ type: REQUEST_ERROR, error: response.error });

How can I tie back into redux-form when my logic and API calls are all so separate?
Many thanks in advance.

You have two ways to report a error from you sagas:

In your submit function you can create promise and pass it to you api call
... submitForm(params) {  return new Promise((resolve, reject) => {     this.props.apiRequest({ ...params.toJS(), resolve, reject });  }); } ...

in you sagas you can reject promise with an error
reject(new SubmissionError({ _error: error }));

You can dispatch stopSubmit with an error
stopSubmit('form', errors)

That's awesome! thank you so much, I'll give this a try.

I believe I have this basically solved.. In my saga I have the resolve/reject in place:
if (response.status_code > 299) {
    reject(new SubmissionError({ _error: 'Some error' }));
  } else {
    yield call(auth.setAuthToken, response.content.token); // save to local storage
    yield put({ type: LOGIN_SUCCESS, token: response.content.token });
    resolve(response.content);
  }

And now I can see the error in state in Redux Dev Tools. However, the error doesn't display on screen.
Is it relevant that I'm using immutablejs? I've tried importing SubmissionError from redux-form and redux-form/immutable.

Yes, you should use SubmissionError from redux-form/immutable. And we need a bit more of information to understand what the problem is. Make sure that you return the promise from your submit callback and make sure that you layout contain javascript {error && <span>{error}</span>}  to display an error.

@tobyl

import {SUBMIT_FAILURE} from '../actions' // some action that meen faild submit
import {stopSubmit} from 'redux-form'

const traceError = (error)=> {
   const stackError = error.error.data;
   if (stackError.кодОшибки === 449) {
      if (stackError.поля) {
         let errors = {};
         // collect fields with error + error messages
         stackError.поля.forEach(elem => {
            errors[elem.имяПоля] = elem.сообщение;
         });
         return errors;
      }
      return stackError
   }

   // ather error
}

// waiting for submit error && call stopSubmit
export function* ждатьНеУспешнойОтправкиДанныхФормы() {
   yield* takeEvery(SUBMIT_FAILURE, сообщитьОбНеУспешнойОтправкеДанныхФормы)
}

// take object with field names && error messages and put they to stopSubmit
function* сообщитьОбНеУспешнойОтправкеДанныхФормы(action) {
   yield put(stopSubmit(action.dialogName, traceError(action.error)))
}

it work

Closing: this usage question is resolved.