embulk-input-marketo_extended 0.6.18 → 0.6.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 12599394a20752769173478de83e784ad9789281
4
- data.tar.gz: 92e3492011dfcc74354acc6c0a4cb070e62c2b21
3
+ metadata.gz: 1688ab62e23160e81799499798c02db8b509bf93
4
+ data.tar.gz: 6c32a444547d345af6c87522182199a04aff60d7
5
5
  SHA512:
6
- metadata.gz: 7e902baac51f0a1fb9fafab08e540bb5acbaa7be69948204b3272b32cb187da3aef3d9572492a965fe692c8e99b7860a66b002c640db5661c4ebb590bae1b1b7
7
- data.tar.gz: 368d67fa4e00d86cc94bbbdec1a23a68d197cfa91afe28c6bcdea77a54cd14ca261855eae0f0ca255932bcf47a63c7abf5dfc46274e59ab8f38f65b3949da5e5
6
+ metadata.gz: df3fead3cee56763900cff8f45a20ac804556c097aa283995aa5f8bc533248448ef06008b971783bc08d745b77cea5c5e04a5be5ac80fbdda9034a70f1480cff
7
+ data.tar.gz: 7fc26e3dba96dc1e5851b3f52e81a29ac31cef3ffdc5d38e9f16318e27e69c7b18ee5f14bcddb89a8ff3bbdb2d1c5344253720fecc172c3004e23240d1a822f7
data/README.md CHANGED
@@ -1,11 +1,9 @@
1
- [![Build Status](https://travis-ci.org/treasure-data/embulk-input-marketo.svg?branch=master)](https://travis-ci.org/treasure-data/embulk-input-marketo)
2
- [![Code Climate](https://codeclimate.com/github/treasure-data/embulk-input-marketo/badges/gpa.svg)](https://codeclimate.com/github/treasure-data/embulk-input-marketo)
3
- [![Test Coverage](https://codeclimate.com/github/treasure-data/embulk-input-marketo/badges/coverage.svg)](https://codeclimate.com/github/treasure-data/embulk-input-marketo/coverage)
4
- [![Gem Version](https://badge.fury.io/rb/embulk-input-marketo.svg)](http://badge.fury.io/rb/embulk-input-marketo)
1
+ [![Gem Version](https://badge.fury.io/rb/embulk-input-marketo.svg)](http://badge.fury.io/rb/embulk-input-marketo_extended)
5
2
 
6
- # Marketo input plugin for Embulk
3
+ # Marketo_extended input plugin for Embulk
7
4
 
8
- embulk-input-marketo is the gem preparing Embulk input plugins for [Marketo](http://www.marketo.com/).
5
+ embulk-input-marketo_extended is the gem preparing Embulk input plugins for [Marketo](http://www.marketo.com/).
6
+ This is a forked repo from treasure-data/embulk-input-marketo and it is mainly extended how csv parsing is done.
9
7
 
10
8
  - Lead(lead)
11
9
  - Activity log(activity)
@@ -28,7 +26,7 @@ Required Embulk version >= 0.8.33 (since 0.6.0).
28
26
  ## Install
29
27
 
30
28
  ```
31
- $ embulk gem install embulk-input-marketo
29
+ $ embulk gem install embulk-input-marketo_extended
32
30
  ```
33
31
 
34
32
  ## Configuration
@@ -16,7 +16,7 @@ repositories {
16
16
  configurations {
17
17
  provided
18
18
  }
19
- version = "0.6.18"
19
+ version = "0.6.20"
20
20
  sourceCompatibility = 1.7
21
21
  targetCompatibility = 1.7
22
22
 
@@ -25,6 +25,7 @@ dependencies {
25
25
  provided "org.embulk:embulk-core:0.8.+"
26
26
  compile "org.embulk.base.restclient:embulk-base-restclient:0.5.3"
27
27
  compile "org.embulk.base.restclient:embulk-util-retryhelper-jetty92:0.5.3"
28
+ compile "commons-io:commons-io:2.8.0"
28
29
  testCompile "junit:junit:4.+"
29
30
  testCompile "org.embulk:embulk-core:0.8.+:tests"
30
31
  testCompile "org.embulk:embulk-test:0.8.+"
@@ -210,7 +210,15 @@ public class CsvTokenizer
210
210
  }
211
211
  }
212
212
  }
213
+ private char peekNextNextChar() {
214
+ Preconditions.checkState(line != null, "peekNextNextChar is called after end of file");
213
215
 
216
+ if (linePos + 1 >= line.length()) {
217
+ return END_OF_LINE;
218
+ } else {
219
+ return line.charAt(linePos + 1);
220
+ }
221
+ }
214
222
  public boolean hasNextColumn()
215
223
  {
216
224
  return recordState == RecordState.NOT_END;
@@ -218,6 +226,7 @@ public class CsvTokenizer
218
226
 
219
227
  public String nextColumn()
220
228
  {
229
+ String quotesInQuotedFields = "ACCEPT_STRAY_QUOTES_ASSUMING_NO_DELIMITERS_IN_FIELDS2";
221
230
  if (!hasNextColumn()) {
222
231
  throw new TooFewColumnsException("Too few columns");
223
232
  }
@@ -370,18 +379,34 @@ public class CsvTokenizer
370
379
  }
371
380
  else if (isQuote(c)) {
372
381
  char next = peekNextChar();
373
- if (isQuote(next)) { // escaped quote
382
+ final char nextNext = peekNextNextChar();
383
+ // Exec.getLogger(CsvTokenizer.class).info("Character is {}. Next: {}, NextNext:{}", c,next,nextNext);
384
+ if (isQuote(next)
385
+ && (quotesInQuotedFields != "ACCEPT_STRAY_QUOTES_ASSUMING_NO_DELIMITERS_IN_FIELDS"
386
+ || (!isDelimiter(nextNext) && !isEndOfLine(nextNext)))) {
387
+ // Escaped by preceding it with another quote.
388
+ // A quote just before a delimiter or an end of line is recognized as a functional quote,
389
+ // not just as a non-escaped stray "quote character" included the field, even if
390
+ // ACCEPT_STRAY_QUOTES_ASSUMING_NO_DELIMITERS_IN_FIELDS is specified.
374
391
  quotedValue.append(line.substring(valueStartPos, linePos));
375
392
  valueStartPos = ++linePos;
376
- }
377
- else {
393
+ } else if (quotesInQuotedFields == "ACCEPT_STRAY_QUOTES_ASSUMING_NO_DELIMITERS_IN_FIELDS"
394
+ && !(isDelimiter(next) || isEndOfLine(next))) {
395
+ // A non-escaped stray "quote character" in the field is processed as a regular character
396
+ // if ACCEPT_STRAY_QUOTES_ASSUMING_NO_DELIMITERS_IN_FIELDS is specified,
397
+ if ((linePos - valueStartPos) + quotedValue.length() > maxQuotedSizeLimit) {
398
+ throw new QuotedSizeLimitExceededException("The size of the quoted value exceeds the limit size (" + maxQuotedSizeLimit + ")");
399
+ }
400
+ } else {
378
401
  quotedValue.append(line.substring(valueStartPos, linePos - 1));
402
+ // Exec.getLogger(CsvTokenizer.class).info("Current column state is {}. Quoted Value : {}", columnState, quotedValue);
379
403
  columnState = ColumnState.AFTER_QUOTED_VALUE;
380
404
  }
381
405
  }
382
406
  else if (isEscape(c)) { // isQuote must be checked first in case of quote == escape
383
407
  // In RFC 4180, CSV's escape char is '\"'. But '\\' is often used.
384
408
  char next = peekNextChar();
409
+ // Exec.getLogger(CsvTokenizer.class).info("Esc Character is {}. Next: {}, column state{}", c,next, columnState);
385
410
  if (isEndOfLine(c)) {
386
411
  // escape end of line. TODO assuming multi-line quoted value without newline?
387
412
  quotedValue.append(line.substring(valueStartPos, linePos));
@@ -391,7 +416,7 @@ public class CsvTokenizer
391
416
  }
392
417
  valueStartPos = 0;
393
418
  }
394
- else if (isQuote(next) || isEscape(next)) { // escaped quote
419
+ else if ( isEscape(next)) { // escaped quote
395
420
  quotedValue.append(line.substring(valueStartPos, linePos - 1));
396
421
  quotedValue.append(next);
397
422
  valueStartPos = ++linePos;
@@ -406,6 +431,7 @@ public class CsvTokenizer
406
431
  break;
407
432
 
408
433
  case AFTER_QUOTED_VALUE:
434
+
409
435
  if (isDelimiter(c)) {
410
436
  if (delimiterFollowingString == null) {
411
437
  return quotedValue.toString();
@@ -11,12 +11,14 @@ import org.embulk.input.marketo.rest.RecordPagingIterable;
11
11
  import org.embulk.spi.DataException;
12
12
  import org.embulk.spi.Exec;
13
13
  import org.slf4j.Logger;
14
+ import java.io.IOException;
14
15
 
15
16
  import java.io.File;
16
17
  import java.io.FileOutputStream;
17
18
  import java.io.IOException;
18
19
  import java.io.InputStream;
19
20
  import java.io.OutputStream;
21
+ import org.apache.commons.io.FileUtils;
20
22
  import java.util.Date;
21
23
  import java.util.List;
22
24
 
@@ -104,9 +106,15 @@ public class MarketoServiceImpl implements MarketoService
104
106
  }
105
107
  });
106
108
  }
109
+
110
+
107
111
  private File downloadBulkExtract(Function<BulkExtractRangeHeader, InputStream> getBulkExtractfunction)
108
112
  {
109
113
  final File tempFile = Exec.getTempFileSpace().createTempFile(DEFAULT_FILE_FORMAT);
114
+ LOGGER.info("Temp File = {}", tempFile.getPath());
115
+ // File destination = new File("/tmp/example_test.csv");
116
+
117
+
110
118
  long startByte = 0;
111
119
  int resumeTime = 0;
112
120
  while (resumeTime < MAX_RESUME_TIME) {
@@ -114,6 +122,13 @@ public class MarketoServiceImpl implements MarketoService
114
122
  InputStream bulkExtractResult = getBulkExtractfunction.apply(bulkExtractRangeHeader);
115
123
  try {
116
124
  saveExtractedFile(bulkExtractResult, tempFile);
125
+ // try{
126
+ // FileUtils.copyFile(tempFile, destination);
127
+ // }
128
+ // catch (IOException e){
129
+ // LOGGER.error("Exception when copying to file destination {}\nException:{}",destination.getPath(),e );
130
+ // }
131
+
117
132
  return tempFile;
118
133
  }
119
134
  catch (DownloadBulkExtractException e) {
@@ -34,6 +34,7 @@ import org.embulk.spi.util.InputStreamFileInput;
34
34
  import org.embulk.spi.util.LineDecoder;
35
35
  import org.joda.time.DateTime;
36
36
  import org.msgpack.value.Value;
37
+ import org.slf4j.Logger;
37
38
 
38
39
  import java.io.InputStream;
39
40
  import java.text.DateFormat;
@@ -169,6 +170,18 @@ public abstract class MarketoBaseBulkExtractInputPlugin<T extends MarketoBaseBul
169
170
  int imported = 0;
170
171
  while (csvRecords.hasNext()) {
171
172
  Map<String, String> csvRecord = csvRecords.next();
173
+ // if(csvRecord.containsKey("attributes")) {
174
+ // System.out.println("Attributes Before");
175
+ // System.out.println(csvRecord.get("attributes"));
176
+ //
177
+ // csvRecord.put("attributes", csvRecord.get("attributes").replace("\\\"\"","\\\""));
178
+ // System.out.println("Attributes After");
179
+ // System.out.println(csvRecord.get("attributes"));
180
+ // }
181
+
182
+ // for (Map.Entry<String, String> entry : csvRecord.entrySet()) {
183
+ // System.out.println(entry.getKey() + ":" + entry.getValue().toString());
184
+ // }
172
185
  ObjectNode objectNode = MarketoUtils.OBJECT_MAPPER.valueToTree(csvRecord);
173
186
  recordImporter.importRecord(new AllStringJacksonServiceRecord(objectNode), pageBuilder);
174
187
  imported = imported + 1;
@@ -357,6 +370,7 @@ public abstract class MarketoBaseBulkExtractInputPlugin<T extends MarketoBaseBul
357
370
  if (hasNext()) {
358
371
  MarketoUtils.DateRange next = dateRangeIterator.next();
359
372
  InputStream extractedStream = getExtractedStream(marketoService, task, next.fromDate, next.toDate);
373
+
360
374
  currentLineDecoder = new LineDecoder(new InputStreamFileInput(task.getBufferAllocator(), extractedStream), task);
361
375
  return currentLineDecoder;
362
376
  }
@@ -372,6 +386,7 @@ public abstract class MarketoBaseBulkExtractInputPlugin<T extends MarketoBaseBul
372
386
 
373
387
  private class CsvRecordIterator implements Iterator<Map<String, String>>
374
388
  {
389
+ private final Logger LOGGER = Exec.getLogger(CsvRecordIterator.class);
375
390
  private CsvTokenizer tokenizer;
376
391
 
377
392
  private List<String> headers;
@@ -394,7 +409,10 @@ public abstract class MarketoBaseBulkExtractInputPlugin<T extends MarketoBaseBul
394
409
  public boolean hasNext()
395
410
  {
396
411
  if (currentCsvRecord == null) {
412
+ LOGGER.info("Current csv record: {}", currentCsvRecord);
397
413
  currentCsvRecord = getNextCSVRecord();
414
+ LOGGER.info("Next csv record: {}", currentCsvRecord);
415
+
398
416
  }
399
417
  return currentCsvRecord != null;
400
418
  }
@@ -427,6 +445,10 @@ public abstract class MarketoBaseBulkExtractInputPlugin<T extends MarketoBaseBul
427
445
  try {
428
446
  int i = 0;
429
447
  while (tokenizer.hasNextColumn()) {
448
+ if (i == headers.size()){
449
+ LOGGER.info("We have reached last column. {}", tokenizer.nextColumnOrNull());
450
+ break;
451
+ }
430
452
  kvMap.put(headers.get(i), tokenizer.nextColumnOrNull());
431
453
  i++;
432
454
  }
@@ -108,16 +108,22 @@ public class ActivityBulkExtractInputPluginTest
108
108
  Mockito.when(mockMarketoRestclient.createActivityExtract(any(List.class), any(Date.class), any(Date.class))).thenReturn(exportId1).thenReturn(exportId2).thenReturn(null);
109
109
  Mockito.when(mockMarketoRestclient.getActivitiesBulkExtractResult(Mockito.eq(exportId1), any(BulkExtractRangeHeader.class))).thenReturn(this.getClass().getResourceAsStream("/fixtures/activity_extract1.csv"));
110
110
  Mockito.when(mockMarketoRestclient.getActivitiesBulkExtractResult(Mockito.eq(exportId2), any(BulkExtractRangeHeader.class))).thenReturn(this.getClass().getResourceAsStream("/fixtures/activity_extract2.csv"));
111
+ System.out.println("*************");
111
112
  ServiceResponseMapper<? extends ValueLocator> mapper = activityBulkExtractInputPlugin.buildServiceResponseMapper(task);
113
+ System.out.println("-----------------");
112
114
  activityBulkExtractInputPlugin.validateInputTask(task);
115
+ System.out.println("Before ingestion");
113
116
  TaskReport taskReport = activityBulkExtractInputPlugin.ingestServiceData(task, mapper.createRecordImporter(), 1, pageBuilder);
117
+ System.out.println("After ingestion");
114
118
  ArgumentCaptor<String> argumentCaptor = ArgumentCaptor.forClass(String.class);
115
119
  Column marketoGUID = mapper.getEmbulkSchema().lookupColumn("marketoGUID");
116
120
  Mockito.verify(pageBuilder, Mockito.times(55)).setString(Mockito.eq(marketoGUID), argumentCaptor.capture());
117
121
  Mockito.verify(mockMarketoRestclient, Mockito.times(1)).startActitvityBulkExtract(Mockito.eq(exportId1));
122
+ System.out.println("Start Extraction");
118
123
  Mockito.verify(mockMarketoRestclient, Mockito.times(1)).waitActitvityExportJobComplete(Mockito.eq(exportId1), Mockito.eq(task.getPollingIntervalSecond()), Mockito.eq(task.getBulkJobTimeoutSecond()));
119
124
  Mockito.verify(mockMarketoRestclient, Mockito.times(1)).startActitvityBulkExtract(Mockito.eq(exportId2));
120
125
  Mockito.verify(mockMarketoRestclient, Mockito.times(1)).waitActitvityExportJobComplete(Mockito.eq(exportId2), Mockito.eq(task.getPollingIntervalSecond()), Mockito.eq(task.getBulkJobTimeoutSecond()));
126
+ System.out.println("Finished Extraction");
121
127
  Mockito.verify(mockMarketoRestclient, Mockito.times(1)).createActivityExtract(activityTypeIds, startDate.toDate(), startDate.plusDays(30).toDate());
122
128
  DateTime startDate2 = startDate.plusDays(30).plusSeconds(1);
123
129
  Mockito.verify(mockMarketoRestclient, Mockito.times(1)).createActivityExtract(activityTypeIds, startDate2.toDate(), startDate.plusDays(task.getFetchDays()).toDate());
@@ -32,4 +32,6 @@ marketoGUID,leadId,activityDate,activityTypeId,campaignId,primaryAttributeValueI
32
32
  558711,102449,2017-09-08T16:39:14Z,12,null,102449,null,"{""Source Type"":""List import"",""List Name"":""Bill Import Test"",""Created Date"":""2017-09-08""}"
33
33
  558712,102450,2017-09-08T16:39:14Z,12,null,102450,null,"{""Source Type"":""List import"",""List Name"":""Bill Import Test"",""Created Date"":""2017-09-08""}"
34
34
  558713,102451,2017-09-08T16:39:14Z,12,null,102451,null,"{""Source Type"":""List import"",""List Name"":""Bill Import Test"",""Created Date"":""2017-09-08""}"
35
- 558714,102452,2017-09-08T16:39:14Z,12,null,102452,null,"{""Source Type"":""List import"",""List Name"":""Bill Import Test"",""Created Date"":""2017-09-08""}"
35
+ 558714,102452,2017-09-08T16:39:14Z,12,null,102452,null,"{""Source Type"":""List import"",""List Name"":""Bill Import Test"",""Created Date"":""2017-09-08""}"
36
+ 558714,102452,2017-09-08T16:39:14Z,12,null,102452,null,"{""Campaign Run ID"":""85184"",""Client IP Address"":""98.167.134.95"",""Query Parameters"":""mkt_unsubscribe=1&mkt_tok=eyJpIjoiTTJWbFlUTTRZakEyT1dZeCIsInQiOiJ3MzVGMnZmblJZSWt1bmZ1dHoyaVZWcnhReEtKR2tSbkdUMHYwbVRPZXcvTHhVS3BRbGhaWnkrSldRaTNINnR4UWNVaVBFLzN4anlaMGlHSDE4MW40bXdlbUMrdVZmNGpSekl1S1BmNmtCcTFZaXJVZjhqOXQxT0NBdVFxQkpwayJ9"",""Referrer URL"":""https://pages.upwork.com/UnsubscribePage.html?mkt_unsubscribe=1&mkt_tok=eyJpIjoiTTJWbFlUTTRZakEyT1dZeCIsInQiOiJ3MzVGMnZmblJZSWt1bmZ1dHoyaVZWcnhReEtKR2tSbkdUMHYwbVRPZXcvTHhVS3BRbGhaWnkrSldRaTNINnR4UWNVaVBFLzN4anlaMGlHSDE4MW40bXdlbUMrdVZmNGpSekl1S1BmNmtCcTFZaXJVZjhqOXQxT0NBdVFxQkpwayJ9"",""User Agent"":""Mozilla/5.0 (iPad; CPU OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/86.0.4240.93 Mobile/15E148 Safari/604.1"",""Webpage ID"":4646125,""Webform ID"":""2548"",""Form Fields"":""a:18:{s:6:\""module\"";s:11:\""leadCapture\"";s:6:\""action\"";s:5:\""save2\"";s:12:\""Unsubscribed\"";s:3:\""Yes\"";s:11:\""resubscribe\"";s:0:\""\"";s:6:\""formid\"";s:4:\""2548\"";s:4:\""lpId\"";s:4:\""7518\"";s:5:\""subId\"";s:2:\""13\"";s:10:\""munchkinId\"";s:11:\""518-RKL-392\"";s:5:\""lpurl\"";s:66:\""//pages.upwork.com/UnsubscribePage.html?cr={creative}&kw={keyword}\"";s:2:\""cr\"";s:0:\""\"";s:2:\""kw\"";s:0:\""\"";s:1:\""q\"";s:0:\""\"";s:8:\""_mkt_trk\"";s:56:\""id:518-RKL-392&token:_mch-upwork.com-1604320852930-29224\"";s:7:\""formVid\"";s:4:\""2548\"";s:7:\""mkt_tok\"";s:212:\""eyJpIjoiTTJWbFlUTTRZakEyT1dZeCIsInQiOiJ3MzVGMnZmblJZSWt1bmZ1dHoyaVZWcnhReEtKR2tSbkdUMHYwbVRPZXcvTHhVS3BRbGhaWnkrSldRaTNINnR4UWNVaVBFLzN4anlaMGlHSDE4MW40bXdlbUMrdVZmNGpSekl1S1BmNmtCcTFZaXJVZjhqOXQxT0NBdVFxQkpwayJ9\"";s:13:\""_mktoReferrer\"";s:284:\""https://pages.upwork.com/UnsubscribePage.html?mkt_unsubscribe=1&mkt_tok=eyJpIjoiTTJWbFlUTTRZakEyT1dZeCIsInQiOiJ3MzVGMnZmblJZSWt1bmZ1dHoyaVZWcnhReEtKR2tSbkdUMHYwbVRPZXcvTHhVS3BRbGhaWnkrSldRaTNINnR4UWNVaVBFLzN4anlaMGlHSDE4MW40bXdlbUMrdVZmNGpSekl1S1BmNmtCcTFZaXJVZjhqOXQxT0NBdVFxQkpwayJ9\"";s:14:\""checksumFields\"";s:106:\""Unsubscribed,resubscribe,formid,lpId,subId,munchkinId,lpurl,cr,kw,q,_mkt_trk,formVid,mkt_tok,_mktoReferrer\"";s:8:\""checksum\"";s:64:\""4cec0015c824c862f776c0301f6be5ffa7a5738ae450a7a3a8a57c8ca353e88a\"";}""}"
37
+ 1587928704,53599804,2020-11-02T12:40:58Z,9,17390,24173,2020-10-29 Executive Summary #2.Email,"{""Campaign Run ID"":""85184"",""Client IP Address"":""98.167.134.95"",""Query Parameters"":""mkt_unsubscribe=1&mkt_tok=eyJpIjoiTTJWbFlUTTRZakEyT1dZeCIsInQiOiJ3MzVGMnZmblJZSWt1bmZ1dHoyaVZWcnhReEtKR2tSbkdUMHYwbVRPZXcvTHhVS3BRbGhaWnkrSldRaTNINnR4UWNVaVBFLzN4anlaMGlHSDE4MW40bXdlbUMrdVZmNGpSekl1S1BmNmtCcTFZaXJVZjhqOXQxT0NBdVFxQkpwayJ9"",""Referrer URL"":""https://pages.upwork.com/UnsubscribePage.html?mkt_unsubscribe=1&mkt_tok=eyJpIjoiTTJWbFlUTTRZakEyT1dZeCIsInQiOiJ3MzVGMnZmblJZSWt1bmZ1dHoyaVZWcnhReEtKR2tSbkdUMHYwbVRPZXcvTHhVS3BRbGhaWnkrSldRaTNINnR4UWNVaVBFLzN4anlaMGlHSDE4MW40bXdlbUMrdVZmNGpSekl1S1BmNmtCcTFZaXJVZjhqOXQxT0NBdVFxQkpwayJ9"",""User Agent"":""Mozilla/5.0 (iPad; CPU OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/86.0.4240.93 Mobile/15E148 Safari/604.1"",""Webpage ID"":4646125,""Webform ID"":""2548"",""Form Fields"":""a:18:{s:6:\""module\"";s:11:\""leadCapture\"";s:6:\""action\"";s:5:\""save2\"";s:12:\""Unsubscribed\"";s:3:\""Yes\"";s:11:\""resubscribe\"";s:0:\""\"";s:6:\""formid\"";s:4:\""2548\"";s:4:\""lpId\"";s:4:\""7518\"";s:5:\""subId\"";s:2:\""13\"";s:10:\""munchkinId\"";s:11:\""518-RKL-392\"";s:5:\""lpurl\"";s:66:\""//pages.upwork.com/UnsubscribePage.html?cr={creative}&kw={keyword}\"";s:2:\""cr\"";s:0:\""\"";s:2:\""kw\"";s:0:\""\"";s:1:\""q\"";s:0:\""\"";s:8:\""_mkt_trk\"";s:56:\""id:518-RKL-392&token:_mch-upwork.com-1604320852930-29224\"";s:7:\""formVid\"";s:4:\""2548\"";s:7:\""mkt_tok\"";s:212:\""eyJpIjoiTTJWbFlUTTRZakEyT1dZeCIsInQiOiJ3MzVGMnZmblJZSWt1bmZ1dHoyaVZWcnhReEtKR2tSbkdUMHYwbVRPZXcvTHhVS3BRbGhaWnkrSldRaTNINnR4UWNVaVBFLzN4anlaMGlHSDE4MW40bXdlbUMrdVZmNGpSekl1S1BmNmtCcTFZaXJVZjhqOXQxT0NBdVFxQkpwayJ9\"";s:13:\""_mktoReferrer\"";s:284:\""https://pages.upwork.com/UnsubscribePage.html?mkt_unsubscribe=1&mkt_tok=eyJpIjoiTTJWbFlUTTRZakEyT1dZeCIsInQiOiJ3MzVGMnZmblJZSWt1bmZ1dHoyaVZWcnhReEtKR2tSbkdUMHYwbVRPZXcvTHhVS3BRbGhaWnkrSldRaTNINnR4UWNVaVBFLzN4anlaMGlHSDE4MW40bXdlbUMrdVZmNGpSekl1S1BmNmtCcTFZaXJVZjhqOXQxT0NBdVFxQkpwayJ9\"";s:14:\""checksumFields\"";s:106:\""Unsubscribed,resubscribe,formid,lpId,subId,munchkinId,lpurl,cr,kw,q,_mkt_trk,formVid,mkt_tok,_mktoReferrer\"";s:8:\""checksum\"";s:64:\""4cec0015c824c862f776c0301f6be5ffa7a5738ae450a7a3a8a57c8ca353e88a\"";}""}"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embulk-input-marketo_extended
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.18
4
+ version: 0.6.20
5
5
  platform: ruby
6
6
  authors:
7
7
  - uu59
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2020-06-30 00:00:00.000000000 Z
14
+ date: 2020-11-05 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  requirement: !ruby/object:Gem::Requirement
@@ -138,8 +138,9 @@ files:
138
138
  - src/test/resources/fixtures/lists_response.json
139
139
  - src/test/resources/fixtures/program_response.json
140
140
  - classpath/jetty-io-9.2.14.v20151106.jar
141
+ - classpath/commons-io-2.8.0.jar
141
142
  - classpath/jetty-util-9.2.14.v20151106.jar
142
- - classpath/embulk-input-marketo_extended-0.6.18.jar
143
+ - classpath/embulk-input-marketo_extended-0.6.20.jar
143
144
  - classpath/jetty-http-9.2.14.v20151106.jar
144
145
  - classpath/jetty-client-9.2.14.v20151106.jar
145
146
  - classpath/embulk-base-restclient-0.5.3.jar