[ 
https://issues.apache.org/jira/browse/BEAM-1754?focusedWorklogId=762425&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-762425
 ]

ASF GitHub Bot logged work on BEAM-1754:
----------------------------------------

                Author: ASF GitHub Bot
            Created on: 26/Apr/22 17:03
            Start Date: 26/Apr/22 17:03
    Worklog Time Spent: 10m 
      Work Description: damccorm commented on code in PR #17341:
URL: https://github.com/apache/beam/pull/17341#discussion_r858955161


##########
sdks/typescript/src/apache_beam/testing/assert.ts:
##########
@@ -0,0 +1,104 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import * as beam from "../../apache_beam";
+import { GlobalWindows } from "../../apache_beam/transforms/windowings";
+import * as internal from "../transforms/internal";
+
+import * as assert from "assert";
+
+// TODO(serialization): See if we can avoid this.
+function callAssertDeepEqual(a, b) {
+  return assert.deepEqual(a, b);
+}
+
+// TODO: (Naming)
+export class AssertDeepEqual extends beam.PTransform<
+  beam.PCollection<any>,
+  void
+> {
+  expected: any[];
+
+  constructor(expected: any[]) {
+    super("AssertDeepEqual");
+    this.expected = expected;
+  }
+
+  expand(pcoll: beam.PCollection<any>) {
+    const expected = this.expected;
+    pcoll.apply(
+      new Assert("Assert", (actual) => {
+        // Is there a less explicit way to do this?
+        const actualArray: any[] = [];
+        for (const a of actual) {
+          actualArray.push(a);
+        }
+        expected.sort();
+        actualArray.sort();
+        callAssertDeepEqual(actualArray, expected);
+      })
+    );
+  }
+}
+
+export class Assert extends beam.PTransform<beam.PCollection<any>, void> {
+  check: (actual: any[]) => void;
+
+  constructor(name: string, check: (actual: any[]) => void) {
+    super(name);
+    this.check = check;
+  }
+
+  expand(pcoll: beam.PCollection<any>) {
+    const check = this.check;
+    // We provide some value here to ensure there is at least one element
+    // so the DoFn gets invoked.
+    const singleton = pcoll
+      .root()
+      .apply(new beam.Impulse())
+      .map((_) => ({ tag: "expected" }));
+    // CoGBK.
+    const tagged = pcoll
+      .map((e) => ({ tag: "actual", value: e }))
+      .apply(new beam.WindowInto(new GlobalWindows()));
+    beam
+      .P([singleton, tagged])
+      .apply(new beam.Flatten())
+      .map((e) => ({ key: 0, value: e }))
+      .apply(new internal.GroupByKey()) // TODO: GroupBy.
+      .map(
+        beam.withName("extractActual", (kv) => {
+          // Javascript list comprehension?
+          const actual: any[] = [];
+          for (const o of kv.value) {
+            if (o.tag == "actual") {
+              actual.push(o.value);
+            }
+          }

Review Comment:
   ```suggestion
             const actual: any[] = kv.value?.filter(o => o.tag === 
"actual").map(o => o.value) || [];
   ```



##########
sdks/typescript/src/apache_beam/testing/assert.ts:
##########
@@ -0,0 +1,104 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import * as beam from "../../apache_beam";
+import { GlobalWindows } from "../../apache_beam/transforms/windowings";
+import * as internal from "../transforms/internal";
+
+import * as assert from "assert";
+
+// TODO(serialization): See if we can avoid this.
+function callAssertDeepEqual(a, b) {
+  return assert.deepEqual(a, b);
+}
+
+// TODO: (Naming)
+export class AssertDeepEqual extends beam.PTransform<
+  beam.PCollection<any>,
+  void
+> {
+  expected: any[];
+
+  constructor(expected: any[]) {
+    super("AssertDeepEqual");
+    this.expected = expected;
+  }
+
+  expand(pcoll: beam.PCollection<any>) {
+    const expected = this.expected;
+    pcoll.apply(
+      new Assert("Assert", (actual) => {
+        // Is there a less explicit way to do this?
+        const actualArray: any[] = [];
+        for (const a of actual) {
+          actualArray.push(a);
+        }

Review Comment:
   ```suggestion
           const actualArray: any[] = [...a];
   ```
   
   > // Is there a less explicit way to do this?
   
   Yes :)





Issue Time Tracking
-------------------

    Worklog Id:     (was: 762425)
    Time Spent: 4h 10m  (was: 4h)

> Will Dataflow ever support Node.js with an SDK similar to Java or Python?
> -------------------------------------------------------------------------
>
>                 Key: BEAM-1754
>                 URL: https://issues.apache.org/jira/browse/BEAM-1754
>             Project: Beam
>          Issue Type: New Feature
>          Components: sdk-ideas
>            Reporter: Diego Zuluaga
>            Assignee: Kerry Donny-Clark
>            Priority: P3
>              Labels: node.js
>          Time Spent: 4h 10m
>  Remaining Estimate: 0h
>
> I like the philosophy behind DataFlow and found the Java and Python samples 
> highly comprehensible. However, I have to admit that for most Node.js 
> developers who have little background on typed languages and are used to get 
> up to speed with frameworks incredibly fast, learning Dataflow might take 
> some learning curve that they/we're not used to. So, I wonder if at any point 
> in time Dataflow will provide a Node.js SDK. Maybe this is out of the 
> question, but I wanted to run it by the team as it would be awesome to have 
> something along these lines!
> Thanks,
> Diego
> Question originaly posted in SO:
> http://stackoverflow.com/questions/42893436/will-dataflow-ever-support-node-js-with-and-sdk-similar-to-java-or-python



--
This message was sent by Atlassian Jira
(v8.20.7#820007)

Reply via email to