[
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)