@@ -13,6 +13,7 @@ package engine
1313
1414import (
1515 "fmt"
16+ "maps"
1617 "reflect"
1718 "strings"
1819 "testing"
@@ -1334,7 +1335,7 @@ func TestJSEngineMakeFunction_SpModeV2True(t *testing.T) {
13341335 ExpInterState : & engineProtocol {
13351336 FilterOut : false ,
13361337 PartitionKey : "" ,
1337- Data : testJSMapForJSONInput ,
1338+ Data : mergeMaps ( testJSMap , testJSONTimestampsMap ) ,
13381339 },
13391340 IsJSON : true ,
13401341 Error : nil ,
@@ -1361,7 +1362,7 @@ func TestJSEngineMakeFunction_SpModeV2True(t *testing.T) {
13611362 ExpInterState : & engineProtocol {
13621363 FilterOut : false ,
13631364 PartitionKey : "" ,
1364- Data : testJSMap ,
1365+ Data : mergeMaps ( testJSMap , testTSVTimestampsMap ) ,
13651366 },
13661367 IsJSON : true ,
13671368 Error : nil ,
@@ -1374,9 +1375,7 @@ func TestJSEngineMakeFunction_SpModeV2True(t *testing.T) {
13741375 delete Object.assign(x.Data, {['app_id_CHANGED']: x.Data['app_id'] })['app_id'];
13751376 }
13761377
1377- return {
1378- Data: JSON.stringify(x.Data)
1379- };
1378+ return x;
13801379 }
13811380 ` ,
13821381 Input : & models.Message {
@@ -1394,7 +1393,7 @@ func TestJSEngineMakeFunction_SpModeV2True(t *testing.T) {
13941393 ExpInterState : & engineProtocol {
13951394 FilterOut : false ,
13961395 PartitionKey : "" ,
1397- Data : testJsJSONChanged1 ,
1396+ Data : mergeMaps ( testJsJSONChanged1Map , testJSONTimestampsMap ) ,
13981397 },
13991398 IsJSON : true ,
14001399 Error : nil ,
@@ -1407,9 +1406,7 @@ func TestJSEngineMakeFunction_SpModeV2True(t *testing.T) {
14071406 delete Object.assign(x.Data, {['app_id_CHANGED']: x.Data['app_id'] })['app_id'];
14081407 }
14091408
1410- return {
1411- Data: JSON.stringify(x.Data)
1412- };
1409+ return x;
14131410 }
14141411 ` ,
14151412 Input : & models.Message {
@@ -1427,7 +1424,7 @@ func TestJSEngineMakeFunction_SpModeV2True(t *testing.T) {
14271424 ExpInterState : & engineProtocol {
14281425 FilterOut : false ,
14291426 PartitionKey : "" ,
1430- Data : testJsJSONChanged1 ,
1427+ Data : mergeMaps ( testJsJSONChanged1Map , testTSVTimestampsMap ) ,
14311428 },
14321429 IsJSON : true ,
14331430 Error : nil ,
@@ -1691,6 +1688,10 @@ func TestJSEngineMakeFunction_SpModeV2True(t *testing.T) {
16911688 t .Fatalf ("expecting actual interstate as engineProtocol, but got unexpected value%s" , spew .Sdump (actualState ))
16921689 }
16931690
1691+ // while we allow interstate data to be of type any, in test we really want to see
1692+ // data type to match between expect & actual
1693+ assert .Equal (reflect .TypeOf (expInterState .Data ), reflect .TypeOf (actualState .Data ))
1694+
16941695 var actualData map [string ]any
16951696 switch x := actualState .Data .(type ) {
16961697 case string :
@@ -1706,7 +1707,7 @@ func TestJSEngineMakeFunction_SpModeV2True(t *testing.T) {
17061707 if diff := cmp .Diff (expInterState , actualState , cmpopts .IgnoreFields (engineProtocol {}, "Data" )); diff != "" {
17071708 t .Fatalf ("unexpected interstate (-want +got):\n %s" , diff )
17081709 }
1709- if diff := cmp .Diff (expInterData , actualData ); diff != "" {
1710+ if diff := cmp .Diff (actualData , expInterData ); diff != "" {
17101711 t .Fatalf ("unexpected interstate (-want +got):\n %s" , diff )
17111712 }
17121713 }
@@ -2862,26 +2863,22 @@ var testJsEtlTstamp, _ = time.Parse("2006-01-02 15:04:05.999", "2019-05-10 14:40
28622863var testJsDerivedTstamp , _ = time .Parse ("2006-01-02 15:04:05.999" , "2019-05-10 14:40:35.972" )
28632864var testJsCollectorTstamp , _ = time .Parse ("2006-01-02 15:04:05.999" , "2019-05-10 14:40:35.972" )
28642865var testJsDvceSentTstamp , _ = time .Parse ("2006-01-02 15:04:05.999" , "2019-05-10 14:40:35" )
2866+
28652867var testJSMap = map [string ]any {
2866- "event_version" : "1-0-0" ,
2867- "app_id" : "test-data<>" ,
2868- "dvce_created_tstamp" : testJsDvceCreatedTstamp ,
2869- "event" : "unstruct" ,
2870- "v_collector" : "ssc-0.15.0-googlepubsub" ,
2871- "network_userid" : "d26822f5-52cc-4292-8f77-14ef6b7a27e2" ,
2872- "event_name" : "add_to_cart" ,
2873- "event_vendor" : "com.snowplowanalytics.snowplow" ,
2874- "event_format" : "jsonschema" ,
2875- "platform" : "pc" ,
2876- "etl_tstamp" : testJsEtlTstamp ,
2877- "collector_tstamp" : testJsCollectorTstamp ,
2878- "user_id" : "user<built-in function input>" ,
2879- "dvce_sent_tstamp" : testJsDvceSentTstamp ,
2880- "derived_tstamp" : testJsDerivedTstamp ,
2881- "event_id" : "e9234345-f042-46ad-b1aa-424464066a33" ,
2882- "v_tracker" : "py-0.8.2" ,
2883- "v_etl" : "beam-enrich-0.2.0-common-0.36.0" ,
2884- "user_ipaddress" : "1.2.3.4" ,
2868+ "event_version" : "1-0-0" ,
2869+ "app_id" : "test-data<>" ,
2870+ "event" : "unstruct" ,
2871+ "v_collector" : "ssc-0.15.0-googlepubsub" ,
2872+ "network_userid" : "d26822f5-52cc-4292-8f77-14ef6b7a27e2" ,
2873+ "event_name" : "add_to_cart" ,
2874+ "event_vendor" : "com.snowplowanalytics.snowplow" ,
2875+ "event_format" : "jsonschema" ,
2876+ "platform" : "pc" ,
2877+ "user_id" : "user<built-in function input>" ,
2878+ "event_id" : "e9234345-f042-46ad-b1aa-424464066a33" ,
2879+ "v_tracker" : "py-0.8.2" ,
2880+ "v_etl" : "beam-enrich-0.2.0-common-0.36.0" ,
2881+ "user_ipaddress" : "1.2.3.4" ,
28852882 "unstruct_event_com_snowplowanalytics_snowplow_add_to_cart_1" : map [string ]any {
28862883 "quantity" : float64 (2 ),
28872884 "unitPrice" : 32.4 ,
@@ -2911,26 +2908,32 @@ var testJSMap = map[string]any{
29112908 "useragent" : "python-requests/2.21.0" ,
29122909}
29132910
2914- var testJSMapForJSONInput = map [string ]any {
2915- "event_version" : "1-0-0" ,
2916- "app_id" : "test-data<>" ,
2917- "dvce_created_tstamp" : "2019-05-10T14:40:35.551Z" ,
2918- "event" : "unstruct" ,
2919- "v_collector" : "ssc-0.15.0-googlepubsub" ,
2920- "network_userid" : "d26822f5-52cc-4292-8f77-14ef6b7a27e2" ,
2921- "event_name" : "add_to_cart" ,
2922- "event_vendor" : "com.snowplowanalytics.snowplow" ,
2923- "event_format" : "jsonschema" ,
2924- "platform" : "pc" ,
2925- "etl_tstamp" : "2019-05-10T14:40:37.436Z" ,
2926- "collector_tstamp" : "2019-05-10T14:40:35.972Z" ,
2927- "user_id" : "user<built-in function input>" ,
2928- "dvce_sent_tstamp" : "2019-05-10T14:40:35Z" ,
2929- "derived_tstamp" : "2019-05-10T14:40:35.972Z" ,
2930- "event_id" : "e9234345-f042-46ad-b1aa-424464066a33" ,
2931- "v_tracker" : "py-0.8.2" ,
2932- "v_etl" : "beam-enrich-0.2.0-common-0.36.0" ,
2933- "user_ipaddress" : "1.2.3.4" ,
2911+ var testJsTsv = []byte (`test-data<> pc 2019-05-10 14:40:37.436 2019-05-10 14:40:35.972 2019-05-10 14:40:35.551 unstruct e9234345-f042-46ad-b1aa-424464066a33 py-0.8.2 ssc-0.15.0-googlepubsub beam-enrich-0.2.0-common-0.36.0 user<built-in function input> 1.2.3.4 d26822f5-52cc-4292-8f77-14ef6b7a27e2 {"schema":"iglu:com.snowplowanalytics.snowplow/unstruct_event/jsonschema/1-0-0","data":{"schema":"iglu:com.snowplowanalytics.snowplow/add_to_cart/jsonschema/1-0-0","data":{"sku":"item41","quantity":2,"unitPrice":32.4,"currency":"GBP"}}} python-requests/2.21.0 2019-05-10 14:40:35.000 {"schema":"iglu:com.snowplowanalytics.snowplow/contexts/jsonschema/1-0-1","data":[{"schema":"iglu:nl.basjes/yauaa_context/jsonschema/1-0-0","data":{"deviceBrand":"Unknown","deviceName":"Unknown","operatingSystemName":"Unknown","agentVersionMajor":"2","layoutEngineVersionMajor":"??","deviceClass":"Unknown","agentNameVersionMajor":"python-requests 2","operatingSystemClass":"Unknown","layoutEngineName":"Unknown","agentName":"python-requests","agentVersion":"2.21.0","layoutEngineClass":"Unknown","agentNameVersion":"python-requests 2.21.0","operatingSystemVersion":"??","agentClass":"Special","layoutEngineVersion":"??"}}]} 2019-05-10 14:40:35.972 com.snowplowanalytics.snowplow add_to_cart jsonschema 1-0-0 ` )
2912+
2913+ // corresponding JSON to previous TSV
2914+ var testJsJSON = []byte (`{"app_id":"test-data<>","collector_tstamp":"2019-05-10T14:40:35.972Z","contexts_nl_basjes_yauaa_context_1":[{"agentClass":"Special","agentName":"python-requests","agentNameVersion":"python-requests 2.21.0","agentNameVersionMajor":"python-requests 2","agentVersion":"2.21.0","agentVersionMajor":"2","deviceBrand":"Unknown","deviceClass":"Unknown","deviceName":"Unknown","layoutEngineClass":"Unknown","layoutEngineName":"Unknown","layoutEngineVersion":"??","layoutEngineVersionMajor":"??","operatingSystemClass":"Unknown","operatingSystemName":"Unknown","operatingSystemVersion":"??"}],"derived_tstamp":"2019-05-10T14:40:35.972Z","dvce_created_tstamp":"2019-05-10T14:40:35.551Z","dvce_sent_tstamp":"2019-05-10T14:40:35Z","etl_tstamp":"2019-05-10T14:40:37.436Z","event":"unstruct","event_format":"jsonschema","event_id":"e9234345-f042-46ad-b1aa-424464066a33","event_name":"add_to_cart","event_vendor":"com.snowplowanalytics.snowplow","event_version":"1-0-0","network_userid":"d26822f5-52cc-4292-8f77-14ef6b7a27e2","platform":"pc","unstruct_event_com_snowplowanalytics_snowplow_add_to_cart_1":{"currency":"GBP","quantity":2,"sku":"item41","unitPrice":32.4},"user_id":"user<built-in function input>","user_ipaddress":"1.2.3.4","useragent":"python-requests/2.21.0","v_collector":"ssc-0.15.0-googlepubsub","v_etl":"beam-enrich-0.2.0-common-0.36.0","v_tracker":"py-0.8.2"}` )
2915+
2916+ // json's changed and stringified inside JS
2917+ var testJsJSONChanged1 = []byte (`{"app_id_CHANGED":"test-data<>","collector_tstamp":"2019-05-10T14:40:35.972Z","contexts_nl_basjes_yauaa_context_1":[{"agentClass":"Special","agentName":"python-requests","agentNameVersion":"python-requests 2.21.0","agentNameVersionMajor":"python-requests 2","agentVersion":"2.21.0","agentVersionMajor":"2","deviceBrand":"Unknown","deviceClass":"Unknown","deviceName":"Unknown","layoutEngineClass":"Unknown","layoutEngineName":"Unknown","layoutEngineVersion":"??","layoutEngineVersionMajor":"??","operatingSystemClass":"Unknown","operatingSystemName":"Unknown","operatingSystemVersion":"??"}],"derived_tstamp":"2019-05-10T14:40:35.972Z","dvce_created_tstamp":"2019-05-10T14:40:35.551Z","dvce_sent_tstamp":"2019-05-10T14:40:35Z","etl_tstamp":"2019-05-10T14:40:37.436Z","event":"unstruct","event_format":"jsonschema","event_id":"e9234345-f042-46ad-b1aa-424464066a33","event_name":"add_to_cart","event_vendor":"com.snowplowanalytics.snowplow","event_version":"1-0-0","network_userid":"d26822f5-52cc-4292-8f77-14ef6b7a27e2","platform":"pc","unstruct_event_com_snowplowanalytics_snowplow_add_to_cart_1":{"currency":"GBP","quantity":2,"sku":"item41","unitPrice":32.4},"user_id":"user<built-in function input>","user_ipaddress":"1.2.3.4","useragent":"python-requests/2.21.0","v_collector":"ssc-0.15.0-googlepubsub","v_etl":"beam-enrich-0.2.0-common-0.36.0","v_tracker":"py-0.8.2"}` )
2918+
2919+ var testJsJSONChanged2 = []byte (`{"collector_tstamp":"2019-05-10T14:40:35.972Z","contexts_nl_basjes_yauaa_context_1":[{"agentClass":"Special","agentName":"python-requests","agentNameVersion":"python-requests 2.21.0","agentNameVersionMajor":"python-requests 2","agentVersion":"2.21.0","agentVersionMajor":"2","deviceBrand":"Unknown","deviceClass":"Unknown","deviceName":"Unknown","layoutEngineClass":"Unknown","layoutEngineName":"Unknown","layoutEngineVersion":"??","layoutEngineVersionMajor":"??","operatingSystemClass":"Unknown","operatingSystemName":"Unknown","operatingSystemVersion":"??"}],"derived_tstamp":"2019-05-10T14:40:35.972Z","dvce_created_tstamp":"2019-05-10T14:40:35.551Z","dvce_sent_tstamp":"2019-05-10T14:40:35Z","etl_tstamp":"2019-05-10T14:40:37.436Z","event":"unstruct","event_format":"jsonschema","event_id":"e9234345-f042-46ad-b1aa-424464066a33","event_name":"add_to_cart","event_vendor":"com.snowplowanalytics.snowplow","event_version":"1-0-0","network_userid":"d26822f5-52cc-4292-8f77-14ef6b7a27e2","platform":"pc","unstruct_event_com_snowplowanalytics_snowplow_add_to_cart_1":{"currency":"GBP","quantity":2,"sku":"item41","unitPrice":32.4},"user_id":"user<built-in function input>","user_ipaddress":"1.2.3.4","useragent":"python-requests/2.21.0","v_collector":"ssc-0.15.0-googlepubsub","v_etl":"beam-enrich-0.2.0-common-0.36.0","v_tracker":"py-0.8.2","app_id_CHANGED":"test-data<>"}` )
2920+
2921+ // identical to testJsJSONChanged1 but of map[string]any type
2922+ var testJsJSONChanged1Map = map [string ]any {
2923+ "event_version" : "1-0-0" ,
2924+ "app_id_CHANGED" : "test-data<>" ,
2925+ "event" : "unstruct" ,
2926+ "v_collector" : "ssc-0.15.0-googlepubsub" ,
2927+ "network_userid" : "d26822f5-52cc-4292-8f77-14ef6b7a27e2" ,
2928+ "event_name" : "add_to_cart" ,
2929+ "event_vendor" : "com.snowplowanalytics.snowplow" ,
2930+ "event_format" : "jsonschema" ,
2931+ "platform" : "pc" ,
2932+ "user_id" : "user<built-in function input>" ,
2933+ "event_id" : "e9234345-f042-46ad-b1aa-424464066a33" ,
2934+ "v_tracker" : "py-0.8.2" ,
2935+ "v_etl" : "beam-enrich-0.2.0-common-0.36.0" ,
2936+ "user_ipaddress" : "1.2.3.4" ,
29342937 "unstruct_event_com_snowplowanalytics_snowplow_add_to_cart_1" : map [string ]any {
29352938 "quantity" : float64 (2 ),
29362939 "unitPrice" : 32.4 ,
@@ -2960,12 +2963,26 @@ var testJSMapForJSONInput = map[string]any{
29602963 "useragent" : "python-requests/2.21.0" ,
29612964}
29622965
2963- var testJsTsv = []byte (`test-data<> pc 2019-05-10 14:40:37.436 2019-05-10 14:40:35.972 2019-05-10 14:40:35.551 unstruct e9234345-f042-46ad-b1aa-424464066a33 py-0.8.2 ssc-0.15.0-googlepubsub beam-enrich-0.2.0-common-0.36.0 user<built-in function input> 1.2.3.4 d26822f5-52cc-4292-8f77-14ef6b7a27e2 {"schema":"iglu:com.snowplowanalytics.snowplow/unstruct_event/jsonschema/1-0-0","data":{"schema":"iglu:com.snowplowanalytics.snowplow/add_to_cart/jsonschema/1-0-0","data":{"sku":"item41","quantity":2,"unitPrice":32.4,"currency":"GBP"}}} python-requests/2.21.0 2019-05-10 14:40:35.000 {"schema":"iglu:com.snowplowanalytics.snowplow/contexts/jsonschema/1-0-1","data":[{"schema":"iglu:nl.basjes/yauaa_context/jsonschema/1-0-0","data":{"deviceBrand":"Unknown","deviceName":"Unknown","operatingSystemName":"Unknown","agentVersionMajor":"2","layoutEngineVersionMajor":"??","deviceClass":"Unknown","agentNameVersionMajor":"python-requests 2","operatingSystemClass":"Unknown","layoutEngineName":"Unknown","agentName":"python-requests","agentVersion":"2.21.0","layoutEngineClass":"Unknown","agentNameVersion":"python-requests 2.21.0","operatingSystemVersion":"??","agentClass":"Special","layoutEngineVersion":"??"}}]} 2019-05-10 14:40:35.972 com.snowplowanalytics.snowplow add_to_cart jsonschema 1-0-0 ` )
2966+ var testTSVTimestampsMap = map [string ]any {
2967+ "collector_tstamp" : testJsCollectorTstamp ,
2968+ "derived_tstamp" : testJsDerivedTstamp ,
2969+ "dvce_created_tstamp" : testJsDvceCreatedTstamp ,
2970+ "dvce_sent_tstamp" : testJsDvceSentTstamp ,
2971+ "etl_tstamp" : testJsEtlTstamp ,
2972+ }
29642973
2965- // corresponding JSON to previous TSV
2966- var testJsJSON = []byte (`{"app_id":"test-data<>","collector_tstamp":"2019-05-10T14:40:35.972Z","contexts_nl_basjes_yauaa_context_1":[{"agentClass":"Special","agentName":"python-requests","agentNameVersion":"python-requests 2.21.0","agentNameVersionMajor":"python-requests 2","agentVersion":"2.21.0","agentVersionMajor":"2","deviceBrand":"Unknown","deviceClass":"Unknown","deviceName":"Unknown","layoutEngineClass":"Unknown","layoutEngineName":"Unknown","layoutEngineVersion":"??","layoutEngineVersionMajor":"??","operatingSystemClass":"Unknown","operatingSystemName":"Unknown","operatingSystemVersion":"??"}],"derived_tstamp":"2019-05-10T14:40:35.972Z","dvce_created_tstamp":"2019-05-10T14:40:35.551Z","dvce_sent_tstamp":"2019-05-10T14:40:35Z","etl_tstamp":"2019-05-10T14:40:37.436Z","event":"unstruct","event_format":"jsonschema","event_id":"e9234345-f042-46ad-b1aa-424464066a33","event_name":"add_to_cart","event_vendor":"com.snowplowanalytics.snowplow","event_version":"1-0-0","network_userid":"d26822f5-52cc-4292-8f77-14ef6b7a27e2","platform":"pc","unstruct_event_com_snowplowanalytics_snowplow_add_to_cart_1":{"currency":"GBP","quantity":2,"sku":"item41","unitPrice":32.4},"user_id":"user<built-in function input>","user_ipaddress":"1.2.3.4","useragent":"python-requests/2.21.0","v_collector":"ssc-0.15.0-googlepubsub","v_etl":"beam-enrich-0.2.0-common-0.36.0","v_tracker":"py-0.8.2"}` )
2974+ var testJSONTimestampsMap = map [string ]any {
2975+ "collector_tstamp" : "2019-05-10T14:40:35.972Z" ,
2976+ "derived_tstamp" : "2019-05-10T14:40:35.972Z" ,
2977+ "dvce_created_tstamp" : "2019-05-10T14:40:35.551Z" ,
2978+ "dvce_sent_tstamp" : "2019-05-10T14:40:35Z" ,
2979+ "etl_tstamp" : "2019-05-10T14:40:37.436Z" ,
2980+ }
29672981
2968- // json's changed and stringified inside JS
2969- var testJsJSONChanged1 = []byte (`{"app_id_CHANGED":"test-data<>","collector_tstamp":"2019-05-10T14:40:35.972Z","contexts_nl_basjes_yauaa_context_1":[{"agentClass":"Special","agentName":"python-requests","agentNameVersion":"python-requests 2.21.0","agentNameVersionMajor":"python-requests 2","agentVersion":"2.21.0","agentVersionMajor":"2","deviceBrand":"Unknown","deviceClass":"Unknown","deviceName":"Unknown","layoutEngineClass":"Unknown","layoutEngineName":"Unknown","layoutEngineVersion":"??","layoutEngineVersionMajor":"??","operatingSystemClass":"Unknown","operatingSystemName":"Unknown","operatingSystemVersion":"??"}],"derived_tstamp":"2019-05-10T14:40:35.972Z","dvce_created_tstamp":"2019-05-10T14:40:35.551Z","dvce_sent_tstamp":"2019-05-10T14:40:35Z","etl_tstamp":"2019-05-10T14:40:37.436Z","event":"unstruct","event_format":"jsonschema","event_id":"e9234345-f042-46ad-b1aa-424464066a33","event_name":"add_to_cart","event_vendor":"com.snowplowanalytics.snowplow","event_version":"1-0-0","network_userid":"d26822f5-52cc-4292-8f77-14ef6b7a27e2","platform":"pc","unstruct_event_com_snowplowanalytics_snowplow_add_to_cart_1":{"currency":"GBP","quantity":2,"sku":"item41","unitPrice":32.4},"user_id":"user<built-in function input>","user_ipaddress":"1.2.3.4","useragent":"python-requests/2.21.0","v_collector":"ssc-0.15.0-googlepubsub","v_etl":"beam-enrich-0.2.0-common-0.36.0","v_tracker":"py-0.8.2"}` )
2982+ func mergeMaps (a , b map [string ]any ) map [string ]any {
2983+ c := make (map [string ]any )
2984+ maps .Copy (c , a )
2985+ maps .Copy (c , b )
29702986
2971- var testJsJSONChanged2 = []byte (`{"collector_tstamp":"2019-05-10T14:40:35.972Z","contexts_nl_basjes_yauaa_context_1":[{"agentClass":"Special","agentName":"python-requests","agentNameVersion":"python-requests 2.21.0","agentNameVersionMajor":"python-requests 2","agentVersion":"2.21.0","agentVersionMajor":"2","deviceBrand":"Unknown","deviceClass":"Unknown","deviceName":"Unknown","layoutEngineClass":"Unknown","layoutEngineName":"Unknown","layoutEngineVersion":"??","layoutEngineVersionMajor":"??","operatingSystemClass":"Unknown","operatingSystemName":"Unknown","operatingSystemVersion":"??"}],"derived_tstamp":"2019-05-10T14:40:35.972Z","dvce_created_tstamp":"2019-05-10T14:40:35.551Z","dvce_sent_tstamp":"2019-05-10T14:40:35Z","etl_tstamp":"2019-05-10T14:40:37.436Z","event":"unstruct","event_format":"jsonschema","event_id":"e9234345-f042-46ad-b1aa-424464066a33","event_name":"add_to_cart","event_vendor":"com.snowplowanalytics.snowplow","event_version":"1-0-0","network_userid":"d26822f5-52cc-4292-8f77-14ef6b7a27e2","platform":"pc","unstruct_event_com_snowplowanalytics_snowplow_add_to_cart_1":{"currency":"GBP","quantity":2,"sku":"item41","unitPrice":32.4},"user_id":"user<built-in function input>","user_ipaddress":"1.2.3.4","useragent":"python-requests/2.21.0","v_collector":"ssc-0.15.0-googlepubsub","v_etl":"beam-enrich-0.2.0-common-0.36.0","v_tracker":"py-0.8.2","app_id_CHANGED":"test-data<>"}` )
2987+ return c
2988+ }
0 commit comments