diff --git a/.github/ISSUE_TEMPLATE/2-issue-platform.yaml b/.github/ISSUE_TEMPLATE/2-issue-platform.yaml new file mode 100644 index 000000000000..66ef7be94999 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/2-issue-platform.yaml @@ -0,0 +1,62 @@ +name: πŸ› Report a platform, infra or deployment bug +description: Use this template when you have a problem operating Airbyte platform +labels: [type/bug, area/platform, needs-triage] +body: + - type: markdown + attributes: + value: > +

+ + + + octavia-welcome + + +

+ - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this bug report... + Make sure to update this issue with a concise title and provide all information you have to + help us debug the problem together. Issues not following the template will be closed. + - type: dropdown + id: deploy + validations: + required: true + attributes: + label: What method are you using to run Airbyte? + multiple: false + options: + - Docker + - Kubernetes + - type: input + id: platform-version + attributes: + label: Platform Version or Helm Chart Version + description: "Some examples are: (eg. 0.44.1, 0.30.0), you can find the version in the left bottom in Airbyte UI or in the .env / value.yaml file" + validations: + required: true + - type: dropdown + id: step + attributes: + label: What step the error happened? + multiple: false + options: + - On deploy + - During the Sync + - Upgrading the Platform or Helm Chart + - Other + - type: textarea + id: description + attributes: + label: Revelant information + description: Please give any additional information you have and steps to reproduce the problem. + - type: textarea + id: logs + attributes: + label: Relevant log output + description: | + Please copy and paste any relevant log output. + This will be automatically formatted into code, so no need for backticks. + We strongly recommend to upload the log file for further debugging. + render: shell diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 93d3cec7c40c..85f751847748 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -91,19 +91,19 @@ If this is a community PR, the Airbyte engineer reviewing this PR is responsible ### Airbyter Before merging: -- [ ] Pull Request description explains what problem it is solving -- [ ] Code change is unit tested -- [ ] Build and my-py check pass -- [ ] Smoke test the change on at least one affected connector +- Pull Request description explains what problem it is solving +- Code change is unit tested +- Build and my-py check pass +- Smoke test the change on at least one affected connector - On Github: Run [this workflow](https://github.com/airbytehq/airbyte/actions/workflows/connectors_tests.yml), passing `--use-local-cdk --name=source-` as options - Locally: `airbyte-ci connectors --use-local-cdk --name=source- test` -- [ ] PR is reviewed and approved +- PR is reviewed and approved After merging: -- [ ] [Publish the CDK](https://github.com/airbytehq/airbyte/actions/workflows/publish-cdk-command-manually.yml) +- [Publish the CDK](https://github.com/airbytehq/airbyte/actions/workflows/publish-cdk-command-manually.yml) - The CDK does not follow proper semantic versioning. Choose minor if this the change has significant user impact or is a breaking change. Choose patch otherwise. - Write a thoughtful changelog message so we know what was updated. -- [ ] Merge the platform PR that was auto-created for updating the Connector Builder's CDK version +- Merge the platform PR that was auto-created for updating the Connector Builder's CDK version - This step is optional if the change does not affect the connector builder or declarative connectors. diff --git a/.github/workflows/publish-command.yml b/.github/workflows/publish-command.yml index 24bbaaf3633e..a99757ba4ebe 100644 --- a/.github/workflows/publish-command.yml +++ b/.github/workflows/publish-command.yml @@ -44,5 +44,5 @@ jobs: > :warning: The publish slash command is now deprecated.
The connector publication happens on merge to the master branch.
Please use /legacy-publish if you need to publish normalization images.
- Please join the #publish-on-merge-updates slack channel to track ongoing publish pipelines.
+ Please join the #connector-publish-updates slack channel to track ongoing publish pipelines.
Please reach out to the @dev-connector-ops team if you need support in publishing a connector. diff --git a/airbyte-cdk/java/airbyte-cdk/README.md b/airbyte-cdk/java/airbyte-cdk/README.md index 0dcf226bd313..f88c48cf914e 100644 --- a/airbyte-cdk/java/airbyte-cdk/README.md +++ b/airbyte-cdk/java/airbyte-cdk/README.md @@ -154,9 +154,14 @@ MavenLocal debugging steps: ### Java CDK -| Version | Date | Pull Request | Subject | -| :------ | :--------- | :--------------------------------------------------------- | :------------------------------------ | +| Version | Date | Pull Request | Subject | +|:--------|:-----------|:-----------------------------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 0.1.8 | 2023-10-11 | [\#31322](https://github.com/airbytehq/airbyte/pull/31322) | Cap log line length to 32KB to prevent loss of records | +| 0.1.7 | 2023-10-10 | [\#31194](https://github.com/airbytehq/airbyte/pull/31194) | Deallocate unused per stream buffer memory when empty | +| 0.1.6 | 2023-10-10 | [\#31083](https://github.com/airbytehq/airbyte/pull/31083) | Fix precision of numeric values in async destinations | +| 0.1.5 | 2023-10-09 | [\#31196](https://github.com/airbytehq/airbyte/pull/31196) | Update typo in CDK (CDN_LSN -> CDC_LSN) | +| 0.1.4 | 2023-10-06 | [\#31139](https://github.com/airbytehq/airbyte/pull/31139) | Reduce async buffer | | 0.1.1 | 2023-09-28 | [\#30835](https://github.com/airbytehq/airbyte/pull/30835) | JDBC destinations now avoid staging area name collisions by using the raw table name as the stage name. (previously we used the stream name as the stage name) | -| 0.1.0 | 2023-09-27 | [\#30445](https://github.com/airbytehq/airbyte/pull/30445) | First launch, including shared classes for all connectors. | -| 0.0.2 | 2023-08-21 | [\#28687](https://github.com/airbytehq/airbyte/pull/28687) | Version bump only (no other changes). | -| 0.0.1 | 2023-08-08 | [\#28687](https://github.com/airbytehq/airbyte/pull/28687) | Initial release for testing. | +| 0.1.0 | 2023-09-27 | [\#30445](https://github.com/airbytehq/airbyte/pull/30445) | First launch, including shared classes for all connectors. | +| 0.0.2 | 2023-08-21 | [\#28687](https://github.com/airbytehq/airbyte/pull/28687) | Version bump only (no other changes). | +| 0.0.1 | 2023-08-08 | [\#28687](https://github.com/airbytehq/airbyte/pull/28687) | Initial release for testing. | diff --git a/airbyte-cdk/java/airbyte-cdk/core/src/main/java/io/airbyte/cdk/integrations/destination_async/AsyncStreamConsumer.java b/airbyte-cdk/java/airbyte-cdk/core/src/main/java/io/airbyte/cdk/integrations/destination_async/AsyncStreamConsumer.java index 828fc60986cc..d0fa615c4622 100644 --- a/airbyte-cdk/java/airbyte-cdk/core/src/main/java/io/airbyte/cdk/integrations/destination_async/AsyncStreamConsumer.java +++ b/airbyte-cdk/java/airbyte-cdk/core/src/main/java/io/airbyte/cdk/integrations/destination_async/AsyncStreamConsumer.java @@ -134,7 +134,7 @@ public void accept(final String messageString, final Integer sizeInBytes) throws public static PartialAirbyteMessage deserializeAirbyteMessage(final String messageString) { // TODO: (ryankfu) plumb in the serialized AirbyteStateMessage to match AirbyteRecordMessage code // parity. https://github.com/airbytehq/airbyte/issues/27530 for additional context - final var partial = Jsons.tryDeserialize(messageString, PartialAirbyteMessage.class) + final var partial = Jsons.tryDeserializeExact(messageString, PartialAirbyteMessage.class) .orElseThrow(() -> new RuntimeException("Unable to deserialize PartialAirbyteMessage.")); final var msgType = partial.getType(); diff --git a/airbyte-cdk/java/airbyte-cdk/core/src/main/java/io/airbyte/cdk/integrations/destination_async/GlobalMemoryManager.java b/airbyte-cdk/java/airbyte-cdk/core/src/main/java/io/airbyte/cdk/integrations/destination_async/GlobalMemoryManager.java index 510099ea8f54..ee83e8c76fb3 100644 --- a/airbyte-cdk/java/airbyte-cdk/core/src/main/java/io/airbyte/cdk/integrations/destination_async/GlobalMemoryManager.java +++ b/airbyte-cdk/java/airbyte-cdk/core/src/main/java/io/airbyte/cdk/integrations/destination_async/GlobalMemoryManager.java @@ -38,7 +38,7 @@ public class GlobalMemoryManager { // In cases where a queue is rapidly expanding, a larger block size allows less allocation calls. On // the flip size, a smaller block size allows more granular memory management. Since this overhead // is minimal for now, err on a smaller block sizes. - public static final long BLOCK_SIZE_BYTES = 30 * 1024 * 1024; // 30MB + public static final long BLOCK_SIZE_BYTES = 10 * 1024 * 1024; // 10MB private final long maxMemoryBytes; private final AtomicLong currentMemoryBytes = new AtomicLong(0); diff --git a/airbyte-cdk/java/airbyte-cdk/core/src/main/java/io/airbyte/cdk/integrations/destination_async/buffers/BufferDequeue.java b/airbyte-cdk/java/airbyte-cdk/core/src/main/java/io/airbyte/cdk/integrations/destination_async/buffers/BufferDequeue.java index f7a0eeec7364..3650733cfbcf 100644 --- a/airbyte-cdk/java/airbyte-cdk/core/src/main/java/io/airbyte/cdk/integrations/destination_async/buffers/BufferDequeue.java +++ b/airbyte-cdk/java/airbyte-cdk/core/src/main/java/io/airbyte/cdk/integrations/destination_async/buffers/BufferDequeue.java @@ -74,7 +74,19 @@ public MemoryAwareMessageBatch take(final StreamDescriptor streamDescriptor, fin } } - queue.addMaxMemory(-bytesRead.get()); + if (queue.isEmpty()) { + final var batchSizeBytes = bytesRead.get(); + final var allocatedBytes = queue.getMaxMemoryUsage(); + + // Free unused allocation for the queue. + // When the batch flushes it will flush its allocation. + memoryManager.free(allocatedBytes - batchSizeBytes); + + // Shrink queue to 0 β€” any new messages will reallocate. + queue.addMaxMemory(-allocatedBytes); + } else { + queue.addMaxMemory(-bytesRead.get()); + } return new MemoryAwareMessageBatch( output, diff --git a/airbyte-cdk/java/airbyte-cdk/core/src/main/java/io/airbyte/cdk/integrations/destination_async/buffers/BufferManager.java b/airbyte-cdk/java/airbyte-cdk/core/src/main/java/io/airbyte/cdk/integrations/destination_async/buffers/BufferManager.java index 7e4666b823ff..9d8f2104a044 100644 --- a/airbyte-cdk/java/airbyte-cdk/core/src/main/java/io/airbyte/cdk/integrations/destination_async/buffers/BufferManager.java +++ b/airbyte-cdk/java/airbyte-cdk/core/src/main/java/io/airbyte/cdk/integrations/destination_async/buffers/BufferManager.java @@ -4,6 +4,7 @@ package io.airbyte.cdk.integrations.destination_async.buffers; +import com.google.common.annotations.VisibleForTesting; import io.airbyte.cdk.integrations.destination_async.AirbyteFileUtils; import io.airbyte.cdk.integrations.destination_async.FlushWorkers; import io.airbyte.cdk.integrations.destination_async.GlobalMemoryManager; @@ -61,6 +62,16 @@ public GlobalAsyncStateManager getStateManager() { return stateManager; } + @VisibleForTesting + protected GlobalMemoryManager getMemoryManager() { + return memoryManager; + } + + @VisibleForTesting + protected ConcurrentMap getBuffers() { + return buffers; + } + public BufferEnqueue getBufferEnqueue() { return bufferEnqueue; } @@ -95,8 +106,9 @@ private void printQueueInfo() { for (final var entry : buffers.entrySet()) { final var queue = entry.getValue(); queueInfo.append( - String.format(" Queue name: %s, num records: %d, num bytes: %s", - entry.getKey().getName(), queue.size(), AirbyteFileUtils.byteCountToDisplaySize(queue.getCurrentMemoryUsage()))) + String.format(" Queue name: %s, num records: %d, num bytes: %s, allocated bytes: %s", + entry.getKey().getName(), queue.size(), AirbyteFileUtils.byteCountToDisplaySize(queue.getCurrentMemoryUsage()), + AirbyteFileUtils.byteCountToDisplaySize(queue.getMaxMemoryUsage()))) .append(System.lineSeparator()); } diff --git a/airbyte-cdk/java/airbyte-cdk/core/src/main/java/io/airbyte/cdk/integrations/destination_async/buffers/MemoryBoundedLinkedBlockingQueue.java b/airbyte-cdk/java/airbyte-cdk/core/src/main/java/io/airbyte/cdk/integrations/destination_async/buffers/MemoryBoundedLinkedBlockingQueue.java index 8c3fdc94c9d1..3478a8258a2f 100644 --- a/airbyte-cdk/java/airbyte-cdk/core/src/main/java/io/airbyte/cdk/integrations/destination_async/buffers/MemoryBoundedLinkedBlockingQueue.java +++ b/airbyte-cdk/java/airbyte-cdk/core/src/main/java/io/airbyte/cdk/integrations/destination_async/buffers/MemoryBoundedLinkedBlockingQueue.java @@ -66,6 +66,10 @@ public MemoryBoundedLinkedBlockingQueue.MemoryItem poll(final long timeout, f return hiddenQueue.poll(timeout, unit); } + public long getMaxMemoryUsage() { + return hiddenQueue.getMaxMemoryUsage(); + } + /** * Extends LinkedBlockingQueue so that we can get a LinkedBlockingQueue bounded by memory. Hidden as * an inner class, so it doesn't get misused, see top-level javadoc comment. @@ -82,6 +86,10 @@ public HiddenQueue(final long maxMemoryUsage) { this.maxMemoryUsage = new AtomicLong(maxMemoryUsage); } + public long getMaxMemoryUsage() { + return maxMemoryUsage.get(); + } + public boolean offer(final E e, final long itemSizeInBytes) { final long newMemoryUsage = currentMemoryUsage.addAndGet(itemSizeInBytes); if (newMemoryUsage <= maxMemoryUsage.get()) { diff --git a/airbyte-cdk/java/airbyte-cdk/core/src/main/java/io/airbyte/cdk/integrations/destination_async/buffers/StreamAwareQueue.java b/airbyte-cdk/java/airbyte-cdk/core/src/main/java/io/airbyte/cdk/integrations/destination_async/buffers/StreamAwareQueue.java index 4bfc444f5e1e..bf75b4415b49 100644 --- a/airbyte-cdk/java/airbyte-cdk/core/src/main/java/io/airbyte/cdk/integrations/destination_async/buffers/StreamAwareQueue.java +++ b/airbyte-cdk/java/airbyte-cdk/core/src/main/java/io/airbyte/cdk/integrations/destination_async/buffers/StreamAwareQueue.java @@ -27,10 +27,18 @@ public long getCurrentMemoryUsage() { return memoryAwareQueue.getCurrentMemoryUsage(); } + public long getMaxMemoryUsage() { + return memoryAwareQueue.getMaxMemoryUsage(); + } + public void addMaxMemory(final long maxMemoryUsage) { memoryAwareQueue.addMaxMemory(maxMemoryUsage); } + public boolean isEmpty() { + return memoryAwareQueue.size() == 0; + } + public Optional getTimeOfLastMessage() { // if the queue is empty, the time of last message is irrelevant if (size() == 0) { diff --git a/airbyte-cdk/java/airbyte-cdk/core/src/main/resources/log4j2.xml b/airbyte-cdk/java/airbyte-cdk/core/src/main/resources/log4j2.xml index 81e76194de83..696a4af4451d 100644 --- a/airbyte-cdk/java/airbyte-cdk/core/src/main/resources/log4j2.xml +++ b/airbyte-cdk/java/airbyte-cdk/core/src/main/resources/log4j2.xml @@ -3,7 +3,10 @@ - + + + + diff --git a/airbyte-cdk/java/airbyte-cdk/core/src/main/resources/version.properties b/airbyte-cdk/java/airbyte-cdk/core/src/main/resources/version.properties index 9c714180447b..a0ad737d1205 100644 --- a/airbyte-cdk/java/airbyte-cdk/core/src/main/resources/version.properties +++ b/airbyte-cdk/java/airbyte-cdk/core/src/main/resources/version.properties @@ -1 +1 @@ -version=0.1.3 +version=0.1.8 diff --git a/airbyte-cdk/java/airbyte-cdk/core/src/test/java/io/airbyte/cdk/integrations/base/AirbyteLogMessageTemplateTest.java b/airbyte-cdk/java/airbyte-cdk/core/src/test/java/io/airbyte/cdk/integrations/base/AirbyteLogMessageTemplateTest.java index 80ebb4146439..8cdb8b907f15 100644 --- a/airbyte-cdk/java/airbyte-cdk/core/src/test/java/io/airbyte/cdk/integrations/base/AirbyteLogMessageTemplateTest.java +++ b/airbyte-cdk/java/airbyte-cdk/core/src/test/java/io/airbyte/cdk/integrations/base/AirbyteLogMessageTemplateTest.java @@ -29,6 +29,8 @@ import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; import org.junit.platform.commons.util.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -107,4 +109,25 @@ private AirbyteLogMessage validateAirbyteMessageIsLog(final AirbyteMessage airby return airbyteMessage.getLog(); } + @ParameterizedTest + @ValueSource(ints = {2, 100, 9000}) + public void testAirbyteLogMessageLength(int stringRepeatitions) throws java.io.IOException { + final StringBuilder sb = new StringBuilder(); + for (int i = 0; i < stringRepeatitions; i++) { + sb.append("abcd"); + } + LOGGER.info(sb.toString(), new RuntimeException("aaaaa bbbbbb ccccccc dddddd")); + outputContent.flush(); + final String logMessage = outputContent.toString(StandardCharsets.UTF_8); + + final AirbyteMessage airbyteMessage = validateLogIsAirbyteMessage(logMessage); + final AirbyteLogMessage airbyteLogMessage = validateAirbyteMessageIsLog(airbyteMessage); + final String connectorLogMessage = airbyteLogMessage.getMessage(); + + // #30781 - message length is capped at 16,000 charcters. + int j = connectorLogMessage.length(); + assertFalse(connectorLogMessage.length() > 16_001); + assertTrue(logMessage.length() < 32768); + } + } diff --git a/airbyte-cdk/java/airbyte-cdk/core/src/test/java/io/airbyte/cdk/integrations/destination_async/AsyncStreamConsumerTest.java b/airbyte-cdk/java/airbyte-cdk/core/src/test/java/io/airbyte/cdk/integrations/destination_async/AsyncStreamConsumerTest.java index 6fd9a2d09884..b73cbc5c2ad7 100644 --- a/airbyte-cdk/java/airbyte-cdk/core/src/test/java/io/airbyte/cdk/integrations/destination_async/AsyncStreamConsumerTest.java +++ b/airbyte-cdk/java/airbyte-cdk/core/src/test/java/io/airbyte/cdk/integrations/destination_async/AsyncStreamConsumerTest.java @@ -35,6 +35,7 @@ import io.airbyte.protocol.models.v0.ConfiguredAirbyteCatalog; import io.airbyte.protocol.models.v0.StreamDescriptor; import java.io.IOException; +import java.math.BigDecimal; import java.time.Instant; import java.util.Collection; import java.util.List; @@ -239,6 +240,22 @@ void deserializeAirbyteMessageWithAirbyteRecord() { assertEquals(airbyteRecordString, partial.getSerialized()); } + @Test + void deserializeAirbyteMessageWithBigDecimalAirbyteRecord() { + final JsonNode payload = Jsons.jsonNode(Map.of( + "foo", new BigDecimal("1234567890.1234567890"))); + final AirbyteMessage airbyteMessage = new AirbyteMessage() + .withType(Type.RECORD) + .withRecord(new AirbyteRecordMessage() + .withStream(STREAM_NAME) + .withNamespace(SCHEMA_NAME) + .withData(payload)); + final String serializedAirbyteMessage = Jsons.serialize(airbyteMessage); + final String airbyteRecordString = Jsons.serialize(payload); + final PartialAirbyteMessage partial = AsyncStreamConsumer.deserializeAirbyteMessage(serializedAirbyteMessage); + assertEquals(airbyteRecordString, partial.getSerialized()); + } + @Test void deserializeAirbyteMessageWithEmptyAirbyteRecord() { final Map emptyMap = Map.of(); diff --git a/airbyte-cdk/java/airbyte-cdk/core/src/test/java/io/airbyte/cdk/integrations/destination_async/GlobalMemoryManagerTest.java b/airbyte-cdk/java/airbyte-cdk/core/src/test/java/io/airbyte/cdk/integrations/destination_async/GlobalMemoryManagerTest.java index 6e6b933e9a47..9f79ed0554f6 100644 --- a/airbyte-cdk/java/airbyte-cdk/core/src/test/java/io/airbyte/cdk/integrations/destination_async/GlobalMemoryManagerTest.java +++ b/airbyte-cdk/java/airbyte-cdk/core/src/test/java/io/airbyte/cdk/integrations/destination_async/GlobalMemoryManagerTest.java @@ -14,16 +14,16 @@ public class GlobalMemoryManagerTest { @Test void test() { - final GlobalMemoryManager mgr = new GlobalMemoryManager(35 * BYTES_MB); + final GlobalMemoryManager mgr = new GlobalMemoryManager(15 * BYTES_MB); - assertEquals(30 * BYTES_MB, mgr.requestMemory()); + assertEquals(10 * BYTES_MB, mgr.requestMemory()); assertEquals(5 * BYTES_MB, mgr.requestMemory()); assertEquals(0, mgr.requestMemory()); mgr.free(10 * BYTES_MB); assertEquals(10 * BYTES_MB, mgr.requestMemory()); - mgr.free(31 * BYTES_MB); - assertEquals(30 * BYTES_MB, mgr.requestMemory()); + mgr.free(16 * BYTES_MB); + assertEquals(10 * BYTES_MB, mgr.requestMemory()); } } diff --git a/airbyte-cdk/java/airbyte-cdk/core/src/test/java/io/airbyte/cdk/integrations/destination_async/buffers/BufferDequeueTest.java b/airbyte-cdk/java/airbyte-cdk/core/src/test/java/io/airbyte/cdk/integrations/destination_async/buffers/BufferDequeueTest.java index 5d6119c97c33..eb345f9b0c69 100644 --- a/airbyte-cdk/java/airbyte-cdk/core/src/test/java/io/airbyte/cdk/integrations/destination_async/buffers/BufferDequeueTest.java +++ b/airbyte-cdk/java/airbyte-cdk/core/src/test/java/io/airbyte/cdk/integrations/destination_async/buffers/BufferDequeueTest.java @@ -4,6 +4,7 @@ package io.airbyte.cdk.integrations.destination_async.buffers; +import static io.airbyte.cdk.integrations.destination_async.GlobalMemoryManager.BLOCK_SIZE_BYTES; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -132,4 +133,38 @@ void testMetadataOperationsError() { assertTrue(dequeue.getTimeOfLastRecord(ghostStream).isEmpty()); } + @Test + void cleansUpMemoryForEmptyQueues() throws Exception { + final var bufferManager = new BufferManager(); + final var enqueue = bufferManager.getBufferEnqueue(); + final var dequeue = bufferManager.getBufferDequeue(); + final var memoryManager = bufferManager.getMemoryManager(); + + // we initialize with a block for state + assertEquals(BLOCK_SIZE_BYTES, memoryManager.getCurrentMemoryBytes()); + + // allocate a block for new stream + enqueue.addRecord(RECORD_MSG_20_BYTES, RECORD_SIZE_20_BYTES); + assertEquals(2 * BLOCK_SIZE_BYTES, memoryManager.getCurrentMemoryBytes()); + + enqueue.addRecord(RECORD_MSG_20_BYTES, RECORD_SIZE_20_BYTES); + enqueue.addRecord(RECORD_MSG_20_BYTES, RECORD_SIZE_20_BYTES); + enqueue.addRecord(RECORD_MSG_20_BYTES, RECORD_SIZE_20_BYTES); + + // no re-allocates as we haven't breached block size + assertEquals(2 * BLOCK_SIZE_BYTES, memoryManager.getCurrentMemoryBytes()); + + final var totalBatchSize = RECORD_SIZE_20_BYTES * 4; + + // read the whole queue + try (final var batch = dequeue.take(STREAM_DESC, totalBatchSize)) { + // slop allocation gets cleaned up + assertEquals(BLOCK_SIZE_BYTES + totalBatchSize, memoryManager.getCurrentMemoryBytes()); + batch.close(); + // back to initial state after flush clears the batch + assertEquals(BLOCK_SIZE_BYTES, memoryManager.getCurrentMemoryBytes()); + assertEquals(0, bufferManager.getBuffers().get(STREAM_DESC).getMaxMemoryUsage()); + } + } + } diff --git a/airbyte-cdk/java/airbyte-cdk/core/src/test/java/io/airbyte/cdk/integrations/destination_async/buffers/MemoryBoundedLinkedBlockingQueueTest.java b/airbyte-cdk/java/airbyte-cdk/core/src/test/java/io/airbyte/cdk/integrations/destination_async/buffers/MemoryBoundedLinkedBlockingQueueTest.java index c6ad37fdc2c4..bcd57d56e421 100644 --- a/airbyte-cdk/java/airbyte-cdk/core/src/test/java/io/airbyte/cdk/integrations/destination_async/buffers/MemoryBoundedLinkedBlockingQueueTest.java +++ b/airbyte-cdk/java/airbyte-cdk/core/src/test/java/io/airbyte/cdk/integrations/destination_async/buffers/MemoryBoundedLinkedBlockingQueueTest.java @@ -12,6 +12,8 @@ import java.util.concurrent.TimeUnit; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; public class MemoryBoundedLinkedBlockingQueueTest { @@ -34,7 +36,23 @@ void testBlocksOnFullMemory() throws InterruptedException { assertNotNull(queue.poll(1, TimeUnit.NANOSECONDS)); assertNull(queue.poll(1, TimeUnit.NANOSECONDS)); + } + + @ParameterizedTest + @ValueSource(longs = {1024, 100000, 600}) + void getMaxMemoryUsage(final long size) { + final MemoryBoundedLinkedBlockingQueue queue = new MemoryBoundedLinkedBlockingQueue<>(size); + + assertEquals(0, queue.getCurrentMemoryUsage()); + assertEquals(size, queue.getMaxMemoryUsage()); + + queue.addMaxMemory(-100); + + assertEquals(size - 100, queue.getMaxMemoryUsage()); + + queue.addMaxMemory(123); + assertEquals(size - 100 + 123, queue.getMaxMemoryUsage()); } } diff --git a/airbyte-cdk/java/airbyte-cdk/core/src/test/java/io/airbyte/cdk/integrations/destination_async/buffers/StreamAwareQueueTest.java b/airbyte-cdk/java/airbyte-cdk/core/src/test/java/io/airbyte/cdk/integrations/destination_async/buffers/StreamAwareQueueTest.java index fd57123ac80d..39a32d0b5de9 100644 --- a/airbyte-cdk/java/airbyte-cdk/core/src/test/java/io/airbyte/cdk/integrations/destination_async/buffers/StreamAwareQueueTest.java +++ b/airbyte-cdk/java/airbyte-cdk/core/src/test/java/io/airbyte/cdk/integrations/destination_async/buffers/StreamAwareQueueTest.java @@ -5,12 +5,15 @@ package io.airbyte.cdk.integrations.destination_async.buffers; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; import io.airbyte.cdk.integrations.destination_async.partial_messages.PartialAirbyteMessage; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; public class StreamAwareQueueTest { @@ -37,4 +40,45 @@ void test() throws InterruptedException { assertTrue(queue.getTimeOfLastMessage().isEmpty(), "Expected empty optional; got " + queue.getTimeOfLastMessage()); } + @ParameterizedTest + @ValueSource(longs = {1024, 100000, 600}) + void getMaxMemoryUsage(final long size) { + final StreamAwareQueue queue = new StreamAwareQueue(size); + + assertEquals(0, queue.getCurrentMemoryUsage()); + assertEquals(size, queue.getMaxMemoryUsage()); + + queue.addMaxMemory(-100); + + assertEquals(size - 100, queue.getMaxMemoryUsage()); + + queue.addMaxMemory(123); + + assertEquals(size - 100 + 123, queue.getMaxMemoryUsage()); + } + + @Test + void isEmpty() { + final StreamAwareQueue queue = new StreamAwareQueue(1024); + + assertTrue(queue.isEmpty()); + + queue.offer(new PartialAirbyteMessage(), 10, 1); + + assertFalse(queue.isEmpty()); + + queue.offer(new PartialAirbyteMessage(), 10, 1); + queue.offer(new PartialAirbyteMessage(), 10, 1); + queue.offer(new PartialAirbyteMessage(), 10, 1); + + assertFalse(queue.isEmpty()); + + queue.poll(); + queue.poll(); + queue.poll(); + queue.poll(); + + assertTrue(queue.isEmpty()); + } + } diff --git a/airbyte-cdk/java/airbyte-cdk/db-sources/build.gradle b/airbyte-cdk/java/airbyte-cdk/db-sources/build.gradle index 45293f47cc73..01cefe94963f 100644 --- a/airbyte-cdk/java/airbyte-cdk/db-sources/build.gradle +++ b/airbyte-cdk/java/airbyte-cdk/db-sources/build.gradle @@ -18,7 +18,6 @@ plugins { } test { - systemProperty 'user.timezone', 'UTC' testLogging { // TODO: Remove this after debugging showStandardStreams = true diff --git a/airbyte-cdk/java/airbyte-cdk/db-sources/src/main/java/io/airbyte/cdk/integrations/debezium/internals/DebeziumEventUtils.java b/airbyte-cdk/java/airbyte-cdk/db-sources/src/main/java/io/airbyte/cdk/integrations/debezium/internals/DebeziumEventUtils.java index bada2c5250f6..1f9e54d08d21 100644 --- a/airbyte-cdk/java/airbyte-cdk/db-sources/src/main/java/io/airbyte/cdk/integrations/debezium/internals/DebeziumEventUtils.java +++ b/airbyte-cdk/java/airbyte-cdk/db-sources/src/main/java/io/airbyte/cdk/integrations/debezium/internals/DebeziumEventUtils.java @@ -19,7 +19,7 @@ public class DebeziumEventUtils { - public static final String CDN_LSN = "_ab_cdc_lsn"; + public static final String CDC_LSN = "_ab_cdc_lsn"; public static final String CDC_UPDATED_AT = "_ab_cdc_updated_at"; public static final String CDC_DELETED_AT = "_ab_cdc_deleted_at"; @@ -114,7 +114,7 @@ private static JsonNode formatMongoDbDeleteDebeziumData(final JsonNode before, final JsonNode source, final CdcMetadataInjector cdcMetadataInjector, final Set configuredFields) { - String eventJson; + final String eventJson; /* * The change events produced by MongoDB differ based on the server version. For version BEFORE 6.x, diff --git a/airbyte-cdk/java/airbyte-cdk/db-sources/src/main/java/io/airbyte/cdk/integrations/debezium/internals/DebeziumStateUtil.java b/airbyte-cdk/java/airbyte-cdk/db-sources/src/main/java/io/airbyte/cdk/integrations/debezium/internals/DebeziumStateUtil.java new file mode 100644 index 000000000000..d12f28deeaa0 --- /dev/null +++ b/airbyte-cdk/java/airbyte-cdk/db-sources/src/main/java/io/airbyte/cdk/integrations/debezium/internals/DebeziumStateUtil.java @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2023 Airbyte, Inc., all rights reserved. + */ + +package io.airbyte.cdk.integrations.debezium.internals; + +import io.debezium.config.Configuration; +import java.util.Map; +import java.util.Properties; +import org.apache.kafka.connect.json.JsonConverter; +import org.apache.kafka.connect.json.JsonConverterConfig; +import org.apache.kafka.connect.runtime.WorkerConfig; +import org.apache.kafka.connect.runtime.standalone.StandaloneConfig; +import org.apache.kafka.connect.storage.FileOffsetBackingStore; +import org.apache.kafka.connect.storage.OffsetStorageReaderImpl; + +/** + * Represents a utility class that assists with the parsing of Debezium offset state. + */ +public interface DebeziumStateUtil { + + /** + * The name of the Debezium property that contains the unique name for the Debezium connector. + */ + String CONNECTOR_NAME_PROPERTY = "name"; + + /** + * Configuration for offset state key/value converters. + */ + Map INTERNAL_CONVERTER_CONFIG = Map.of(JsonConverterConfig.SCHEMAS_ENABLE_CONFIG, Boolean.FALSE.toString()); + + /** + * Creates and starts a {@link FileOffsetBackingStore} that is used to store the tracked Debezium + * offset state. + * + * @param properties The Debezium configuration properties for the selected Debezium connector. + * @return A configured and started {@link FileOffsetBackingStore} instance. + */ + default FileOffsetBackingStore getFileOffsetBackingStore(final Properties properties) { + final FileOffsetBackingStore fileOffsetBackingStore = new FileOffsetBackingStore(); + final Map propertiesMap = Configuration.from(properties).asMap(); + propertiesMap.put(WorkerConfig.KEY_CONVERTER_CLASS_CONFIG, JsonConverter.class.getName()); + propertiesMap.put(WorkerConfig.VALUE_CONVERTER_CLASS_CONFIG, JsonConverter.class.getName()); + fileOffsetBackingStore.configure(new StandaloneConfig(propertiesMap)); + fileOffsetBackingStore.start(); + return fileOffsetBackingStore; + } + + /** + * Creates and returns a {@link JsonConverter} that can be used to parse keys in the Debezium offset + * state storage. + * + * @return A {@link JsonConverter} for key conversion. + */ + default JsonConverter getKeyConverter() { + final JsonConverter keyConverter = new JsonConverter(); + keyConverter.configure(INTERNAL_CONVERTER_CONFIG, true); + return keyConverter; + } + + /** + * Creates and returns an {@link OffsetStorageReaderImpl} instance that can be used to load offset + * state from the offset file storage. + * + * @param fileOffsetBackingStore The {@link FileOffsetBackingStore} that contains the offset state + * saved to disk. + * @param properties The Debezium configuration properties for the selected Debezium connector. + * @return An {@link OffsetStorageReaderImpl} instance that can be used to load the offset state + * from the offset file storage. + */ + default OffsetStorageReaderImpl getOffsetStorageReader(final FileOffsetBackingStore fileOffsetBackingStore, final Properties properties) { + return new OffsetStorageReaderImpl(fileOffsetBackingStore, properties.getProperty(CONNECTOR_NAME_PROPERTY), getKeyConverter(), + getValueConverter()); + } + + /** + * Creates and returns a {@link JsonConverter} that can be used to parse values in the Debezium + * offset state storage. + * + * @return A {@link JsonConverter} for value conversion. + */ + default JsonConverter getValueConverter() { + final JsonConverter valueConverter = new JsonConverter(); + valueConverter.configure(INTERNAL_CONVERTER_CONFIG, false); + return valueConverter; + } + +} diff --git a/airbyte-cdk/java/airbyte-cdk/db-sources/src/main/java/io/airbyte/cdk/integrations/debezium/internals/mongodb/MongoDbDebeziumStateUtil.java b/airbyte-cdk/java/airbyte-cdk/db-sources/src/main/java/io/airbyte/cdk/integrations/debezium/internals/mongodb/MongoDbDebeziumStateUtil.java index f137b56f9077..ae940528ecd6 100644 --- a/airbyte-cdk/java/airbyte-cdk/db-sources/src/main/java/io/airbyte/cdk/integrations/debezium/internals/mongodb/MongoDbDebeziumStateUtil.java +++ b/airbyte-cdk/java/airbyte-cdk/db-sources/src/main/java/io/airbyte/cdk/integrations/debezium/internals/mongodb/MongoDbDebeziumStateUtil.java @@ -11,6 +11,7 @@ import com.mongodb.client.MongoClient; import io.airbyte.cdk.integrations.debezium.internals.AirbyteFileOffsetBackingStore; import io.airbyte.cdk.integrations.debezium.internals.DebeziumPropertiesManager; +import io.airbyte.cdk.integrations.debezium.internals.DebeziumStateUtil; import io.airbyte.commons.json.Jsons; import io.airbyte.protocol.models.v0.ConfiguredAirbyteCatalog; import io.debezium.config.Configuration; @@ -22,7 +23,6 @@ import io.debezium.connector.mongodb.ReplicaSets; import io.debezium.connector.mongodb.ResumeTokens; import java.util.Collection; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; @@ -30,10 +30,6 @@ import java.util.Objects; import java.util.Optional; import java.util.Properties; -import org.apache.kafka.connect.json.JsonConverter; -import org.apache.kafka.connect.json.JsonConverterConfig; -import org.apache.kafka.connect.runtime.WorkerConfig; -import org.apache.kafka.connect.runtime.standalone.StandaloneConfig; import org.apache.kafka.connect.storage.FileOffsetBackingStore; import org.apache.kafka.connect.storage.OffsetStorageReaderImpl; import org.bson.BsonDocument; @@ -45,7 +41,7 @@ /** * Collection of utility methods related to the Debezium offset state. */ -public class MongoDbDebeziumStateUtil { +public class MongoDbDebeziumStateUtil implements DebeziumStateUtil { private static final Logger LOGGER = LoggerFactory.getLogger(MongoDbDebeziumStateUtil.class); @@ -162,19 +158,10 @@ public Optional savedOffset(final Properties baseProperties, private Optional parseSavedOffset(final Properties properties, final MongoClient mongoClient) { FileOffsetBackingStore fileOffsetBackingStore = null; OffsetStorageReaderImpl offsetStorageReader = null; + try { - fileOffsetBackingStore = new FileOffsetBackingStore(); - final Map propertiesMap = Configuration.from(properties).asMap(); - propertiesMap.put(WorkerConfig.KEY_CONVERTER_CLASS_CONFIG, JsonConverter.class.getName()); - propertiesMap.put(WorkerConfig.VALUE_CONVERTER_CLASS_CONFIG, JsonConverter.class.getName()); - fileOffsetBackingStore.configure(new StandaloneConfig(propertiesMap)); - fileOffsetBackingStore.start(); - - final Map internalConverterConfig = Collections.singletonMap(JsonConverterConfig.SCHEMAS_ENABLE_CONFIG, "false"); - final JsonConverter keyConverter = new JsonConverter(); - keyConverter.configure(internalConverterConfig, true); - final JsonConverter valueConverter = new JsonConverter(); - valueConverter.configure(internalConverterConfig, false); + fileOffsetBackingStore = getFileOffsetBackingStore(properties); + offsetStorageReader = getOffsetStorageReader(fileOffsetBackingStore, properties); final Configuration config = Configuration.from(properties); final MongoDbTaskContext taskContext = new MongoDbTaskContext(config); @@ -183,8 +170,6 @@ private Optional parseSavedOffset(final Properties properties, fin LOGGER.debug("Parsing saved offset state for replica set '{}' and server ID '{}'...", replicaSets.all().get(0), properties.getProperty("name")); - offsetStorageReader = new OffsetStorageReaderImpl(fileOffsetBackingStore, properties.getProperty("name"), keyConverter, valueConverter); - final MongoDbOffsetContext.Loader loader = new MongoDbCustomLoader(mongoDbConnectorConfig, replicaSets); final Collection> partitions = loader.getPartitions(); final Map, Map> offsets = offsetStorageReader.offsets(partitions); diff --git a/airbyte-cdk/java/airbyte-cdk/db-sources/src/main/java/io/airbyte/cdk/integrations/debezium/internals/mysql/MySqlDebeziumStateUtil.java b/airbyte-cdk/java/airbyte-cdk/db-sources/src/main/java/io/airbyte/cdk/integrations/debezium/internals/mysql/MySqlDebeziumStateUtil.java index a85d3c0acea8..9601ee9b481f 100644 --- a/airbyte-cdk/java/airbyte-cdk/db-sources/src/main/java/io/airbyte/cdk/integrations/debezium/internals/mysql/MySqlDebeziumStateUtil.java +++ b/airbyte-cdk/java/airbyte-cdk/db-sources/src/main/java/io/airbyte/cdk/integrations/debezium/internals/mysql/MySqlDebeziumStateUtil.java @@ -16,6 +16,7 @@ import io.airbyte.cdk.integrations.debezium.internals.AirbyteSchemaHistoryStorage.SchemaHistory; import io.airbyte.cdk.integrations.debezium.internals.DebeziumPropertiesManager; import io.airbyte.cdk.integrations.debezium.internals.DebeziumRecordPublisher; +import io.airbyte.cdk.integrations.debezium.internals.DebeziumStateUtil; import io.airbyte.cdk.integrations.debezium.internals.RelationalDbDebeziumPropertiesManager; import io.airbyte.commons.json.Jsons; import io.airbyte.protocol.models.v0.ConfiguredAirbyteCatalog; @@ -44,16 +45,12 @@ import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; import java.util.stream.Stream; -import org.apache.kafka.connect.json.JsonConverter; -import org.apache.kafka.connect.json.JsonConverterConfig; -import org.apache.kafka.connect.runtime.WorkerConfig; -import org.apache.kafka.connect.runtime.standalone.StandaloneConfig; import org.apache.kafka.connect.storage.FileOffsetBackingStore; import org.apache.kafka.connect.storage.OffsetStorageReaderImpl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class MySqlDebeziumStateUtil { +public class MySqlDebeziumStateUtil implements DebeziumStateUtil { private static final Logger LOGGER = LoggerFactory.getLogger(MySqlDebeziumStateUtil.class); @@ -179,36 +176,23 @@ public Optional savedOffset(final Properties baseP } private Optional parseSavedOffset(final Properties properties) { - FileOffsetBackingStore fileOffsetBackingStore = null; OffsetStorageReaderImpl offsetStorageReader = null; + try { - fileOffsetBackingStore = new FileOffsetBackingStore(); - final Map propertiesMap = Configuration.from(properties).asMap(); - propertiesMap.put(WorkerConfig.KEY_CONVERTER_CLASS_CONFIG, JsonConverter.class.getName()); - propertiesMap.put(WorkerConfig.VALUE_CONVERTER_CLASS_CONFIG, JsonConverter.class.getName()); - fileOffsetBackingStore.configure(new StandaloneConfig(propertiesMap)); - fileOffsetBackingStore.start(); - - final Map internalConverterConfig = Collections.singletonMap(JsonConverterConfig.SCHEMAS_ENABLE_CONFIG, "false"); - final JsonConverter keyConverter = new JsonConverter(); - keyConverter.configure(internalConverterConfig, true); - final JsonConverter valueConverter = new JsonConverter(); - valueConverter.configure(internalConverterConfig, false); + fileOffsetBackingStore = getFileOffsetBackingStore(properties); + offsetStorageReader = getOffsetStorageReader(fileOffsetBackingStore, properties); final MySqlConnectorConfig connectorConfig = new MySqlConnectorConfig(Configuration.from(properties)); final MySqlOffsetContext.Loader loader = new MySqlOffsetContext.Loader(connectorConfig); final Set partitions = Collections.singleton(new MySqlPartition(connectorConfig.getLogicalName(), properties.getProperty(DATABASE_NAME.name()))); - offsetStorageReader = new OffsetStorageReaderImpl(fileOffsetBackingStore, properties.getProperty("name"), keyConverter, - valueConverter); final OffsetReader offsetReader = new OffsetReader<>(offsetStorageReader, loader); final Map offsets = offsetReader.offsets(partitions); return extractStateAttributes(partitions, offsets); - } finally { LOGGER.info("Closing offsetStorageReader and fileOffsetBackingStore"); if (offsetStorageReader != null) { diff --git a/airbyte-cdk/java/airbyte-cdk/db-sources/src/main/java/io/airbyte/cdk/integrations/debezium/internals/postgres/PostgresDebeziumStateUtil.java b/airbyte-cdk/java/airbyte-cdk/db-sources/src/main/java/io/airbyte/cdk/integrations/debezium/internals/postgres/PostgresDebeziumStateUtil.java index 27ce985ae58f..174c03893fa2 100644 --- a/airbyte-cdk/java/airbyte-cdk/db-sources/src/main/java/io/airbyte/cdk/integrations/debezium/internals/postgres/PostgresDebeziumStateUtil.java +++ b/airbyte-cdk/java/airbyte-cdk/db-sources/src/main/java/io/airbyte/cdk/integrations/debezium/internals/postgres/PostgresDebeziumStateUtil.java @@ -15,6 +15,7 @@ import io.airbyte.cdk.db.jdbc.JdbcDatabase; import io.airbyte.cdk.integrations.debezium.internals.AirbyteFileOffsetBackingStore; import io.airbyte.cdk.integrations.debezium.internals.DebeziumPropertiesManager; +import io.airbyte.cdk.integrations.debezium.internals.DebeziumStateUtil; import io.airbyte.cdk.integrations.debezium.internals.RelationalDbDebeziumPropertiesManager; import io.airbyte.commons.json.Jsons; import io.airbyte.protocol.models.v0.ConfiguredAirbyteCatalog; @@ -39,10 +40,6 @@ import java.util.OptionalLong; import java.util.Properties; import java.util.Set; -import org.apache.kafka.connect.json.JsonConverter; -import org.apache.kafka.connect.json.JsonConverterConfig; -import org.apache.kafka.connect.runtime.WorkerConfig; -import org.apache.kafka.connect.runtime.standalone.StandaloneConfig; import org.apache.kafka.connect.storage.FileOffsetBackingStore; import org.apache.kafka.connect.storage.OffsetStorageReaderImpl; import org.postgresql.core.BaseConnection; @@ -56,7 +53,7 @@ * This class is inspired by Debezium's Postgres connector internal implementation on how it parses * the state */ -public class PostgresDebeziumStateUtil { +public class PostgresDebeziumStateUtil implements DebeziumStateUtil { private static final Logger LOGGER = LoggerFactory.getLogger(PostgresDebeziumStateUtil.class); @@ -152,6 +149,7 @@ private ChainedLogicalStreamBuilder addSlotOption(final String publicationName, } /** + * Loads the offset data from the saved Debezium offset file. * * @param properties Properties should contain the relevant properties like path to the debezium * state file, etc. It's assumed that the state file is already initialised with the saved @@ -159,34 +157,22 @@ private ChainedLogicalStreamBuilder addSlotOption(final String publicationName, * @return Returns the LSN that Airbyte has acknowledged in the source database server */ private OptionalLong parseSavedOffset(final Properties properties) { - FileOffsetBackingStore fileOffsetBackingStore = null; OffsetStorageReaderImpl offsetStorageReader = null; + try { - fileOffsetBackingStore = new FileOffsetBackingStore(); - final Map propertiesMap = Configuration.from(properties).asMap(); - propertiesMap.put(WorkerConfig.KEY_CONVERTER_CLASS_CONFIG, JsonConverter.class.getName()); - propertiesMap.put(WorkerConfig.VALUE_CONVERTER_CLASS_CONFIG, JsonConverter.class.getName()); - fileOffsetBackingStore.configure(new StandaloneConfig(propertiesMap)); - fileOffsetBackingStore.start(); - - final Map internalConverterConfig = Collections.singletonMap(JsonConverterConfig.SCHEMAS_ENABLE_CONFIG, "false"); - final JsonConverter keyConverter = new JsonConverter(); - keyConverter.configure(internalConverterConfig, true); - final JsonConverter valueConverter = new JsonConverter(); - valueConverter.configure(internalConverterConfig, false); + fileOffsetBackingStore = getFileOffsetBackingStore(properties); + offsetStorageReader = getOffsetStorageReader(fileOffsetBackingStore, properties); final PostgresConnectorConfig postgresConnectorConfig = new PostgresConnectorConfig(Configuration.from(properties)); final PostgresCustomLoader loader = new PostgresCustomLoader(postgresConnectorConfig); final Set partitions = Collections.singleton(new PostgresPartition(postgresConnectorConfig.getLogicalName(), properties.getProperty(DATABASE_NAME.name()))); - offsetStorageReader = new OffsetStorageReaderImpl(fileOffsetBackingStore, properties.getProperty("name"), keyConverter, - valueConverter); + final OffsetReader offsetReader = new OffsetReader<>(offsetStorageReader, loader); final Map offsets = offsetReader.offsets(partitions); return extractLsn(partitions, offsets, loader); - } finally { LOGGER.info("Closing offsetStorageReader and fileOffsetBackingStore"); if (offsetStorageReader != null) { diff --git a/airbyte-cdk/python/.bumpversion.cfg b/airbyte-cdk/python/.bumpversion.cfg index 60800be98686..5c95e3292e5c 100644 --- a/airbyte-cdk/python/.bumpversion.cfg +++ b/airbyte-cdk/python/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.51.27 +current_version = 0.51.33 commit = False [bumpversion:file:setup.py] diff --git a/airbyte-cdk/python/CHANGELOG.md b/airbyte-cdk/python/CHANGELOG.md index 1e60dab5907a..072102444006 100644 --- a/airbyte-cdk/python/CHANGELOG.md +++ b/airbyte-cdk/python/CHANGELOG.md @@ -1,5 +1,23 @@ # Changelog +## 0.51.33 +Vector DB CDK: Improve batching process + +## 0.51.32 +Introduce experimental ThreadBasedConcurrentStream + +## 0.51.31 +Fix initialize of token_expiry_is_time_of_expiration field + +## 0.51.30 +Add new token_expiry_is_time_of_expiration property for AbstractOauth2Authenticator for indicate that token's expiry_in is a time of expiration + +## 0.51.29 +Coerce read_records to iterable in http availabilty strategy + +## 0.51.28 +Add functionality enabling Page Number/Offset to be set on the first request + ## 0.51.27 Fix parsing of UUID fields in avro files diff --git a/airbyte-cdk/python/Dockerfile b/airbyte-cdk/python/Dockerfile index 0b4e988c3fee..bcbd838c40a9 100644 --- a/airbyte-cdk/python/Dockerfile +++ b/airbyte-cdk/python/Dockerfile @@ -10,7 +10,7 @@ RUN apk --no-cache upgrade \ && apk --no-cache add tzdata build-base # install airbyte-cdk -RUN pip install --prefix=/install airbyte-cdk==0.51.27 +RUN pip install --prefix=/install airbyte-cdk==0.51.33 # build a clean environment FROM base @@ -32,5 +32,5 @@ ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] # needs to be the same as CDK -LABEL io.airbyte.version=0.51.27 +LABEL io.airbyte.version=0.51.33 LABEL io.airbyte.name=airbyte/source-declarative-manifest diff --git a/airbyte-cdk/python/airbyte_cdk/destinations/vector_db_based/README.md b/airbyte-cdk/python/airbyte_cdk/destinations/vector_db_based/README.md index e7d557b7006b..b07b42e9457c 100644 --- a/airbyte-cdk/python/airbyte_cdk/destinations/vector_db_based/README.md +++ b/airbyte-cdk/python/airbyte_cdk/destinations/vector_db_based/README.md @@ -28,10 +28,10 @@ This is how the components interact: β””β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”Œβ–½β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚Writer β”‚ -β””β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”˜ -β”Œβ–½β”€β”€β”€β”€β”€β”€β”€β”β”Œβ–½β”€β”€β”€β”€β”€β”€β”€β”€β”β”Œβ–½β”€β”€β”€β”€β”€β”€β”β”Œβ–½β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” -β”‚Embedderβ”‚β”‚MyIndexerβ”‚β”‚Batcherβ”‚β”‚DocumentProcessorβ”‚ -β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +β””β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +β”Œβ–½β”€β”€β”€β”€β”€β”€β”€β”β”Œβ–½β”€β”€β”€β”€β”€β”€β”€β”€β”β”Œβ–½β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚Embedderβ”‚β”‚MyIndexerβ”‚β”‚DocumentProcessorβ”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` Normally, only the `MyDestination` class and the `MyIndexer` class has to be implemented specifically for the destination. The other classes are provided as is by the helpers. \ No newline at end of file diff --git a/airbyte-cdk/python/airbyte_cdk/destinations/vector_db_based/__init__.py b/airbyte-cdk/python/airbyte_cdk/destinations/vector_db_based/__init__.py index 5181cf76b4cd..5eec401c06f5 100644 --- a/airbyte-cdk/python/airbyte_cdk/destinations/vector_db_based/__init__.py +++ b/airbyte-cdk/python/airbyte_cdk/destinations/vector_db_based/__init__.py @@ -2,25 +2,29 @@ # Copyright (c) 2021 Airbyte, Inc., all rights reserved. # -from .batcher import Batcher -from .config import CohereEmbeddingConfigModel, FakeEmbeddingConfigModel, OpenAIEmbeddingConfigModel, ProcessingConfigModel +from .config import CohereEmbeddingConfigModel, FakeEmbeddingConfigModel, OpenAIEmbeddingConfigModel, FromFieldEmbeddingConfigModel, AzureOpenAIEmbeddingConfigModel, OpenAICompatibleEmbeddingConfigModel, ProcessingConfigModel from .document_processor import Chunk, DocumentProcessor from .embedder import CohereEmbedder, Embedder, FakeEmbedder, OpenAIEmbedder from .indexer import Indexer from .writer import Writer __all__ = [ - "Batcher", + "AzureOpenAIEmbedder", + "AzureOpenAIEmbeddingConfigModel", + "Chunk", + "CohereEmbedder", "CohereEmbeddingConfigModel", - "FakeEmbeddingConfigModel", - "OpenAIEmbeddingConfigModel", - "ProcessingConfigModel", "DocumentProcessor", - "Chunk", "Embedder", "FakeEmbedder", - "OpenAIEmbedder", - "CohereEmbedder", + "FakeEmbeddingConfigModel", + "FromFieldEmbedder", + "FromFieldEmbeddingConfigModel", "Indexer", + "OpenAICompatibleEmbedder", + "OpenAICompatibleEmbeddingConfigModel", + "OpenAIEmbedder", + "OpenAIEmbeddingConfigModel", + "ProcessingConfigModel", "Writer", ] diff --git a/airbyte-cdk/python/airbyte_cdk/destinations/vector_db_based/batcher.py b/airbyte-cdk/python/airbyte_cdk/destinations/vector_db_based/batcher.py deleted file mode 100644 index 1ba1d3852e6f..000000000000 --- a/airbyte-cdk/python/airbyte_cdk/destinations/vector_db_based/batcher.py +++ /dev/null @@ -1,34 +0,0 @@ -# -# Copyright (c) 2023 Airbyte, Inc., all rights reserved. -# - -from typing import Any, Callable, List - - -class Batcher: - """ - Batcher is a helper class that batches items and flushes them when the batch size is reached. - - It is used to batch records before writing them to the destination to make the embedding and loading process more efficient. - The Writer class uses the Batcher class to internally batch records before writing them to the destination - in most cases you don't need to use it directly, - except if you want to implement a custom writer. - """ - - def __init__(self, batch_size: int, flush_handler: Callable[[List[Any]], None]): - self.batch_size = batch_size - self.buffer: List[Any] = [] - self.flush_handler = flush_handler - - def add(self, item: Any) -> None: - self.buffer.append(item) - self._flush_if_necessary() - - def flush(self) -> None: - if len(self.buffer) == 0: - return - self.flush_handler(list(self.buffer)) - self.buffer.clear() - - def _flush_if_necessary(self) -> None: - if len(self.buffer) >= self.batch_size: - self.flush() diff --git a/airbyte-cdk/python/airbyte_cdk/destinations/vector_db_based/indexer.py b/airbyte-cdk/python/airbyte_cdk/destinations/vector_db_based/indexer.py index 7ce883cb3b7a..93328928d36f 100644 --- a/airbyte-cdk/python/airbyte_cdk/destinations/vector_db_based/indexer.py +++ b/airbyte-cdk/python/airbyte_cdk/destinations/vector_db_based/indexer.py @@ -35,9 +35,23 @@ def post_sync(self) -> List[AirbyteMessage]: return [] @abstractmethod - def index(self, document_chunks: List[Chunk], delete_ids: List[str]) -> None: + def index(self, document_chunks: List[Chunk], namespace: str, stream: str) -> None: """ - Index a list of document chunks. This method should be used to index the documents in the destination. The delete_ids parameter contains a list of record ids - all chunks with a record id in this list should be deleted from the destination. + Index a list of document chunks. + + This method should be used to index the documents in the destination. + All chunks belong to the stream and namespace specified in the parameters. + """ + pass + + @abstractmethod + def delete(self, delete_ids: List[str], namespace: str, stream: str) -> None: + """ + Delete document chunks belonging to certain record ids. + + This method should be used to delete documents from the destination. + The delete_ids parameter contains a list of record ids - all chunks with a record id in this list should be deleted from the destination. + All ids belong to the stream and namespace specified in the parameters. """ pass diff --git a/airbyte-cdk/python/airbyte_cdk/destinations/vector_db_based/writer.py b/airbyte-cdk/python/airbyte_cdk/destinations/vector_db_based/writer.py index 9e1d26df0e89..e54143722a40 100644 --- a/airbyte-cdk/python/airbyte_cdk/destinations/vector_db_based/writer.py +++ b/airbyte-cdk/python/airbyte_cdk/destinations/vector_db_based/writer.py @@ -3,23 +3,23 @@ # -from typing import Iterable, List +from collections import defaultdict +from typing import Dict, Iterable, List, Tuple -from airbyte_cdk.destinations.vector_db_based.batcher import Batcher from airbyte_cdk.destinations.vector_db_based.config import ProcessingConfigModel from airbyte_cdk.destinations.vector_db_based.document_processor import Chunk, DocumentProcessor from airbyte_cdk.destinations.vector_db_based.embedder import Embedder from airbyte_cdk.destinations.vector_db_based.indexer import Indexer -from airbyte_cdk.models import AirbyteMessage, AirbyteRecordMessage, ConfiguredAirbyteCatalog, Type +from airbyte_cdk.models import AirbyteMessage, ConfiguredAirbyteCatalog, Type class Writer: """ - The Writer class is orchestrating the document processor, the batcher, the embedder and the indexer: - * Incoming records are collected using the batcher - * The document processor generates documents from all records in the batch + The Writer class is orchestrating the document processor, the embedder and the indexer: + * Incoming records are passed through the document processor to generate documents + * One the configured batch size is reached, the documents are passed to the embedder to generate embeddings * The embedder embeds the documents - * The indexer indexes the resulting documents and their embeddings in the destination + * The indexer deletes old documents by the associated record id before indexing the new ones The destination connector is responsible to create a writer instance and pass the input messages iterable to the write method. The batch size can be configured by the destination connector to give the freedom of either letting the user configure it or hardcoding it to a sensible value depending on the destination. @@ -29,20 +29,25 @@ def __init__(self, processing_config: ProcessingConfigModel, indexer: Indexer, e self.processing_config = processing_config self.indexer = indexer self.embedder = embedder - self.batcher = Batcher(batch_size, lambda batch: self._process_batch(batch)) - - def _process_batch(self, batch: List[AirbyteRecordMessage]) -> None: - documents: List[Chunk] = [] - ids_to_delete = [] - for record in batch: - record_documents, record_id_to_delete = self.processor.process(record) - documents.extend(record_documents) - if record_id_to_delete is not None: - ids_to_delete.append(record_id_to_delete) - embeddings = self.embedder.embed_chunks(documents) - for i, document in enumerate(documents): - document.embedding = embeddings[i] - self.indexer.index(documents, ids_to_delete) + self.batch_size = batch_size + self._init_batch() + + def _init_batch(self) -> None: + self.documents: Dict[Tuple[str, str], List[Chunk]] = defaultdict(list) + self.ids_to_delete: Dict[Tuple[str, str], List[str]] = defaultdict(list) + self.number_of_documents = 0 + + def _process_batch(self) -> None: + for (namespace, stream), ids in self.ids_to_delete.items(): + self.indexer.delete(ids, namespace, stream) + + for (namespace, stream), documents in self.documents.items(): + embeddings = self.embedder.embed_chunks(documents) + for i, document in enumerate(documents): + document.embedding = embeddings[i] + self.indexer.index(documents, namespace, stream) + + self._init_batch() def write(self, configured_catalog: ConfiguredAirbyteCatalog, input_messages: Iterable[AirbyteMessage]) -> Iterable[AirbyteMessage]: self.processor = DocumentProcessor(self.processing_config, configured_catalog) @@ -51,9 +56,16 @@ def write(self, configured_catalog: ConfiguredAirbyteCatalog, input_messages: It if message.type == Type.STATE: # Emitting a state message indicates that all records which came before it have been written to the destination. So we flush # the queue to ensure writes happen, then output the state message to indicate it's safe to checkpoint state - self.batcher.flush() + self._process_batch() yield message elif message.type == Type.RECORD: - self.batcher.add(message.record) - self.batcher.flush() + record_documents, record_id_to_delete = self.processor.process(message.record) + self.documents[(message.record.namespace, message.record.stream)].extend(record_documents) + if record_id_to_delete is not None: + self.ids_to_delete[(message.record.namespace, message.record.stream)].append(record_id_to_delete) + self.number_of_documents += len(record_documents) + if self.number_of_documents >= self.batch_size: + self._process_batch() + + self._process_batch() yield from self.indexer.post_sync() diff --git a/airbyte-cdk/python/airbyte_cdk/sources/abstract_source.py b/airbyte-cdk/python/airbyte_cdk/sources/abstract_source.py index 79b0b6852aa8..ffa23e733b97 100644 --- a/airbyte-cdk/python/airbyte_cdk/sources/abstract_source.py +++ b/airbyte-cdk/python/airbyte_cdk/sources/abstract_source.py @@ -175,13 +175,7 @@ def _read_stream( "cursor_field": configured_stream.cursor_field, }, ) - logger.debug( - f"Syncing stream instance: {stream_instance.name}", - extra={ - "primary_key": stream_instance.primary_key, - "cursor_field": stream_instance.cursor_field, - }, - ) + stream_instance.log_stream_sync_configuration() use_incremental = configured_stream.sync_mode == SyncMode.incremental and stream_instance.supports_incremental if use_incremental: @@ -295,26 +289,14 @@ def _read_full_refresh( configured_stream: ConfiguredAirbyteStream, internal_config: InternalConfig, ) -> Iterator[AirbyteMessage]: - slices = stream_instance.stream_slices(sync_mode=SyncMode.full_refresh, cursor_field=configured_stream.cursor_field) - logger.debug( - f"Processing stream slices for {configured_stream.stream.name} (sync_mode: full_refresh)", extra={"stream_slices": slices} - ) total_records_counter = 0 - for _slice in slices: - if self._slice_logger.should_log_slice_message(logger): - yield self._slice_logger.create_slice_log_message(_slice) - record_data_or_messages = stream_instance.read_records( - stream_slice=_slice, - sync_mode=SyncMode.full_refresh, - cursor_field=configured_stream.cursor_field, - ) - for record_data_or_message in record_data_or_messages: - message = self._get_message(record_data_or_message, stream_instance) - yield message - if message.type == MessageType.RECORD: - total_records_counter += 1 - if internal_config.is_limit_reached(total_records_counter): - return + for record_data_or_message in stream_instance.read_full_refresh(configured_stream.cursor_field, logger, self._slice_logger): + message = self._get_message(record_data_or_message, stream_instance) + yield message + if message.type == MessageType.RECORD: + total_records_counter += 1 + if internal_config.is_limit_reached(total_records_counter): + return def _checkpoint_state(self, stream: Stream, stream_state: Mapping[str, Any], state_manager: ConnectorStateManager) -> AirbyteMessage: # First attempt to retrieve the current state using the stream's state property. We receive an AttributeError if the state diff --git a/airbyte-cdk/python/airbyte_cdk/sources/declarative/auth/oauth.py b/airbyte-cdk/python/airbyte_cdk/sources/declarative/auth/oauth.py index a7621693f0a2..4e83c570be6e 100644 --- a/airbyte-cdk/python/airbyte_cdk/sources/declarative/auth/oauth.py +++ b/airbyte-cdk/python/airbyte_cdk/sources/declarative/auth/oauth.py @@ -3,7 +3,7 @@ # from dataclasses import InitVar, dataclass, field -from typing import Any, List, Mapping, Optional, Tuple, Union +from typing import Any, List, Mapping, Optional, Union import pendulum from airbyte_cdk.sources.declarative.auth.declarative_authenticator import DeclarativeAuthenticator @@ -32,6 +32,7 @@ class DeclarativeOauth2Authenticator(AbstractOauth2Authenticator, DeclarativeAut scopes (Optional[List[str]]): The scopes to request token_expiry_date (Optional[Union[InterpolatedString, str]]): The access token expiration date token_expiry_date_format str: format of the datetime; provide it if expires_in is returned in datetime instead of seconds + token_expiry_is_time_of_expiration bool: set True it if expires_in is returned as time of expiration instead of the number seconds until expiration refresh_request_body (Optional[Mapping[str, Any]]): The request body to send in the refresh request grant_type: The grant_type to request for access_token. If set to refresh_token, the refresh_token parameter has to be provided message_repository (MessageRepository): the message repository used to emit logs on HTTP requests @@ -47,6 +48,7 @@ class DeclarativeOauth2Authenticator(AbstractOauth2Authenticator, DeclarativeAut token_expiry_date: Optional[Union[InterpolatedString, str]] = None _token_expiry_date: pendulum.DateTime = field(init=False, repr=False, default=None) token_expiry_date_format: str = None + token_expiry_is_time_of_expiration: bool = False access_token_name: Union[InterpolatedString, str] = "access_token" expires_in_name: Union[InterpolatedString, str] = "expires_in" refresh_request_body: Optional[Mapping[str, Any]] = None @@ -100,35 +102,11 @@ def get_grant_type(self) -> InterpolatedString: def get_refresh_request_body(self) -> Mapping[str, Any]: return self._refresh_request_body.eval(self.config) - def refresh_access_token(self) -> Tuple[str, Any]: - """ - This overrides the parent class method because the parent class assumes the "expires_in" field is always an int representing - seconds till token expiry. - - However, this class provides the ability to determine the expiry date of an access token either by using (pseudocode): - * expiry_datetime = datetime.now() + seconds_till_access_token_expiry # in this option we have to calculate expiry timestamp, OR - * expiry_datetime = parse(response.body["expires_at"]) # in this option the API tells us exactly when access token expires - - :return: a tuple of (access_token, either token_lifespan_in_seconds or datetime_of_token_expiry) - - # TODO this is a hack and should be better encapsulated/enabled by the AbstractOAuthAuthenticator i.e: that class should have - a method which takes the HTTP response and returns a timestamp for when the access token will expire which subclasses - such as this one can override or just configure directly. - """ - response_json = self._get_refresh_access_token_response() - return response_json[self.get_access_token_name()], response_json[self.get_expires_in_name()] - def get_token_expiry_date(self) -> pendulum.DateTime: return self._token_expiry_date def set_token_expiry_date(self, value: Union[str, int]): - if self.token_expiry_date_format: - self._token_expiry_date = pendulum.from_format(value, self.token_expiry_date_format) - else: - try: - self._token_expiry_date = pendulum.now().add(seconds=int(float(value))) - except ValueError: - raise ValueError(f"Invalid token expiry value {value}; a number is required.") + self._token_expiry_date = self._parse_token_expiration_date(value) @property def access_token(self) -> str: diff --git a/airbyte-cdk/python/airbyte_cdk/sources/declarative/declarative_component_schema.yaml b/airbyte-cdk/python/airbyte_cdk/sources/declarative/declarative_component_schema.yaml index 87c1ef911e18..ec30c7a8b908 100644 --- a/airbyte-cdk/python/airbyte_cdk/sources/declarative/declarative_component_schema.yaml +++ b/airbyte-cdk/python/airbyte_cdk/sources/declarative/declarative_component_schema.yaml @@ -1626,6 +1626,11 @@ definitions: examples: - 100 - "{{ config['page_size'] }}" + inject_on_first_request: + title: Inject Offset + description: Using the `offset` with value `0` during the first request + type: boolean + default: false $parameters: type: object additionalProperties: true @@ -1654,6 +1659,11 @@ definitions: examples: - 0 - 1 + inject_on_first_request: + title: Inject Page Number + description: Using the `page number` with value defined by `start_from_page` during the first request + type: boolean + default: false $parameters: type: object additionalProperties: true diff --git a/airbyte-cdk/python/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py b/airbyte-cdk/python/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py index f2fadadffa82..72043e017497 100644 --- a/airbyte-cdk/python/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py +++ b/airbyte-cdk/python/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py @@ -34,13 +34,14 @@ def eval(self, config: Config, **additional_parameters): :param additional_parameters: Optional parameters used for interpolation :return: The interpolated string """ - interpolated_values = { - self._interpolation.eval(name, config, parameters=self._parameters, **additional_parameters): self._eval( - value, config, **additional_parameters - ) + valid_key_types = additional_parameters.pop("valid_key_types", (str,)) + valid_value_types = additional_parameters.pop("valid_value_types", None) + return { + self._interpolation.eval( + name, config, valid_types=valid_key_types, parameters=self._parameters, **additional_parameters + ): self._eval(value, config, valid_types=valid_value_types, **additional_parameters) for name, value in self.mapping.items() } - return interpolated_values def _eval(self, value, config, **kwargs): # The values in self._mapping can be of Any type diff --git a/airbyte-cdk/python/airbyte_cdk/sources/declarative/interpolation/jinja.py b/airbyte-cdk/python/airbyte_cdk/sources/declarative/interpolation/jinja.py index 5b3a9e67eb86..91d52c7579f4 100644 --- a/airbyte-cdk/python/airbyte_cdk/sources/declarative/interpolation/jinja.py +++ b/airbyte-cdk/python/airbyte_cdk/sources/declarative/interpolation/jinja.py @@ -3,7 +3,7 @@ # import ast -from typing import Optional +from typing import Any, Optional, Tuple, Type from airbyte_cdk.sources.declarative.interpolation.filters import filters from airbyte_cdk.sources.declarative.interpolation.interpolation import Interpolation @@ -58,7 +58,14 @@ def __init__(self): for builtin in self.RESTRICTED_BUILTIN_FUNCTIONS: self._environment.globals.pop(builtin, None) - def eval(self, input_str: str, config: Config, default: Optional[str] = None, **additional_parameters): + def eval( + self, + input_str: str, + config: Config, + default: Optional[str] = None, + valid_types: Optional[Tuple[Type[Any]]] = None, + **additional_parameters, + ): context = {"config": config, **additional_parameters} for alias, equivalent in self.ALIASES.items(): @@ -74,20 +81,23 @@ def eval(self, input_str: str, config: Config, default: Optional[str] = None, ** if isinstance(input_str, str): result = self._eval(input_str, context) if result: - return self._literal_eval(result) + return self._literal_eval(result, valid_types) else: # If input is not a string, return it as is raise Exception(f"Expected a string. got {input_str}") except UndefinedError: pass # If result is empty or resulted in an undefined error, evaluate and return the default string - return self._literal_eval(self._eval(default, context)) + return self._literal_eval(self._eval(default, context), valid_types) - def _literal_eval(self, result): + def _literal_eval(self, result, valid_types: Optional[Tuple[Type[Any]]]): try: - return ast.literal_eval(result) + evaluated = ast.literal_eval(result) except (ValueError, SyntaxError): return result + if not valid_types or (valid_types and isinstance(evaluated, valid_types)): + return evaluated + return result def _eval(self, s: str, context): try: diff --git a/airbyte-cdk/python/airbyte_cdk/sources/declarative/models/declarative_component_schema.py b/airbyte-cdk/python/airbyte_cdk/sources/declarative/models/declarative_component_schema.py index c790291e9fc0..4b7b4f5542a4 100644 --- a/airbyte-cdk/python/airbyte_cdk/sources/declarative/models/declarative_component_schema.py +++ b/airbyte-cdk/python/airbyte_cdk/sources/declarative/models/declarative_component_schema.py @@ -551,6 +551,11 @@ class OffsetIncrement(BaseModel): examples=[100, "{{ config['page_size'] }}"], title='Limit', ) + inject_on_first_request: Optional[bool] = Field( + False, + description='Using the `offset` with value `0` during the first request', + title='Inject Offset', + ) parameters: Optional[Dict[str, Any]] = Field(None, alias='$parameters') @@ -568,6 +573,11 @@ class PageIncrement(BaseModel): examples=[0, 1], title='Start From Page', ) + inject_on_first_request: Optional[bool] = Field( + False, + description='Using the `page number` with value defined by `start_from_page` during the first request', + title='Inject Page Number', + ) parameters: Optional[Dict[str, Any]] = Field(None, alias='$parameters') diff --git a/airbyte-cdk/python/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py b/airbyte-cdk/python/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py index 4025b752ed88..763a7e22065f 100644 --- a/airbyte-cdk/python/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +++ b/airbyte-cdk/python/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py @@ -791,7 +791,7 @@ def create_oauth_authenticator(self, model: OAuthAuthenticatorModel, config: Con token_expiry_date_format=model.token_expiry_date_format, message_repository=self._message_repository, ) - # ignore type error beause fixing it would have a lot of dependencies, revisit later + # ignore type error because fixing it would have a lot of dependencies, revisit later return DeclarativeOauth2Authenticator( # type: ignore access_token_name=model.access_token_name or "access_token", client_id=model.client_id, @@ -803,6 +803,7 @@ def create_oauth_authenticator(self, model: OAuthAuthenticatorModel, config: Con scopes=model.scopes, token_expiry_date=model.token_expiry_date, token_expiry_date_format=model.token_expiry_date_format, # type: ignore + token_expiry_is_time_of_expiration=bool(model.token_expiry_date_format), token_refresh_endpoint=model.token_refresh_endpoint, config=config, parameters=model.parameters or {}, diff --git a/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py b/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py index 5f4bf69dd306..0b13bbc141a7 100644 --- a/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +++ b/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py @@ -2,7 +2,7 @@ # Copyright (c) 2023 Airbyte, Inc., all rights reserved. # -from dataclasses import InitVar, dataclass, field +from dataclasses import InitVar, dataclass from typing import Any, List, Mapping, Optional, Union import requests @@ -91,7 +91,6 @@ class DefaultPaginator(Paginator): url_base: Union[InterpolatedString, str] parameters: InitVar[Mapping[str, Any]] decoder: Decoder = JsonDecoder(parameters={}) - _token: Optional[Any] = field(init=False, repr=False, default=None) page_size_option: Optional[RequestOption] = None page_token_option: Optional[Union[RequestPath, RequestOption]] = None @@ -100,6 +99,7 @@ def __post_init__(self, parameters: Mapping[str, Any]): raise ValueError("page_size_option cannot be set if the pagination strategy does not have a page_size") if isinstance(self.url_base, str): self.url_base = InterpolatedString(string=self.url_base, parameters=parameters) + self._token = self.pagination_strategy.initial_token def next_page_token(self, response: requests.Response, last_records: List[Record]) -> Optional[Mapping[str, Any]]: self._token = self.pagination_strategy.next_page_token(response, last_records) @@ -160,7 +160,7 @@ def _get_request_options(self, option_type: RequestOptionType) -> Mapping[str, A if ( self.page_token_option - and self._token + and self._token is not None and isinstance(self.page_token_option, RequestOption) and self.page_token_option.inject_into == option_type ): diff --git a/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py b/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py index 1de2899a1201..bea36fc8e323 100644 --- a/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py +++ b/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py @@ -40,6 +40,10 @@ def __post_init__(self, parameters: Mapping[str, Any]): if isinstance(self.stop_condition, str): self.stop_condition = InterpolatedBoolean(condition=self.stop_condition, parameters=parameters) + @property + def initial_token(self) -> Optional[Any]: + return None + def next_page_token(self, response: requests.Response, last_records: List[Mapping[str, Any]]) -> Optional[Any]: decoded_response = self.decoder.decode(response) diff --git a/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py b/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py index 261258201242..4a3224a4b427 100644 --- a/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py +++ b/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py @@ -40,6 +40,7 @@ class OffsetIncrement(PaginationStrategy): page_size: Optional[Union[str, int]] parameters: InitVar[Mapping[str, Any]] decoder: Decoder = JsonDecoder(parameters={}) + inject_on_first_request: bool = False def __post_init__(self, parameters: Mapping[str, Any]): self._offset = 0 @@ -49,6 +50,12 @@ def __post_init__(self, parameters: Mapping[str, Any]): else: self._page_size = None + @property + def initial_token(self) -> Optional[Any]: + if self.inject_on_first_request: + return self._offset + return None + def next_page_token(self, response: requests.Response, last_records: List[Mapping[str, Any]]) -> Optional[Any]: decoded_response = self.decoder.decode(response) diff --git a/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py b/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py index 546592a9427a..64216e016eea 100644 --- a/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py +++ b/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py @@ -22,10 +22,17 @@ class PageIncrement(PaginationStrategy): page_size: Optional[int] parameters: InitVar[Mapping[str, Any]] start_from_page: int = 0 + inject_on_first_request: bool = False def __post_init__(self, parameters: Mapping[str, Any]): self._page = self.start_from_page + @property + def initial_token(self) -> Optional[Any]: + if self.inject_on_first_request: + return self._page + return None + def next_page_token(self, response: requests.Response, last_records: List[Mapping[str, Any]]) -> Optional[Any]: # Stop paginating when there are fewer records than the page size or the current page has no records if (self.page_size and len(last_records) < self.page_size) or len(last_records) == 0: diff --git a/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py b/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py index e8b00e54b5d3..fefe885bbc05 100644 --- a/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py +++ b/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py @@ -15,6 +15,13 @@ class PaginationStrategy: Defines how to get the next page token """ + @property + @abstractmethod + def initial_token(self) -> Optional[Any]: + """ + Return the initial value of the token + """ + @abstractmethod def next_page_token(self, response: requests.Response, last_records: List[Mapping[str, Any]]) -> Optional[Any]: """ diff --git a/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py b/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py index c901c88d4590..48ef8d5edf92 100644 --- a/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py +++ b/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py @@ -3,7 +3,7 @@ # from dataclasses import InitVar, dataclass, field -from typing import Any, Mapping, Optional, Union +from typing import Any, Mapping, Optional, Tuple, Type, Union from airbyte_cdk.sources.declarative.interpolation.interpolated_mapping import InterpolatedMapping from airbyte_cdk.sources.declarative.interpolation.interpolated_string import InterpolatedString @@ -31,7 +31,12 @@ def __post_init__(self, parameters: Mapping[str, Any]): self._interpolator = InterpolatedMapping(self._request_inputs, parameters=parameters) def eval_request_inputs( - self, stream_state: StreamState, stream_slice: Optional[StreamSlice] = None, next_page_token: Mapping[str, Any] = None + self, + stream_state: StreamState, + stream_slice: Optional[StreamSlice] = None, + next_page_token: Mapping[str, Any] = None, + valid_key_types: Tuple[Type[Any]] = None, + valid_value_types: Tuple[Type[Any]] = None, ) -> Mapping[str, Any]: """ Returns the request inputs to set on an outgoing HTTP request @@ -39,10 +44,14 @@ def eval_request_inputs( :param stream_state: The stream state :param stream_slice: The stream slice :param next_page_token: The pagination token + :param valid_key_types: A tuple of types that the interpolator should allow + :param valid_value_types: A tuple of types that the interpolator should allow :return: The request inputs to set on an outgoing HTTP request """ kwargs = {"stream_state": stream_state, "stream_slice": stream_slice, "next_page_token": next_page_token} - interpolated_value = self._interpolator.eval(self.config, **kwargs) + interpolated_value = self._interpolator.eval( + self.config, valid_key_types=valid_key_types, valid_value_types=valid_value_types, **kwargs + ) if isinstance(interpolated_value, dict): non_null_tokens = {k: v for k, v in interpolated_value.items() if v is not None} diff --git a/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py b/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py index 050927a80198..0f1b6e3daf3e 100644 --- a/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +++ b/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py @@ -14,6 +14,7 @@ from airbyte_cdk.sources.declarative.types import Config, StreamSlice, StreamState RequestInput = Union[str, Mapping[str, str]] +ValidRequestTypes = (str, list) @dataclass @@ -69,7 +70,9 @@ def get_request_params( stream_slice: Optional[StreamSlice] = None, next_page_token: Optional[Mapping[str, Any]] = None, ) -> MutableMapping[str, Any]: - interpolated_value = self._parameter_interpolator.eval_request_inputs(stream_state, stream_slice, next_page_token) + interpolated_value = self._parameter_interpolator.eval_request_inputs( + stream_state, stream_slice, next_page_token, valid_key_types=(str,), valid_value_types=ValidRequestTypes + ) if isinstance(interpolated_value, dict): return interpolated_value return {} @@ -90,7 +93,13 @@ def get_request_body_data( stream_slice: Optional[StreamSlice] = None, next_page_token: Optional[Mapping[str, Any]] = None, ) -> Optional[Union[Mapping, str]]: - return self._body_data_interpolator.eval_request_inputs(stream_state, stream_slice, next_page_token) + return self._body_data_interpolator.eval_request_inputs( + stream_state, + stream_slice, + next_page_token, + valid_key_types=(str,), + valid_value_types=ValidRequestTypes, + ) def get_request_body_json( self, diff --git a/airbyte-cdk/python/airbyte_cdk/sources/streams/__init__.py b/airbyte-cdk/python/airbyte_cdk/sources/streams/__init__.py index 0df89f871a52..9326fd1bdca7 100644 --- a/airbyte-cdk/python/airbyte_cdk/sources/streams/__init__.py +++ b/airbyte-cdk/python/airbyte_cdk/sources/streams/__init__.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2021 Airbyte, Inc., all rights reserved. +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. # # Initialize Streams Package diff --git a/airbyte-integrations/connectors/source-pokeapi/unit_tests/unit_test.py b/airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/__init__.py similarity index 57% rename from airbyte-integrations/connectors/source-pokeapi/unit_tests/unit_test.py rename to airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/__init__.py index 219ae0142c72..c941b3045795 100644 --- a/airbyte-integrations/connectors/source-pokeapi/unit_tests/unit_test.py +++ b/airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/__init__.py @@ -1,7 +1,3 @@ # # Copyright (c) 2023 Airbyte, Inc., all rights reserved. # - - -def test_example_method(): - assert True diff --git a/airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/abstract_stream.py b/airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/abstract_stream.py new file mode 100644 index 000000000000..c394cb7621e7 --- /dev/null +++ b/airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/abstract_stream.py @@ -0,0 +1,83 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + +from abc import ABC, abstractmethod +from typing import Any, Iterable, Mapping, Optional + +from airbyte_cdk.models import AirbyteStream +from airbyte_cdk.sources.streams.concurrent.availability_strategy import StreamAvailability +from airbyte_cdk.sources.streams.concurrent.partitions.record import Record +from deprecated.classic import deprecated + + +@deprecated("This class is experimental. Use at your own risk.") +class AbstractStream(ABC): + """ + AbstractStream is an experimental interface for streams developed as part of the Concurrent CDK. + This interface is not yet stable and may change in the future. Use at your own risk. + + Why create a new interface instead of adding concurrency capabilities the existing Stream? + We learnt a lot since the initial design of the Stream interface, and we wanted to take the opportunity to improve. + + High level, the changes we are targeting are: + - Removing superfluous or leaky parameters from the methods' interfaces + - Using composition instead of inheritance to add new capabilities + + To allow us to iterate fast while ensuring backwards compatibility, we are creating a new interface with a facade object that will bridge the old and the new interfaces. + Source connectors that wish to leverage concurrency need to implement this new interface. An example will be available shortly + + Current restrictions on sources that implement this interface. Not all of these restrictions will be lifted in the future, but most will as we iterate on the design. + - Only full refresh is supported. This will be addressed in the future. + - The read method does not accept a cursor_field. Streams must be internally aware of the cursor field to use. User-defined cursor fields can be implemented by modifying the connector's main method to instantiate the streams with the configured cursor field. + - Streams cannot return user-friendly messages by overriding Stream.get_error_display_message. This will be addressed in the future. + - The Stream's behavior cannot depend on a namespace + - TypeTransformer is not supported. This will be addressed in the future. + - Nested cursor and primary keys are not supported + """ + + @abstractmethod + def read(self) -> Iterable[Record]: + """ + Read a stream in full refresh mode + :return: The stream's records + """ + + @property + @abstractmethod + def name(self) -> str: + """ + :return: The stream name + """ + + @property + @abstractmethod + def cursor_field(self) -> Optional[str]: + """ + Override to return the default cursor field used by this stream e.g: an API entity might always use created_at as the cursor field. + :return: The name of the field used as a cursor. Nested cursor fields are not supported. + """ + + @abstractmethod + def check_availability(self) -> StreamAvailability: + """ + :return: The stream's availability + """ + + @abstractmethod + def get_json_schema(self) -> Mapping[str, Any]: + """ + :return: A dict of the JSON schema representing this stream. + """ + + @abstractmethod + def as_airbyte_stream(self) -> AirbyteStream: + """ + :return: A dict of the JSON schema representing this stream. + """ + + @abstractmethod + def log_stream_sync_configuration(self) -> None: + """ + Logs the stream's configuration for debugging purposes. + """ diff --git a/airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/adapters.py b/airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/adapters.py new file mode 100644 index 000000000000..c71bb8f12872 --- /dev/null +++ b/airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/adapters.py @@ -0,0 +1,329 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + +import copy +import json +import logging +from functools import lru_cache +from typing import Any, Iterable, List, Mapping, Optional, Tuple, Union + +from airbyte_cdk.models import AirbyteStream, SyncMode +from airbyte_cdk.sources import AbstractSource, Source +from airbyte_cdk.sources.message import MessageRepository +from airbyte_cdk.sources.streams import Stream +from airbyte_cdk.sources.streams.availability_strategy import AvailabilityStrategy +from airbyte_cdk.sources.streams.concurrent.abstract_stream import AbstractStream +from airbyte_cdk.sources.streams.concurrent.availability_strategy import ( + AbstractAvailabilityStrategy, + StreamAvailability, + StreamAvailable, + StreamUnavailable, +) +from airbyte_cdk.sources.streams.concurrent.exceptions import ExceptionWithDisplayMessage +from airbyte_cdk.sources.streams.concurrent.partitions.partition import Partition +from airbyte_cdk.sources.streams.concurrent.partitions.partition_generator import PartitionGenerator +from airbyte_cdk.sources.streams.concurrent.partitions.record import Record +from airbyte_cdk.sources.streams.concurrent.thread_based_concurrent_stream import ThreadBasedConcurrentStream +from airbyte_cdk.sources.streams.core import StreamData +from airbyte_cdk.sources.utils.slice_logger import SliceLogger +from deprecated.classic import deprecated + +""" +This module contains adapters to help enabling concurrency on Stream objects without needing to migrate to AbstractStream +""" + + +@deprecated("This class is experimental. Use at your own risk.") +class StreamFacade(Stream): + """ + The StreamFacade is a Stream that wraps an AbstractStream and exposes it as a Stream. + + All methods either delegate to the wrapped AbstractStream or provide a default implementation. + The default implementations define restrictions imposed on Streams migrated to the new interface. For instance, only source-defined cursors are supported. + """ + + @classmethod + def create_from_stream(cls, stream: Stream, source: AbstractSource, logger: logging.Logger, max_workers: int) -> Stream: + """ + Create a ConcurrentStream from a Stream object. + :param source: The source + :param stream: The stream + :param max_workers: The maximum number of worker thread to use + :return: + """ + pk = cls._get_primary_key_from_stream(stream.primary_key) + cursor_field = cls._get_cursor_field_from_stream(stream) + + if not source.message_repository: + raise ValueError( + "A message repository is required to emit non-record messages. Please set the message repository on the source." + ) + + message_repository = source.message_repository + return StreamFacade( + ThreadBasedConcurrentStream( + partition_generator=StreamPartitionGenerator(stream, message_repository), + max_workers=max_workers, + name=stream.name, + json_schema=stream.get_json_schema(), + availability_strategy=StreamAvailabilityStrategy(stream, source), + primary_key=pk, + cursor_field=cursor_field, + slice_logger=source._slice_logger, + message_repository=message_repository, + logger=logger, + ) + ) + + @classmethod + def _get_primary_key_from_stream(cls, stream_primary_key: Optional[Union[str, List[str], List[List[str]]]]) -> List[str]: + if stream_primary_key is None: + return [] + elif isinstance(stream_primary_key, str): + return [stream_primary_key] + elif isinstance(stream_primary_key, list): + if len(stream_primary_key) > 0 and all(isinstance(k, str) for k in stream_primary_key): + return stream_primary_key # type: ignore # We verified all items in the list are strings + else: + raise ValueError(f"Nested primary keys are not supported. Found {stream_primary_key}") + else: + raise ValueError(f"Invalid type for primary key: {stream_primary_key}") + + @classmethod + def _get_cursor_field_from_stream(cls, stream: Stream) -> Optional[str]: + if isinstance(stream.cursor_field, list): + if len(stream.cursor_field) > 1: + raise ValueError(f"Nested cursor fields are not supported. Got {stream.cursor_field} for {stream.name}") + elif len(stream.cursor_field) == 0: + return None + else: + return stream.cursor_field[0] + else: + return stream.cursor_field + + def __init__(self, stream: AbstractStream): + """ + :param stream: The underlying AbstractStream + """ + self._abstract_stream = stream + + def read_full_refresh( + self, + cursor_field: Optional[List[str]], + logger: logging.Logger, + slice_logger: SliceLogger, + ) -> Iterable[StreamData]: + """ + Read full refresh. Delegate to the underlying AbstractStream, ignoring all the parameters + :param cursor_field: (ignored) + :param logger: (ignored) + :param slice_logger: (ignored) + :return: Iterable of StreamData + """ + for record in self._abstract_stream.read(): + yield record.data + + def read_records( + self, + sync_mode: SyncMode, + cursor_field: Optional[List[str]] = None, + stream_slice: Optional[Mapping[str, Any]] = None, + stream_state: Optional[Mapping[str, Any]] = None, + ) -> Iterable[StreamData]: + if sync_mode == SyncMode.full_refresh: + for record in self._abstract_stream.read(): + yield record.data + else: + # Incremental reads are not supported + raise NotImplementedError + + @property + def name(self) -> str: + return self._abstract_stream.name + + @property + def primary_key(self) -> Optional[Union[str, List[str], List[List[str]]]]: + # This method is not expected to be called directly. It is only implemented for backward compatibility with the old interface + return self.as_airbyte_stream().source_defined_primary_key # type: ignore # source_defined_primary_key is known to be an Optional[List[List[str]]] + + @property + def cursor_field(self) -> Union[str, List[str]]: + if self._abstract_stream.cursor_field is None: + return [] + else: + return self._abstract_stream.cursor_field + + @property + def source_defined_cursor(self) -> bool: + # Streams must be aware of their cursor at instantiation time + return True + + @lru_cache(maxsize=None) + def get_json_schema(self) -> Mapping[str, Any]: + return self._abstract_stream.get_json_schema() + + @property + def supports_incremental(self) -> bool: + # Only full refresh is supported + return False + + def check_availability(self, logger: logging.Logger, source: Optional["Source"] = None) -> Tuple[bool, Optional[str]]: + """ + Verifies the stream is available. Delegates to the underlying AbstractStream and ignores the parameters + :param logger: (ignored) + :param source: (ignored) + :return: + """ + availability = self._abstract_stream.check_availability() + return availability.is_available(), availability.message() + + def get_error_display_message(self, exception: BaseException) -> Optional[str]: + """ + Retrieves the user-friendly display message that corresponds to an exception. + This will be called when encountering an exception while reading records from the stream, and used to build the AirbyteTraceMessage. + + A display message will be returned if the exception is an instance of ExceptionWithDisplayMessage. + + :param exception: The exception that was raised + :return: A user-friendly message that indicates the cause of the error + """ + if isinstance(exception, ExceptionWithDisplayMessage): + return exception.display_message + else: + return None + + def as_airbyte_stream(self) -> AirbyteStream: + return self._abstract_stream.as_airbyte_stream() + + def log_stream_sync_configuration(self) -> None: + self._abstract_stream.log_stream_sync_configuration() + + +class StreamPartition(Partition): + """ + This class acts as an adapter between the new Partition interface and the Stream's stream_slice interface + + StreamPartitions are instantiated from a Stream and a stream_slice. + + This class can be used to help enable concurrency on existing connectors without having to rewrite everything as AbstractStream. + In the long-run, it would be preferable to update the connectors, but we don't have the tooling or need to justify the effort at this time. + """ + + def __init__(self, stream: Stream, _slice: Optional[Mapping[str, Any]], message_repository: MessageRepository): + """ + :param stream: The stream to delegate to + :param _slice: The partition's stream_slice + :param message_repository: The message repository to use to emit non-record messages + """ + self._stream = stream + self._slice = _slice + self._message_repository = message_repository + + def read(self) -> Iterable[Record]: + """ + Read messages from the stream. + If the StreamData is a Mapping, it will be converted to a Record. + Otherwise, the message will be emitted on the message repository. + """ + try: + for record_data in self._stream.read_records(sync_mode=SyncMode.full_refresh, stream_slice=copy.deepcopy(self._slice)): + if isinstance(record_data, Mapping): + yield Record(record_data) + else: + self._message_repository.emit_message(record_data) + except Exception as e: + display_message = self._stream.get_error_display_message(e) + if display_message: + raise ExceptionWithDisplayMessage(display_message) from e + else: + raise e + + def to_slice(self) -> Optional[Mapping[str, Any]]: + return self._slice + + def __hash__(self) -> int: + if self._slice: + # Convert the slice to a string so that it can be hashed + s = json.dumps(self._slice, sort_keys=True) + return hash((self._stream.name, s)) + else: + return hash(self._stream.name) + + def __repr__(self) -> str: + return f"StreamPartition({self._stream.name}, {self._slice})" + + +class StreamPartitionGenerator(PartitionGenerator): + """ + This class acts as an adapter between the new PartitionGenerator and Stream.stream_slices + + This class can be used to help enable concurrency on existing connectors without having to rewrite everything as AbstractStream. + In the long-run, it would be preferable to update the connectors, but we don't have the tooling or need to justify the effort at this time. + """ + + def __init__(self, stream: Stream, message_repository: MessageRepository): + """ + :param stream: The stream to delegate to + :param message_repository: The message repository to use to emit non-record messages + """ + self.message_repository = message_repository + self._stream = stream + + def generate(self, sync_mode: SyncMode) -> Iterable[Partition]: + for s in self._stream.stream_slices(sync_mode=sync_mode): + yield StreamPartition(self._stream, copy.deepcopy(s), self.message_repository) + + +@deprecated("This class is experimental. Use at your own risk.") +class AvailabilityStrategyFacade(AvailabilityStrategy): + def __init__(self, abstract_availability_strategy: AbstractAvailabilityStrategy): + self._abstract_availability_strategy = abstract_availability_strategy + + def check_availability(self, stream: Stream, logger: logging.Logger, source: Optional[Source]) -> Tuple[bool, Optional[str]]: + """ + Checks stream availability. + + Important to note that the stream and source parameters are not used by the underlying AbstractAvailabilityStrategy. + + :param stream: (unused) + :param logger: logger object to use + :param source: (unused) + :return: A tuple of (boolean, str). If boolean is true, then the stream + """ + stream_availability = self._abstract_availability_strategy.check_availability(logger) + return stream_availability.is_available(), stream_availability.message() + + +class StreamAvailabilityStrategy(AbstractAvailabilityStrategy): + """ + This class acts as an adapter between the existing AvailabilityStrategy and the new AbstractAvailabilityStrategy. + StreamAvailabilityStrategy is instantiated with a Stream and a Source to allow the existing AvailabilityStrategy to be used with the new AbstractAvailabilityStrategy interface. + + A more convenient implementation would not depend on the docs URL instead of the Source itself, and would support running on an AbstractStream instead of only on a Stream. + + This class can be used to help enable concurrency on existing connectors without having to rewrite everything as AbstractStream and AbstractAvailabilityStrategy. + In the long-run, it would be preferable to update the connectors, but we don't have the tooling or need to justify the effort at this time. + """ + + def __init__(self, stream: Stream, source: Source): + """ + :param stream: The stream to delegate to + :param source: The source to delegate to + """ + self._stream = stream + self._source = source + + def check_availability(self, logger: logging.Logger) -> StreamAvailability: + try: + available, message = self._stream.check_availability(logger, self._source) + if available: + return StreamAvailable() + else: + return StreamUnavailable(str(message)) + except Exception as e: + display_message = self._stream.get_error_display_message(e) + if display_message: + raise ExceptionWithDisplayMessage(display_message) + else: + raise e diff --git a/airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/availability_strategy.py b/airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/availability_strategy.py new file mode 100644 index 000000000000..b65803e09df2 --- /dev/null +++ b/airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/availability_strategy.py @@ -0,0 +1,66 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + +import logging +from abc import ABC, abstractmethod +from typing import Optional + +from deprecated.classic import deprecated + + +class StreamAvailability(ABC): + @abstractmethod + def is_available(self) -> bool: + """ + :return: True if the stream is available. False if the stream is not + """ + + @abstractmethod + def message(self) -> Optional[str]: + """ + :return: A message describing why the stream is not available. If the stream is available, this should return None. + """ + + +class StreamAvailable(StreamAvailability): + def is_available(self) -> bool: + return True + + def message(self) -> Optional[str]: + return None + + +class StreamUnavailable(StreamAvailability): + def __init__(self, message: str): + self._message = message + + def is_available(self) -> bool: + return False + + def message(self) -> Optional[str]: + return self._message + + +# Singleton instances of StreamAvailability to avoid the overhead of creating new dummy objects +STREAM_AVAILABLE = StreamAvailable() + + +@deprecated("This class is experimental. Use at your own risk.") +class AbstractAvailabilityStrategy(ABC): + """ + AbstractAvailabilityStrategy is an experimental interface developed as part of the Concurrent CDK. + This interface is not yet stable and may change in the future. Use at your own risk. + + Why create a new interface instead of using the existing AvailabilityStrategy? + The existing AvailabilityStrategy is tightly coupled with Stream and Source, which yields to circular dependencies and makes it difficult to move away from the Stream interface to AbstractStream. + """ + + @abstractmethod + def check_availability(self, logger: logging.Logger) -> StreamAvailability: + """ + Checks stream availability. + + :param logger: logger object to use + :return: A StreamAvailability object describing the stream's availability + """ diff --git a/airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/exceptions.py b/airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/exceptions.py new file mode 100644 index 000000000000..c67c2c58311d --- /dev/null +++ b/airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/exceptions.py @@ -0,0 +1,15 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + +from typing import Any + + +class ExceptionWithDisplayMessage(Exception): + """ + Exception that can be used to display a custom message to the user. + """ + + def __init__(self, display_message: str, **kwargs: Any): + super().__init__(**kwargs) + self.display_message = display_message diff --git a/airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py b/airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py new file mode 100644 index 000000000000..b4c377e2c12c --- /dev/null +++ b/airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py @@ -0,0 +1,37 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + +from queue import Queue + +from airbyte_cdk.models import SyncMode +from airbyte_cdk.sources.streams.concurrent.partitions.partition_generator import PartitionGenerator +from airbyte_cdk.sources.streams.concurrent.partitions.types import PARTITIONS_GENERATED_SENTINEL, QueueItem + + +class PartitionEnqueuer: + """ + Generates partitions from a partition generator and puts them in a queue. + """ + + def __init__(self, queue: Queue[QueueItem], sentinel: PARTITIONS_GENERATED_SENTINEL) -> None: + """ + :param queue: The queue to put the partitions in. + :param sentinel: The sentinel to put in the queue when all the partitions have been generated. + """ + self._queue = queue + self._sentinel = sentinel + + def generate_partitions(self, partition_generator: PartitionGenerator, sync_mode: SyncMode) -> None: + """ + Generate partitions from a partition generator and put them in a queue. + When all the partitions are added to the queue, a sentinel is added to the queue to indicate that all the partitions have been generated. + + This method is meant to be called in a separate thread. + :param partition_generator: The partition Generator + :param sync_mode: The sync mode used + :return: + """ + for partition in partition_generator.generate(sync_mode=sync_mode): + self._queue.put(partition) + self._queue.put(self._sentinel) diff --git a/airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/partition_reader.py b/airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/partition_reader.py new file mode 100644 index 000000000000..ce13b48dc56b --- /dev/null +++ b/airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/partition_reader.py @@ -0,0 +1,33 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + +from queue import Queue + +from airbyte_cdk.sources.streams.concurrent.partitions.partition import Partition +from airbyte_cdk.sources.streams.concurrent.partitions.types import PartitionCompleteSentinel, QueueItem + + +class PartitionReader: + """ + Generates records from a partition and puts them in a queuea. + """ + + def __init__(self, queue: Queue[QueueItem]) -> None: + """ + :param queue: The queue to put the records in. + """ + self._queue = queue + + def process_partition(self, partition: Partition) -> None: + """ + Process a partition and put the records in the output queue. + When all the partitions are added to the queue, a sentinel is added to the queue to indicate that all the partitions have been generated. + + This method is meant to be called from a thread. + :param partition: The partition to read data from + :return: None + """ + for record in partition.read(): + self._queue.put(record) + self._queue.put(PartitionCompleteSentinel(partition)) diff --git a/airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/partitions/__init__.py b/airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/partitions/__init__.py new file mode 100644 index 000000000000..c941b3045795 --- /dev/null +++ b/airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/partitions/__init__.py @@ -0,0 +1,3 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# diff --git a/airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/partitions/partition.py b/airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/partitions/partition.py new file mode 100644 index 000000000000..ac9121b4ba1c --- /dev/null +++ b/airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/partitions/partition.py @@ -0,0 +1,37 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + +from abc import ABC, abstractmethod +from typing import Any, Iterable, Mapping, Optional + +from airbyte_cdk.sources.streams.concurrent.partitions.record import Record + + +class Partition(ABC): + """ + A partition is responsible for reading a specific set of data from a source. + """ + + @abstractmethod + def read(self) -> Iterable[Record]: + """ + Reads the data from the partition. + :return: An iterable of records. + """ + pass + + @abstractmethod + def to_slice(self) -> Optional[Mapping[str, Any]]: + """ + Converts the partition to a slice that can be serialized and deserialized. + :return: A mapping representing a slice + """ + pass + + @abstractmethod + def __hash__(self) -> int: + """ + Returns a hash of the partition. + Partitions must be hashable so that they can be used as keys in a dictionary. + """ diff --git a/airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py b/airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py new file mode 100644 index 000000000000..134209467327 --- /dev/null +++ b/airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py @@ -0,0 +1,20 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + +from abc import ABC, abstractmethod +from typing import Iterable + +from airbyte_cdk.models import SyncMode +from airbyte_cdk.sources.streams.concurrent.partitions.partition import Partition + + +class PartitionGenerator(ABC): + @abstractmethod + def generate(self, sync_mode: SyncMode) -> Iterable[Partition]: + """ + Generates partitions for a given sync mode. + :param sync_mode: SyncMode + :return: An iterable of partitions + """ + pass diff --git a/airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/partitions/record.py b/airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/partitions/record.py new file mode 100644 index 000000000000..ddc58b654fd2 --- /dev/null +++ b/airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/partitions/record.py @@ -0,0 +1,19 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + +from typing import Any, Mapping + + +class Record: + """ + Represents a record read from a stream. + """ + + def __init__(self, data: Mapping[str, Any]): + self.data = data + + def __eq__(self, other: Any) -> bool: + if not isinstance(other, Record): + return False + return self.data == other.data diff --git a/airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/partitions/types.py b/airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/partitions/types.py new file mode 100644 index 000000000000..d705555c857f --- /dev/null +++ b/airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/partitions/types.py @@ -0,0 +1,29 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + +from typing import Union + +from airbyte_cdk.sources.streams.concurrent.partitions.partition import Partition +from airbyte_cdk.sources.streams.concurrent.partitions.record import Record + +PARTITIONS_GENERATED_SENTINEL = object + + +class PartitionCompleteSentinel: + """ + A sentinel object indicating all records for a partition were produced. + Includes a pointer to the partition that was processed. + """ + + def __init__(self, partition: Partition): + """ + :param partition: The partition that was processed + """ + self.partition = partition + + +""" +Typedef representing the items that can be added to the ThreadBasedConcurrentStream +""" +QueueItem = Union[Record, Partition, PartitionCompleteSentinel, PARTITIONS_GENERATED_SENTINEL, Partition] diff --git a/airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/thread_based_concurrent_stream.py b/airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/thread_based_concurrent_stream.py new file mode 100644 index 000000000000..71213000ab87 --- /dev/null +++ b/airbyte-cdk/python/airbyte_cdk/sources/streams/concurrent/thread_based_concurrent_stream.py @@ -0,0 +1,172 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + +import concurrent +import time +from concurrent.futures import Future +from functools import lru_cache +from logging import Logger +from queue import Queue +from typing import Any, Callable, Dict, Iterable, List, Mapping, Optional + +from airbyte_cdk.models import AirbyteStream, SyncMode +from airbyte_cdk.sources.message import MessageRepository +from airbyte_cdk.sources.streams.concurrent.abstract_stream import AbstractStream +from airbyte_cdk.sources.streams.concurrent.availability_strategy import AbstractAvailabilityStrategy, StreamAvailability +from airbyte_cdk.sources.streams.concurrent.partition_enqueuer import PartitionEnqueuer +from airbyte_cdk.sources.streams.concurrent.partition_reader import PartitionReader +from airbyte_cdk.sources.streams.concurrent.partitions.partition import Partition +from airbyte_cdk.sources.streams.concurrent.partitions.partition_generator import PartitionGenerator +from airbyte_cdk.sources.streams.concurrent.partitions.record import Record +from airbyte_cdk.sources.streams.concurrent.partitions.types import PARTITIONS_GENERATED_SENTINEL, PartitionCompleteSentinel, QueueItem +from airbyte_cdk.sources.utils.slice_logger import SliceLogger + + +class ThreadBasedConcurrentStream(AbstractStream): + + DEFAULT_TIMEOUT_SECONDS = 300 + DEFAULT_MAX_QUEUE_SIZE = 10_000 + DEFAULT_SLEEP_TIME = 0.1 + + def __init__( + self, + partition_generator: PartitionGenerator, + max_workers: int, + name: str, + json_schema: Mapping[str, Any], + availability_strategy: AbstractAvailabilityStrategy, + primary_key: List[str], + cursor_field: Optional[str], + slice_logger: SliceLogger, + logger: Logger, + message_repository: MessageRepository, + timeout_seconds: int = DEFAULT_TIMEOUT_SECONDS, + max_concurrent_tasks: int = DEFAULT_MAX_QUEUE_SIZE, + sleep_time: float = DEFAULT_SLEEP_TIME, + ): + self._stream_partition_generator = partition_generator + self._max_workers = max_workers + self._threadpool = concurrent.futures.ThreadPoolExecutor(max_workers=self._max_workers, thread_name_prefix="workerpool") + self._name = name + self._json_schema = json_schema + self._availability_strategy = availability_strategy + self._primary_key = primary_key + self._cursor_field = cursor_field + self._slice_logger = slice_logger + self._logger = logger + self._message_repository = message_repository + self._timeout_seconds = timeout_seconds + self._max_concurrent_tasks = max_concurrent_tasks + self._sleep_time = sleep_time + + def read(self) -> Iterable[Record]: + """ + Read all data from the stream (only full-refresh is supported at the moment) + + Algorithm: + 1. Submit a future to generate the stream's partition to process. + - This has to be done asynchronously because we sometimes need to submit requests to the API to generate all partitions (eg for substreams). + - The future will add the partitions to process on a work queue + 2. Continuously poll work from the work queue until all partitions are generated and processed + - If the next work item is a partition, submit a future to process it. + - The future will add the records to emit on the work queue + - Add the partitions to the partitions_to_done dict so we know it needs to complete for the sync to succeed + - If the next work item is a record, yield the record + - If the next work item is PARTITIONS_GENERATED_SENTINEL, all the partitions were generated + - If the next work item is a PartitionCompleteSentinel, a partition is done processing + - Update the value in partitions_to_done to True so we know the partition is completed + """ + self._logger.debug(f"Processing stream slices for {self.name} (sync_mode: full_refresh)") + futures: List[Future[Any]] = [] + queue: Queue[QueueItem] = Queue() + partition_generator = PartitionEnqueuer(queue, PARTITIONS_GENERATED_SENTINEL) + partition_reader = PartitionReader(queue) + + # Submit partition generation tasks + self._submit_task(futures, partition_generator.generate_partitions, self._stream_partition_generator, SyncMode.full_refresh) + + # True -> partition is done + # False -> partition is not done + partitions_to_done: Dict[Partition, bool] = {} + + finished_partitions = False + while record_or_partition := queue.get(block=True, timeout=self._timeout_seconds): + if record_or_partition == PARTITIONS_GENERATED_SENTINEL: + # All partitions were generated + finished_partitions = True + elif isinstance(record_or_partition, PartitionCompleteSentinel): + # All records for a partition were generated + if record_or_partition.partition not in partitions_to_done: + raise RuntimeError( + f"Received sentinel for partition {record_or_partition.partition} that was not in partitions. This is indicative of a bug in the CDK. Please contact support.partitions:\n{partitions_to_done}" + ) + partitions_to_done[record_or_partition.partition] = True + elif isinstance(record_or_partition, Record): + # Emit records + yield record_or_partition + elif isinstance(record_or_partition, Partition): + # A new partition was generated and must be processed + partitions_to_done[record_or_partition] = False + if self._slice_logger.should_log_slice_message(self._logger): + self._message_repository.emit_message(self._slice_logger.create_slice_log_message(record_or_partition.to_slice())) + self._submit_task(futures, partition_reader.process_partition, record_or_partition) + if finished_partitions and all(partitions_to_done.values()): + # All partitions were generated and process. We're done here + break + self._check_for_errors(futures) + + def _submit_task(self, futures: List[Future[Any]], function: Callable[..., Any], *args: Any) -> None: + # Submit a task to the threadpool, waiting if there are too many pending tasks + self._wait_while_too_many_pending_futures(futures) + futures.append(self._threadpool.submit(function, *args)) + + def _wait_while_too_many_pending_futures(self, futures: List[Future[Any]]) -> None: + # Wait until the number of pending tasks is < self._max_concurrent_tasks + while True: + pending_futures = [f for f in futures if not f.done()] + if len(pending_futures) < self._max_concurrent_tasks: + break + self._logger.info("Main thread is sleeping because the task queue is full...") + time.sleep(self._sleep_time) + + def _check_for_errors(self, futures: List[Future[Any]]) -> None: + exceptions_from_futures = [f for f in [future.exception() for future in futures] if f is not None] + if exceptions_from_futures: + raise RuntimeError(f"Failed reading from stream {self.name} with errors: {exceptions_from_futures}") + futures_not_done = [f for f in futures if not f.done()] + if futures_not_done: + raise RuntimeError(f"Failed reading from stream {self.name} with futures not done: {futures_not_done}") + + @property + def name(self) -> str: + return self._name + + def check_availability(self) -> StreamAvailability: + return self._availability_strategy.check_availability(self._logger) + + @property + def cursor_field(self) -> Optional[str]: + return self._cursor_field + + @lru_cache(maxsize=None) + def get_json_schema(self) -> Mapping[str, Any]: + return self._json_schema + + def as_airbyte_stream(self) -> AirbyteStream: + stream = AirbyteStream(name=self.name, json_schema=dict(self._json_schema), supported_sync_modes=[SyncMode.full_refresh]) + + keys = self._primary_key + if keys and len(keys) > 0: + stream.source_defined_primary_key = keys + + return stream + + def log_stream_sync_configuration(self) -> None: + self._logger.debug( + f"Syncing stream instance: {self.name}", + extra={ + "primary_key": self._primary_key, + "cursor_field": self.cursor_field, + }, + ) diff --git a/airbyte-cdk/python/airbyte_cdk/sources/streams/core.py b/airbyte-cdk/python/airbyte_cdk/sources/streams/core.py index 03698afa5747..2f2fde6c65d4 100644 --- a/airbyte-cdk/python/airbyte_cdk/sources/streams/core.py +++ b/airbyte-cdk/python/airbyte_cdk/sources/streams/core.py @@ -15,6 +15,7 @@ # list of all possible HTTP methods which can be used for sending of request bodies from airbyte_cdk.sources.utils.schema_helpers import ResourceSchemaLoader +from airbyte_cdk.sources.utils.slice_logger import SliceLogger from airbyte_cdk.sources.utils.transform import TransformConfig, TypeTransformer from deprecated.classic import deprecated @@ -105,6 +106,23 @@ def get_error_display_message(self, exception: BaseException) -> Optional[str]: """ return None + def read_full_refresh( + self, + cursor_field: Optional[List[str]], + logger: logging.Logger, + slice_logger: SliceLogger, + ) -> Iterable[StreamData]: + slices = self.stream_slices(sync_mode=SyncMode.full_refresh, cursor_field=cursor_field) + logger.debug(f"Processing stream slices for {self.name} (sync_mode: full_refresh)", extra={"stream_slices": slices}) + for _slice in slices: + if slice_logger.should_log_slice_message(logger): + yield slice_logger.create_slice_log_message(_slice) + yield from self.read_records( + stream_slice=_slice, + sync_mode=SyncMode.full_refresh, + cursor_field=cursor_field, + ) + @abstractmethod def read_records( self, @@ -252,6 +270,18 @@ def get_updated_state( """ return {} + def log_stream_sync_configuration(self) -> None: + """ + Logs the configuration of this stream. + """ + self.logger.debug( + f"Syncing stream instance: {self.name}", + extra={ + "primary_key": self.primary_key, + "cursor_field": self.cursor_field, + }, + ) + @staticmethod def _wrapped_primary_key(keys: Optional[Union[str, List[str], List[List[str]]]]) -> Optional[List[List[str]]]: """ diff --git a/airbyte-cdk/python/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py b/airbyte-cdk/python/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py index 371f06b34d51..bc9b8e63883b 100644 --- a/airbyte-cdk/python/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +++ b/airbyte-cdk/python/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py @@ -96,14 +96,47 @@ def _get_refresh_access_token_response(self): except Exception as e: raise Exception(f"Error while refreshing access token: {e}") from e - def refresh_access_token(self) -> Tuple[str, int]: + def refresh_access_token(self) -> Tuple[str, Union[str, int]]: """ - Returns the refresh token and its lifespan in seconds + Returns the refresh token and its expiration datetime - :return: a tuple of (access_token, token_lifespan_in_seconds) + :return: a tuple of (access_token, token_lifespan) """ response_json = self._get_refresh_access_token_response() - return response_json[self.get_access_token_name()], int(response_json[self.get_expires_in_name()]) + + return response_json[self.get_access_token_name()], response_json[self.get_expires_in_name()] + + def _parse_token_expiration_date(self, value: Union[str, int]) -> pendulum.DateTime: + """ + Return the expiration datetime of the refresh token + + :return: expiration datetime + """ + + if self.token_expiry_is_time_of_expiration: + if not self.token_expiry_date_format: + raise ValueError( + f"Invalid token expiry date format {self.token_expiry_date_format}; a string representing the format is required." + ) + return pendulum.from_format(value, self.token_expiry_date_format) + else: + return pendulum.now().add(seconds=int(float(value))) + + @property + def token_expiry_is_time_of_expiration(self) -> bool: + """ + Indicates that the Token Expiry returns the date until which the token will be valid, not the amount of time it will be valid. + """ + + return False + + @property + def token_expiry_date_format(self) -> Optional[str]: + """ + Format of the datetime; exists it if expires_in is returned as the expiration datetime instead of seconds until it expires + """ + + return None @abstractmethod def get_token_refresh_endpoint(self) -> str: diff --git a/airbyte-cdk/python/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py b/airbyte-cdk/python/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py index d7a93157ed99..6a92fad6af44 100644 --- a/airbyte-cdk/python/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +++ b/airbyte-cdk/python/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py @@ -31,6 +31,7 @@ def __init__( expires_in_name: str = "expires_in", refresh_request_body: Mapping[str, Any] = None, grant_type: str = "refresh_token", + token_expiry_is_time_of_expiration: bool = False, ): self._token_refresh_endpoint = token_refresh_endpoint self._client_secret = client_secret @@ -44,6 +45,7 @@ def __init__( self._token_expiry_date = token_expiry_date or pendulum.now().subtract(days=1) self._token_expiry_date_format = token_expiry_date_format + self._token_expiry_is_time_of_expiration = token_expiry_is_time_of_expiration self._access_token = None def get_token_refresh_endpoint(self) -> str: @@ -77,10 +79,15 @@ def get_token_expiry_date(self) -> pendulum.DateTime: return self._token_expiry_date def set_token_expiry_date(self, value: Union[str, int]): - if self._token_expiry_date_format: - self._token_expiry_date = pendulum.from_format(value, self._token_expiry_date_format) - else: - self._token_expiry_date = pendulum.now().add(seconds=value) + self._token_expiry_date = self._parse_token_expiration_date(value) + + @property + def token_expiry_is_time_of_expiration(self) -> bool: + return self._token_expiry_is_time_of_expiration + + @property + def token_expiry_date_format(self) -> Optional[str]: + return self._token_expiry_date_format @property def access_token(self) -> str: @@ -117,6 +124,7 @@ def __init__( token_expiry_date_config_path: Sequence[str] = ("credentials", "token_expiry_date"), token_expiry_date_format: Optional[str] = None, message_repository: MessageRepository = NoopMessageRepository(), + token_expiry_is_time_of_expiration: bool = False, ): """ @@ -135,6 +143,7 @@ def __init__( refresh_token_config_path (Sequence[str]): Dpath to the refresh_token field in the connector configuration. Defaults to ("credentials", "refresh_token"). token_expiry_date_config_path (Sequence[str]): Dpath to the token_expiry_date field in the connector configuration. Defaults to ("credentials", "token_expiry_date"). token_expiry_date_format (Optional[str]): Date format of the token expiry date field (set by expires_in_name). If not specified the token expiry date is interpreted as number of seconds until expiration. + token_expiry_is_time_of_expiration bool: set True it if expires_in is returned as time of expiration instead of the number seconds until expiration message_repository (MessageRepository): the message repository used to emit logs on HTTP requests and control message on config update """ self._client_id = client_id if client_id is not None else dpath.util.get(connector_config, ("credentials", "client_id")) @@ -160,6 +169,7 @@ def __init__( refresh_request_body=refresh_request_body, grant_type=grant_type, token_expiry_date_format=token_expiry_date_format, + token_expiry_is_time_of_expiration=token_expiry_is_time_of_expiration, ) def get_refresh_token_name(self) -> str: diff --git a/airbyte-cdk/python/airbyte_cdk/sources/streams/utils/stream_helper.py b/airbyte-cdk/python/airbyte_cdk/sources/streams/utils/stream_helper.py index 98edab1e9557..c5b11812b448 100644 --- a/airbyte-cdk/python/airbyte_cdk/sources/streams/utils/stream_helper.py +++ b/airbyte-cdk/python/airbyte_cdk/sources/streams/utils/stream_helper.py @@ -34,5 +34,7 @@ def get_first_record_for_slice(stream: Stream, stream_slice: Optional[Mapping[st :raises StopIteration: if there is no first record to return (the read_records generator is empty) :return: StreamData containing the first record in the slice """ - records_for_slice = stream.read_records(sync_mode=SyncMode.full_refresh, stream_slice=stream_slice) + # We wrap the return output of read_records() because some implementations return types that are iterable, + # but not iterators such as lists or tuples + records_for_slice = iter(stream.read_records(sync_mode=SyncMode.full_refresh, stream_slice=stream_slice)) return next(records_for_slice) diff --git a/airbyte-cdk/python/setup.py b/airbyte-cdk/python/setup.py index 2e53759d6f9e..8c885e669fc9 100644 --- a/airbyte-cdk/python/setup.py +++ b/airbyte-cdk/python/setup.py @@ -26,7 +26,7 @@ name="airbyte-cdk", # The version of the airbyte-cdk package is used at runtime to validate manifests. That validation must be # updated if our semver format changes such as using release candidate versions. - version="0.51.27", + version="0.51.33", description="A framework for writing Airbyte Connectors.", long_description=README, long_description_content_type="text/markdown", diff --git a/airbyte-cdk/python/unit_tests/destinations/vector_db_based/batcher_test.py b/airbyte-cdk/python/unit_tests/destinations/vector_db_based/batcher_test.py deleted file mode 100644 index d35748a05104..000000000000 --- a/airbyte-cdk/python/unit_tests/destinations/vector_db_based/batcher_test.py +++ /dev/null @@ -1,94 +0,0 @@ -# -# Copyright (c) 2023 Airbyte, Inc., all rights reserved. -# - -import unittest -from unittest.mock import MagicMock - -from airbyte_cdk.destinations.vector_db_based.batcher import Batcher - - -class BatcherTestCase(unittest.TestCase): - def test_add_single_item(self): - # Arrange - batch_size = 3 - flush_handler_mock = MagicMock() - batcher = Batcher(batch_size, flush_handler_mock) - - # Act - batcher.add(1) - - # Assert - self.assertFalse(flush_handler_mock.called) - - def test_add_flushes_batch(self): - # Arrange - batch_size = 3 - flush_handler_mock = MagicMock() - batcher = Batcher(batch_size, flush_handler_mock) - - # Act - batcher.add(1) - batcher.add(2) - batcher.add(3) - - # Assert - flush_handler_mock.assert_called_once_with([1, 2, 3]) - - def test_flush_empty_buffer(self): - # Arrange - batch_size = 3 - flush_handler_mock = MagicMock() - batcher = Batcher(batch_size, flush_handler_mock) - - # Act - batcher.flush() - - # Assert - self.assertFalse(flush_handler_mock.called) - - def test_flush_non_empty_buffer(self): - # Arrange - batch_size = 3 - flush_handler_mock = MagicMock() - batcher = Batcher(batch_size, flush_handler_mock) - batcher.add(1) - batcher.add(2) - - # Act - batcher.flush() - - # Assert - flush_handler_mock.assert_called_once_with([1, 2]) - self.assertEqual(len(batcher.buffer), 0) - - def test_flush_if_necessary_flushes_batch(self): - # Arrange - batch_size = 3 - flush_handler_mock = MagicMock() - batcher = Batcher(batch_size, flush_handler_mock) - batcher.add(1) - batcher.add(2) - batcher.add(3) - - # Act - batcher.add(4) - batcher.add(5) - - # Assert - flush_handler_mock.assert_called_once_with([1, 2, 3]) - self.assertEqual(len(batcher.buffer), 2) - - def test_flush_if_necessary_does_not_flush_incomplete_batch(self): - # Arrange - batch_size = 3 - flush_handler_mock = MagicMock() - batcher = Batcher(batch_size, flush_handler_mock) - batcher.add(1) - - # Act - batcher.add(2) - - # Assert - self.assertFalse(flush_handler_mock.called) - self.assertEqual(len(batcher.buffer), 2) diff --git a/airbyte-cdk/python/unit_tests/destinations/vector_db_based/writer_test.py b/airbyte-cdk/python/unit_tests/destinations/vector_db_based/writer_test.py index 1c628a0f2484..e97532bf280c 100644 --- a/airbyte-cdk/python/unit_tests/destinations/vector_db_based/writer_test.py +++ b/airbyte-cdk/python/unit_tests/destinations/vector_db_based/writer_test.py @@ -2,7 +2,8 @@ # Copyright (c) 2023 Airbyte, Inc., all rights reserved. # -from unittest.mock import MagicMock +from typing import Optional +from unittest.mock import ANY, MagicMock, call from airbyte_cdk.destinations.vector_db_based import ProcessingConfigModel, Writer from airbyte_cdk.models.airbyte_protocol import ( @@ -16,40 +17,49 @@ ) -def _generate_record_message(index: int): +def _generate_record_message(index: int, stream: str = "example_stream", namespace: Optional[str] = None): return AirbyteMessage( type=Type.RECORD, - record=AirbyteRecordMessage(stream="example_stream", emitted_at=1234, data={"column_name": f"value {index}", "id": index}), + record=AirbyteRecordMessage( + stream=stream, namespace=namespace, emitted_at=1234, data={"column_name": f"value {index}", "id": index} + ), ) BATCH_SIZE = 32 +def generate_stream(name: str = "example_stream", namespace: Optional[str] = None): + return { + "stream": { + "name": name, + "namespace": namespace, + "json_schema": {"$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": {}}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": False, + "default_cursor_field": ["column_name"], + }, + "primary_key": [["id"]], + "sync_mode": "incremental", + "destination_sync_mode": "append_dedup", + } + + +def generate_mock_embedder(): + mock_embedder = MagicMock() + mock_embedder.embed_chunks.return_value = [[0] * 1536] * (BATCH_SIZE + 5 + 5) + mock_embedder.embed_chunks.side_effect = lambda chunks: [[0] * 1536] * len(chunks) + + return mock_embedder + + def test_write(): """ Basic test for the write method, batcher and document processor. """ config_model = ProcessingConfigModel(chunk_overlap=0, chunk_size=1000, metadata_fields=None, text_fields=["column_name"]) - configured_catalog: ConfiguredAirbyteCatalog = ConfiguredAirbyteCatalog.parse_obj( - { - "streams": [ - { - "stream": { - "name": "example_stream", - "json_schema": {"$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": {}}, - "supported_sync_modes": ["full_refresh", "incremental"], - "source_defined_cursor": False, - "default_cursor_field": ["column_name"], - }, - "primary_key": [["id"]], - "sync_mode": "incremental", - "destination_sync_mode": "append_dedup", - } - ] - } - ) + configured_catalog: ConfiguredAirbyteCatalog = ConfiguredAirbyteCatalog.parse_obj({"streams": [generate_stream()]}) # messages are flushed after 32 records or after a state message, so this will trigger two batches to be processed input_messages = [_generate_record_message(i) for i in range(BATCH_SIZE + 5)] state_message = AirbyteMessage(type=Type.STATE, state=AirbyteStateMessage()) @@ -57,9 +67,7 @@ def test_write(): # messages are also flushed once the input messages are exhausted, so this will trigger another batch input_messages.extend([_generate_record_message(i) for i in range(5)]) - mock_embedder = MagicMock() - mock_embedder.embed_chunks.return_value = [[0] * 1536] * (BATCH_SIZE + 5 + 5) - mock_embedder.embed_chunks.side_effect = lambda chunks: [[0] * 1536] * len(chunks) + mock_embedder = generate_mock_embedder() mock_indexer = MagicMock() post_sync_log_message = AirbyteMessage(type=Type.LOG, log=AirbyteLogMessage(level=Level.INFO, message="post sync")) @@ -77,6 +85,7 @@ def test_write(): # 1 batches due to max batch size reached and 1 batch due to state message assert mock_indexer.index.call_count == 2 + assert mock_indexer.delete.call_count == 2 assert mock_embedder.embed_chunks.call_count == 2 output_message = next(output_messages) @@ -90,6 +99,64 @@ def test_write(): # 1 batch due to end of message stream assert mock_indexer.index.call_count == 3 + assert mock_indexer.delete.call_count == 3 assert mock_embedder.embed_chunks.call_count == 3 mock_indexer.post_sync.assert_called() + + +def test_write_stream_namespace_split(): + """ + Test separate handling of streams and namespaces in the writer + + generate BATCH_SIZE - 10 records for example_stream, 5 records for example_stream with namespace abc and 10 records for example_stream2 + messages are flushed after 32 records or after a state message, so this will trigger 4 calls to the indexer: + * out of the first batch of 32, example_stream, example stream with namespace abd and the first 5 records for example_stream2 + * in the second batch, the remaining 5 records for example_stream2 + """ + config_model = ProcessingConfigModel(chunk_overlap=0, chunk_size=1000, metadata_fields=None, text_fields=["column_name"]) + + configured_catalog: ConfiguredAirbyteCatalog = ConfiguredAirbyteCatalog.parse_obj( + { + "streams": [ + generate_stream(), + generate_stream(namespace="abc"), + generate_stream("example_stream2"), + ] + } + ) + + input_messages = [_generate_record_message(i, "example_stream", None) for i in range(BATCH_SIZE - 10)] + input_messages.extend([_generate_record_message(i, "example_stream", "abc") for i in range(5)]) + input_messages.extend([_generate_record_message(i, "example_stream2", None) for i in range(10)]) + state_message = AirbyteMessage(type=Type.STATE, state=AirbyteStateMessage()) + input_messages.append(state_message) + + mock_embedder = generate_mock_embedder() + + mock_indexer = MagicMock() + mock_indexer.post_sync.return_value = [] + + # Create the DestinationLangchain instance + writer = Writer(config_model, mock_indexer, mock_embedder, BATCH_SIZE) + + output_messages = writer.write(configured_catalog, input_messages) + next(output_messages) + + mock_indexer.index.assert_has_calls( + [ + call(ANY, None, "example_stream"), + call(ANY, "abc", "example_stream"), + call(ANY, None, "example_stream2"), + call(ANY, None, "example_stream2"), + ] + ) + mock_indexer.index.assert_has_calls( + [ + call(ANY, None, "example_stream"), + call(ANY, "abc", "example_stream"), + call(ANY, None, "example_stream2"), + call(ANY, None, "example_stream2"), + ] + ) + assert mock_embedder.embed_chunks.call_count == 4 diff --git a/airbyte-cdk/python/unit_tests/sources/declarative/auth/test_oauth.py b/airbyte-cdk/python/unit_tests/sources/declarative/auth/test_oauth.py index ff425380ed3c..35a287250628 100644 --- a/airbyte-cdk/python/unit_tests/sources/declarative/auth/test_oauth.py +++ b/airbyte-cdk/python/unit_tests/sources/declarative/auth/test_oauth.py @@ -126,6 +126,35 @@ def test_refresh_access_token(self, mocker): assert ("access_token", 1000) == token + @pytest.mark.parametrize( + "timestamp, expected_date", + [ + (1640995200, "2022-01-01T00:00:00Z"), + ("1650758400", "2022-04-24T00:00:00Z"), + ], + ids=["timestamp_as_integer", "timestamp_as_integer_inside_string"], + ) + def test_initialize_declarative_oauth_with_token_expiry_date_as_timestamp(self, timestamp, expected_date): + # TODO: should be fixed inside DeclarativeOauth2Authenticator, remove next line after fixing + with pytest.raises(TypeError): + oauth = DeclarativeOauth2Authenticator( + token_refresh_endpoint="{{ config['refresh_endpoint'] }}", + client_id="{{ config['client_id'] }}", + client_secret="{{ config['client_secret'] }}", + refresh_token="{{ parameters['refresh_token'] }}", + config=config | {"token_expiry_date": timestamp}, + scopes=["scope1", "scope2"], + token_expiry_date="{{ config['token_expiry_date'] }}", + refresh_request_body={ + "custom_field": "{{ config['custom_field'] }}", + "another_field": "{{ config['another_field'] }}", + "scopes": ["no_override"], + }, + parameters={}, + ) + + assert oauth.get_token_expiry_date() == pendulum.parse(expected_date) + @pytest.mark.parametrize( "expires_in_response, token_expiry_date_format", [ @@ -149,6 +178,7 @@ def test_refresh_access_token_expire_format(self, mocker, expires_in_response, t scopes=["scope1", "scope2"], token_expiry_date="{{ config['token_expiry_date'] }}", token_expiry_date_format=token_expiry_date_format, + token_expiry_is_time_of_expiration=True, refresh_request_body={ "custom_field": "{{ config['custom_field'] }}", "another_field": "{{ config['another_field'] }}", diff --git a/airbyte-cdk/python/unit_tests/sources/declarative/parsers/test_model_to_component_factory.py b/airbyte-cdk/python/unit_tests/sources/declarative/parsers/test_model_to_component_factory.py index 437b9e2b0356..a1c9eec8cd0e 100644 --- a/airbyte-cdk/python/unit_tests/sources/declarative/parsers/test_model_to_component_factory.py +++ b/airbyte-cdk/python/unit_tests/sources/declarative/parsers/test_model_to_component_factory.py @@ -308,6 +308,32 @@ def test_interpolate_config(): assert authenticator.get_refresh_request_body() == {"body_field": "yoyoyo", "interpolated_body_field": "verysecrettoken"} +def test_interpolate_config_with_token_expiry_date_format(): + content = """ + authenticator: + type: OAuthAuthenticator + client_id: "some_client_id" + client_secret: "some_client_secret" + token_refresh_endpoint: "https://api.sendgrid.com/v3/auth" + refresh_token: "{{ config['apikey'] }}" + token_expiry_date_format: "%Y-%m-%d %H:%M:%S.%f+00:00" + """ + parsed_manifest = YamlDeclarativeSource._parse(content) + resolved_manifest = resolver.preprocess_manifest(parsed_manifest) + authenticator_manifest = transformer.propagate_types_and_parameters("", resolved_manifest["authenticator"], {}) + + authenticator = factory.create_component( + model_type=OAuthAuthenticatorModel, component_definition=authenticator_manifest, config=input_config + ) + + assert isinstance(authenticator, DeclarativeOauth2Authenticator) + assert authenticator.token_expiry_date_format == "%Y-%m-%d %H:%M:%S.%f+00:00" + assert authenticator.token_expiry_is_time_of_expiration + assert authenticator.client_id.eval(input_config) == "some_client_id" + assert authenticator.client_secret.string == "some_client_secret" + assert authenticator.token_refresh_endpoint.eval(input_config) == "https://api.sendgrid.com/v3/auth" + + def test_single_use_oauth_branch(): single_use_input_config = { "apikey": "verysecrettoken", diff --git a/airbyte-cdk/python/unit_tests/sources/declarative/requesters/paginators/test_default_paginator.py b/airbyte-cdk/python/unit_tests/sources/declarative/requesters/paginators/test_default_paginator.py index 8a53bc615d74..9adf878e40bb 100644 --- a/airbyte-cdk/python/unit_tests/sources/declarative/requesters/paginators/test_default_paginator.py +++ b/airbyte-cdk/python/unit_tests/sources/declarative/requesters/paginators/test_default_paginator.py @@ -197,6 +197,20 @@ def test_reset(): assert request_parameters_for_second_request != request_parameters_after_reset +def test_initial_token_with_offset_pagination(): + page_size_request_option = RequestOption(inject_into=RequestOptionType.request_parameter, field_name="limit", parameters={}) + page_token_request_option = RequestOption(inject_into=RequestOptionType.request_parameter, field_name="offset", parameters={}) + url_base = "https://airbyte.io" + config = {} + strategy = OffsetIncrement(config={}, page_size=2, parameters={}, inject_on_first_request=True) + paginator = DefaultPaginator( + strategy, config, url_base, parameters={}, page_size_option=page_size_request_option, page_token_option=page_token_request_option + ) + initial_request_parameters = paginator.get_request_params() + + assert initial_request_parameters == {"limit": 2, "offset": 0} + + def test_limit_page_fetched(): maximum_number_of_pages = 5 number_of_next_performed = maximum_number_of_pages - 1 diff --git a/airbyte-cdk/python/unit_tests/sources/declarative/requesters/paginators/test_offset_increment.py b/airbyte-cdk/python/unit_tests/sources/declarative/requesters/paginators/test_offset_increment.py index 0fb16077d236..37f26a2af420 100644 --- a/airbyte-cdk/python/unit_tests/sources/declarative/requesters/paginators/test_offset_increment.py +++ b/airbyte-cdk/python/unit_tests/sources/declarative/requesters/paginators/test_offset_increment.py @@ -3,6 +3,7 @@ # import json +from typing import Any, Optional import pytest import requests @@ -42,3 +43,16 @@ def test_offset_increment_paginator_strategy_rises(): with pytest.raises(Exception) as exc: paginator_strategy.get_page_size() assert str(exc.value) == "invalid value is of type . Expected " + + +@pytest.mark.parametrize( + "inject_on_first_request, expected_initial_token", + [ + pytest.param(True, 0, id="test_with_inject_offset"), + pytest.param(False, None, id="test_without_inject_offset"), + ], +) +def test_offset_increment_paginator_strategy_initial_token(inject_on_first_request: bool, expected_initial_token: Optional[Any]): + paginator_strategy = OffsetIncrement(page_size=20, parameters={}, config={}, inject_on_first_request=inject_on_first_request) + + assert paginator_strategy.initial_token == expected_initial_token diff --git a/airbyte-cdk/python/unit_tests/sources/declarative/requesters/paginators/test_page_increment.py b/airbyte-cdk/python/unit_tests/sources/declarative/requesters/paginators/test_page_increment.py index 5603c10dacc2..52477fedc21e 100644 --- a/airbyte-cdk/python/unit_tests/sources/declarative/requesters/paginators/test_page_increment.py +++ b/airbyte-cdk/python/unit_tests/sources/declarative/requesters/paginators/test_page_increment.py @@ -3,6 +3,7 @@ # import json +from typing import Any, Optional import pytest import requests @@ -35,3 +36,21 @@ def test_page_increment_paginator_strategy(page_size, start_from, last_records, paginator_strategy.reset() assert start_from == paginator_strategy._page + + +@pytest.mark.parametrize( + "inject_on_first_request, start_from_page, expected_initial_token", + [ + pytest.param(True, 0, 0, id="test_with_inject_offset_page_start_from_0"), + pytest.param(True, 12, 12, id="test_with_inject_offset_page_start_from_12"), + pytest.param(False, 2, None, id="test_without_inject_offset"), + ], +) +def test_page_increment_paginator_strategy_initial_token( + inject_on_first_request: bool, start_from_page: int, expected_initial_token: Optional[Any] +): + paginator_strategy = PageIncrement( + page_size=20, parameters={}, start_from_page=start_from_page, inject_on_first_request=inject_on_first_request + ) + + assert paginator_strategy.initial_token == expected_initial_token diff --git a/airbyte-cdk/python/unit_tests/sources/declarative/requesters/request_options/test_interpolated_request_options_provider.py b/airbyte-cdk/python/unit_tests/sources/declarative/requesters/request_options/test_interpolated_request_options_provider.py index 837b11d1ef3d..19759832452b 100644 --- a/airbyte-cdk/python/unit_tests/sources/declarative/requesters/request_options/test_interpolated_request_options_provider.py +++ b/airbyte-cdk/python/unit_tests/sources/declarative/requesters/request_options/test_interpolated_request_options_provider.py @@ -19,18 +19,18 @@ ("test_static_param", {"a_static_request_param": "a_static_value"}, {"a_static_request_param": "a_static_value"}), ("test_value_depends_on_state", {"read_from_state": "{{ stream_state['date'] }}"}, {"read_from_state": "2021-01-01"}), ("test_value_depends_on_stream_slice", {"read_from_slice": "{{ stream_slice['start_date'] }}"}, {"read_from_slice": "2020-01-01"}), - ("test_value_depends_on_next_page_token", {"read_from_token": "{{ next_page_token['offset'] }}"}, {"read_from_token": 12345}), + ("test_value_depends_on_next_page_token", {"read_from_token": "{{ next_page_token['offset'] }}"}, {"read_from_token": "12345"}), ("test_value_depends_on_config", {"read_from_config": "{{ config['option'] }}"}, {"read_from_config": "OPTION"}), ( "test_parameter_is_interpolated", {"{{ stream_state['date'] }} - {{stream_slice['start_date']}} - {{next_page_token['offset']}} - {{config['option']}}": "ABC"}, {"2021-01-01 - 2020-01-01 - 12345 - OPTION": "ABC"}, ), - ("test_boolean_false_value", {"boolean_false": "{{ False }}"}, {"boolean_false": False}), - ("test_integer_falsy_value", {"integer_falsy": "{{ 0 }}"}, {"integer_falsy": 0}), - ("test_number_falsy_value", {"number_falsy": "{{ 0.0 }}"}, {"number_falsy": 0.0}), + ("test_boolean_false_value", {"boolean_false": "{{ False }}"}, {"boolean_false": "False"}), + ("test_integer_falsy_value", {"integer_falsy": "{{ 0 }}"}, {"integer_falsy": "0"}), + ("test_number_falsy_value", {"number_falsy": "{{ 0.0 }}"}, {"number_falsy": "0.0"}), ("test_string_falsy_value", {"string_falsy": "{{ '' }}"}, {}), - ("test_none_value", {"none_value": "{{ None }}"}, {}), + ("test_none_value", {"none_value": "{{ None }}"}, {"none_value": "None"}), ], ) def test_interpolated_request_params(test_name, input_request_params, expected_request_params): diff --git a/airbyte-cdk/python/unit_tests/sources/declarative/requesters/test_http_requester.py b/airbyte-cdk/python/unit_tests/sources/declarative/requesters/test_http_requester.py index 5af8457e28ad..08b5fa9aef54 100644 --- a/airbyte-cdk/python/unit_tests/sources/declarative/requesters/test_http_requester.py +++ b/airbyte-cdk/python/unit_tests/sources/declarative/requesters/test_http_requester.py @@ -17,6 +17,7 @@ from airbyte_cdk.sources.declarative.requesters.error_handlers.default_error_handler import DefaultErrorHandler from airbyte_cdk.sources.declarative.requesters.error_handlers.error_handler import ErrorHandler from airbyte_cdk.sources.declarative.requesters.http_requester import HttpMethod, HttpRequester +from airbyte_cdk.sources.declarative.requesters.request_options import InterpolatedRequestOptionsProvider from airbyte_cdk.sources.declarative.types import Config from airbyte_cdk.sources.streams.http.exceptions import DefaultBackoffException, RequestBodyException, UserDefinedBackoffException from requests import PreparedRequest @@ -320,6 +321,176 @@ def test_send_request_params(provider_params, param_params, authenticator_params assert query_params == expected_params +@pytest.mark.parametrize( + "request_parameters, config, expected_query_params", + [ + pytest.param( + {"k": '{"updatedDateFrom": "2023-08-20T00:00:00Z", "updatedDateTo": "2023-08-20T23:59:59Z"}'}, + {}, + "k=%7B%22updatedDateFrom%22%3A+%222023-08-20T00%3A00%3A00Z%22%2C+%22updatedDateTo%22%3A+%222023-08-20T23%3A59%3A59Z%22%7D", + id="test-request-parameter-dictionary", + ), + pytest.param( + {"k": "1,2"}, + {}, + "k=1%2C2", # k=1,2 + id="test-request-parameter-comma-separated-numbers", + ), + pytest.param( + {"k": "a,b"}, + {}, + "k=a%2Cb", # k=a,b + id="test-request-parameter-comma-separated-strings", + ), + pytest.param( + {"k": "[1,2]"}, + {}, + "k=1&k=2", + id="test-request-parameter-list-of-numbers", + ), + pytest.param( + {"k": '["a", "b"]'}, + {}, + "k=a&k=b", + id="test-request-parameter-list-of-strings", + ), + pytest.param( + {"k": '{{ config["k"] }}'}, + {"k": {"updatedDateFrom": "2023-08-20T00:00:00Z", "updatedDateTo": "2023-08-20T23:59:59Z"}}, + # {'updatedDateFrom': '2023-08-20T00:00:00Z', 'updatedDateTo': '2023-08-20T23:59:59Z'} + "k=%7B%27updatedDateFrom%27%3A+%272023-08-20T00%3A00%3A00Z%27%2C+%27updatedDateTo%27%3A+%272023-08-20T23%3A59%3A59Z%27%7D", + id="test-request-parameter-from-config-object", + ), + pytest.param( + {"k": '{{ config["k"] }}'}, + {"k": [1, 2]}, + "k=1&k=2", + id="test-request-parameter-from-config-list-of-numbers", + ), + pytest.param( + {"k": '{{ config["k"] }}'}, + {"k": ["a", "b"]}, + "k=a&k=b", + id="test-request-parameter-from-config-list-of-strings", + ), + pytest.param( + {"k": '{{ config["k"] }}'}, + {"k": ["a,b"]}, + "k=a%2Cb", # k=a,b + id="test-request-parameter-from-config-comma-separated-strings", + ), + pytest.param( + {'["a", "b"]': '{{ config["k"] }}'}, + {"k": [1, 2]}, + "%5B%22a%22%2C+%22b%22%5D=1&%5B%22a%22%2C+%22b%22%5D=2", + id="test-key-with-list-is-not-interpolated", + ), + ], +) +def test_request_param_interpolation(request_parameters, config, expected_query_params): + options_provider = InterpolatedRequestOptionsProvider( + config=config, + request_parameters=request_parameters, + request_body_data={}, + request_headers={}, + parameters={}, + ) + requester = create_requester() + requester._request_options_provider = options_provider + requester.send_request() + sent_request: PreparedRequest = requester._session.send.call_args_list[0][0][0] + assert sent_request.url.split("?", 1)[-1] == expected_query_params + + +@pytest.mark.parametrize( + "request_body_data, config, expected_request_body_data", + [ + pytest.param( + {"k": '{"updatedDateFrom": "2023-08-20T00:00:00Z", "updatedDateTo": "2023-08-20T23:59:59Z"}'}, + {}, + # k={"updatedDateFrom": "2023-08-20T00:00:00Z", "updatedDateTo": "2023-08-20T23:59:59Z"} + "k=%7B%22updatedDateFrom%22%3A+%222023-08-20T00%3A00%3A00Z%22%2C+%22updatedDateTo%22%3A+%222023-08-20T23%3A59%3A59Z%22%7D", + id="test-request-body-dictionary", + ), + pytest.param( + {"k": "1,2"}, + {}, + "k=1%2C2", # k=1,2 + id="test-request-body-comma-separated-numbers", + ), + pytest.param( + {"k": "a,b"}, + {}, + "k=a%2Cb", # k=a,b + id="test-request-body-comma-separated-strings", + ), + pytest.param( + {"k": "[1,2]"}, + {}, + "k=1&k=2", + id="test-request-body-list-of-numbers", + ), + pytest.param( + {"k": '["a", "b"]'}, + {}, + "k=a&k=b", + id="test-request-body-list-of-strings", + ), + pytest.param( + {"k": '{{ config["k"] }}'}, + {"k": {"updatedDateFrom": "2023-08-20T00:00:00Z", "updatedDateTo": "2023-08-20T23:59:59Z"}}, + # k={'updatedDateFrom': '2023-08-20T00:00:00Z', 'updatedDateTo': '2023-08-20T23:59:59Z'} + "k=%7B%27updatedDateFrom%27%3A+%272023-08-20T00%3A00%3A00Z%27%2C+%27updatedDateTo%27%3A+%272023-08-20T23%3A59%3A59Z%27%7D", + id="test-request-body-from-config-object", + ), + pytest.param( + {"k": '{{ config["k"] }}'}, + {"k": [1, 2]}, + "k=1&k=2", + id="test-request-body-from-config-list-of-numbers", + ), + pytest.param( + {"k": '{{ config["k"] }}'}, + {"k": ["a", "b"]}, + "k=a&k=b", + id="test-request-body-from-config-list-of-strings", + ), + pytest.param( + {"k": '{{ config["k"] }}'}, + {"k": ["a,b"]}, + "k=a%2Cb", # k=a,b + id="test-request-body-from-config-comma-separated-strings", + ), + pytest.param( + {'["a", "b"]': '{{ config["k"] }}'}, + {"k": [1, 2]}, + "%5B%22a%22%2C+%22b%22%5D=1&%5B%22a%22%2C+%22b%22%5D=2", # ["a", "b"]=1&["a", "b"]=2 + id="test-key-with-list-is-not-interpolated", + ), + pytest.param( + {"k": "{'updatedDateFrom': '2023-08-20T00:00:00Z', 'updatedDateTo': '2023-08-20T23:59:59Z'}"}, + {}, + # k={'updatedDateFrom': '2023-08-20T00:00:00Z', 'updatedDateTo': '2023-08-20T23:59:59Z'} + "k=%7B%27updatedDateFrom%27%3A+%272023-08-20T00%3A00%3A00Z%27%2C+%27updatedDateTo%27%3A+%272023-08-20T23%3A59%3A59Z%27%7D", + id="test-single-quotes-are-retained", + ), + ], +) +def test_request_body_interpolation(request_body_data, config, expected_request_body_data): + options_provider = InterpolatedRequestOptionsProvider( + config=config, + request_parameters={}, + request_body_data=request_body_data, + request_headers={}, + parameters={}, + ) + requester = create_requester() + requester._request_options_provider = options_provider + requester.send_request() + sent_request: PreparedRequest = requester._session.send.call_args_list[0][0][0] + assert sent_request.body == expected_request_body_data + + @pytest.mark.parametrize( "requester_path, param_path, expected_path", [ diff --git a/airbyte-cdk/python/unit_tests/sources/streams/concurrent/__init__.py b/airbyte-cdk/python/unit_tests/sources/streams/concurrent/__init__.py new file mode 100644 index 000000000000..c941b3045795 --- /dev/null +++ b/airbyte-cdk/python/unit_tests/sources/streams/concurrent/__init__.py @@ -0,0 +1,3 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# diff --git a/airbyte-cdk/python/unit_tests/sources/streams/concurrent/test_adapters.py b/airbyte-cdk/python/unit_tests/sources/streams/concurrent/test_adapters.py new file mode 100644 index 000000000000..77f2b31e7bb0 --- /dev/null +++ b/airbyte-cdk/python/unit_tests/sources/streams/concurrent/test_adapters.py @@ -0,0 +1,336 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + +import unittest +from unittest.mock import Mock + +import pytest +from airbyte_cdk.models import AirbyteLogMessage, AirbyteMessage, AirbyteStream, Level, SyncMode +from airbyte_cdk.models import Type as MessageType +from airbyte_cdk.sources.message import InMemoryMessageRepository +from airbyte_cdk.sources.streams.concurrent.adapters import ( + AvailabilityStrategyFacade, + StreamAvailabilityStrategy, + StreamFacade, + StreamPartition, + StreamPartitionGenerator, +) +from airbyte_cdk.sources.streams.concurrent.availability_strategy import STREAM_AVAILABLE, StreamAvailable, StreamUnavailable +from airbyte_cdk.sources.streams.concurrent.exceptions import ExceptionWithDisplayMessage +from airbyte_cdk.sources.streams.concurrent.partitions.record import Record + + +@pytest.mark.parametrize( + "stream_availability, expected_available, expected_message", + [ + pytest.param(StreamAvailable(), True, None, id="test_stream_is_available"), + pytest.param(STREAM_AVAILABLE, True, None, id="test_stream_is_available_using_singleton"), + pytest.param(StreamUnavailable("message"), False, "message", id="test_stream_is_available"), + ], +) +def test_availability_strategy_facade(stream_availability, expected_available, expected_message): + strategy = Mock() + strategy.check_availability.return_value = stream_availability + facade = AvailabilityStrategyFacade(strategy) + + logger = Mock() + available, message = facade.check_availability(Mock(), logger, Mock()) + + assert available == expected_available + assert message == expected_message + + strategy.check_availability.assert_called_once_with(logger) + + +def test_stream_availability_strategy(): + stream = Mock() + source = Mock() + stream.check_availability.return_value = True, None + logger = Mock() + availability_strategy = StreamAvailabilityStrategy(stream, source) + + stream_availability = availability_strategy.check_availability(logger) + assert stream_availability.is_available() + assert stream_availability.message() is None + + stream.check_availability.assert_called_once_with(logger, source) + + +@pytest.mark.parametrize( + "sync_mode", + [ + pytest.param(SyncMode.full_refresh, id="test_full_refresh"), + pytest.param(SyncMode.incremental, id="test_incremental"), + ], +) +def test_stream_partition_generator(sync_mode): + stream = Mock() + message_repository = Mock() + stream_slices = [{"slice": 1}, {"slice": 2}] + stream.stream_slices.return_value = stream_slices + + partition_generator = StreamPartitionGenerator(stream, message_repository) + + partitions = list(partition_generator.generate(sync_mode)) + slices = [partition.to_slice() for partition in partitions] + assert slices == stream_slices + + +def test_stream_partition(): + stream = Mock() + message_repository = InMemoryMessageRepository() + _slice = None + partition = StreamPartition(stream, _slice, message_repository) + + a_log_message = AirbyteMessage( + type=MessageType.LOG, + log=AirbyteLogMessage( + level=Level.INFO, + message='slice:{"partition": 1}', + ), + ) + + stream_data = [a_log_message, {"data": 1}, {"data": 2}] + stream.read_records.return_value = stream_data + + records = list(partition.read()) + messages = list(message_repository.consume_queue()) + + expected_records = [ + Record({"data": 1}), + Record({"data": 2}), + ] + + assert records == expected_records + assert messages == [a_log_message] + + +@pytest.mark.parametrize( + "exception_type, expected_display_message", + [ + pytest.param(Exception, None, id="test_exception_no_display_message"), + pytest.param(ExceptionWithDisplayMessage, "display_message", id="test_exception_no_display_message"), + ], +) +def test_stream_partition_raising_exception(exception_type, expected_display_message): + stream = Mock() + stream.get_error_display_message.return_value = expected_display_message + + message_repository = InMemoryMessageRepository() + _slice = None + partition = StreamPartition(stream, _slice, message_repository) + + stream.read_records.side_effect = Exception() + + with pytest.raises(exception_type) as e: + list(partition.read()) + if isinstance(e, ExceptionWithDisplayMessage): + assert e.display_message == "display message" + + +@pytest.mark.parametrize( + "_slice, expected_hash", + [ + pytest.param({"partition": 1, "k": "v"}, hash(("stream", '{"k": "v", "partition": 1}')), id="test_hash_with_slice"), + pytest.param(None, hash("stream"), id="test_hash_no_slice"), + ], +) +def test_stream_partition_hash(_slice, expected_hash): + stream = Mock() + stream.name = "stream" + partition = StreamPartition(stream, _slice, Mock()) + + _hash = partition.__hash__() + assert _hash == expected_hash + + +class StreamFacadeTest(unittest.TestCase): + def setUp(self): + self._abstract_stream = Mock() + self._abstract_stream.name = "stream" + self._abstract_stream.as_airbyte_stream.return_value = AirbyteStream( + name="stream", + json_schema={"type": "object"}, + supported_sync_modes=[SyncMode.full_refresh], + ) + self._facade = StreamFacade(self._abstract_stream) + self._logger = Mock() + self._source = Mock() + self._max_workers = 10 + + self._stream = Mock() + self._stream.primary_key = "id" + + def test_name_is_delegated_to_wrapped_stream(self): + assert self._facade.name == self._abstract_stream.name + + def test_cursor_field_is_a_string(self): + self._abstract_stream.cursor_field = "cursor_field" + assert self._facade.cursor_field == "cursor_field" + + def test_none_cursor_field_is_converted_to_an_empty_list(self): + self._abstract_stream.cursor_field = None + assert self._facade.cursor_field == [] + + def test_source_defined_cursor_is_true(self): + assert self._facade.source_defined_cursor + + def test_json_schema_is_delegated_to_wrapped_stream(self): + json_schema = {"type": "object"} + self._abstract_stream.get_json_schema.return_value = json_schema + assert self._facade.get_json_schema() == json_schema + self._abstract_stream.get_json_schema.assert_called_once_with() + + def test_supports_incremental_is_false(self): + assert self._facade.supports_incremental is False + + def test_check_availability_is_delegated_to_wrapped_stream(self): + availability = StreamAvailable() + self._abstract_stream.check_availability.return_value = availability + assert self._facade.check_availability(Mock(), Mock()) == (availability.is_available(), availability.message()) + self._abstract_stream.check_availability.assert_called_once_with() + + def test_full_refresh(self): + expected_stream_data = [{"data": 1}, {"data": 2}] + records = [Record(data) for data in expected_stream_data] + self._abstract_stream.read.return_value = records + + actual_stream_data = list(self._facade.read_records(SyncMode.full_refresh, None, None, None)) + + assert actual_stream_data == expected_stream_data + + def test_read_records_full_refresh(self): + expected_stream_data = [{"data": 1}, {"data": 2}] + records = [Record(data) for data in expected_stream_data] + self._abstract_stream.read.return_value = records + + actual_stream_data = list(self._facade.read_full_refresh(None, None, None)) + + assert actual_stream_data == expected_stream_data + + def test_read_records_incremental(self): + with self.assertRaises(NotImplementedError): + list(self._facade.read_records(SyncMode.incremental, None, None, None)) + + def test_create_from_stream_stream(self): + stream = Mock() + stream.name = "stream" + stream.primary_key = "id" + stream.cursor_field = "cursor" + + facade = StreamFacade.create_from_stream(stream, self._source, self._logger, self._max_workers) + + assert facade.name == "stream" + assert facade.cursor_field == "cursor" + assert facade._abstract_stream._primary_key == ["id"] + + def test_create_from_stream_stream_with_none_primary_key(self): + stream = Mock() + stream.name = "stream" + stream.primary_key = None + stream.cursor_field = [] + + facade = StreamFacade.create_from_stream(stream, self._source, self._logger, self._max_workers) + facade._abstract_stream._primary_key is None + + def test_create_from_stream_with_composite_primary_key(self): + stream = Mock() + stream.name = "stream" + stream.primary_key = ["id", "name"] + stream.cursor_field = [] + + facade = StreamFacade.create_from_stream(stream, self._source, self._logger, self._max_workers) + facade._abstract_stream._primary_key == ["id", "name"] + + def test_create_from_stream_with_empty_list_cursor(self): + stream = Mock() + stream.primary_key = "id" + stream.cursor_field = [] + + facade = StreamFacade.create_from_stream(stream, self._source, self._logger, self._max_workers) + + assert facade.cursor_field == [] + + def test_create_from_stream_raises_exception_if_primary_key_is_nested(self): + stream = Mock() + stream.name = "stream" + stream.primary_key = [["field", "id"]] + + with self.assertRaises(ValueError): + StreamFacade.create_from_stream(stream, self._source, self._logger, self._max_workers) + + def test_create_from_stream_raises_exception_if_primary_key_has_invalid_type(self): + stream = Mock() + stream.name = "stream" + stream.primary_key = 123 + + with self.assertRaises(ValueError): + StreamFacade.create_from_stream(stream, self._source, self._logger, self._max_workers) + + def test_create_from_stream_raises_exception_if_cursor_field_is_nested(self): + stream = Mock() + stream.name = "stream" + stream.primary_key = "id" + stream.cursor_field = ["field", "cursor"] + + with self.assertRaises(ValueError): + StreamFacade.create_from_stream(stream, self._source, self._logger, self._max_workers) + + def test_create_from_stream_with_cursor_field_as_list(self): + stream = Mock() + stream.name = "stream" + stream.primary_key = "id" + stream.cursor_field = ["cursor"] + + facade = StreamFacade.create_from_stream(stream, self._source, self._logger, self._max_workers) + assert facade.cursor_field == "cursor" + + def test_create_from_stream_none_message_repository(self): + self._stream.name = "stream" + self._stream.primary_key = "id" + self._stream.cursor_field = "cursor" + self._source.message_repository = None + + with self.assertRaises(ValueError): + StreamFacade.create_from_stream(self._stream, self._source, self._logger, self._max_workers) + + def test_get_error_display_message_no_display_message(self): + self._stream.get_error_display_message.return_value = "display_message" + + facade = StreamFacade.create_from_stream(self._stream, self._source, self._logger, self._max_workers) + + expected_display_message = None + e = Exception() + + display_message = facade.get_error_display_message(e) + + assert expected_display_message == display_message + + def test_get_error_display_message_with_display_message(self): + self._stream.get_error_display_message.return_value = "display_message" + + facade = StreamFacade.create_from_stream(self._stream, self._source, self._logger, self._max_workers) + + expected_display_message = "display_message" + e = ExceptionWithDisplayMessage("display_message") + + display_message = facade.get_error_display_message(e) + + assert expected_display_message == display_message + + +@pytest.mark.parametrize( + "exception, expected_display_message", + [ + pytest.param(Exception("message"), None, id="test_no_display_message"), + pytest.param(ExceptionWithDisplayMessage("message"), "message", id="test_no_display_message"), + ], +) +def test_get_error_display_message(exception, expected_display_message): + stream = Mock() + facade = StreamFacade(stream) + + display_message = facade.get_error_display_message(exception) + + assert display_message == expected_display_message diff --git a/airbyte-cdk/python/unit_tests/sources/streams/concurrent/test_concurrent_partition_generator.py b/airbyte-cdk/python/unit_tests/sources/streams/concurrent/test_concurrent_partition_generator.py new file mode 100644 index 000000000000..aeaacf525072 --- /dev/null +++ b/airbyte-cdk/python/unit_tests/sources/streams/concurrent/test_concurrent_partition_generator.py @@ -0,0 +1,37 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + +from queue import Queue +from unittest.mock import Mock + +import pytest +from airbyte_cdk.models import SyncMode +from airbyte_cdk.sources.streams.concurrent.adapters import StreamPartition +from airbyte_cdk.sources.streams.concurrent.partition_enqueuer import PartitionEnqueuer +from airbyte_cdk.sources.streams.concurrent.partitions.types import PARTITIONS_GENERATED_SENTINEL + + +@pytest.mark.parametrize( + "slices", [pytest.param([], id="test_no_partitions"), pytest.param([{"partition": 1}, {"partition": 2}], id="test_two_partitions")] +) +def test_partition_generator(slices): + queue = Queue() + partition_generator = PartitionEnqueuer(queue, PARTITIONS_GENERATED_SENTINEL) + + stream = Mock() + message_repository = Mock() + partitions = [StreamPartition(stream, s, message_repository) for s in slices] + stream.generate.return_value = iter(partitions) + + sync_mode = SyncMode.full_refresh + + partition_generator.generate_partitions(stream, sync_mode) + + actual_partitions = [] + while partition := queue.get(False): + if partition == PARTITIONS_GENERATED_SENTINEL: + break + actual_partitions.append(partition) + + assert actual_partitions == partitions diff --git a/airbyte-cdk/python/unit_tests/sources/streams/concurrent/test_partition_reader.py b/airbyte-cdk/python/unit_tests/sources/streams/concurrent/test_partition_reader.py new file mode 100644 index 000000000000..77845d7fb0ab --- /dev/null +++ b/airbyte-cdk/python/unit_tests/sources/streams/concurrent/test_partition_reader.py @@ -0,0 +1,32 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + +from queue import Queue +from unittest.mock import Mock + +from airbyte_cdk.sources.streams.concurrent.partition_reader import PartitionReader +from airbyte_cdk.sources.streams.concurrent.partitions.record import Record +from airbyte_cdk.sources.streams.concurrent.partitions.types import PartitionCompleteSentinel + + +def test_partition_reader(): + queue = Queue() + partition_reader = PartitionReader(queue) + + stream_partition = Mock() + records = [ + Record({"id": 1, "name": "Jack"}), + Record({"id": 2, "name": "John"}), + ] + stream_partition.read.return_value = iter(records) + + partition_reader.process_partition(stream_partition) + + actual_records = [] + while record := queue.get(): + if isinstance(record, PartitionCompleteSentinel): + break + actual_records.append(record) + + assert records == actual_records diff --git a/airbyte-cdk/python/unit_tests/sources/streams/concurrent/test_thread_based_concurrent_stream.py b/airbyte-cdk/python/unit_tests/sources/streams/concurrent/test_thread_based_concurrent_stream.py new file mode 100644 index 000000000000..8b5dd8d0fe8d --- /dev/null +++ b/airbyte-cdk/python/unit_tests/sources/streams/concurrent/test_thread_based_concurrent_stream.py @@ -0,0 +1,131 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + +import unittest +from unittest.mock import Mock, call + +from airbyte_cdk.models import AirbyteStream, SyncMode +from airbyte_cdk.sources.streams.concurrent.availability_strategy import STREAM_AVAILABLE +from airbyte_cdk.sources.streams.concurrent.partitions.partition import Partition +from airbyte_cdk.sources.streams.concurrent.partitions.record import Record +from airbyte_cdk.sources.streams.concurrent.thread_based_concurrent_stream import ThreadBasedConcurrentStream + + +class ThreadBasedConcurrentStreamTest(unittest.TestCase): + def setUp(self): + self._partition_generator = Mock() + self._max_workers = 1 + self._name = "name" + self._json_schema = {} + self._availability_strategy = Mock() + self._primary_key = [] + self._cursor_field = None + self._slice_logger = Mock() + self._logger = Mock() + self._message_repository = Mock() + self._stream = ThreadBasedConcurrentStream( + self._partition_generator, + self._max_workers, + self._name, + self._json_schema, + self._availability_strategy, + self._primary_key, + self._cursor_field, + self._slice_logger, + self._logger, + self._message_repository, + 1, + 2, + 0, + ) + + def test_get_json_schema(self): + json_schema = self._stream.get_json_schema() + assert json_schema == self._json_schema + + def test_check_availability(self): + self._availability_strategy.check_availability.return_value = STREAM_AVAILABLE + availability = self._stream.check_availability() + assert availability == STREAM_AVAILABLE + self._availability_strategy.check_availability.assert_called_once_with(self._logger) + + def test_check_for_error_raises_no_exception_if_all_futures_succeeded(self): + futures = [Mock() for _ in range(3)] + for f in futures: + f.exception.return_value = None + + self._stream._check_for_errors(futures) + + def test_check_for_error_raises_an_exception_if_any_of_the_futures_raised_an_exception(self): + futures = [Mock() for _ in range(3)] + for f in futures: + f.exception.return_value = None + futures[0].exception.return_value = Exception("error") + + with self.assertRaises(Exception): + self._stream._check_for_errors(futures) + + def test_check_for_error_raises_an_exception_if_any_of_the_futures_are_not_done(self): + futures = [Mock() for _ in range(3)] + for f in futures: + f.exception.return_value = None + futures[0].done.return_value = False + + with self.assertRaises(Exception): + self._stream._check_for_errors(futures) + + def test_read_no_slice_message(self): + partition = Mock(spec=Partition) + expected_records = [Record({"id": 1}), Record({"id": "2"})] + partition.read.return_value = expected_records + partition.to_slice.return_value = {"slice": "slice"} + self._slice_logger.should_log_slice_message.return_value = False + + self._partition_generator.generate.return_value = [partition] + actual_records = list(self._stream.read()) + + assert expected_records == actual_records + + self._message_repository.emit_message.assert_not_called() + + def test_read_log_slice_message(self): + partition = Mock(spec=Partition) + expected_records = [Record({"id": 1}), Record({"id": "2"})] + partition.read.return_value = expected_records + partition.to_slice.return_value = {"slice": "slice"} + self._slice_logger.should_log_slice_message.return_value = True + slice_log_message = Mock() + self._slice_logger.create_slice_log_message.return_value = slice_log_message + + self._partition_generator.generate.return_value = [partition] + list(self._stream.read()) + + self._message_repository.emit_message.assert_called_once_with(slice_log_message) + + def test_as_airbyte_stream(self): + expected_airbyte_stream = AirbyteStream( + name=self._name, + json_schema=self._json_schema, + supported_sync_modes=[SyncMode.full_refresh], + source_defined_cursor=None, + default_cursor_field=None, + source_defined_primary_key=None, + namespace=None, + ) + actual_airbyte_stream = self._stream.as_airbyte_stream() + + assert expected_airbyte_stream == actual_airbyte_stream + + def test_wait_while_task_queue_is_full(self): + f1 = Mock() + f2 = Mock() + + # Verify that the done() method will be called until only one future is still running + f1.done.side_effect = [False, False] + f2.done.side_effect = [False, True] + futures = [f1, f2] + self._stream._wait_while_too_many_pending_futures(futures) + + f1.done.assert_has_calls([call(), call()]) + f2.done.assert_has_calls([call(), call()]) diff --git a/airbyte-cdk/python/unit_tests/sources/streams/http/requests_native_auth/test_requests_native_auth.py b/airbyte-cdk/python/unit_tests/sources/streams/http/requests_native_auth/test_requests_native_auth.py index a8bbe2e066ff..e4d0c9e23297 100644 --- a/airbyte-cdk/python/unit_tests/sources/streams/http/requests_native_auth/test_requests_native_auth.py +++ b/airbyte-cdk/python/unit_tests/sources/streams/http/requests_native_auth/test_requests_native_auth.py @@ -4,6 +4,7 @@ import json import logging +from typing import Optional, Union from unittest.mock import Mock import freezegun @@ -170,8 +171,54 @@ def test_refresh_access_token(self, mocker): mocker.patch.object(resp, "json", return_value={"access_token": "access_token", "expires_in": "2000"}) token, expires_in = oauth.refresh_access_token() - assert isinstance(expires_in, int) - assert ("access_token", 2000) == (token, expires_in) + assert isinstance(expires_in, str) + assert ("access_token", "2000") == (token, expires_in) + + # Test with expires_in as str + mocker.patch.object(resp, "json", return_value={"access_token": "access_token", "expires_in": "2022-04-24T00:00:00Z"}) + token, expires_in = oauth.refresh_access_token() + + assert isinstance(expires_in, str) + assert ("access_token", "2022-04-24T00:00:00Z") == (token, expires_in) + + @pytest.mark.parametrize( + "expires_in_response, token_expiry_date_format, expected_token_expiry_date", + [ + (3600, None, pendulum.datetime(year=2022, month=1, day=1, hour=1)), + ("90012", None, pendulum.datetime(year=2022, month=1, day=2, hour=1, second=12)), + ("2024-02-28", "YYYY-MM-DD", pendulum.datetime(year=2024, month=2, day=28)), + ("2022-02-12T00:00:00.000000+00:00", "YYYY-MM-DDTHH:mm:ss.SSSSSSZ", pendulum.datetime(year=2022, month=2, day=12)), + ], + ids=["seconds", "string_of_seconds", "simple_date", "simple_datetime"], + ) + @freezegun.freeze_time("2022-01-01") + def test_parse_refresh_token_lifespan( + self, + mocker, + expires_in_response: Union[str, int], + token_expiry_date_format: Optional[str], + expected_token_expiry_date: pendulum.DateTime, + ): + oauth = Oauth2Authenticator( + token_refresh_endpoint="refresh_end", + client_id="some_client_id", + client_secret="some_client_secret", + refresh_token="some_refresh_token", + scopes=["scope1", "scope2"], + token_expiry_date=pendulum.now().subtract(days=3), + token_expiry_date_format=token_expiry_date_format, + token_expiry_is_time_of_expiration=bool(token_expiry_date_format), + refresh_request_body={"custom_field": "in_outbound_request", "another_field": "exists_in_body", "scopes": ["no_override"]}, + ) + + resp.status_code = 200 + mocker.patch.object(resp, "json", return_value={"access_token": "access_token", "expires_in": expires_in_response}) + mocker.patch.object(requests, "request", side_effect=mock_request, autospec=True) + token, expire_in = oauth.refresh_access_token() + expires_datetime = oauth._parse_token_expiration_date(expire_in) + + assert isinstance(expires_datetime, pendulum.DateTime) + assert ("access_token", expected_token_expiry_date) == (token, expires_datetime) @pytest.mark.parametrize("error_code", (429, 500, 502, 504)) def test_refresh_access_token_retry(self, error_code, requests_mock): diff --git a/airbyte-cdk/python/unit_tests/sources/streams/http/test_availability_strategy.py b/airbyte-cdk/python/unit_tests/sources/streams/http/test_availability_strategy.py index 9f9ff5f6ba03..b63af7973854 100644 --- a/airbyte-cdk/python/unit_tests/sources/streams/http/test_availability_strategy.py +++ b/airbyte-cdk/python/unit_tests/sources/streams/http/test_availability_strategy.py @@ -63,10 +63,25 @@ def retry_factor(self) -> float: (False, ["Please visit the connector's documentation to learn more."]), ], ) +@pytest.mark.parametrize("records_as_list", [True, False]) def test_default_http_availability_strategy( - mocker, status_code, json_contents, expected_is_available, expected_messages, include_source, expected_docs_url_messages + mocker, + status_code, + json_contents, + expected_is_available, + expected_messages, + include_source, + expected_docs_url_messages, + records_as_list, ): - http_stream = MockHttpStream() + class MockListHttpStream(MockHttpStream): + def read_records(self, *args, **kvargs): + if records_as_list: + return list(super().read_records(*args, **kvargs)) + else: + return super().read_records(*args, **kvargs) + + http_stream = MockListHttpStream() assert isinstance(http_stream.availability_strategy, HttpAvailabilityStrategy) class MockResponseWithJsonContents(requests.Response, mocker.MagicMock): @@ -140,7 +155,8 @@ def test_send_handles_retries_when_checking_availability(mocker, caplog): assert message in caplog.text -def test_http_availability_strategy_on_empty_stream(mocker): +@pytest.mark.parametrize("records_as_list", [True, False]) +def test_http_availability_strategy_on_empty_stream(mocker, records_as_list): class MockEmptyHttpStream(mocker.MagicMock, MockHttpStream): def __init__(self, *args, **kvargs): mocker.MagicMock.__init__(self) @@ -152,7 +168,10 @@ def __init__(self, *args, **kvargs): assert isinstance(empty_stream.availability_strategy, HttpAvailabilityStrategy) # Generator should have no values to generate - empty_stream.read_records.return_value = iter([]) + if records_as_list: + empty_stream.read_records.return_value = [] + else: + empty_stream.read_records.return_value = iter([]) logger = logging.getLogger("airbyte.test-source") stream_is_available, _ = empty_stream.check_availability(logger) diff --git a/airbyte-cdk/python/unit_tests/sources/streams/test_stream_read.py b/airbyte-cdk/python/unit_tests/sources/streams/test_stream_read.py new file mode 100644 index 000000000000..84c7982c3975 --- /dev/null +++ b/airbyte-cdk/python/unit_tests/sources/streams/test_stream_read.py @@ -0,0 +1,193 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + +import logging +from typing import Any, Iterable, List, Mapping, Optional, Union +from unittest.mock import Mock + +import pytest +from airbyte_cdk.models import AirbyteLogMessage, AirbyteMessage, Level, SyncMode +from airbyte_cdk.models import Type as MessageType +from airbyte_cdk.sources.message import InMemoryMessageRepository +from airbyte_cdk.sources.streams import Stream +from airbyte_cdk.sources.streams.concurrent.adapters import StreamFacade +from airbyte_cdk.sources.streams.core import StreamData +from airbyte_cdk.sources.utils.schema_helpers import InternalConfig +from airbyte_cdk.sources.utils.slice_logger import DebugSliceLogger + +_A_CURSOR_FIELD = ["NESTED", "CURSOR"] +_DEFAULT_INTERNAL_CONFIG = InternalConfig() +_STREAM_NAME = "STREAM" + + +class _MockStream(Stream): + def __init__(self, slice_to_records: Mapping[str, List[Mapping[str, Any]]]): + self._slice_to_records = slice_to_records + + @property + def primary_key(self) -> Optional[Union[str, List[str], List[List[str]]]]: + return None + + def stream_slices( + self, *, sync_mode: SyncMode, cursor_field: Optional[List[str]] = None, stream_state: Optional[Mapping[str, Any]] = None + ) -> Iterable[Optional[Mapping[str, Any]]]: + for partition in self._slice_to_records.keys(): + yield {"partition": partition} + + def read_records( + self, + sync_mode: SyncMode, + cursor_field: Optional[List[str]] = None, + stream_slice: Optional[Mapping[str, Any]] = None, + stream_state: Optional[Mapping[str, Any]] = None, + ) -> Iterable[StreamData]: + yield from self._slice_to_records[stream_slice["partition"]] + + def get_json_schema(self) -> Mapping[str, Any]: + return {} + + +def _stream(slice_to_partition_mapping, slice_logger, logger, message_repository): + return _MockStream(slice_to_partition_mapping) + + +def _concurrent_stream(slice_to_partition_mapping, slice_logger, logger, message_repository): + stream = _stream(slice_to_partition_mapping, slice_logger, logger, message_repository) + source = Mock() + source._slice_logger = slice_logger + source.message_repository = message_repository + stream = StreamFacade.create_from_stream(stream, source, logger, 1) + stream.logger.setLevel(logger.level) + return stream + + +@pytest.mark.parametrize( + "constructor", + [ + pytest.param(_stream, id="synchronous_reader"), + pytest.param(_concurrent_stream, id="concurrent_reader"), + ], +) +def test_full_refresh_read_a_single_slice_with_debug(constructor): + # This test verifies that a concurrent stream adapted from a Stream behaves the same as the Stream object. + # It is done by running the same test cases on both streams + records = [ + {"id": 1, "partition": 1}, + {"id": 2, "partition": 1}, + ] + slice_to_partition = {1: records} + slice_logger = DebugSliceLogger() + logger = _mock_logger(True) + message_repository = InMemoryMessageRepository(Level.DEBUG) + stream = constructor(slice_to_partition, slice_logger, logger, message_repository) + + expected_records = [ + AirbyteMessage( + type=MessageType.LOG, + log=AirbyteLogMessage( + level=Level.INFO, + message='slice:{"partition": 1}', + ), + ), + *records, + ] + + actual_records = _read(stream, logger, slice_logger, message_repository) + + assert expected_records == actual_records + + +@pytest.mark.parametrize( + "constructor", + [ + pytest.param(_stream, id="synchronous_reader"), + pytest.param(_concurrent_stream, id="concurrent_reader"), + ], +) +def test_full_refresh_read_a_single_slice(constructor): + # This test verifies that a concurrent stream adapted from a Stream behaves the same as the Stream object. + # It is done by running the same test cases on both streams + logger = _mock_logger() + slice_logger = DebugSliceLogger() + message_repository = InMemoryMessageRepository(Level.INFO) + + records = [ + {"id": 1, "partition": 1}, + {"id": 2, "partition": 1}, + ] + slice_to_partition = {1: records} + stream = constructor(slice_to_partition, slice_logger, logger, message_repository) + + expected_records = [*records] + + actual_records = _read(stream, logger, slice_logger, message_repository) + + assert expected_records == actual_records + + +@pytest.mark.parametrize( + "constructor", + [ + pytest.param(_stream, id="synchronous_reader"), + pytest.param(_concurrent_stream, id="concurrent_reader"), + ], +) +def test_full_refresh_read_a_two_slices(constructor): + # This test verifies that a concurrent stream adapted from a Stream behaves the same as the Stream object + # It is done by running the same test cases on both streams + logger = _mock_logger() + slice_logger = DebugSliceLogger() + message_repository = InMemoryMessageRepository(Level.INFO) + + records_partition_1 = [ + {"id": 1, "partition": 1}, + {"id": 2, "partition": 1}, + ] + records_partition_2 = [ + {"id": 3, "partition": 2}, + {"id": 4, "partition": 2}, + ] + slice_to_partition = {1: records_partition_1, 2: records_partition_2} + stream = constructor(slice_to_partition, slice_logger, logger, message_repository) + + expected_records = [ + *records_partition_1, + *records_partition_2, + ] + + actual_records = _read(stream, logger, slice_logger, message_repository) + + for record in expected_records: + assert record in actual_records + assert len(expected_records) == len(actual_records) + + +def _read(stream, logger, slice_logger, message_repository): + records = [] + for record in stream.read_full_refresh(_A_CURSOR_FIELD, logger, slice_logger): + for message in message_repository.consume_queue(): + records.append(message) + records.append(record) + return records + + +def _mock_partition_generator(name: str, slices, records_per_partition, *, available=True, debug_log=False): + stream = Mock() + stream.name = name + stream.get_json_schema.return_value = {} + stream.generate_partitions.return_value = iter(slices) + stream.read_records.side_effect = [iter(records) for records in records_per_partition] + stream.logger.isEnabledFor.return_value = debug_log + if available: + stream.check_availability.return_value = True, None + else: + stream.check_availability.return_value = False, "A reason why the stream is unavailable" + return stream + + +def _mock_logger(enabled_for_debug=False): + logger = Mock() + logger.isEnabledFor.return_value = enabled_for_debug + logger.level = logging.DEBUG if enabled_for_debug else logging.INFO + return logger diff --git a/airbyte-ci/connectors/ci_credentials/README.md b/airbyte-ci/connectors/ci_credentials/README.md index 610da26148c5..525d71c18263 100644 --- a/airbyte-ci/connectors/ci_credentials/README.md +++ b/airbyte-ci/connectors/ci_credentials/README.md @@ -30,13 +30,13 @@ python -m pipx ensurepath Once pyenv and pipx is installed then run the following: ```bash -pipx install --editable --force --version=python3.10 airbyte-ci/connectors/ci_credentials/ +pipx install --editable --force --python=python3.10 airbyte-ci/connectors/ci_credentials/ ``` This command installs `ci_credentials` and makes it globally available in your terminal. _Note: `--force` is required to ensure updates are applied on subsequent installs._ -_Note: `--version=python3.10` is required to ensure the correct python version is used._ +_Note: `--python=python3.10` is required to ensure the correct python version is used._ _Note: `--editable` is required to ensure the correct python version is used._ If you face any installation problem feel free to reach out the Airbyte Connectors Operations team. @@ -46,12 +46,12 @@ If you face any installation problem feel free to reach out the Airbyte Connecto Download a Service account json key that has access to Google Secrets Manager. ### Create Service Account -* Go to https://console.cloud.google.com/iam-admin/serviceaccounts/create?project=dataline-integration-testing +* Go to https://console.cloud.google.com/iam-admin/serviceaccounts/create?project=ab-connector-integration-test * In step #1 `Service account details`, set a name and a relevant description * In step #2 `Grant this service account access to project`, select role `Owner` (there is a role that is more scope but I based this decision on others `-testing` service account) ### Create Service Account Token -* Go to https://console.cloud.google.com/iam-admin/serviceaccounts?project=dataline-integration-testing +* Go to https://console.cloud.google.com/iam-admin/serviceaccounts?project=ab-connector-integration-test * Find your service account and click on it * Go in the tab "KEYS" * Click on "ADD KEY -> Create new key" and select JSON. This will download a file on your computer diff --git a/airbyte-ci/connectors/connector_ops/connector_ops/qa_checks.py b/airbyte-ci/connectors/connector_ops/connector_ops/qa_checks.py index c43ea67f4efe..f5f14e5ffbda 100644 --- a/airbyte-ci/connectors/connector_ops/connector_ops/qa_checks.py +++ b/airbyte-ci/connectors/connector_ops/connector_ops/qa_checks.py @@ -5,7 +5,7 @@ import sys from pathlib import Path -from typing import Iterable, Optional, Set, Tuple +from typing import Callable, Iterable, Optional, Set, Tuple from connector_ops.utils import Connector, ConnectorLanguage from pydash.objects import get @@ -14,7 +14,7 @@ def check_migration_guide(connector: Connector) -> bool: """Check if a migration guide is available for the connector if a breaking change was introduced.""" - breaking_changes = get(connector.metadata, f"releases.breakingChanges") + breaking_changes = get(connector.metadata, "releases.breakingChanges") if not breaking_changes: return True @@ -27,7 +27,7 @@ def check_migration_guide(connector: Connector) -> bool: # Check that the migration guide begins with # {connector name} Migration Guide expected_title = f"# {connector.name_from_metadata} Migration Guide" - expected_version_header_start = f"## Upgrading to " + expected_version_header_start = "## Upgrading to " with open(migration_guide_file_path) as f: first_line = f.readline().strip() if not first_line == expected_title: @@ -55,7 +55,7 @@ def check_migration_guide(connector: Connector) -> bool: if ordered_breaking_changes != ordered_heading_versions: print(f"Migration guide file for {connector.name} has incorrect version headings.") - print(f"Check for missing, extra, or misordered headings, or headers with typos.") + print("Check for missing, extra, or misordered headings, or headers with typos.") print(f"Expected headings: {ordered_expected_headings}") return False @@ -242,7 +242,7 @@ def check_metadata_version_matches_dockerfile_label(connector: Connector) -> boo return version_in_dockerfile == connector.version -QA_CHECKS = [ +DEFAULT_QA_CHECKS = ( check_documentation_file_exists, check_migration_guide, # Disabling the following check because it's likely to not pass on a lot of connectors. @@ -254,8 +254,13 @@ def check_metadata_version_matches_dockerfile_label(connector: Connector) -> boo # https://github.com/airbytehq/airbyte/issues/21606 check_connector_https_url_only, check_connector_has_no_critical_vulnerabilities, - check_metadata_version_matches_dockerfile_label, -] +) + + +def get_qa_checks_to_run(connector: Connector) -> Tuple[Callable]: + if connector.has_dockerfile: + return DEFAULT_QA_CHECKS + (check_metadata_version_matches_dockerfile_label,) + return DEFAULT_QA_CHECKS def remove_strict_encrypt_suffix(connector_technical_name: str) -> str: @@ -289,7 +294,7 @@ def run_qa_checks(): connector_technical_name = remove_strict_encrypt_suffix(connector_technical_name) connector = Connector(connector_technical_name) print(f"Running QA checks for {connector_technical_name}:{connector.version}") - qa_check_results = {qa_check.__name__: qa_check(connector) for qa_check in QA_CHECKS} + qa_check_results = {qa_check.__name__: qa_check(connector) for qa_check in get_qa_checks_to_run(connector)} if not all(qa_check_results.values()): print(f"QA checks failed for {connector_technical_name}:{connector.version}:") for check_name, check_result in qa_check_results.items(): diff --git a/airbyte-ci/connectors/connector_ops/connector_ops/utils.py b/airbyte-ci/connectors/connector_ops/connector_ops/utils.py index e6d6b92a80f1..0f24ed63ba34 100644 --- a/airbyte-ci/connectors/connector_ops/connector_ops/utils.py +++ b/airbyte-ci/connectors/connector_ops/connector_ops/utils.py @@ -27,7 +27,9 @@ CONNECTOR_PATH_PREFIX = "airbyte-integrations/connectors" SOURCE_CONNECTOR_PATH_PREFIX = CONNECTOR_PATH_PREFIX + "/source-" DESTINATION_CONNECTOR_PATH_PREFIX = CONNECTOR_PATH_PREFIX + "/destination-" -THIRD_PARTY_CONNECTOR_PATH_PREFIX = CONNECTOR_PATH_PREFIX + "/third_party/" + +THIRD_PARTY_GLOB = "third-party" +THIRD_PARTY_CONNECTOR_PATH_PREFIX = CONNECTOR_PATH_PREFIX + f"/{THIRD_PARTY_GLOB}/" SCAFFOLD_CONNECTOR_GLOB = "-scaffold-" @@ -297,6 +299,10 @@ def icon_path(self) -> Path: def code_directory(self) -> Path: return Path(f"./airbyte-integrations/connectors/{self.technical_name}") + @property + def has_dockerfile(self) -> bool: + return (self.code_directory / "Dockerfile").is_file() + @property def metadata_file_path(self) -> Path: return self.code_directory / METADATA_FILE_NAME @@ -319,20 +325,19 @@ def language(self) -> ConnectorLanguage: return None @property - def version(self) -> str: + def version(self) -> Optional[str]: if self.metadata is None: return self.version_in_dockerfile_label return self.metadata["dockerImageTag"] @property def version_in_dockerfile_label(self) -> Optional[str]: - try: - with open(self.code_directory / "Dockerfile") as f: - for line in f: - if "io.airbyte.version" in line: - return line.split("=")[1].strip() - except FileNotFoundError as e: + if not self.has_dockerfile: return None + with open(self.code_directory / "Dockerfile") as f: + for line in f: + if "io.airbyte.version" in line: + return line.split("=")[1].strip() raise ConnectorVersionNotFound( """ Could not find the connector version from its Dockerfile. @@ -487,6 +492,10 @@ def normalization_tag(self) -> Optional[str]: if self.supports_normalization: return f"{self.metadata['normalizationConfig']['normalizationTag']}" + @property + def is_using_poetry(self) -> bool: + return Path(self.code_directory / "pyproject.toml").exists() + def get_secret_manager(self, gsm_credentials: str): return SecretsManager(connector_name=self.technical_name, gsm_credentials=gsm_credentials) @@ -540,7 +549,9 @@ def get_all_connectors_in_repo() -> Set[Connector]: return { Connector(Path(metadata_file).parent.name) for metadata_file in glob(f"{repo_path}/airbyte-integrations/connectors/**/metadata.yaml", recursive=True) - if SCAFFOLD_CONNECTOR_GLOB not in metadata_file + # HACK: The Connector util is not good at fetching metadata for third party connectors. + # We want to avoid picking a connector that does not have metadata. + if SCAFFOLD_CONNECTOR_GLOB not in metadata_file and THIRD_PARTY_GLOB not in metadata_file } diff --git a/airbyte-ci/connectors/connector_ops/poetry.lock b/airbyte-ci/connectors/connector_ops/poetry.lock index 72e5805633b9..f852e65d56c7 100644 --- a/airbyte-ci/connectors/connector_ops/poetry.lock +++ b/airbyte-ci/connectors/connector_ops/poetry.lock @@ -24,75 +24,63 @@ files = [ [[package]] name = "cffi" -version = "1.15.1" +version = "1.16.0" description = "Foreign Function Interface for Python calling C code." optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, - {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, - {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, - {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, - {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, - {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, - {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, - {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, - {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, - {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, - {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, - {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, - {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, - {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, - {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, - {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, - {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, - {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, - {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, + {file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"}, + {file = "cffi-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614"}, + {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743"}, + {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d"}, + {file = "cffi-1.16.0-cp310-cp310-win32.whl", hash = "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a"}, + {file = "cffi-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1"}, + {file = "cffi-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404"}, + {file = "cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e"}, + {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc"}, + {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb"}, + {file = "cffi-1.16.0-cp311-cp311-win32.whl", hash = "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab"}, + {file = "cffi-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba"}, + {file = "cffi-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956"}, + {file = "cffi-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969"}, + {file = "cffi-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520"}, + {file = "cffi-1.16.0-cp312-cp312-win32.whl", hash = "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b"}, + {file = "cffi-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235"}, + {file = "cffi-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324"}, + {file = "cffi-1.16.0-cp38-cp38-win32.whl", hash = "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a"}, + {file = "cffi-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36"}, + {file = "cffi-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed"}, + {file = "cffi-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098"}, + {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000"}, + {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe"}, + {file = "cffi-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4"}, + {file = "cffi-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8"}, + {file = "cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"}, ] [package.dependencies] @@ -100,86 +88,101 @@ pycparser = "*" [[package]] name = "charset-normalizer" -version = "3.2.0" +version = "3.3.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, - {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, + {file = "charset-normalizer-3.3.0.tar.gz", hash = "sha256:63563193aec44bce707e0c5ca64ff69fa72ed7cf34ce6e11d5127555756fd2f6"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:effe5406c9bd748a871dbcaf3ac69167c38d72db8c9baf3ff954c344f31c4cbe"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4162918ef3098851fcd8a628bf9b6a98d10c380725df9e04caf5ca6dd48c847a"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0570d21da019941634a531444364f2482e8db0b3425fcd5ac0c36565a64142c8"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5707a746c6083a3a74b46b3a631d78d129edab06195a92a8ece755aac25a3f3d"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:278c296c6f96fa686d74eb449ea1697f3c03dc28b75f873b65b5201806346a69"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a4b71f4d1765639372a3b32d2638197f5cd5221b19531f9245fcc9ee62d38f56"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5969baeaea61c97efa706b9b107dcba02784b1601c74ac84f2a532ea079403e"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3f93dab657839dfa61025056606600a11d0b696d79386f974e459a3fbc568ec"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:db756e48f9c5c607b5e33dd36b1d5872d0422e960145b08ab0ec7fd420e9d649"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:232ac332403e37e4a03d209a3f92ed9071f7d3dbda70e2a5e9cff1c4ba9f0678"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e5c1502d4ace69a179305abb3f0bb6141cbe4714bc9b31d427329a95acfc8bdd"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:2502dd2a736c879c0f0d3e2161e74d9907231e25d35794584b1ca5284e43f596"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23e8565ab7ff33218530bc817922fae827420f143479b753104ab801145b1d5b"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-win32.whl", hash = "sha256:1872d01ac8c618a8da634e232f24793883d6e456a66593135aeafe3784b0848d"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:557b21a44ceac6c6b9773bc65aa1b4cc3e248a5ad2f5b914b91579a32e22204d"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d7eff0f27edc5afa9e405f7165f85a6d782d308f3b6b9d96016c010597958e63"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6a685067d05e46641d5d1623d7c7fdf15a357546cbb2f71b0ebde91b175ffc3e"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0d3d5b7db9ed8a2b11a774db2bbea7ba1884430a205dbd54a32d61d7c2a190fa"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2935ffc78db9645cb2086c2f8f4cfd23d9b73cc0dc80334bc30aac6f03f68f8c"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fe359b2e3a7729010060fbca442ca225280c16e923b37db0e955ac2a2b72a05"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:380c4bde80bce25c6e4f77b19386f5ec9db230df9f2f2ac1e5ad7af2caa70459"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0d1e3732768fecb052d90d62b220af62ead5748ac51ef61e7b32c266cac9293"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1b2919306936ac6efb3aed1fbf81039f7087ddadb3160882a57ee2ff74fd2382"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f8888e31e3a85943743f8fc15e71536bda1c81d5aa36d014a3c0c44481d7db6e"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:82eb849f085624f6a607538ee7b83a6d8126df6d2f7d3b319cb837b289123078"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7b8b8bf1189b3ba9b8de5c8db4d541b406611a71a955bbbd7385bbc45fcb786c"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5adf257bd58c1b8632046bbe43ee38c04e1038e9d37de9c57a94d6bd6ce5da34"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c350354efb159b8767a6244c166f66e67506e06c8924ed74669b2c70bc8735b1"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-win32.whl", hash = "sha256:02af06682e3590ab952599fbadac535ede5d60d78848e555aa58d0c0abbde786"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:86d1f65ac145e2c9ed71d8ffb1905e9bba3a91ae29ba55b4c46ae6fc31d7c0d4"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:3b447982ad46348c02cb90d230b75ac34e9886273df3a93eec0539308a6296d7"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:abf0d9f45ea5fb95051c8bfe43cb40cda383772f7e5023a83cc481ca2604d74e"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b09719a17a2301178fac4470d54b1680b18a5048b481cb8890e1ef820cb80455"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b3d9b48ee6e3967b7901c052b670c7dda6deb812c309439adaffdec55c6d7b78"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:edfe077ab09442d4ef3c52cb1f9dab89bff02f4524afc0acf2d46be17dc479f5"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3debd1150027933210c2fc321527c2299118aa929c2f5a0a80ab6953e3bd1908"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86f63face3a527284f7bb8a9d4f78988e3c06823f7bea2bd6f0e0e9298ca0403"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:24817cb02cbef7cd499f7c9a2735286b4782bd47a5b3516a0e84c50eab44b98e"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c71f16da1ed8949774ef79f4a0260d28b83b3a50c6576f8f4f0288d109777989"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:9cf3126b85822c4e53aa28c7ec9869b924d6fcfb76e77a45c44b83d91afd74f9"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:b3b2316b25644b23b54a6f6401074cebcecd1244c0b8e80111c9a3f1c8e83d65"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:03680bb39035fbcffe828eae9c3f8afc0428c91d38e7d61aa992ef7a59fb120e"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4cc152c5dd831641e995764f9f0b6589519f6f5123258ccaca8c6d34572fefa8"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-win32.whl", hash = "sha256:b8f3307af845803fb0b060ab76cf6dd3a13adc15b6b451f54281d25911eb92df"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:8eaf82f0eccd1505cf39a45a6bd0a8cf1c70dcfc30dba338207a969d91b965c0"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dc45229747b67ffc441b3de2f3ae5e62877a282ea828a5bdb67883c4ee4a8810"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f4a0033ce9a76e391542c182f0d48d084855b5fcba5010f707c8e8c34663d77"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ada214c6fa40f8d800e575de6b91a40d0548139e5dc457d2ebb61470abf50186"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b1121de0e9d6e6ca08289583d7491e7fcb18a439305b34a30b20d8215922d43c"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1063da2c85b95f2d1a430f1c33b55c9c17ffaf5e612e10aeaad641c55a9e2b9d"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70f1d09c0d7748b73290b29219e854b3207aea922f839437870d8cc2168e31cc"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:250c9eb0f4600361dd80d46112213dff2286231d92d3e52af1e5a6083d10cad9"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:750b446b2ffce1739e8578576092179160f6d26bd5e23eb1789c4d64d5af7dc7"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:fc52b79d83a3fe3a360902d3f5d79073a993597d48114c29485e9431092905d8"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:588245972aca710b5b68802c8cad9edaa98589b1b42ad2b53accd6910dad3545"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e39c7eb31e3f5b1f88caff88bcff1b7f8334975b46f6ac6e9fc725d829bc35d4"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-win32.whl", hash = "sha256:abecce40dfebbfa6abf8e324e1860092eeca6f7375c8c4e655a8afb61af58f2c"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:24a91a981f185721542a0b7c92e9054b7ab4fea0508a795846bc5b0abf8118d4"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:67b8cc9574bb518ec76dc8e705d4c39ae78bb96237cb533edac149352c1f39fe"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac71b2977fb90c35d41c9453116e283fac47bb9096ad917b8819ca8b943abecd"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3ae38d325b512f63f8da31f826e6cb6c367336f95e418137286ba362925c877e"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:542da1178c1c6af8873e143910e2269add130a299c9106eef2594e15dae5e482"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30a85aed0b864ac88309b7d94be09f6046c834ef60762a8833b660139cfbad13"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aae32c93e0f64469f74ccc730a7cb21c7610af3a775157e50bbd38f816536b38"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15b26ddf78d57f1d143bdf32e820fd8935d36abe8a25eb9ec0b5a71c82eb3895"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f5d10bae5d78e4551b7be7a9b29643a95aded9d0f602aa2ba584f0388e7a557"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:249c6470a2b60935bafd1d1d13cd613f8cd8388d53461c67397ee6a0f5dce741"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c5a74c359b2d47d26cdbbc7845e9662d6b08a1e915eb015d044729e92e7050b7"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:b5bcf60a228acae568e9911f410f9d9e0d43197d030ae5799e20dca8df588287"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:187d18082694a29005ba2944c882344b6748d5be69e3a89bf3cc9d878e548d5a"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:81bf654678e575403736b85ba3a7867e31c2c30a69bc57fe88e3ace52fb17b89"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-win32.whl", hash = "sha256:85a32721ddde63c9df9ebb0d2045b9691d9750cb139c161c80e500d210f5e26e"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:468d2a840567b13a590e67dd276c570f8de00ed767ecc611994c301d0f8c014f"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e0fc42822278451bc13a2e8626cf2218ba570f27856b536e00cfa53099724828"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:09c77f964f351a7369cc343911e0df63e762e42bac24cd7d18525961c81754f4"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:12ebea541c44fdc88ccb794a13fe861cc5e35d64ed689513a5c03d05b53b7c82"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:805dfea4ca10411a5296bcc75638017215a93ffb584c9e344731eef0dcfb026a"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:96c2b49eb6a72c0e4991d62406e365d87067ca14c1a729a870d22354e6f68115"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaf7b34c5bc56b38c931a54f7952f1ff0ae77a2e82496583b247f7c969eb1479"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:619d1c96099be5823db34fe89e2582b336b5b074a7f47f819d6b3a57ff7bdb86"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0ac5e7015a5920cfce654c06618ec40c33e12801711da6b4258af59a8eff00a"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:93aa7eef6ee71c629b51ef873991d6911b906d7312c6e8e99790c0f33c576f89"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7966951325782121e67c81299a031f4c115615e68046f79b85856b86ebffc4cd"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:02673e456dc5ab13659f85196c534dc596d4ef260e4d86e856c3b2773ce09843"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:c2af80fb58f0f24b3f3adcb9148e6203fa67dd3f61c4af146ecad033024dde43"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:153e7b6e724761741e0974fc4dcd406d35ba70b92bfe3fedcb497226c93b9da7"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-win32.whl", hash = "sha256:d47ecf253780c90ee181d4d871cd655a789da937454045b17b5798da9393901a"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:d97d85fa63f315a8bdaba2af9a6a686e0eceab77b3089af45133252618e70884"}, + {file = "charset_normalizer-3.3.0-py3-none-any.whl", hash = "sha256:e46cd37076971c1040fc8c41273a8b3e2c624ce4f2be3f5dfcb7a430c1d3acc2"}, ] [[package]] @@ -344,30 +347,30 @@ smmap = ">=3.0.1,<6" [[package]] name = "gitpython" -version = "3.1.36" +version = "3.1.37" description = "GitPython is a Python library used to interact with Git repositories" optional = false python-versions = ">=3.7" files = [ - {file = "GitPython-3.1.36-py3-none-any.whl", hash = "sha256:8d22b5cfefd17c79914226982bb7851d6ade47545b1735a9d010a2a4c26d8388"}, - {file = "GitPython-3.1.36.tar.gz", hash = "sha256:4bb0c2a6995e85064140d31a33289aa5dce80133a23d36fcd372d716c54d3ebf"}, + {file = "GitPython-3.1.37-py3-none-any.whl", hash = "sha256:5f4c4187de49616d710a77e98ddf17b4782060a1788df441846bddefbb89ab33"}, + {file = "GitPython-3.1.37.tar.gz", hash = "sha256:f9b9ddc0761c125d5780eab2d64be4873fc6817c2899cbcb34b02344bdc7bc54"}, ] [package.dependencies] gitdb = ">=4.0.1,<5" [package.extras] -test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mypy", "pre-commit", "pytest", "pytest-cov", "pytest-sugar", "virtualenv"] +test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mypy", "pre-commit", "pytest", "pytest-cov", "pytest-sugar"] [[package]] name = "google-api-core" -version = "2.11.1" +version = "2.12.0" description = "Google API client core library" optional = false python-versions = ">=3.7" files = [ - {file = "google-api-core-2.11.1.tar.gz", hash = "sha256:25d29e05a0058ed5f19c61c0a78b1b53adea4d9364b464d014fbda941f6d1c9a"}, - {file = "google_api_core-2.11.1-py3-none-any.whl", hash = "sha256:d92a5a92dc36dd4f4b9ee4e55528a90e432b059f93aee6ad857f9de8cc7ae94a"}, + {file = "google-api-core-2.12.0.tar.gz", hash = "sha256:c22e01b1e3c4dcd90998494879612c38d0a3411d1f7b679eb89e2abe3ce1f553"}, + {file = "google_api_core-2.12.0-py3-none-any.whl", hash = "sha256:ec6054f7d64ad13b41e43d96f735acbd763b0f3b695dabaa2d579673f6a6e160"}, ] [package.dependencies] @@ -383,20 +386,19 @@ grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] [[package]] name = "google-auth" -version = "2.23.0" +version = "2.23.3" description = "Google Authentication Library" optional = false python-versions = ">=3.7" files = [ - {file = "google-auth-2.23.0.tar.gz", hash = "sha256:753a26312e6f1eaeec20bc6f2644a10926697da93446e1f8e24d6d32d45a922a"}, - {file = "google_auth-2.23.0-py2.py3-none-any.whl", hash = "sha256:2cec41407bd1e207f5b802638e32bb837df968bb5c05f413d0fa526fac4cf7a7"}, + {file = "google-auth-2.23.3.tar.gz", hash = "sha256:6864247895eea5d13b9c57c9e03abb49cb94ce2dc7c58e91cba3248c7477c9e3"}, + {file = "google_auth-2.23.3-py2.py3-none-any.whl", hash = "sha256:a8f4608e65c244ead9e0538f181a96c6e11199ec114d41f1d7b1bffa96937bda"}, ] [package.dependencies] cachetools = ">=2.0.0,<6.0" pyasn1-modules = ">=0.2.1" rsa = ">=3.1.4,<5" -urllib3 = "<2.0" [package.extras] aiohttp = ["aiohttp (>=3.6.2,<4.0.0.dev0)", "requests (>=2.20.0,<3.0.0.dev0)"] @@ -425,20 +427,20 @@ grpc = ["grpcio (>=1.38.0,<2.0dev)"] [[package]] name = "google-cloud-storage" -version = "2.10.0" +version = "2.11.0" description = "Google Cloud Storage API client library" optional = false python-versions = ">=3.7" files = [ - {file = "google-cloud-storage-2.10.0.tar.gz", hash = "sha256:934b31ead5f3994e5360f9ff5750982c5b6b11604dc072bc452c25965e076dc7"}, - {file = "google_cloud_storage-2.10.0-py2.py3-none-any.whl", hash = "sha256:9433cf28801671de1c80434238fb1e7e4a1ba3087470e90f70c928ea77c2b9d7"}, + {file = "google-cloud-storage-2.11.0.tar.gz", hash = "sha256:6fbf62659b83c8f3a0a743af0d661d2046c97c3a5bfb587c4662c4bc68de3e31"}, + {file = "google_cloud_storage-2.11.0-py2.py3-none-any.whl", hash = "sha256:88cbd7fb3d701c780c4272bc26952db99f25eb283fb4c2208423249f00b5fe53"}, ] [package.dependencies] google-api-core = ">=1.31.5,<2.0.dev0 || >2.3.0,<3.0.0dev" google-auth = ">=1.25.0,<3.0dev" google-cloud-core = ">=2.3.0,<3.0dev" -google-resumable-media = ">=2.3.2" +google-resumable-media = ">=2.6.0" requests = ">=2.18.0,<3.0.0dev" [package.extras] @@ -693,13 +695,13 @@ files = [ [[package]] name = "packaging" -version = "23.1" +version = "23.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.7" files = [ - {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, - {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, ] [[package]] @@ -730,10 +732,74 @@ files = [ {file = "pandas-2.1.0.tar.gz", hash = "sha256:62c24c7fc59e42b775ce0679cfa7b14a5f9bfb7643cfbe708c960699e05fb918"}, ] +[package.dependencies] +numpy = {version = ">=1.23.2", markers = "python_version >= \"3.11\""} +python-dateutil = ">=2.8.2" +pytz = ">=2020.1" +tzdata = ">=2022.1" + +[package.extras] +all = ["PyQt5 (>=5.15.6)", "SQLAlchemy (>=1.4.36)", "beautifulsoup4 (>=4.11.1)", "bottleneck (>=1.3.4)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=0.8.1)", "fsspec (>=2022.05.0)", "gcsfs (>=2022.05.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.8.0)", "matplotlib (>=3.6.1)", "numba (>=0.55.2)", "numexpr (>=2.8.0)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.10)", "pandas-gbq (>=0.17.5)", "psycopg2 (>=2.9.3)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.5)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)", "pyxlsb (>=1.0.9)", "qtpy (>=2.2.0)", "s3fs (>=2022.05.0)", "scipy (>=1.8.1)", "tables (>=3.7.0)", "tabulate (>=0.8.10)", "xarray (>=2022.03.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.3)", "zstandard (>=0.17.0)"] +aws = ["s3fs (>=2022.05.0)"] +clipboard = ["PyQt5 (>=5.15.6)", "qtpy (>=2.2.0)"] +compression = ["zstandard (>=0.17.0)"] +computation = ["scipy (>=1.8.1)", "xarray (>=2022.03.0)"] +consortium-standard = ["dataframe-api-compat (>=0.1.7)"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.0.10)", "pyxlsb (>=1.0.9)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.3)"] +feather = ["pyarrow (>=7.0.0)"] +fss = ["fsspec (>=2022.05.0)"] +gcp = ["gcsfs (>=2022.05.0)", "pandas-gbq (>=0.17.5)"] +hdf5 = ["tables (>=3.7.0)"] +html = ["beautifulsoup4 (>=4.11.1)", "html5lib (>=1.1)", "lxml (>=4.8.0)"] +mysql = ["SQLAlchemy (>=1.4.36)", "pymysql (>=1.0.2)"] +output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.8.10)"] +parquet = ["pyarrow (>=7.0.0)"] +performance = ["bottleneck (>=1.3.4)", "numba (>=0.55.2)", "numexpr (>=2.8.0)"] +plot = ["matplotlib (>=3.6.1)"] +postgresql = ["SQLAlchemy (>=1.4.36)", "psycopg2 (>=2.9.3)"] +spss = ["pyreadstat (>=1.1.5)"] +sql-other = ["SQLAlchemy (>=1.4.36)"] +test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)"] +xml = ["lxml (>=4.8.0)"] + +[[package]] +name = "pandas" +version = "2.1.1" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.9" +files = [ + {file = "pandas-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:58d997dbee0d4b64f3cb881a24f918b5f25dd64ddf31f467bb9b67ae4c63a1e4"}, + {file = "pandas-2.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02304e11582c5d090e5a52aec726f31fe3f42895d6bfc1f28738f9b64b6f0614"}, + {file = "pandas-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffa8f0966de2c22de408d0e322db2faed6f6e74265aa0856f3824813cf124363"}, + {file = "pandas-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1f84c144dee086fe4f04a472b5cd51e680f061adf75c1ae4fc3a9275560f8f4"}, + {file = "pandas-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:75ce97667d06d69396d72be074f0556698c7f662029322027c226fd7a26965cb"}, + {file = "pandas-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:4c3f32fd7c4dccd035f71734df39231ac1a6ff95e8bdab8d891167197b7018d2"}, + {file = "pandas-2.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9e2959720b70e106bb1d8b6eadd8ecd7c8e99ccdbe03ee03260877184bb2877d"}, + {file = "pandas-2.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:25e8474a8eb258e391e30c288eecec565bfed3e026f312b0cbd709a63906b6f8"}, + {file = "pandas-2.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8bd1685556f3374520466998929bade3076aeae77c3e67ada5ed2b90b4de7f0"}, + {file = "pandas-2.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc3657869c7902810f32bd072f0740487f9e030c1a3ab03e0af093db35a9d14e"}, + {file = "pandas-2.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:05674536bd477af36aa2effd4ec8f71b92234ce0cc174de34fd21e2ee99adbc2"}, + {file = "pandas-2.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:b407381258a667df49d58a1b637be33e514b07f9285feb27769cedb3ab3d0b3a"}, + {file = "pandas-2.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c747793c4e9dcece7bb20156179529898abf505fe32cb40c4052107a3c620b49"}, + {file = "pandas-2.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3bcad1e6fb34b727b016775bea407311f7721db87e5b409e6542f4546a4951ea"}, + {file = "pandas-2.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f5ec7740f9ccb90aec64edd71434711f58ee0ea7f5ed4ac48be11cfa9abf7317"}, + {file = "pandas-2.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:29deb61de5a8a93bdd033df328441a79fcf8dd3c12d5ed0b41a395eef9cd76f0"}, + {file = "pandas-2.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4f99bebf19b7e03cf80a4e770a3e65eee9dd4e2679039f542d7c1ace7b7b1daa"}, + {file = "pandas-2.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:84e7e910096416adec68075dc87b986ff202920fb8704e6d9c8c9897fe7332d6"}, + {file = "pandas-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:366da7b0e540d1b908886d4feb3d951f2f1e572e655c1160f5fde28ad4abb750"}, + {file = "pandas-2.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9e50e72b667415a816ac27dfcfe686dc5a0b02202e06196b943d54c4f9c7693e"}, + {file = "pandas-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc1ab6a25da197f03ebe6d8fa17273126120874386b4ac11c1d687df288542dd"}, + {file = "pandas-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0dbfea0dd3901ad4ce2306575c54348d98499c95be01b8d885a2737fe4d7a98"}, + {file = "pandas-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0489b0e6aa3d907e909aef92975edae89b1ee1654db5eafb9be633b0124abe97"}, + {file = "pandas-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:4cdb0fab0400c2cb46dafcf1a0fe084c8bb2480a1fa8d81e19d15e12e6d4ded2"}, + {file = "pandas-2.1.1.tar.gz", hash = "sha256:fecb198dc389429be557cde50a2d46da8434a17fe37d7d41ff102e3987fd947b"}, +] + [package.dependencies] numpy = [ {version = ">=1.22.4", markers = "python_version < \"3.11\""}, - {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, + {version = ">=1.23.2", markers = "python_version == \"3.11\""}, ] python-dateutil = ">=2.8.2" pytz = ">=2020.1" @@ -780,24 +846,24 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "protobuf" -version = "4.24.3" +version = "4.24.4" description = "" optional = false python-versions = ">=3.7" files = [ - {file = "protobuf-4.24.3-cp310-abi3-win32.whl", hash = "sha256:20651f11b6adc70c0f29efbe8f4a94a74caf61b6200472a9aea6e19898f9fcf4"}, - {file = "protobuf-4.24.3-cp310-abi3-win_amd64.whl", hash = "sha256:3d42e9e4796a811478c783ef63dc85b5a104b44aaaca85d4864d5b886e4b05e3"}, - {file = "protobuf-4.24.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:6e514e8af0045be2b56e56ae1bb14f43ce7ffa0f68b1c793670ccbe2c4fc7d2b"}, - {file = "protobuf-4.24.3-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:ba53c2f04798a326774f0e53b9c759eaef4f6a568ea7072ec6629851c8435959"}, - {file = "protobuf-4.24.3-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:f6ccbcf027761a2978c1406070c3788f6de4a4b2cc20800cc03d52df716ad675"}, - {file = "protobuf-4.24.3-cp37-cp37m-win32.whl", hash = "sha256:1b182c7181a2891e8f7f3a1b5242e4ec54d1f42582485a896e4de81aa17540c2"}, - {file = "protobuf-4.24.3-cp37-cp37m-win_amd64.whl", hash = "sha256:b0271a701e6782880d65a308ba42bc43874dabd1a0a0f41f72d2dac3b57f8e76"}, - {file = "protobuf-4.24.3-cp38-cp38-win32.whl", hash = "sha256:e29d79c913f17a60cf17c626f1041e5288e9885c8579832580209de8b75f2a52"}, - {file = "protobuf-4.24.3-cp38-cp38-win_amd64.whl", hash = "sha256:067f750169bc644da2e1ef18c785e85071b7c296f14ac53e0900e605da588719"}, - {file = "protobuf-4.24.3-cp39-cp39-win32.whl", hash = "sha256:2da777d34b4f4f7613cdf85c70eb9a90b1fbef9d36ae4a0ccfe014b0b07906f1"}, - {file = "protobuf-4.24.3-cp39-cp39-win_amd64.whl", hash = "sha256:f631bb982c5478e0c1c70eab383af74a84be66945ebf5dd6b06fc90079668d0b"}, - {file = "protobuf-4.24.3-py3-none-any.whl", hash = "sha256:f6f8dc65625dadaad0c8545319c2e2f0424fede988368893ca3844261342c11a"}, - {file = "protobuf-4.24.3.tar.gz", hash = "sha256:12e9ad2ec079b833176d2921be2cb24281fa591f0b119b208b788adc48c2561d"}, + {file = "protobuf-4.24.4-cp310-abi3-win32.whl", hash = "sha256:ec9912d5cb6714a5710e28e592ee1093d68c5ebfeda61983b3f40331da0b1ebb"}, + {file = "protobuf-4.24.4-cp310-abi3-win_amd64.whl", hash = "sha256:1badab72aa8a3a2b812eacfede5020472e16c6b2212d737cefd685884c191085"}, + {file = "protobuf-4.24.4-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:8e61a27f362369c2f33248a0ff6896c20dcd47b5d48239cb9720134bef6082e4"}, + {file = "protobuf-4.24.4-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:bffa46ad9612e6779d0e51ae586fde768339b791a50610d85eb162daeb23661e"}, + {file = "protobuf-4.24.4-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:b493cb590960ff863743b9ff1452c413c2ee12b782f48beca77c8da3e2ffe9d9"}, + {file = "protobuf-4.24.4-cp37-cp37m-win32.whl", hash = "sha256:dbbed8a56e56cee8d9d522ce844a1379a72a70f453bde6243e3c86c30c2a3d46"}, + {file = "protobuf-4.24.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6b7d2e1c753715dcfe9d284a25a52d67818dd43c4932574307daf836f0071e37"}, + {file = "protobuf-4.24.4-cp38-cp38-win32.whl", hash = "sha256:02212557a76cd99574775a81fefeba8738d0f668d6abd0c6b1d3adcc75503dbe"}, + {file = "protobuf-4.24.4-cp38-cp38-win_amd64.whl", hash = "sha256:2fa3886dfaae6b4c5ed2730d3bf47c7a38a72b3a1f0acb4d4caf68e6874b947b"}, + {file = "protobuf-4.24.4-cp39-cp39-win32.whl", hash = "sha256:b77272f3e28bb416e2071186cb39efd4abbf696d682cbb5dc731308ad37fa6dd"}, + {file = "protobuf-4.24.4-cp39-cp39-win_amd64.whl", hash = "sha256:9fee5e8aa20ef1b84123bb9232b3f4a5114d9897ed89b4b8142d81924e05d79b"}, + {file = "protobuf-4.24.4-py3-none-any.whl", hash = "sha256:80797ce7424f8c8d2f2547e2d42bfbb6c08230ce5832d6c099a37335c9c90a92"}, + {file = "protobuf-4.24.4.tar.gz", hash = "sha256:5a70731910cd9104762161719c3d883c960151eea077134458503723b60e3667"}, ] [[package]] @@ -838,47 +904,47 @@ files = [ [[package]] name = "pydantic" -version = "1.10.12" +version = "1.10.13" description = "Data validation and settings management using python type hints" optional = false python-versions = ">=3.7" files = [ - {file = "pydantic-1.10.12-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a1fcb59f2f355ec350073af41d927bf83a63b50e640f4dbaa01053a28b7a7718"}, - {file = "pydantic-1.10.12-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b7ccf02d7eb340b216ec33e53a3a629856afe1c6e0ef91d84a4e6f2fb2ca70fe"}, - {file = "pydantic-1.10.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fb2aa3ab3728d950bcc885a2e9eff6c8fc40bc0b7bb434e555c215491bcf48b"}, - {file = "pydantic-1.10.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:771735dc43cf8383959dc9b90aa281f0b6092321ca98677c5fb6125a6f56d58d"}, - {file = "pydantic-1.10.12-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ca48477862372ac3770969b9d75f1bf66131d386dba79506c46d75e6b48c1e09"}, - {file = "pydantic-1.10.12-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a5e7add47a5b5a40c49b3036d464e3c7802f8ae0d1e66035ea16aa5b7a3923ed"}, - {file = "pydantic-1.10.12-cp310-cp310-win_amd64.whl", hash = "sha256:e4129b528c6baa99a429f97ce733fff478ec955513630e61b49804b6cf9b224a"}, - {file = "pydantic-1.10.12-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b0d191db0f92dfcb1dec210ca244fdae5cbe918c6050b342d619c09d31eea0cc"}, - {file = "pydantic-1.10.12-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:795e34e6cc065f8f498c89b894a3c6da294a936ee71e644e4bd44de048af1405"}, - {file = "pydantic-1.10.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69328e15cfda2c392da4e713443c7dbffa1505bc9d566e71e55abe14c97ddc62"}, - {file = "pydantic-1.10.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2031de0967c279df0d8a1c72b4ffc411ecd06bac607a212892757db7462fc494"}, - {file = "pydantic-1.10.12-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ba5b2e6fe6ca2b7e013398bc7d7b170e21cce322d266ffcd57cca313e54fb246"}, - {file = "pydantic-1.10.12-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2a7bac939fa326db1ab741c9d7f44c565a1d1e80908b3797f7f81a4f86bc8d33"}, - {file = "pydantic-1.10.12-cp311-cp311-win_amd64.whl", hash = "sha256:87afda5539d5140cb8ba9e8b8c8865cb5b1463924d38490d73d3ccfd80896b3f"}, - {file = "pydantic-1.10.12-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:549a8e3d81df0a85226963611950b12d2d334f214436a19537b2efed61b7639a"}, - {file = "pydantic-1.10.12-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:598da88dfa127b666852bef6d0d796573a8cf5009ffd62104094a4fe39599565"}, - {file = "pydantic-1.10.12-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba5c4a8552bff16c61882db58544116d021d0b31ee7c66958d14cf386a5b5350"}, - {file = "pydantic-1.10.12-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c79e6a11a07da7374f46970410b41d5e266f7f38f6a17a9c4823db80dadf4303"}, - {file = "pydantic-1.10.12-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab26038b8375581dc832a63c948f261ae0aa21f1d34c1293469f135fa92972a5"}, - {file = "pydantic-1.10.12-cp37-cp37m-win_amd64.whl", hash = "sha256:e0a16d274b588767602b7646fa05af2782576a6cf1022f4ba74cbb4db66f6ca8"}, - {file = "pydantic-1.10.12-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6a9dfa722316f4acf4460afdf5d41d5246a80e249c7ff475c43a3a1e9d75cf62"}, - {file = "pydantic-1.10.12-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a73f489aebd0c2121ed974054cb2759af8a9f747de120acd2c3394cf84176ccb"}, - {file = "pydantic-1.10.12-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b30bcb8cbfccfcf02acb8f1a261143fab622831d9c0989707e0e659f77a18e0"}, - {file = "pydantic-1.10.12-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fcfb5296d7877af406ba1547dfde9943b1256d8928732267e2653c26938cd9c"}, - {file = "pydantic-1.10.12-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2f9a6fab5f82ada41d56b0602606a5506aab165ca54e52bc4545028382ef1c5d"}, - {file = "pydantic-1.10.12-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:dea7adcc33d5d105896401a1f37d56b47d443a2b2605ff8a969a0ed5543f7e33"}, - {file = "pydantic-1.10.12-cp38-cp38-win_amd64.whl", hash = "sha256:1eb2085c13bce1612da8537b2d90f549c8cbb05c67e8f22854e201bde5d98a47"}, - {file = "pydantic-1.10.12-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ef6c96b2baa2100ec91a4b428f80d8f28a3c9e53568219b6c298c1125572ebc6"}, - {file = "pydantic-1.10.12-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6c076be61cd0177a8433c0adcb03475baf4ee91edf5a4e550161ad57fc90f523"}, - {file = "pydantic-1.10.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d5a58feb9a39f481eda4d5ca220aa8b9d4f21a41274760b9bc66bfd72595b86"}, - {file = "pydantic-1.10.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5f805d2d5d0a41633651a73fa4ecdd0b3d7a49de4ec3fadf062fe16501ddbf1"}, - {file = "pydantic-1.10.12-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1289c180abd4bd4555bb927c42ee42abc3aee02b0fb2d1223fb7c6e5bef87dbe"}, - {file = "pydantic-1.10.12-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5d1197e462e0364906cbc19681605cb7c036f2475c899b6f296104ad42b9f5fb"}, - {file = "pydantic-1.10.12-cp39-cp39-win_amd64.whl", hash = "sha256:fdbdd1d630195689f325c9ef1a12900524dceb503b00a987663ff4f58669b93d"}, - {file = "pydantic-1.10.12-py3-none-any.whl", hash = "sha256:b749a43aa51e32839c9d71dc67eb1e4221bb04af1033a32e3923d46f9effa942"}, - {file = "pydantic-1.10.12.tar.gz", hash = "sha256:0fe8a415cea8f340e7a9af9c54fc71a649b43e8ca3cc732986116b3cb135d303"}, + {file = "pydantic-1.10.13-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:efff03cc7a4f29d9009d1c96ceb1e7a70a65cfe86e89d34e4a5f2ab1e5693737"}, + {file = "pydantic-1.10.13-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3ecea2b9d80e5333303eeb77e180b90e95eea8f765d08c3d278cd56b00345d01"}, + {file = "pydantic-1.10.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1740068fd8e2ef6eb27a20e5651df000978edce6da6803c2bef0bc74540f9548"}, + {file = "pydantic-1.10.13-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84bafe2e60b5e78bc64a2941b4c071a4b7404c5c907f5f5a99b0139781e69ed8"}, + {file = "pydantic-1.10.13-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bc0898c12f8e9c97f6cd44c0ed70d55749eaf783716896960b4ecce2edfd2d69"}, + {file = "pydantic-1.10.13-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:654db58ae399fe6434e55325a2c3e959836bd17a6f6a0b6ca8107ea0571d2e17"}, + {file = "pydantic-1.10.13-cp310-cp310-win_amd64.whl", hash = "sha256:75ac15385a3534d887a99c713aa3da88a30fbd6204a5cd0dc4dab3d770b9bd2f"}, + {file = "pydantic-1.10.13-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c553f6a156deb868ba38a23cf0df886c63492e9257f60a79c0fd8e7173537653"}, + {file = "pydantic-1.10.13-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5e08865bc6464df8c7d61439ef4439829e3ab62ab1669cddea8dd00cd74b9ffe"}, + {file = "pydantic-1.10.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e31647d85a2013d926ce60b84f9dd5300d44535a9941fe825dc349ae1f760df9"}, + {file = "pydantic-1.10.13-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:210ce042e8f6f7c01168b2d84d4c9eb2b009fe7bf572c2266e235edf14bacd80"}, + {file = "pydantic-1.10.13-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8ae5dd6b721459bfa30805f4c25880e0dd78fc5b5879f9f7a692196ddcb5a580"}, + {file = "pydantic-1.10.13-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f8e81fc5fb17dae698f52bdd1c4f18b6ca674d7068242b2aff075f588301bbb0"}, + {file = "pydantic-1.10.13-cp311-cp311-win_amd64.whl", hash = "sha256:61d9dce220447fb74f45e73d7ff3b530e25db30192ad8d425166d43c5deb6df0"}, + {file = "pydantic-1.10.13-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4b03e42ec20286f052490423682016fd80fda830d8e4119f8ab13ec7464c0132"}, + {file = "pydantic-1.10.13-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f59ef915cac80275245824e9d771ee939133be38215555e9dc90c6cb148aaeb5"}, + {file = "pydantic-1.10.13-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a1f9f747851338933942db7af7b6ee8268568ef2ed86c4185c6ef4402e80ba8"}, + {file = "pydantic-1.10.13-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:97cce3ae7341f7620a0ba5ef6cf043975cd9d2b81f3aa5f4ea37928269bc1b87"}, + {file = "pydantic-1.10.13-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:854223752ba81e3abf663d685f105c64150873cc6f5d0c01d3e3220bcff7d36f"}, + {file = "pydantic-1.10.13-cp37-cp37m-win_amd64.whl", hash = "sha256:b97c1fac8c49be29486df85968682b0afa77e1b809aff74b83081cc115e52f33"}, + {file = "pydantic-1.10.13-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c958d053453a1c4b1c2062b05cd42d9d5c8eb67537b8d5a7e3c3032943ecd261"}, + {file = "pydantic-1.10.13-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4c5370a7edaac06daee3af1c8b1192e305bc102abcbf2a92374b5bc793818599"}, + {file = "pydantic-1.10.13-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d6f6e7305244bddb4414ba7094ce910560c907bdfa3501e9db1a7fd7eaea127"}, + {file = "pydantic-1.10.13-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3a3c792a58e1622667a2837512099eac62490cdfd63bd407993aaf200a4cf1f"}, + {file = "pydantic-1.10.13-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c636925f38b8db208e09d344c7aa4f29a86bb9947495dd6b6d376ad10334fb78"}, + {file = "pydantic-1.10.13-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:678bcf5591b63cc917100dc50ab6caebe597ac67e8c9ccb75e698f66038ea953"}, + {file = "pydantic-1.10.13-cp38-cp38-win_amd64.whl", hash = "sha256:6cf25c1a65c27923a17b3da28a0bdb99f62ee04230c931d83e888012851f4e7f"}, + {file = "pydantic-1.10.13-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8ef467901d7a41fa0ca6db9ae3ec0021e3f657ce2c208e98cd511f3161c762c6"}, + {file = "pydantic-1.10.13-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:968ac42970f57b8344ee08837b62f6ee6f53c33f603547a55571c954a4225691"}, + {file = "pydantic-1.10.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9849f031cf8a2f0a928fe885e5a04b08006d6d41876b8bbd2fc68a18f9f2e3fd"}, + {file = "pydantic-1.10.13-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:56e3ff861c3b9c6857579de282ce8baabf443f42ffba355bf070770ed63e11e1"}, + {file = "pydantic-1.10.13-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f00790179497767aae6bcdc36355792c79e7bbb20b145ff449700eb076c5f96"}, + {file = "pydantic-1.10.13-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:75b297827b59bc229cac1a23a2f7a4ac0031068e5be0ce385be1462e7e17a35d"}, + {file = "pydantic-1.10.13-cp39-cp39-win_amd64.whl", hash = "sha256:e70ca129d2053fb8b728ee7d1af8e553a928d7e301a311094b8a0501adc8763d"}, + {file = "pydantic-1.10.13-py3-none-any.whl", hash = "sha256:b87326822e71bd5f313e7d3bfdc77ac3247035ac10b0c0618bd99dcf95b1e687"}, + {file = "pydantic-1.10.13.tar.gz", hash = "sha256:32c8b48dcd3b2ac4e78b0ba4af3a2c2eb6048cb75202f0ea7b34feb740efc340"}, ] [package.dependencies] @@ -1058,7 +1124,6 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -1066,15 +1131,8 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, - {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, - {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, - {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -1091,7 +1149,6 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -1099,7 +1156,6 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -1128,13 +1184,13 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "rich" -version = "13.5.3" +version = "13.6.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.7.0" files = [ - {file = "rich-13.5.3-py3-none-any.whl", hash = "sha256:9257b468badc3d347e146a4faa268ff229039d4c2d176ab0cffb4c4fbc73d5d9"}, - {file = "rich-13.5.3.tar.gz", hash = "sha256:87b43e0543149efa1253f485cd845bb7ee54df16c9617b8a893650ab84b4acb6"}, + {file = "rich-13.6.0-py3-none-any.whl", hash = "sha256:2b38e2fe9ca72c9a00170a1a2d20c63c790d0e10ef1fe35eba76e1e7b1d7d245"}, + {file = "rich-13.6.0.tar.gz", hash = "sha256:5c14d22737e6d5084ef4771b62d5d4363165b403455a30a1c8ca39dc7b644bef"}, ] [package.dependencies] @@ -1226,19 +1282,20 @@ files = [ [[package]] name = "urllib3" -version = "1.26.16" +version = "2.0.6" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +python-versions = ">=3.7" files = [ - {file = "urllib3-1.26.16-py2.py3-none-any.whl", hash = "sha256:8d36afa7616d8ab714608411b4a3b13e58f463aee519024578e062e141dce20f"}, - {file = "urllib3-1.26.16.tar.gz", hash = "sha256:8f135f6502756bde6b2a9b28989df5fbe87c9970cecaa69041edcce7f0589b14"}, + {file = "urllib3-2.0.6-py3-none-any.whl", hash = "sha256:7a7c7003b000adf9e7ca2a377c9688bbc54ed41b985789ed576570342a375cd2"}, + {file = "urllib3-2.0.6.tar.gz", hash = "sha256:b19e1a85d206b56d7df1d5e683df4a7725252a964e3993648dd0fb5a1c157564"}, ] [package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] [[package]] name = "wrapt" diff --git a/airbyte-ci/connectors/connector_ops/pyproject.toml b/airbyte-ci/connectors/connector_ops/pyproject.toml index 90bf5767bb9b..f33f34b457f4 100644 --- a/airbyte-ci/connectors/connector_ops/pyproject.toml +++ b/airbyte-ci/connectors/connector_ops/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api" [tool.poetry] name = "connector_ops" -version = "0.2.4" +version = "0.2.6" description = "Packaged maintained by the connector operations team to perform CI for connectors" authors = ["Airbyte "] diff --git a/airbyte-ci/connectors/connector_ops/tests/test_qa_checks.py b/airbyte-ci/connectors/connector_ops/tests/test_qa_checks.py index a7860b65505a..2c647ad9258b 100644 --- a/airbyte-ci/connectors/connector_ops/tests/test_qa_checks.py +++ b/airbyte-ci/connectors/connector_ops/tests/test_qa_checks.py @@ -80,7 +80,7 @@ def test_run_qa_checks_success(capsys, mocker, user_input, expect_qa_checks_to_r mocker.patch.object(qa_checks, "Connector") mock_qa_check = mocker.Mock(return_value=True, __name__="mock_qa_check") if expect_qa_checks_to_run: - mocker.patch.object(qa_checks, "QA_CHECKS", [mock_qa_check]) + mocker.patch.object(qa_checks, "get_qa_checks_to_run", return_value=[mock_qa_check]) with pytest.raises(SystemExit) as wrapped_error: qa_checks.run_qa_checks() assert wrapped_error.value.code == 0 @@ -101,7 +101,7 @@ def test_run_qa_checks_error(capsys, mocker): mocker.patch.object(qa_checks.sys, "argv", ["", "source-faker"]) mocker.patch.object(qa_checks, "Connector") mock_qa_check = mocker.Mock(return_value=False, __name__="mock_qa_check") - mocker.patch.object(qa_checks, "QA_CHECKS", [mock_qa_check]) + mocker.patch.object(qa_checks, "DEFAULT_QA_CHECKS", (mock_qa_check,)) with pytest.raises(SystemExit) as wrapped_error: qa_checks.run_qa_checks() assert wrapped_error.value.code == 1 @@ -201,7 +201,7 @@ def test_check_missing_migration_guide(mocker, tmp_path, capsys): } mocker.patch.object(qa_checks.Connector, "metadata", mock_metadata_dict) - assert qa_checks.check_migration_guide(connector) == False + assert qa_checks.check_migration_guide(connector) is False stdout, _ = capsys.readouterr() assert "Migration guide file is missing for foobar. Please create a foobar-migrations.md file in the docs folder" in stdout @@ -241,6 +241,28 @@ def test_check_invalid_migration_guides(mocker, tmp_path, capsys, test_file, exp mocker.patch.object(qa_checks.Connector, "metadata", mock_metadata_dict) - assert qa_checks.check_migration_guide(connector) == False + assert qa_checks.check_migration_guide(connector) is False stdout, _ = capsys.readouterr() assert expected_stdout in stdout + + +def test_get_qa_checks_to_run(mocker): + mocker.patch.object(utils.Connector, "has_dockerfile", False) + connector = utils.Connector("source-faker") + + assert ( + qa_checks.get_qa_checks_to_run(connector) == qa_checks.DEFAULT_QA_CHECKS + ), "A connector without a Dockerfile should run the default set of QA checks" + mocker.patch.object(utils.Connector, "has_dockerfile", True) + connector = utils.Connector("source-faker") + assert qa_checks.get_qa_checks_to_run(connector) == qa_checks.DEFAULT_QA_CHECKS + ( + qa_checks.check_metadata_version_matches_dockerfile_label, + ), "A connector with a Dockerfile should run the default set of QA checks plus check_metadata_version_matches_dockerfile_label" + + +def test_check_metadata_version_matches_dockerfile_label_without_dockerfile(mocker): + mocker.patch.object(utils.Connector, "has_dockerfile", False) + connector_without_dockerfile = utils.Connector("source-faker") + assert ( + qa_checks.check_metadata_version_matches_dockerfile_label(connector_without_dockerfile) is False + ), "A connector without a Dockerfile should fail check_metadata_version_matches_dockerfile_label" diff --git a/airbyte-ci/connectors/connector_ops/tests/test_utils.py b/airbyte-ci/connectors/connector_ops/tests/test_utils.py index e5ee9bd4c1ef..5b3eecf016f8 100644 --- a/airbyte-ci/connectors/connector_ops/tests/test_utils.py +++ b/airbyte-ci/connectors/connector_ops/tests/test_utils.py @@ -51,8 +51,7 @@ def test_init(self, connector, exists, mocker, tmp_path): assert connector.support_level is None assert connector.acceptance_test_config is None assert connector.icon_path == Path(f"./airbyte-integrations/connectors/{connector.technical_name}/icon.svg") - with pytest.raises(FileNotFoundError): - connector.version + assert connector.version is None with pytest.raises(utils.ConnectorVersionNotFound): Path(tmp_path / "Dockerfile").touch() mocker.patch.object(utils.Connector, "code_directory", tmp_path) @@ -73,6 +72,25 @@ def test_metadata_query_match(self, mocker): assert not connector.metadata_query_match("data.ab_internal.ql > 101") assert not connector.metadata_query_match("data.ab_internal == whatever") + @pytest.fixture + def connector_without_dockerfile(self, mocker, tmp_path): + mocker.patch.object(utils.Connector, "code_directory", tmp_path) + connector = utils.Connector("source-faker") + return connector + + def test_has_dockerfile_without_dockerfile(self, connector_without_dockerfile): + assert not connector_without_dockerfile.has_dockerfile + + @pytest.fixture + def connector_with_dockerfile(self, mocker, tmp_path): + mocker.patch.object(utils.Connector, "code_directory", tmp_path) + connector = utils.Connector("source-faker") + tmp_path.joinpath("Dockerfile").touch() + return connector + + def test_has_dockerfile_with_dockerfile(self, connector_with_dockerfile): + assert connector_with_dockerfile.has_dockerfile + @pytest.fixture() def gradle_file_with_dependencies(tmpdir) -> tuple[Path, list[Path], list[Path]]: @@ -158,39 +176,8 @@ def test_parse_dependencies_with_cdk(gradle_file_with_local_cdk_dependencies): assert all([test_dependency in expected_test_dependencies for test_dependency in test_dependencies]) -@pytest.mark.parametrize("with_test_dependencies", [True, False]) -def test_get_all_gradle_dependencies(with_test_dependencies): - build_file = Path("airbyte-integrations/connectors/source-postgres-strict-encrypt/build.gradle") - if with_test_dependencies: - all_dependencies = sorted(utils.get_all_gradle_dependencies(build_file)) - expected_dependencies = [ - Path("airbyte-api"), - Path("airbyte-cdk/java/airbyte-cdk/core"), - Path("airbyte-cdk/java/airbyte-cdk/db-sources"), - Path("airbyte-commons"), - Path("airbyte-commons-cli"), - Path("airbyte-commons-protocol"), - Path("airbyte-config-oss/config-models-oss"), - Path("airbyte-config-oss/init-oss"), - Path("airbyte-connector-test-harnesses/acceptance-test-harness"), - Path("airbyte-integrations/bases/base-typing-deduping"), - Path("airbyte-integrations/connectors/source-postgres"), - Path("airbyte-json-validation"), - ] - assert set(all_dependencies) == set(expected_dependencies) - else: - all_dependencies = sorted(utils.get_all_gradle_dependencies(build_file, with_test_dependencies=False)) - expected_dependencies = [ - Path("airbyte-api"), - Path("airbyte-cdk/java/airbyte-cdk/core"), - Path("airbyte-commons"), - Path("airbyte-commons-cli"), - Path("airbyte-commons-protocol"), - Path("airbyte-config-oss/config-models-oss"), - Path("airbyte-config-oss/init-oss"), - Path("airbyte-connector-test-harnesses/acceptance-test-harness"), - Path("airbyte-integrations/bases/base-typing-deduping"), - Path("airbyte-integrations/connectors/source-postgres"), - Path("airbyte-json-validation"), - ] - assert set(all_dependencies) == set(expected_dependencies) +def test_get_all_connectors_in_repo(): + all_connectors = utils.get_all_connectors_in_repo() + assert len(all_connectors) > 0 + assert all([isinstance(connector, utils.Connector) for connector in all_connectors]) + assert all([connector.metadata is not None for connector in all_connectors]) diff --git a/airbyte-ci/connectors/metadata_service/lib/tests/fixtures/metadata_validate/valid/metadata_build_base_image.yaml b/airbyte-ci/connectors/metadata_service/lib/tests/fixtures/metadata_validate/valid/metadata_build_base_image.yaml index b8127ce16f83..df8b955c2c26 100644 --- a/airbyte-ci/connectors/metadata_service/lib/tests/fixtures/metadata_validate/valid/metadata_build_base_image.yaml +++ b/airbyte-ci/connectors/metadata_service/lib/tests/fixtures/metadata_validate/valid/metadata_build_base_image.yaml @@ -3,7 +3,7 @@ data: hosts: - "*.googleapis.com" connectorBuildOptions: - baseImage: airbyte/airbyte-python-connectors-base:0.1.0 + baseImage: airbyte/python-connector-base:1.0.0 connectorSubtype: file connectorType: source definitionId: 71607ba1-c0ac-4799-8049-7f4b90dd50f7 diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/registry_entry.py b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/registry_entry.py index 5259e60eaa1b..efab88f12a31 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/registry_entry.py +++ b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/registry_entry.py @@ -214,13 +214,19 @@ def get_connector_type_from_registry_entry(registry_entry: dict) -> TaggedRegist raise Exception("Could not determine connector type from registry entry") -def get_registry_entry_write_path(metadata_entry: LatestMetadataEntry, registry_name: str): +def get_registry_entry_write_path(registry_entry: PolymorphicRegistryEntry, metadata_entry: LatestMetadataEntry, registry_name: str) -> str: metadata_path = metadata_entry.file_path if metadata_path is None: raise Exception(f"Metadata entry {metadata_entry} does not have a file path") - metadata_folder = os.path.dirname(metadata_path) - return os.path.join(metadata_folder, registry_name) + if metadata_entry.is_latest_version_path: + # if the metadata entry is the latest version, write the registry entry to the same path as the metadata entry + metadata_folder = os.path.dirname(metadata_path) + return os.path.join(metadata_folder, registry_name) + else: + # if the metadata entry is not the latest version, write the registry entry to its own version specific path + # this is handle the case when a dockerImageTag is overridden + return HACKS.construct_registry_entry_write_path(registry_entry, registry_name) @sentry_sdk.trace @@ -241,10 +247,9 @@ def persist_registry_entry_to_json( Returns: GCSFileHandle: The registry_entry directory manager. """ - registry_entry_write_path = get_registry_entry_write_path(metadata_entry, registry_name) + registry_entry_write_path = get_registry_entry_write_path(registry_entry, metadata_entry, registry_name) registry_entry_json = registry_entry.json(exclude_none=True) file_handle = registry_directory_manager.write_data(registry_entry_json.encode("utf-8"), ext="json", key=registry_entry_write_path) - HACKS.write_registry_to_overrode_file_paths(registry_entry, registry_name, metadata_entry, registry_directory_manager) return file_handle diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/hacks.py b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/hacks.py index 3cce26dd2a1f..cd8d30950126 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/hacks.py +++ b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/hacks.py @@ -4,27 +4,14 @@ from typing import Union -from dagster import get_dagster_logger -from dagster_gcp.gcs.file_manager import GCSFileHandle, GCSFileManager from metadata_service.constants import METADATA_FILE_NAME from metadata_service.gcs_upload import get_metadata_remote_file_path from metadata_service.models.generated.ConnectorRegistryDestinationDefinition import ConnectorRegistryDestinationDefinition from metadata_service.models.generated.ConnectorRegistrySourceDefinition import ConnectorRegistrySourceDefinition -from orchestrator.models.metadata import LatestMetadataEntry PolymorphicRegistryEntry = Union[ConnectorRegistrySourceDefinition, ConnectorRegistryDestinationDefinition] -def _is_docker_repository_overridden( - metadata_entry: LatestMetadataEntry, - registry_entry: PolymorphicRegistryEntry, -) -> bool: - """Check if the docker repository is overridden in the registry entry.""" - registry_entry_docker_repository = registry_entry.dockerRepository - metadata_docker_repository = metadata_entry.metadata_definition.data.dockerRepository - return registry_entry_docker_repository != metadata_docker_repository - - def _get_version_specific_registry_entry_file_path(registry_entry, registry_name): """Get the file path for the version specific registry entry file.""" docker_reposiory = registry_entry.dockerRepository @@ -44,48 +31,56 @@ def _check_for_invalid_write_path(write_path: str): ) -def write_registry_to_overrode_file_paths( +def construct_registry_entry_write_path( registry_entry: PolymorphicRegistryEntry, registry_name: str, - metadata_entry: LatestMetadataEntry, - registry_directory_manager: GCSFileManager, -) -> GCSFileHandle: +) -> str: """ - Write the registry entry to the docker repository and version specific file paths - in the event that the docker repository is overridden. + Construct a registry entry write path from its parts. Underlying issue: - The registry entry files (oss.json and cloud.json) are traditionally written to - the same path as the metadata.yaml file that created them. This is fine for the - most cases, but when the docker repository is overridden, the registry entry - files need to be written to a different path. + This is barely a hack. + + But it is related to a few imperfect design decisions that we have to work around. + 1. Metadata files and the registry entries are saved to the same top level folder. + 2. That save path is determined by the docker repository and version of the image + 3. A metadata file can include overrides for the docker repository and version of the image depending on the registry + 4. The platform looks up registry entries by docker repository and version of the image. + 5. The registry generation depends on what ever registry entry is written to a path ending in latest/{registry_name}.json + + This means that when a metadata file overrides the docker repository and version of the image, + the registry entry needs to be written to a different path than the metadata file. + + *But only in the case that its a versioned path and NOT a latest path.* + + Example: + If metadata file for source-posgres is at version 2.0.0 but there is a override for the cloud registry + that changes the docker repository to source-postgres-strict-encrypt and the version to 1.0.0 + + Then we will have a metadata file written to: + gs://my-bucket/metadata/source-postgres/2.0.0/metadata.yaml + + and registry entries written to: + gs://my-bucket/metadata/source-postgres/2.0.0/oss.json + gs://my-bucket/metadata/source-postgres-strict-encrypt/1.0.0/cloud.json - For example if source-postgres:dev.123 is overridden to source-postgres-strict-encrypt:dev.123 - then the oss.json file needs to be written to the path that would be assumed - by the platform when looking for a specific registry entry. In this case, for cloud, it would be - gs://my-bucket/metadata/source-postgres-strict-encrypt/dev.123/cloud.json + But if the metadata file is written to a latest path, then the registry entry will be written to the same path: + gs://my-bucket/metadata/source-postgres/latest/oss.json + gs://my-bucket/metadata/source-postgres/latest/cloud.json - Ideally we would not have to do this, but the combination of prereleases and common overrides - make this nessesary. + Future Solution: + To resolve this properly we need to + 1. Separate the save paths for metadata files and registry entries + 2. Have the paths determined by definitionId and a metadata version + 3. Allow for references to other metadata files in the metadata file instead of overrides Args: registry_entry (PolymorphicRegistryEntry): The registry entry to write registry_name (str): The name of the registry entry (oss or cloud) - metadata_entry (LatestMetadataEntry): The metadata entry that created the registry entry - registry_directory_manager (GCSFileManager): The file manager to use to write the registry entry Returns: - GCSFileHandle: The file handle of the written registry entry + str: The registry entry write path corresponding to the registry entry """ - if not _is_docker_repository_overridden(metadata_entry, registry_entry): - return None - logger = get_dagster_logger() - registry_entry_json = registry_entry.json(exclude_none=True) overrode_registry_entry_version_write_path = _get_version_specific_registry_entry_file_path(registry_entry, registry_name) _check_for_invalid_write_path(overrode_registry_entry_version_write_path) - logger.info(f"Writing registry entry to {overrode_registry_entry_version_write_path}") - file_handle = registry_directory_manager.write_data( - registry_entry_json.encode("utf-8"), ext="json", key=overrode_registry_entry_version_write_path - ) - logger.info(f"Successfully wrote registry entry to {file_handle.public_url}") - return file_handle + return overrode_registry_entry_version_write_path diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/tests/test_registry.py b/airbyte-ci/connectors/metadata_service/orchestrator/tests/test_registry.py index b5ed2d349d86..151e49b4ab8a 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/tests/test_registry.py +++ b/airbyte-ci/connectors/metadata_service/orchestrator/tests/test_registry.py @@ -13,6 +13,7 @@ from metadata_service.models.generated.ConnectorRegistryV0 import ConnectorRegistryV0 from orchestrator.assets.registry_entry import ( get_connector_type_from_registry_entry, + get_registry_entry_write_path, get_registry_status_lists, metadata_to_registry_entry, safe_parse_metadata_definition, @@ -277,11 +278,15 @@ def test_overrides_application(registry_type, expected_docker_image_tag, expecte mock_metadata_entry = mock.Mock() mock_metadata_entry.metadata_definition.dict.return_value = metadata + mock_metadata_entry.file_path = f"metadata/{expected_docker_image_tag}/metadata.yaml" mock_metadata_entry.icon_url = "test-icon-url" - result = metadata_to_registry_entry(mock_metadata_entry, registry_type) - assert result["dockerImageTag"] == expected_docker_image_tag - assert result["additionalField"] == expected_additional_field + registry_entry = metadata_to_registry_entry(mock_metadata_entry, registry_type) + assert registry_entry["dockerImageTag"] == expected_docker_image_tag + assert registry_entry["additionalField"] == expected_additional_field + + expected_write_path = f"metadata/{expected_docker_image_tag}/{registry_type}" + assert get_registry_entry_write_path(registry_entry, mock_metadata_entry, registry_type) == expected_write_path def test_source_type_extraction(): diff --git a/airbyte-ci/connectors/pipelines/README.md b/airbyte-ci/connectors/pipelines/README.md index 3ffd028c0558..6d21e845fbdf 100644 --- a/airbyte-ci/connectors/pipelines/README.md +++ b/airbyte-ci/connectors/pipelines/README.md @@ -10,13 +10,10 @@ This documentation should be helpful for both local and CI use of the CLI. We in ## How to install ### Requirements -* A running Docker engine +* A running Docker engine with version >= 20.10.23 * Python >= 3.10 * [pipx](https://pypa.github.io/pipx/installation/) -## Requirements - -This project requires Python 3.10 and pipx. ## Install or Update @@ -41,13 +38,13 @@ Once pyenv and pipx is installed then run the following: ```bash # install airbyte-ci -pipx install --editable --force --version=python3.10 airbyte-ci/connectors/pipelines/ +pipx install --editable --force --python=python3.10 airbyte-ci/connectors/pipelines/ ``` This command installs `airbyte-ci` and makes it globally available in your terminal. _Note: `--force` is required to ensure updates are applied on subsequent installs._ -_Note: `--version=python3.10` is required to ensure the correct python version is used._ +_Note: `--python=python3.10` is required to ensure the correct python version is used._ _Note: `--editable` is required to ensure the correct python version is used._ If you face any installation problem feel free to reach out the Airbyte Connectors Operations team. @@ -140,10 +137,10 @@ Available commands: | `--use-remote-secrets` | False | True | If True, connectors configuration will be pulled from Google Secret Manager. Requires the GCP_GSM_CREDENTIALS environment variable to be set with a service account with permission to read GSM secrets. If False the connector configuration will be read from the local connector `secrets` folder. | | `--name` | True | | Select a specific connector for which the pipeline will run. Can be used multiple time to select multiple connectors. The expected name is the connector technical name. e.g. `source-pokeapi` | | `--support-level` | True | | Select connectors with a specific support level: `community`, `certified`. Can be used multiple times to select multiple support levels. | -| `--metadata-query` | False | | Filter connectors by the `data` field in the metadata file using a [simpleeval](https://github.com/danthedeckie/simpleeval) query. e.g. 'data.ab_internal.ql == 200' | -| `--use-local-cdk` | False | False | Build with the airbyte-cdk from the local repository. " "This is useful for testing changes to the CDK. | +| `--metadata-query` | False | | Filter connectors by the `data` field in the metadata file using a [simpleeval](https://github.com/danthedeckie/simpleeval) query. e.g. 'data.ab_internal.ql == 200' | +| `--use-local-cdk` | False | False | Build with the airbyte-cdk from the local repository. " "This is useful for testing changes to the CDK. | | `--language` | True | | Select connectors with a specific language: `python`, `low-code`, `java`. Can be used multiple times to select multiple languages. | -| `--modified` | False | False | Run the pipeline on only the modified connectors on the branch or previous commit (depends on the pipeline implementation). | +| `--modified` | False | False | Run the pipeline on only the modified connectors on the branch or previous commit (depends on the pipeline implementation). | | `--concurrency` | False | 5 | Control the number of connector pipelines that can run in parallel. Useful to speed up pipelines or control their resource usage. | | `--metadata-change-only/--not-metadata-change-only` | False | `--not-metadata-change-only` | Only run the pipeline on connectors with changes on their metadata.yaml file. | | `--enable-dependency-scanning / --disable-dependency-scanning` | False | ` --disable-dependency-scanning` | When enabled the dependency scanning will be performed to detect the connectors to select according to a dependency change. | @@ -251,11 +248,11 @@ flowchart TD #### Options -| Option | Multiple | Default value | Description | -| ------------------- | -------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `--fail-fast` | False | False | Abort after any tests fail, rather than continuing to run additional tests. Use this setting to confirm a known bug is fixed (or not), or when you only require a pass/fail result. | -| `--fast-tests-only` | True | False | Run unit tests only, skipping integration tests or any tests explicitly tagged as slow. Use this for more frequent checks, when it is not feasible to run the entire test suite. | -| `--code-tests-only` | True | False | Skip any tests not directly related to code updates. For instance, metadata checks, version bump checks, changelog verification, etc. Use this setting to help focus on code quality during development.| +| Option | Multiple | Default value | Description | +| ------------------- | -------- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `--fail-fast` | False | False | Abort after any tests fail, rather than continuing to run additional tests. Use this setting to confirm a known bug is fixed (or not), or when you only require a pass/fail result. | +| `--fast-tests-only` | True | False | Run unit tests only, skipping integration tests or any tests explicitly tagged as slow. Use this for more frequent checks, when it is not feasible to run the entire test suite. | +| `--code-tests-only` | True | False | Skip any tests not directly related to code updates. For instance, metadata checks, version bump checks, changelog verification, etc. Use this setting to help focus on code quality during development. | Note: @@ -381,13 +378,13 @@ This command runs tests for the metadata service orchestrator. This command runs the Python tests for a airbyte-ci poetry package. #### Arguments -| Option | Required | Default | Mapped environment variable | Description | -| ------------------ | -------- | ------- | --------------------------- | ---------------------------------------------------------------- | -| `poetry_package_path` | True | | | The path to poetry package to test. | +| Option | Required | Default | Mapped environment variable | Description | +| --------------------- | -------- | ------- | --------------------------- | ----------------------------------- | +| `poetry_package_path` | True | | | The path to poetry package to test. | #### Options -| Option | Required | Default | Mapped environment variable | Description | -| ------------------ | -------- | ------- | --------------------------- | ---------------------------------------------------------------- | +| Option | Required | Default | Mapped environment variable | Description | +| ------------------ | -------- | ------- | --------------------------- | ------------------------------------------------------------------------------------------------ | | `--test-directory` | False | tests | | The path to the directory on which pytest should discover tests, relative to the poetry package. | @@ -396,41 +393,49 @@ This command runs the Python tests for a airbyte-ci poetry package. `airbyte-ci tests airbyte-integrations/bases/connector-acceptance-test --test-directory=unit_tests` ## Changelog -| Version | PR | Description | -|---------| --------------------------------------------------------- |-----------------------------------------------------------------------------------------------------------| -| 1.4.4 | [#30743](https://github.com/airbytehq/airbyte/pull/30743) | Add `--disable-report-auto-open` and `--use-host-gradle-dist-tar` to allow gradle integration. | -| 1.4.3 | [#30595](https://github.com/airbytehq/airbyte/pull/30595) | Add --version and version check | -| 1.4.2 | [#30595](https://github.com/airbytehq/airbyte/pull/30595) | Remove directory name requirement | -| 1.4.1 | [#30595](https://github.com/airbytehq/airbyte/pull/30595) | Load base migration guide into QA Test container for strict encrypt variants | -| 1.4.0 | [#30330](https://github.com/airbytehq/airbyte/pull/30330) | Add support for pyproject.toml as the prefered entry point for a connector package | -| 1.3.0 | [#30461](https://github.com/airbytehq/airbyte/pull/30461) | Add `--use-local-cdk` flag to all connectors commands | -| 1.2.3 | [#30477](https://github.com/airbytehq/airbyte/pull/30477) | Fix a test regression introduced the previous version. | -| 1.2.2 | [#30438](https://github.com/airbytehq/airbyte/pull/30438) | Add workaround to always stream logs properly with --is-local. | -| 1.2.1 | [#30384](https://github.com/airbytehq/airbyte/pull/30384) | Java connector test performance fixes. | -| 1.2.0 | [#30330](https://github.com/airbytehq/airbyte/pull/30330) | Add `--metadata-query` option to connectors command | -| 1.1.3 | [#30314](https://github.com/airbytehq/airbyte/pull/30314) | Stop patching gradle files to make them work with airbyte-ci. | -| 1.1.2 | [#30279](https://github.com/airbytehq/airbyte/pull/30279) | Fix correctness issues in layer caching by making atomic execution groupings | -| 1.1.1 | [#30252](https://github.com/airbytehq/airbyte/pull/30252) | Fix redundancies and broken logic in GradleTask, to speed up the CI runs. | -| 1.1.0 | [#29509](https://github.com/airbytehq/airbyte/pull/29509) | Refactor the airbyte-ci test command to run tests on any poetry package. | -| 1.0.0 | [#28000](https://github.com/airbytehq/airbyte/pull/29232) | Remove release stages in favor of support level from airbyte-ci. | -| 0.5.0 | [#28000](https://github.com/airbytehq/airbyte/pull/28000) | Run connector acceptance tests with dagger-in-dagger. | -| 0.4.7 | [#29156](https://github.com/airbytehq/airbyte/pull/29156) | Improve how we check existence of requirement.txt or setup.py file to not raise early pip install errors. | -| 0.4.6 | [#28729](https://github.com/airbytehq/airbyte/pull/28729) | Use keyword args instead of positional argument for optional paramater in Dagger's API | -| 0.4.5 | [#29034](https://github.com/airbytehq/airbyte/pull/29034) | Disable Dagger terminal UI when running publish. | -| 0.4.4 | [#29064](https://github.com/airbytehq/airbyte/pull/29064) | Make connector modified files a frozen set. | -| 0.4.3 | [#29033](https://github.com/airbytehq/airbyte/pull/29033) | Disable dependency scanning for Java connectors. | -| 0.4.2 | [#29030](https://github.com/airbytehq/airbyte/pull/29030) | Make report path always have the same prefix: `airbyte-ci/`. | -| 0.4.1 | [#28855](https://github.com/airbytehq/airbyte/pull/28855) | Improve the selected connectors detection for connectors commands. | -| 0.4.0 | [#28947](https://github.com/airbytehq/airbyte/pull/28947) | Show Dagger Cloud run URLs in CI | -| 0.3.2 | [#28789](https://github.com/airbytehq/airbyte/pull/28789) | Do not consider empty reports as successfull. | -| 0.3.1 | [#28938](https://github.com/airbytehq/airbyte/pull/28938) | Handle 5 status code on MetadataUpload as skipped | -| 0.3.0 | [#28869](https://github.com/airbytehq/airbyte/pull/28869) | Enable the Dagger terminal UI on local `airbyte-ci` execution | -| 0.2.3 | [#28907](https://github.com/airbytehq/airbyte/pull/28907) | Make dagger-in-dagger work for `airbyte-ci tests` command | -| 0.2.2 | [#28897](https://github.com/airbytehq/airbyte/pull/28897) | Sentry: Ignore error logs without exceptions from reporting | -| 0.2.1 | [#28767](https://github.com/airbytehq/airbyte/pull/28767) | Improve pytest step result evaluation to prevent false negative/positive. | -| 0.2.0 | [#28857](https://github.com/airbytehq/airbyte/pull/28857) | Add the `airbyte-ci tests` command to run the test suite on any `airbyte-ci` poetry package. | -| 0.1.1 | [#28858](https://github.com/airbytehq/airbyte/pull/28858) | Increase the max duration of Connector Package install to 20mn. | -| 0.1.0 | | Alpha version not in production yet. All the commands described in this doc are available. | +| Version | PR | Description | +| ------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | +| 1.7.2 | [#31343](https://github.com/airbytehq/airbyte/pull/31343) | Bind Pytest integration tests to a dockerhost. | +| 1.7.1 | [#31332](https://github.com/airbytehq/airbyte/pull/31332) | Disable Gradle step caching on source-postgres. | +| 1.7.0 | [#30526](https://github.com/airbytehq/airbyte/pull/30526) | Implement pre/post install hooks support. | +| 1.6.0 | [#30474](https://github.com/airbytehq/airbyte/pull/30474) | Test connector inside their containers. | +| 1.5.1 | [#31227](https://github.com/airbytehq/airbyte/pull/31227) | Use python 3.11 in amazoncorretto-bazed gradle containers, run 'test' gradle task instead of 'check'. | +| 1.5.0 | [#30456](https://github.com/airbytehq/airbyte/pull/30456) | Start building Python connectors using our base images. | +| 1.4.6 | [ #31087](https://github.com/airbytehq/airbyte/pull/31087) | Throw error if airbyte-ci tools is out of date | +| 1.4.5 | [#31133](https://github.com/airbytehq/airbyte/pull/31133) | Fix bug when building containers using `with_integration_base_java_and_normalization`. | +| 1.4.4 | [#30743](https://github.com/airbytehq/airbyte/pull/30743) | Add `--disable-report-auto-open` and `--use-host-gradle-dist-tar` to allow gradle integration. | +| 1.4.3 | [#30595](https://github.com/airbytehq/airbyte/pull/30595) | Add --version and version check | +| 1.4.2 | [#30595](https://github.com/airbytehq/airbyte/pull/30595) | Remove directory name requirement | +| 1.4.1 | [#30595](https://github.com/airbytehq/airbyte/pull/30595) | Load base migration guide into QA Test container for strict encrypt variants | +| 1.4.0 | [#30330](https://github.com/airbytehq/airbyte/pull/30330) | Add support for pyproject.toml as the prefered entry point for a connector package | +| 1.3.0 | [#30461](https://github.com/airbytehq/airbyte/pull/30461) | Add `--use-local-cdk` flag to all connectors commands | +| 1.2.3 | [#30477](https://github.com/airbytehq/airbyte/pull/30477) | Fix a test regression introduced the previous version. | +| 1.2.2 | [#30438](https://github.com/airbytehq/airbyte/pull/30438) | Add workaround to always stream logs properly with --is-local. | +| 1.2.1 | [#30384](https://github.com/airbytehq/airbyte/pull/30384) | Java connector test performance fixes. | +| 1.2.0 | [#30330](https://github.com/airbytehq/airbyte/pull/30330) | Add `--metadata-query` option to connectors command | +| 1.1.3 | [#30314](https://github.com/airbytehq/airbyte/pull/30314) | Stop patching gradle files to make them work with airbyte-ci. | +| 1.1.2 | [#30279](https://github.com/airbytehq/airbyte/pull/30279) | Fix correctness issues in layer caching by making atomic execution groupings | +| 1.1.1 | [#30252](https://github.com/airbytehq/airbyte/pull/30252) | Fix redundancies and broken logic in GradleTask, to speed up the CI runs. | +| 1.1.0 | [#29509](https://github.com/airbytehq/airbyte/pull/29509) | Refactor the airbyte-ci test command to run tests on any poetry package. | +| 1.0.0 | [#28000](https://github.com/airbytehq/airbyte/pull/29232) | Remove release stages in favor of support level from airbyte-ci. | +| 0.5.0 | [#28000](https://github.com/airbytehq/airbyte/pull/28000) | Run connector acceptance tests with dagger-in-dagger. | +| 0.4.7 | [#29156](https://github.com/airbytehq/airbyte/pull/29156) | Improve how we check existence of requirement.txt or setup.py file to not raise early pip install errors. | +| 0.4.6 | [#28729](https://github.com/airbytehq/airbyte/pull/28729) | Use keyword args instead of positional argument for optional paramater in Dagger's API | +| 0.4.5 | [#29034](https://github.com/airbytehq/airbyte/pull/29034) | Disable Dagger terminal UI when running publish. | +| 0.4.4 | [#29064](https://github.com/airbytehq/airbyte/pull/29064) | Make connector modified files a frozen set. | +| 0.4.3 | [#29033](https://github.com/airbytehq/airbyte/pull/29033) | Disable dependency scanning for Java connectors. | +| 0.4.2 | [#29030](https://github.com/airbytehq/airbyte/pull/29030) | Make report path always have the same prefix: `airbyte-ci/`. | +| 0.4.1 | [#28855](https://github.com/airbytehq/airbyte/pull/28855) | Improve the selected connectors detection for connectors commands. | +| 0.4.0 | [#28947](https://github.com/airbytehq/airbyte/pull/28947) | Show Dagger Cloud run URLs in CI | +| 0.3.2 | [#28789](https://github.com/airbytehq/airbyte/pull/28789) | Do not consider empty reports as successfull. | +| 0.3.1 | [#28938](https://github.com/airbytehq/airbyte/pull/28938) | Handle 5 status code on MetadataUpload as skipped | +| 0.3.0 | [#28869](https://github.com/airbytehq/airbyte/pull/28869) | Enable the Dagger terminal UI on local `airbyte-ci` execution | +| 0.2.3 | [#28907](https://github.com/airbytehq/airbyte/pull/28907) | Make dagger-in-dagger work for `airbyte-ci tests` command | +| 0.2.2 | [#28897](https://github.com/airbytehq/airbyte/pull/28897) | Sentry: Ignore error logs without exceptions from reporting | +| 0.2.1 | [#28767](https://github.com/airbytehq/airbyte/pull/28767) | Improve pytest step result evaluation to prevent false negative/positive. | +| 0.2.0 | [#28857](https://github.com/airbytehq/airbyte/pull/28857) | Add the `airbyte-ci tests` command to run the test suite on any `airbyte-ci` poetry package. | +| 0.1.1 | [#28858](https://github.com/airbytehq/airbyte/pull/28858) | Increase the max duration of Connector Package install to 20mn. | +| 0.1.0 | | Alpha version not in production yet. All the commands described in this doc are available. | ## More info This project is owned by the Connectors Operations team. @@ -452,9 +457,9 @@ To fix this, you can either: ## python3.10 not found -If you get the following error when running `pipx install --editable --force --version=python3.10 airbyte-ci/connectors/pipelines/`: +If you get the following error when running `pipx install --editable --force --python=python3.10 airbyte-ci/connectors/pipelines/`: ```bash -$ pipx install --editable --force --version=python3.10 airbyte-ci/connectors/pipelines/ +$ pipx install --editable --force --python=python3.10 airbyte-ci/connectors/pipelines/ Error: Python 3.10 not found on your system. ``` diff --git a/airbyte-ci/connectors/pipelines/pipelines/actions/environments.py b/airbyte-ci/connectors/pipelines/pipelines/actions/environments.py index 795716e72001..04912f55c1e2 100644 --- a/airbyte-ci/connectors/pipelines/pipelines/actions/environments.py +++ b/airbyte-ci/connectors/pipelines/pipelines/actions/environments.py @@ -14,7 +14,7 @@ from typing import TYPE_CHECKING, Callable, List, Optional import toml -from dagger import CacheVolume, Client, Container, DaggerError, Directory, File, Platform, Secret +from dagger import CacheVolume, Client, Container, Directory, File, Platform, Secret from dagger.engine._version import CLI_VERSION as dagger_engine_version from pipelines import consts from pipelines.consts import ( @@ -151,6 +151,7 @@ def with_python_package( python_environment: Container, package_source_code_path: str, exclude: Optional[List] = None, + include: Optional[List] = None, ) -> Container: """Load a python package source code to a python environment container. @@ -164,7 +165,7 @@ def with_python_package( Returns: Container: A python environment container with the python package source code. """ - package_source_code_directory: Directory = context.get_repo_dir(package_source_code_path, exclude=exclude) + package_source_code_directory: Directory = context.get_repo_dir(package_source_code_path, exclude=exclude, include=include) work_dir_path = f"/{package_source_code_path}" container = python_environment.with_mounted_directory(work_dir_path, package_source_code_directory).with_workdir(work_dir_path) return container @@ -308,13 +309,13 @@ def _install_python_dependencies_from_setup_py( container: Container, additional_dependency_groups: Optional[List] = None, ) -> Container: - install_connector_package_cmd = ["python", "-m", "pip", "install", "."] + install_connector_package_cmd = ["pip", "install", "."] container = container.with_exec(install_connector_package_cmd) if additional_dependency_groups: # e.g. .[dev,tests] group_string = f".[{','.join(additional_dependency_groups)}]" - group_install_cmd = ["python", "-m", "pip", "install", group_string] + group_install_cmd = ["pip", "install", group_string] container = container.with_exec(group_install_cmd) @@ -322,7 +323,7 @@ def _install_python_dependencies_from_setup_py( def _install_python_dependencies_from_requirements_txt(container: Container) -> Container: - install_requirements_cmd = ["python", "-m", "pip", "install", "-r", "requirements.txt"] + install_requirements_cmd = ["pip", "install", "-r", "requirements.txt"] return container.with_exec(install_requirements_cmd) @@ -330,9 +331,9 @@ def _install_python_dependencies_from_poetry( container: Container, additional_dependency_groups: Optional[List] = None, ) -> Container: - pip_install_poetry_cmd = ["python", "-m", "pip", "install", "poetry"] + pip_install_poetry_cmd = ["pip", "install", "poetry"] poetry_disable_virtual_env_cmd = ["poetry", "config", "virtualenvs.create", "false"] - poetry_install_no_venv_cmd = ["poetry", "install", "--no-root"] + poetry_install_no_venv_cmd = ["poetry", "install"] if additional_dependency_groups: for group in additional_dependency_groups: poetry_install_no_venv_cmd += ["--with", group] @@ -346,6 +347,7 @@ async def with_installed_python_package( package_source_code_path: str, additional_dependency_groups: Optional[List] = None, exclude: Optional[List] = None, + include: Optional[List] = None, ) -> Container: """Install a python package in a python environment container. @@ -359,7 +361,7 @@ async def with_installed_python_package( Returns: Container: A python environment container with the python package installed. """ - container = with_python_package(context, python_environment, package_source_code_path, exclude=exclude) + container = with_python_package(context, python_environment, package_source_code_path, exclude=exclude, include=include) local_dependencies = await find_local_python_dependencies(context, package_source_code_path) @@ -371,7 +373,7 @@ async def with_installed_python_package( has_pyproject_toml = await check_path_in_workdir(container, "pyproject.toml") if has_pyproject_toml: - container = _install_python_dependencies_from_poetry(container) + container = _install_python_dependencies_from_poetry(container, additional_dependency_groups) elif has_setup_py: container = _install_python_dependencies_from_setup_py(container, additional_dependency_groups) elif has_requirements_txt: @@ -402,7 +404,7 @@ async def apply_python_development_overrides(context: ConnectorContext, connecto path_to_cdk = "airbyte-cdk/python/" directory_to_mount = context.get_repo_dir(path_to_cdk) - context.logger.info(f"Mounting {directory_to_mount}") + context.logger.info(f"Mounting CDK from {directory_to_mount}") # Install the airbyte-cdk package from the local directory # We use --no-deps to avoid conflicts with the airbyte-cdk version required by the connector @@ -413,33 +415,22 @@ async def apply_python_development_overrides(context: ConnectorContext, connecto return connector_container -async def with_python_connector_installed(context: ConnectorContext) -> Container: - """Install an airbyte connector python package in a testing environment. - - Args: - context (ConnectorContext): The current test context, providing the repository directory from which the connector sources will be pulled. - Returns: - Container: A python environment container (with the connector installed). - """ - connector_source_path = str(context.connector.code_directory) - testing_environment: Container = with_testing_dependencies(context) - exclude = [ - f"{context.connector.code_directory}/{item}" - for item in [ - "secrets", - "metadata.yaml", - "bootstrap.md", - "icon.svg", - "README.md", - "Dockerfile", - "acceptance-test-docker.sh", - "build.gradle", - ".hypothesis", - ".dockerignore", - ] - ] +async def with_python_connector_installed( + context: PipelineContext, + python_container: Container, + connector_source_path: str, + additional_dependency_groups: Optional[List] = None, + exclude: Optional[List] = None, + include: Optional[List] = None, +) -> Container: + """Install an airbyte python connectors dependencies.""" container = await with_installed_python_package( - context, testing_environment, connector_source_path, additional_dependency_groups=["dev", "tests", "main"], exclude=exclude + context, + python_container, + connector_source_path, + additional_dependency_groups=additional_dependency_groups, + exclude=exclude, + include=include, ) container = await apply_python_development_overrides(context, container) @@ -840,10 +831,12 @@ def with_integration_base_java_and_normalization(context: PipelineContext, build [ "python -m ensurepip --upgrade", # Workaround for https://github.com/yaml/pyyaml/issues/601 - "pip3 install Cython<3.0 pyyaml~=5.4 --no-build-isolation", + "pip3 install 'Cython<3.0' 'pyyaml~=5.4' --no-build-isolation", + # Required for dbt https://github.com/dbt-labs/dbt-core/issues/7075 + "pip3 install 'pytz~=2023.3'", f"pip3 install {dbt_adapter_package}", # amazon linux 2 isn't compatible with urllib3 2.x, so force 1.x - "pip3 install urllib3<2", + "pip3 install 'urllib3<2'", ] ) ) @@ -908,45 +901,6 @@ async def with_airbyte_java_connector(context: ConnectorContext, connector_java_ return await finalize_build(context, connector_container) -async def get_cdk_version_from_python_connector(python_connector: Container) -> Optional[str]: - pip_freeze_stdout = await python_connector.with_entrypoint("pip").with_exec(["freeze"]).stdout() - cdk_dependency_line = next((line for line in pip_freeze_stdout.split("\n") if "airbyte-cdk" in line), None) - if not cdk_dependency_line: - return None - - if "file://" in cdk_dependency_line: - return "LOCAL" - - _, cdk_version = cdk_dependency_line.split("==") - return cdk_version - - -async def with_airbyte_python_connector(context: ConnectorContext, build_platform: Platform) -> Container: - if context.connector.technical_name == "source-file-secure": - return await with_airbyte_python_connector_full_dagger(context, build_platform) - - pip_cache: CacheVolume = context.dagger_client.cache_volume("pip_cache") - connector_container = ( - context.dagger_client.container(platform=build_platform) - .with_mounted_cache("/root/.cache/pip", pip_cache) - .build(await context.get_connector_dir()) - .with_label("io.airbyte.name", context.metadata["dockerRepository"]) - ) - - connector_container = await apply_python_development_overrides(context, connector_container) - - cdk_version = await get_cdk_version_from_python_connector(connector_container) - if cdk_version: - context.logger.info(f"Connector has a cdk dependency, using cdk version {cdk_version}") - connector_container = connector_container.with_label("io.airbyte.cdk_version", cdk_version) - context.cdk_version = cdk_version - if not await connector_container.label("io.airbyte.version") == context.metadata["dockerImageTag"]: - raise DaggerError( - "Abusive caching might be happening. The connector container should have been built with the correct version as defined in metadata.yaml" - ) - return await finalize_build(context, connector_container) - - async def finalize_build(context: ConnectorContext, connector_container: Container) -> Container: """Finalize build by adding dagger engine version label and running finalize_build.sh or finalize_build.py if present in the connector directory.""" connector_container = connector_container.with_label("io.dagger.engine_version", dagger_engine_version) @@ -987,60 +941,6 @@ async def finalize_build(context: ConnectorContext, connector_container: Contain return connector_container.with_entrypoint(original_entrypoint) -async def with_airbyte_python_connector_full_dagger(context: ConnectorContext, build_platform: Platform) -> Container: - setup_dependencies_to_mount = await find_local_python_dependencies( - context, str(context.connector.code_directory), search_dependencies_in_setup_py=True, search_dependencies_in_requirements_txt=False - ) - - pip_cache: CacheVolume = context.dagger_client.cache_volume("pip_cache") - base = context.dagger_client.container(platform=build_platform).from_("python:3.9-slim") - snake_case_name = context.connector.technical_name.replace("-", "_") - entrypoint = ["python", "/airbyte/integration_code/main.py"] - builder = ( - base.with_workdir("/airbyte/integration_code") - .with_env_variable("DAGGER_BUILD", "1") - .with_mounted_cache("/root/.cache/pip", pip_cache) - .with_exec( - sh_dash_c( - [ - "apt-get update", - "apt-get install -y tzdata", - "pip install --upgrade pip", - ] - ) - ) - .with_file("setup.py", (await context.get_connector_dir(include="setup.py")).file("setup.py")) - ) - - for dependency_path in setup_dependencies_to_mount: - in_container_dependency_path = f"/local_dependencies/{Path(dependency_path).name}" - builder = builder.with_mounted_directory(in_container_dependency_path, context.get_repo_dir(dependency_path)) - - builder = builder.with_exec(["pip", "install", "--prefix=/install", "."]) - - connector_container = ( - base.with_workdir("/airbyte/integration_code") - .with_exec( - sh_dash_c( - [ - "apt-get update", - "apt-get install -y bash", - ] - ) - ) - .with_directory("/usr/local", builder.directory("/install")) - .with_file("/usr/localtime", builder.file("/usr/share/zoneinfo/Etc/UTC")) - .with_new_file("/etc/timezone", contents="Etc/UTC") - .with_file("main.py", (await context.get_connector_dir(include="main.py")).file("main.py")) - .with_directory(snake_case_name, (await context.get_connector_dir(include=snake_case_name)).directory(snake_case_name)) - .with_env_variable("AIRBYTE_ENTRYPOINT", " ".join(entrypoint)) - .with_entrypoint(entrypoint) - .with_label("io.airbyte.version", context.metadata["dockerImageTag"]) - .with_label("io.airbyte.name", context.metadata["dockerRepository"]) - ) - return await finalize_build(context, connector_container) - - def with_crane( context: PipelineContext, ) -> Container: @@ -1100,7 +1000,7 @@ async def mounted_connector_secrets(context: PipelineContext, secret_directory_p contents[secret_file_name] = await secret.plaintext() def with_secrets_mounted_as_regular_files(container: Container) -> Container: - container = container.with_exec(["mkdir", secret_directory_path], skip_entrypoint=True) + container = container.with_exec(["mkdir", "-p", secret_directory_path], skip_entrypoint=True) for secret_file_name, secret_content_str in contents.items(): container = container.with_new_file(f"{secret_directory_path}/{secret_file_name}", secret_content_str, permissions=0o600) return container @@ -1108,7 +1008,7 @@ def with_secrets_mounted_as_regular_files(container: Container) -> Container: return with_secrets_mounted_as_regular_files def with_secrets_mounted_as_dagger_secrets(container: Container) -> Container: - container = container.with_exec(["mkdir", secret_directory_path], skip_entrypoint=True) + container = container.with_exec(["mkdir", "-p", secret_directory_path], skip_entrypoint=True) for secret_file_name, secret in context.connector_secrets.items(): container = container.with_mounted_secret(f"{secret_directory_path}/{secret_file_name}", secret) return container diff --git a/airbyte-ci/connectors/pipelines/pipelines/bases.py b/airbyte-ci/connectors/pipelines/pipelines/bases.py index 7e18f64bdd99..919443dd685d 100644 --- a/airbyte-ci/connectors/pipelines/pipelines/bases.py +++ b/airbyte-ci/connectors/pipelines/pipelines/bases.py @@ -23,8 +23,8 @@ from jinja2 import Environment, PackageLoader, select_autoescape from pipelines import sentry_utils from pipelines.actions import remote_storage -from pipelines.consts import GCS_PUBLIC_DOMAIN, LOCAL_REPORTS_PATH_ROOT, PYPROJECT_TOML_FILE_PATH -from pipelines.utils import METADATA_FILE_NAME, check_path_in_workdir, format_duration, get_exec_result +from pipelines.consts import GCS_PUBLIC_DOMAIN, LOCAL_REPORTS_PATH_ROOT +from pipelines.utils import METADATA_FILE_NAME, format_duration, get_exec_result from rich.console import Group from rich.panel import Panel from rich.style import Style @@ -276,42 +276,6 @@ def _get_timed_out_step_result(self) -> StepResult: ) -class PytestStep(Step, ABC): - """An abstract class to run pytest tests and evaluate success or failure according to pytest logs.""" - - skipped_exit_code = 5 - - async def _run_tests_in_directory(self, connector_under_test: Container, test_directory: str) -> StepResult: - """Run the pytest tests in the test_directory that was passed. - - A StepStatus.SKIPPED is returned if no tests were discovered. - - Args: - connector_under_test (Container): The connector under test container. - test_directory (str): The directory in which the python test modules are declared - - Returns: - Tuple[StepStatus, Optional[str], Optional[str]]: Tuple of StepStatus, stderr and stdout. - """ - test_config = "pytest.ini" if await check_path_in_workdir(connector_under_test, "pytest.ini") else "/" + PYPROJECT_TOML_FILE_PATH - if await check_path_in_workdir(connector_under_test, test_directory): - tester = connector_under_test.with_exec( - [ - "python", - "-m", - "pytest", - "-s", - test_directory, - "-c", - test_config, - ] - ) - return await self.get_step_result(tester) - - else: - return StepResult(self, StepStatus.SKIPPED) - - class NoOpStep(Step): """A step that does nothing.""" diff --git a/airbyte-ci/connectors/pipelines/pipelines/builds/build_customization.py b/airbyte-ci/connectors/pipelines/pipelines/builds/build_customization.py new file mode 100644 index 000000000000..03d6f13f9757 --- /dev/null +++ b/airbyte-ci/connectors/pipelines/pipelines/builds/build_customization.py @@ -0,0 +1,88 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# +import importlib +from logging import Logger +from types import ModuleType +from typing import List, Optional + +from connector_ops.utils import Connector +from dagger import Container + +BUILD_CUSTOMIZATION_MODULE_NAME = "build_customization" +BUILD_CUSTOMIZATION_SPEC_NAME = f"{BUILD_CUSTOMIZATION_MODULE_NAME}.py" +DEFAULT_MAIN_FILE_NAME = "main.py" + + +def get_build_customization_module(connector: Connector) -> Optional[ModuleType]: + """Import the build_customization.py file from the connector directory if it exists. + Returns: + Optional[ModuleType]: The build_customization.py module if it exists, None otherwise. + """ + build_customization_spec_path = connector.code_directory / BUILD_CUSTOMIZATION_SPEC_NAME + if not build_customization_spec_path.exists(): + return None + build_customization_spec = importlib.util.spec_from_file_location( + f"{connector.code_directory.name}_{BUILD_CUSTOMIZATION_MODULE_NAME}", build_customization_spec_path + ) + build_customization_module = importlib.util.module_from_spec(build_customization_spec) + build_customization_spec.loader.exec_module(build_customization_module) + return build_customization_module + + +def get_main_file_name(connector: Connector) -> str: + """Get the main file name from the build_customization.py module if it exists, DEFAULT_MAIN_FILE_NAME otherwise. + + Args: + connector (Connector): The connector to build. + + Returns: + str: The main file name. + """ + build_customization_module = get_build_customization_module(connector) + if hasattr(build_customization_module, "MAIN_FILE_NAME"): + return build_customization_module.MAIN_FILE_NAME + return DEFAULT_MAIN_FILE_NAME + + +def get_entrypoint(connector: Connector) -> List[str]: + main_file_name = get_main_file_name(connector) + return ["python", f"/airbyte/integration_code/{main_file_name}"] + + +async def pre_install_hooks(connector: Connector, base_container: Container, logger: Logger) -> Container: + """Run the pre_connector_install hook if it exists in the build_customization.py module. + It will mutate the base_container and return it. + + Args: + connector (Connector): The connector to build. + base_container (Container): The base container to mutate. + logger (Logger): The logger to use. + + Returns: + Container: The mutated base_container. + """ + build_customization_module = get_build_customization_module(connector) + if hasattr(build_customization_module, "pre_connector_install"): + base_container = await build_customization_module.pre_connector_install(base_container) + logger.info(f"Connector {connector.technical_name} pre install hook executed.") + return base_container + + +async def post_install_hooks(connector: Connector, connector_container: Container, logger: Logger) -> Container: + """Run the post_connector_install hook if it exists in the build_customization.py module. + It will mutate the connector_container and return it. + + Args: + connector (Connector): The connector to build. + connector_container (Container): The connector container to mutate. + logger (Logger): The logger to use. + + Returns: + Container: The mutated connector_container. + """ + build_customization_module = get_build_customization_module(connector) + if hasattr(build_customization_module, "post_connector_install"): + connector_container = await build_customization_module.post_connector_install(connector_container) + logger.info(f"Connector {connector.technical_name} post install hook executed.") + return connector_container diff --git a/airbyte-ci/connectors/pipelines/pipelines/builds/python_connectors.py b/airbyte-ci/connectors/pipelines/pipelines/builds/python_connectors.py index 83469bf0c87a..466e732ef907 100644 --- a/airbyte-ci/connectors/pipelines/pipelines/builds/python_connectors.py +++ b/airbyte-ci/connectors/pipelines/pipelines/builds/python_connectors.py @@ -2,9 +2,11 @@ # Copyright (c) 2023 Airbyte, Inc., all rights reserved. # + from dagger import Container, Platform -from pipelines.actions.environments import with_airbyte_python_connector +from pipelines.actions.environments import apply_python_development_overrides, with_python_connector_installed from pipelines.bases import StepResult +from pipelines.builds import build_customization from pipelines.builds.common import BuildConnectorImagesBase from pipelines.contexts import ConnectorContext @@ -15,8 +17,88 @@ class BuildConnectorImages(BuildConnectorImagesBase): A spec command is run on the container to validate it was built successfully. """ - async def _build_connector(self, platform: Platform) -> Container: - return await with_airbyte_python_connector(self.context, platform) + PATH_TO_INTEGRATION_CODE = "/airbyte/integration_code" + + async def _build_connector(self, platform: Platform): + if ( + "connectorBuildOptions" in self.context.connector.metadata + and "baseImage" in self.context.connector.metadata["connectorBuildOptions"] + ): + return await self._build_from_base_image(platform) + else: + return await self._build_from_dockerfile(platform) + + def _get_base_container(self, platform: Platform) -> Container: + base_image_name = self.context.connector.metadata["connectorBuildOptions"]["baseImage"] + self.logger.info(f"Building connector from base image {base_image_name}") + return self.dagger_client.container(platform=platform).from_(base_image_name) + + async def _create_builder_container(self, base_container: Container) -> Container: + """Pre install the connector dependencies in a builder container. + + Args: + base_container (Container): The base container to use to build the connector. + + Returns: + Container: The builder container, with installed dependencies. + """ + ONLY_PYTHON_BUILD_FILES = ["setup.py", "requirements.txt", "pyproject.toml", "poetry.lock"] + builder = await with_python_connector_installed( + self.context, + base_container, + str(self.context.connector.code_directory), + include=ONLY_PYTHON_BUILD_FILES, + ) + + return builder + + async def _build_from_base_image(self, platform: Platform) -> Container: + """Build the connector container using the base image defined in the metadata, in the connectorBuildOptions.baseImage field. + + Returns: + Container: The connector container built from the base image. + """ + self.logger.info(f"Building connector from base image in metadata for {platform}") + base = self._get_base_container(platform) + customized_base = await build_customization.pre_install_hooks(self.context.connector, base, self.logger) + entrypoint = build_customization.get_entrypoint(self.context.connector) + main_file_name = build_customization.get_main_file_name(self.context.connector) + + builder = await self._create_builder_container(customized_base) + + # The snake case name of the connector corresponds to the python package name of the connector + # We want to mount it to the container under PATH_TO_INTEGRATION_CODE/connector_snake_case_name + connector_snake_case_name = self.context.connector.technical_name.replace("-", "_") + + connector_container = ( + # copy python dependencies from builder to connector container + customized_base.with_directory("/usr/local", builder.directory("/usr/local")) + .with_workdir(self.PATH_TO_INTEGRATION_CODE) + .with_file(main_file_name, (await self.context.get_connector_dir(include=main_file_name)).file(main_file_name)) + .with_directory( + connector_snake_case_name, + (await self.context.get_connector_dir(include=connector_snake_case_name)).directory(connector_snake_case_name), + ) + .with_env_variable("AIRBYTE_ENTRYPOINT", " ".join(entrypoint)) + .with_entrypoint(entrypoint) + .with_label("io.airbyte.version", self.context.connector.metadata["dockerImageTag"]) + .with_label("io.airbyte.name", self.context.connector.metadata["dockerRepository"]) + ) + customized_connector = await build_customization.post_install_hooks(self.context.connector, connector_container, self.logger) + return customized_connector + + async def _build_from_dockerfile(self, platform: Platform) -> Container: + """Build the connector container using its Dockerfile. + + Returns: + Container: The connector container built from its Dockerfile. + """ + self.logger.warn( + "This connector is built from its Dockerfile. This is now deprecated. Please set connectorBuildOptions.baseImage metadata field to use our new build process." + ) + container = self.dagger_client.container(platform=platform).build(await self.context.get_connector_dir()) + container = await apply_python_development_overrides(self.context, container) + return container async def run_connector_build(context: ConnectorContext) -> StepResult: diff --git a/airbyte-ci/connectors/pipelines/pipelines/commands/airbyte_ci.py b/airbyte-ci/connectors/pipelines/pipelines/commands/airbyte_ci.py index 7cd3d5590348..b14a4d1a6bad 100644 --- a/airbyte-ci/connectors/pipelines/pipelines/commands/airbyte_ci.py +++ b/airbyte-ci/connectors/pipelines/pipelines/commands/airbyte_ci.py @@ -35,19 +35,27 @@ def check_up_to_date() -> bool: """Check if the installed version of pipelines is up to date.""" - # get the version of the latest release, which is just in the pyproject.toml file of the pipelines package - # as this is an internal tool, we don't need to check for the latest version on PyPI latest_version = get_latest_version() if latest_version != __installed_version__: - main_logger.warning(f"pipelines is not up to date. Installed version: {__installed_version__}. Latest version: {latest_version}") - main_logger.warning("Please run `pipx reinstall pipelines` to upgrade to the latest version.") - return False + upgrade_error_message = f""" + 🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨 + + airbyte-ci is not up to date. Installed version: {__installed_version__}. Latest version: {latest_version} + Please run `pipx reinstall pipelines` to upgrade to the latest version. + + 🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨 + """ + raise Exception(upgrade_error_message) main_logger.info(f"pipelines is up to date. Installed version: {__installed_version__}. Latest version: {latest_version}") return True def get_latest_version() -> str: + """ + Get the version of the latest release, which is just in the pyproject.toml file of the pipelines package + as this is an internal tool, we don't need to check for the latest version on PyPI + """ path_to_pyproject_toml = LOCAL_PIPELINE_PACKAGE_PATH + "pyproject.toml" with open(path_to_pyproject_toml, "r") as f: for line in f.readlines(): diff --git a/airbyte-ci/connectors/pipelines/pipelines/commands/groups/connectors.py b/airbyte-ci/connectors/pipelines/pipelines/commands/groups/connectors.py index 0f9bbe7ec1fe..b4b8e0d7711e 100644 --- a/airbyte-ci/connectors/pipelines/pipelines/commands/groups/connectors.py +++ b/airbyte-ci/connectors/pipelines/pipelines/commands/groups/connectors.py @@ -406,7 +406,7 @@ def build(ctx: click.Context, use_host_gradle_dist_tar: bool) -> bool: help="The Slack webhook URL to send notifications to.", type=click.STRING, envvar="SLACK_CHANNEL", - default="#publish-on-merge-updates", + default="#connector-publish-updates", ) @click.pass_context def publish( diff --git a/airbyte-ci/connectors/pipelines/pipelines/commands/groups/tests.py b/airbyte-ci/connectors/pipelines/pipelines/commands/groups/tests.py index 5d5ba36b8904..f08e38033cb2 100644 --- a/airbyte-ci/connectors/pipelines/pipelines/commands/groups/tests.py +++ b/airbyte-ci/connectors/pipelines/pipelines/commands/groups/tests.py @@ -46,7 +46,7 @@ async def run_test(poetry_package_path: str, test_directory: str) -> bool: logger = logging.getLogger(f"{poetry_package_path}.tests") logger.info(f"Running tests for {poetry_package_path}") # The following directories are always mounted because a lot of tests rely on them - directories_to_always_mount = [".git", "airbyte-integrations", "airbyte-ci", "airbyte-cdk"] + directories_to_always_mount = [".git", "airbyte-integrations", "airbyte-ci", "airbyte-cdk", "pyproject.toml"] directories_to_mount = list(set([poetry_package_path, *directories_to_always_mount])) async with dagger.Connection(dagger.Config(log_output=sys.stderr)) as dagger_client: try: diff --git a/airbyte-ci/connectors/pipelines/pipelines/gradle.py b/airbyte-ci/connectors/pipelines/pipelines/gradle.py index 362cc429593c..637ae18c7551 100644 --- a/airbyte-ci/connectors/pipelines/pipelines/gradle.py +++ b/airbyte-ci/connectors/pipelines/pipelines/gradle.py @@ -5,11 +5,12 @@ from __future__ import annotations from abc import ABC -from typing import ClassVar, List, Tuple +from typing import ClassVar, List -from dagger import CacheSharingMode, CacheVolume, Container, Directory +from dagger import CacheSharingMode, CacheVolume +from pipelines import hacks from pipelines.actions import environments -from pipelines.bases import Step, StepResult, StepStatus +from pipelines.bases import Step, StepResult from pipelines.consts import AMAZONCORRETTO_IMAGE from pipelines.contexts import PipelineContext from pipelines.utils import sh_dash_c @@ -37,7 +38,10 @@ def __init__(self, context: PipelineContext) -> None: @property def connector_java_build_cache(self) -> CacheVolume: - return self.context.dagger_client.cache_volume("gradle-cache") + # TODO: remove this once we finish the project to boost source-postgres CI performance. + # We should use a static gradle-cache volume name. + cache_volume_name = hacks.get_gradle_cache_volume_name(self.context, self.logger) + return self.context.dagger_client.cache_volume(cache_volume_name) @property def build_include(self) -> List[str]: @@ -90,7 +94,7 @@ async def _run(self) -> StepResult: "findutils", # gradle requires xargs, which is shipped in findutils. "jq", # required by :airbyte-connector-test-harnesses:acceptance-test-harness to inspect docker images. "npm", # required by :format. - "pip", # required by :format. + "python3.11-pip", # required by :format. "rsync", # required for gradle cache synchronization. ] @@ -123,6 +127,8 @@ async def _run(self) -> StepResult: # Set RUN_IN_AIRBYTE_CI to tell gradle how to configure its build cache. # This is consumed by settings.gradle in the repo root. .with_env_variable("RUN_IN_AIRBYTE_CI", "1") + # TODO: remove this once we finish the project to boost source-postgres CI performance. + .with_env_variable("CACHEBUSTER", hacks.get_cachebuster(self.context, self.logger)) # Mount the gradle cache volume. # We deliberately don't mount it at $GRADLE_HOME, instead we load it there and store it from there using rsync. # This is because the volume is accessed concurrently by all GradleTask instances. diff --git a/airbyte-ci/connectors/pipelines/pipelines/hacks.py b/airbyte-ci/connectors/pipelines/pipelines/hacks.py index a447424c921a..61af0ed05045 100644 --- a/airbyte-ci/connectors/pipelines/pipelines/hacks.py +++ b/airbyte-ci/connectors/pipelines/pipelines/hacks.py @@ -6,12 +6,14 @@ from __future__ import annotations +from logging import Logger from typing import TYPE_CHECKING, Callable, List import requests if TYPE_CHECKING: from dagger import Client, Container + from pipelines.contexts import ConnectorContext async def cache_latest_cdk(dagger_client: Client, pip_cache_volume_name: str = "pip_cache") -> None: @@ -76,3 +78,50 @@ def never_fail_exec_inner(container: Container): return container.with_exec(["sh", "-c", f"{' '.join(command)}; echo $? > /exit_code"], skip_entrypoint=True) return never_fail_exec_inner + + +# We want to invalidate the persisted dagger cache and gradle cache for source-postgres. +# We do it in the context of a project to boost the CI speed for this connector. +# Invalidating the cache on every run will help us gather unbiased metrics on the CI speed. +# This should be removed once the project is over. +CONNECTORS_WITHOUT_CACHING = [ + "source-postgres", +] + + +def get_cachebuster(context: ConnectorContext, logger: Logger) -> str: + """ + This function will return a semi-static cachebuster value for connectors in CONNECTORS_WITHOUT_CACHING and a static value for all other connectors. + By semi-static I mean that the value (the pipeline start time) will change on each pipeline execution but will be the same for all the steps of the pipeline. + It ensures we do not use the remotely persisted dagger cache but we still benefit from the buildkit layer caching inside the pipeline execution. + This hack is useful to collect unbiased metrics on the CI speed for connectors in CONNECTORS_WITHOUT_CACHING. + + When the cachebuster value is static it won't invalidate the dagger cache because it's the same value as the previous run: no layer will be rebuilt. + When the cachebuster value is changed it will invalidate the dagger cache because it's a different value than the previous run: all downstream layers will be rebuilt. + + Returns: + str: The cachebuster value. + """ + if context.connector.technical_name in CONNECTORS_WITHOUT_CACHING: + logger.warning( + f"Invalidating the persisted dagger cache for {context.connector.technical_name}. Only used in the context of the CI performance improvements project for {context.connector.technical_name}." + ) + return str(context.pipeline_start_timestamp) + return "0" + + +def get_gradle_cache_volume_name(context: ConnectorContext, logger: Logger) -> str: + """ + This function will return a semi-static gradle cache volume name for connectors in CONNECTORS_WITHOUT_CACHING and a static value for all other connectors. + By semi-static I mean that the gradle cache volume name will change on each pipeline execution but will be the same for all the steps of the pipeline. + This hack is useful to collect unbiased metrics on the CI speed for connectors in CONNECTORS_WITHOUT_CACHING: it guarantees that the gradle cache volume will be empty on each pipeline execution and no remote caching is used. + + Returns: + str: The gradle cache volume name. + """ + if context.connector.technical_name in CONNECTORS_WITHOUT_CACHING: + logger.warning( + f"Getting a fresh gradle cache volume name for {context.connector.technical_name} to not use remote caching. Only used in the context of the CI performance improvements project for {context.connector.technical_name}." + ) + return f"gradle-cache-{context.pipeline_start_timestamp}" + return "gradle-cache" diff --git a/airbyte-ci/connectors/pipelines/pipelines/tests/common.py b/airbyte-ci/connectors/pipelines/pipelines/tests/common.py index f715b335168f..253a9257434c 100644 --- a/airbyte-ci/connectors/pipelines/pipelines/tests/common.py +++ b/airbyte-ci/connectors/pipelines/pipelines/tests/common.py @@ -17,7 +17,7 @@ from dagger import Container, Directory, File from pipelines import hacks from pipelines.actions import environments -from pipelines.bases import CIContext, PytestStep, Step, StepResult, StepStatus +from pipelines.bases import CIContext, Step, StepResult, StepStatus from pipelines.utils import METADATA_FILE_NAME @@ -175,12 +175,13 @@ async def _run(self) -> StepResult: return await self.get_step_result(qa_checks) -class AcceptanceTests(PytestStep): +class AcceptanceTests(Step): """A step to run acceptance tests for a connector if it has an acceptance test config file.""" title = "Acceptance tests" CONTAINER_TEST_INPUT_DIRECTORY = "/test_input" CONTAINER_SECRETS_DIRECTORY = "/test_input/secrets" + skipped_exit_code = 5 @property def base_cat_command(self) -> List[str]: diff --git a/airbyte-ci/connectors/pipelines/pipelines/tests/java_connectors.py b/airbyte-ci/connectors/pipelines/pipelines/tests/java_connectors.py index 5d7c15211248..1859f3b5dd67 100644 --- a/airbyte-ci/connectors/pipelines/pipelines/tests/java_connectors.py +++ b/airbyte-ci/connectors/pipelines/pipelines/tests/java_connectors.py @@ -55,7 +55,7 @@ class UnitTests(GradleTask): """A step to run unit tests for Java connectors.""" title = "Java Connector Unit Tests" - gradle_task_name = "check" + gradle_task_name = "test" bind_to_docker_host = True diff --git a/airbyte-ci/connectors/pipelines/pipelines/tests/python_connectors.py b/airbyte-ci/connectors/pipelines/pipelines/tests/python_connectors.py index fbd89c4ee458..a24eba9f1555 100644 --- a/airbyte-ci/connectors/pipelines/pipelines/tests/python_connectors.py +++ b/airbyte-ci/connectors/pipelines/pipelines/tests/python_connectors.py @@ -4,18 +4,17 @@ """This module groups steps made to run tests for a specific Python connector given a test context.""" -from datetime import timedelta -from typing import List +from abc import ABC, abstractmethod +from typing import Callable, Iterable, List, Tuple import asyncer -from dagger import Container +from dagger import Container, File from pipelines.actions import environments, secrets from pipelines.bases import Step, StepResult, StepStatus from pipelines.builds.python_connectors import BuildConnectorImages from pipelines.consts import LOCAL_BUILD_PLATFORM from pipelines.contexts import ConnectorContext -from pipelines.helpers.steps import run_steps -from pipelines.tests.common import AcceptanceTests, PytestStep +from pipelines.tests.common import AcceptanceTests from pipelines.utils import export_container_to_tarball @@ -55,30 +54,27 @@ async def _run(self) -> StepResult: return await self.get_step_result(formatter) -class ConnectorPackageInstall(Step): - """A step to install the Python connector package in a container.""" +class PytestStep(Step, ABC): + """An abstract class to run pytest tests and evaluate success or failure according to pytest logs.""" - title = "Connector package install" - max_duration = timedelta(minutes=20) - max_retries = 3 + PYTEST_INI_FILE_NAME = "pytest.ini" + PYPROJECT_FILE_NAME = "pyproject.toml" + skipped_exit_code = 5 + bind_to_docker_host = False - async def _run(self) -> StepResult: - """Install the connector under test package in a Python container. - - Returns: - StepResult: Failure or success of the package installation and the connector under test container (with the connector package installed). - """ - connector_under_test = await environments.with_python_connector_installed(self.context) - return await self.get_step_result(connector_under_test) + @property + @abstractmethod + def test_directory_name(self) -> str: + raise NotImplementedError("test_directory_name must be implemented in the child class.") - -class UnitTests(PytestStep): - """A step to run the connector unit tests with Pytest.""" - - title = "Unit tests" + @property + def extra_dependencies_names(self) -> Iterable[str]: + if self.context.connector.is_using_poetry: + return ("dev",) + return ("dev", "tests") async def _run(self, connector_under_test: Container) -> StepResult: - """Run all pytest tests declared in the unit_tests directory of the connector code. + """Run all pytest tests declared in the test directory of the connector code. Args: connector_under_test (Container): The connector under test container. @@ -86,31 +82,119 @@ async def _run(self, connector_under_test: Container) -> StepResult: Returns: StepResult: Failure or success of the unit tests with stdout and stdout. """ - connector_under_test_with_secrets = connector_under_test.with_( - await environments.mounted_connector_secrets(self.context, "secrets") + if not await self.check_if_tests_are_available(self.test_directory_name): + return self.skip(f"No {self.test_directory_name} directory found in the connector.") + + test_config_file_name, test_config_file = await self.get_config_file_name_and_file() + test_environment = await self.install_testing_environment( + connector_under_test, test_config_file_name, test_config_file, self.extra_dependencies_names ) - return await self._run_tests_in_directory(connector_under_test_with_secrets, "unit_tests") + pytest_command = self.get_pytest_command(test_config_file_name) + if self.bind_to_docker_host: + test_environment = environments.with_bound_docker_host(self.context, test_environment) -class IntegrationTests(PytestStep): - """A step to run the connector integration tests with Pytest.""" + test_execution = test_environment.with_exec(pytest_command) - title = "Integration tests" + return await self.get_step_result(test_execution) - async def _run(self, connector_under_test: Container) -> StepResult: - """Run all pytest tests declared in the integration_tests directory of the connector code. + def get_pytest_command(self, test_config_file_name: str) -> List[str]: + """Get the pytest command to run. - Args: - connector_under_test (Container): The connector under test container. + Returns: + List[str]: The pytest command to run. + """ + cmd = ["pytest", "-s", self.test_directory_name, "-c", test_config_file_name] + if self.context.connector.is_using_poetry: + return ["poetry", "run"] + cmd + return cmd + + async def check_if_tests_are_available(self, test_directory_name: str) -> bool: + """Check if the tests are available in the connector directory. + + Returns: + bool: True if the tests are available. + """ + connector_dir = await self.context.get_connector_dir() + connector_dir_entries = await connector_dir.entries() + return test_directory_name in connector_dir_entries + + async def get_config_file_name_and_file(self) -> Tuple[str, File]: + """Get the config file name and file to use for pytest. + + The order of priority is: + - pytest.ini file in the connector directory + - pyproject.toml file in the connector directory + - pyproject.toml file in the repository directory Returns: - StepResult: Failure or success of the integration tests with stdout and stdout. + Tuple[str, File]: The config file name and file to use for pytest. """ + connector_dir = await self.context.get_connector_dir() + connector_dir_entries = await connector_dir.entries() + if self.PYTEST_INI_FILE_NAME in connector_dir_entries: + config_file_name = self.PYTEST_INI_FILE_NAME + test_config = (await self.context.get_connector_dir(include=[self.PYTEST_INI_FILE_NAME])).file(self.PYTEST_INI_FILE_NAME) + self.logger.info(f"Found {self.PYTEST_INI_FILE_NAME}, using it for testing.") + elif self.PYPROJECT_FILE_NAME in connector_dir_entries: + config_file_name = self.PYPROJECT_FILE_NAME + test_config = (await self.context.get_connector_dir(include=[self.PYPROJECT_FILE_NAME])).file(self.PYPROJECT_FILE_NAME) + self.logger.info(f"Found {self.PYPROJECT_FILE_NAME} at connector level, using it for testing.") + else: + config_file_name = f"global_{self.PYPROJECT_FILE_NAME}" + test_config = (await self.context.get_repo_dir(include=[self.PYPROJECT_FILE_NAME])).file(self.PYPROJECT_FILE_NAME) + self.logger.info(f"Found {self.PYPROJECT_FILE_NAME} at repo level, using it for testing.") + return config_file_name, test_config + + async def install_testing_environment( + self, + built_connector_container: Container, + test_config_file_name: str, + test_config_file: File, + extra_dependencies_names: Iterable[str], + ) -> Callable: + """Install the connector with the extra dependencies in /test_environment. - connector_under_test = connector_under_test.with_(environments.bound_docker_host(self.context)).with_( - await environments.mounted_connector_secrets(self.context, "secrets") + Args: + extra_dependencies_names (Iterable[str]): Extra dependencies to install. + + Returns: + Callable: The decorator to use with the with_ method of a container. + """ + secret_mounting_function = await environments.mounted_connector_secrets(self.context, "secrets") + + container_with_test_deps = ( + # Install the connector python package in /test_environment with the extra dependencies + await environments.with_python_connector_installed( + self.context, + # Reset the entrypoint to run non airbyte commands + built_connector_container.with_entrypoint([]), + str(self.context.connector.code_directory), + additional_dependency_groups=extra_dependencies_names, + ) + ) + return ( + container_with_test_deps + # Mount the test config file + .with_mounted_file(test_config_file_name, test_config_file) + # Mount the secrets + .with_(secret_mounting_function).with_env_variable("PYTHONPATH", ".") ) - return await self._run_tests_in_directory(connector_under_test, "integration_tests") + + +class UnitTests(PytestStep): + """A step to run the connector unit tests with Pytest.""" + + title = "Unit tests" + test_directory_name = "unit_tests" + + +class IntegrationTests(PytestStep): + """A step to run the connector integration tests with Pytest.""" + + title = "Integration tests" + test_directory_name = "integration_tests" + bind_to_docker_host = True async def run_all_tests(context: ConnectorContext) -> List[StepResult]: @@ -122,19 +206,14 @@ async def run_all_tests(context: ConnectorContext) -> List[StepResult]: Returns: List[StepResult]: The results of all the steps that ran or were skipped. """ + step_results = [] + build_connector_image_results = await BuildConnectorImages(context, LOCAL_BUILD_PLATFORM).run() + if build_connector_image_results.status is StepStatus.FAILURE: + return [build_connector_image_results] + step_results.append(build_connector_image_results) - step_results = await run_steps( - [ - ConnectorPackageInstall(context), - BuildConnectorImages(context, LOCAL_BUILD_PLATFORM), - ] - ) - if any([step_result.status is StepStatus.FAILURE for step_result in step_results]): - return step_results - connector_package_install_results, build_connector_image_results = step_results[0], step_results[1] connector_container = build_connector_image_results.output_artifact[LOCAL_BUILD_PLATFORM] connector_image_tar_file, _ = await export_container_to_tarball(context, connector_container) - connector_container = connector_package_install_results.output_artifact context.connector_secrets = await secrets.get_connector_secrets(context) diff --git a/airbyte-ci/connectors/pipelines/pipelines/utils.py b/airbyte-ci/connectors/pipelines/pipelines/utils.py index 93aacf5b063b..80396266c73b 100644 --- a/airbyte-ci/connectors/pipelines/pipelines/utils.py +++ b/airbyte-ci/connectors/pipelines/pipelines/utils.py @@ -54,7 +54,7 @@ async def check_path_in_workdir(container: Container, path: str) -> bool: Returns: bool: Whether the path exists in the container working directory. """ - workdir = (await container.with_exec(["pwd"]).stdout()).strip() + workdir = (await container.with_exec(["pwd"], skip_entrypoint=True).stdout()).strip() mounts = await container.mounts() if workdir in mounts: expected_file_path = Path(workdir[1:]) / path diff --git a/airbyte-ci/connectors/pipelines/poetry.lock b/airbyte-ci/connectors/pipelines/poetry.lock index 00da4fe670ea..5ac03e3e04e6 100644 --- a/airbyte-ci/connectors/pipelines/poetry.lock +++ b/airbyte-ci/connectors/pipelines/poetry.lock @@ -1,18 +1,18 @@ -# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. [[package]] name = "airbyte-protocol-models" -version = "0.4.1" +version = "1.0.1" description = "Declares the Airbyte Protocol." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "airbyte_protocol_models-0.4.1-py3-none-any.whl", hash = "sha256:95f1197c800d7867ba067f75770b83aeff4c2cec9b3d1def2dbf70261fee89ee"}, - {file = "airbyte_protocol_models-0.4.1.tar.gz", hash = "sha256:92602134eab4c921d1328fa4f24e9a810a679c117ccb352cf6b1521f95f0ed53"}, + {file = "airbyte_protocol_models-1.0.1-py3-none-any.whl", hash = "sha256:2c214fb8cb42b74aa6408beeea2cd52f094bc8a3ba0e78af20bb358e5404f4a8"}, + {file = "airbyte_protocol_models-1.0.1.tar.gz", hash = "sha256:caa860d15c9c9073df4b221f58280b9855d36de07519e010d1e610546458d0a7"}, ] [package.dependencies] -pydantic = ">=1.9.2,<2.0.0" +pydantic = ">=1.9.2,<1.10.0" [[package]] name = "anyio" @@ -380,7 +380,7 @@ url = "../common_utils" [[package]] name = "connector-ops" -version = "0.2.4" +version = "0.2.6" description = "Packaged maintained by the connector operations team to perform CI for connectors" optional = false python-versions = "^3.10" @@ -555,23 +555,24 @@ dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] [[package]] name = "docker" -version = "5.0.3" +version = "6.1.3" description = "A Python library for the Docker Engine API." optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "docker-5.0.3-py2.py3-none-any.whl", hash = "sha256:7a79bb439e3df59d0a72621775d600bc8bc8b422d285824cb37103eab91d1ce0"}, - {file = "docker-5.0.3.tar.gz", hash = "sha256:d916a26b62970e7c2f554110ed6af04c7ccff8e9f81ad17d0d40c75637e227fb"}, + {file = "docker-6.1.3-py3-none-any.whl", hash = "sha256:aecd2277b8bf8e506e484f6ab7aec39abe0038e29fa4a6d3ba86c3fe01844ed9"}, + {file = "docker-6.1.3.tar.gz", hash = "sha256:aa6d17830045ba5ef0168d5eaa34d37beeb113948c413affe1d5991fc11f9a20"}, ] [package.dependencies] -pywin32 = {version = "227", markers = "sys_platform == \"win32\""} -requests = ">=2.14.2,<2.18.0 || >2.18.0" +packaging = ">=14.0" +pywin32 = {version = ">=304", markers = "sys_platform == \"win32\""} +requests = ">=2.26.0" +urllib3 = ">=1.26.0" websocket-client = ">=0.32.0" [package.extras] -ssh = ["paramiko (>=2.4.2)"] -tls = ["cryptography (>=3.4.7)", "idna (>=2.0.0)", "pyOpenSSL (>=17.5.0)"] +ssh = ["paramiko (>=2.4.3)"] [[package]] name = "exceptiongroup" @@ -656,13 +657,13 @@ grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] [[package]] name = "google-auth" -version = "2.23.2" +version = "2.23.3" description = "Google Authentication Library" optional = false python-versions = ">=3.7" files = [ - {file = "google-auth-2.23.2.tar.gz", hash = "sha256:5a9af4be520ba33651471a0264eead312521566f44631cbb621164bc30c8fd40"}, - {file = "google_auth-2.23.2-py2.py3-none-any.whl", hash = "sha256:c2e253347579d483004f17c3bd0bf92e611ef6c7ba24d41c5c59f2e7aeeaf088"}, + {file = "google-auth-2.23.3.tar.gz", hash = "sha256:6864247895eea5d13b9c57c9e03abb49cb94ce2dc7c58e91cba3248c7477c9e3"}, + {file = "google_auth-2.23.3-py2.py3-none-any.whl", hash = "sha256:a8f4608e65c244ead9e0538f181a96c6e11199ec114d41f1d7b1bffa96937bda"}, ] [package.dependencies] @@ -816,13 +817,13 @@ requests = ["requests (>=2.18.0,<3.0.0dev)"] [[package]] name = "googleapis-common-protos" -version = "1.60.0" +version = "1.61.0" description = "Common protobufs used in Google APIs" optional = false python-versions = ">=3.7" files = [ - {file = "googleapis-common-protos-1.60.0.tar.gz", hash = "sha256:e73ebb404098db405ba95d1e1ae0aa91c3e15a71da031a2eeb6b2e23e7bc3708"}, - {file = "googleapis_common_protos-1.60.0-py2.py3-none-any.whl", hash = "sha256:69f9bbcc6acde92cab2db95ce30a70bd2b81d20b12eff3f1aabaffcbe8a93918"}, + {file = "googleapis-common-protos-1.61.0.tar.gz", hash = "sha256:8a64866a97f6304a7179873a465d6eee97b7a24ec6cfd78e0f575e96b821240b"}, + {file = "googleapis_common_protos-1.61.0-py2.py3-none-any.whl", hash = "sha256:22f1915393bb3245343f6efe87f6fe868532efc12aa26b391b15132e1279f1c0"}, ] [package.dependencies] @@ -1013,16 +1014,6 @@ files = [ {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-win32.whl", hash = "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, @@ -1308,24 +1299,24 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "protobuf" -version = "4.24.3" +version = "4.24.4" description = "" optional = false python-versions = ">=3.7" files = [ - {file = "protobuf-4.24.3-cp310-abi3-win32.whl", hash = "sha256:20651f11b6adc70c0f29efbe8f4a94a74caf61b6200472a9aea6e19898f9fcf4"}, - {file = "protobuf-4.24.3-cp310-abi3-win_amd64.whl", hash = "sha256:3d42e9e4796a811478c783ef63dc85b5a104b44aaaca85d4864d5b886e4b05e3"}, - {file = "protobuf-4.24.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:6e514e8af0045be2b56e56ae1bb14f43ce7ffa0f68b1c793670ccbe2c4fc7d2b"}, - {file = "protobuf-4.24.3-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:ba53c2f04798a326774f0e53b9c759eaef4f6a568ea7072ec6629851c8435959"}, - {file = "protobuf-4.24.3-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:f6ccbcf027761a2978c1406070c3788f6de4a4b2cc20800cc03d52df716ad675"}, - {file = "protobuf-4.24.3-cp37-cp37m-win32.whl", hash = "sha256:1b182c7181a2891e8f7f3a1b5242e4ec54d1f42582485a896e4de81aa17540c2"}, - {file = "protobuf-4.24.3-cp37-cp37m-win_amd64.whl", hash = "sha256:b0271a701e6782880d65a308ba42bc43874dabd1a0a0f41f72d2dac3b57f8e76"}, - {file = "protobuf-4.24.3-cp38-cp38-win32.whl", hash = "sha256:e29d79c913f17a60cf17c626f1041e5288e9885c8579832580209de8b75f2a52"}, - {file = "protobuf-4.24.3-cp38-cp38-win_amd64.whl", hash = "sha256:067f750169bc644da2e1ef18c785e85071b7c296f14ac53e0900e605da588719"}, - {file = "protobuf-4.24.3-cp39-cp39-win32.whl", hash = "sha256:2da777d34b4f4f7613cdf85c70eb9a90b1fbef9d36ae4a0ccfe014b0b07906f1"}, - {file = "protobuf-4.24.3-cp39-cp39-win_amd64.whl", hash = "sha256:f631bb982c5478e0c1c70eab383af74a84be66945ebf5dd6b06fc90079668d0b"}, - {file = "protobuf-4.24.3-py3-none-any.whl", hash = "sha256:f6f8dc65625dadaad0c8545319c2e2f0424fede988368893ca3844261342c11a"}, - {file = "protobuf-4.24.3.tar.gz", hash = "sha256:12e9ad2ec079b833176d2921be2cb24281fa591f0b119b208b788adc48c2561d"}, + {file = "protobuf-4.24.4-cp310-abi3-win32.whl", hash = "sha256:ec9912d5cb6714a5710e28e592ee1093d68c5ebfeda61983b3f40331da0b1ebb"}, + {file = "protobuf-4.24.4-cp310-abi3-win_amd64.whl", hash = "sha256:1badab72aa8a3a2b812eacfede5020472e16c6b2212d737cefd685884c191085"}, + {file = "protobuf-4.24.4-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:8e61a27f362369c2f33248a0ff6896c20dcd47b5d48239cb9720134bef6082e4"}, + {file = "protobuf-4.24.4-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:bffa46ad9612e6779d0e51ae586fde768339b791a50610d85eb162daeb23661e"}, + {file = "protobuf-4.24.4-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:b493cb590960ff863743b9ff1452c413c2ee12b782f48beca77c8da3e2ffe9d9"}, + {file = "protobuf-4.24.4-cp37-cp37m-win32.whl", hash = "sha256:dbbed8a56e56cee8d9d522ce844a1379a72a70f453bde6243e3c86c30c2a3d46"}, + {file = "protobuf-4.24.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6b7d2e1c753715dcfe9d284a25a52d67818dd43c4932574307daf836f0071e37"}, + {file = "protobuf-4.24.4-cp38-cp38-win32.whl", hash = "sha256:02212557a76cd99574775a81fefeba8738d0f668d6abd0c6b1d3adcc75503dbe"}, + {file = "protobuf-4.24.4-cp38-cp38-win_amd64.whl", hash = "sha256:2fa3886dfaae6b4c5ed2730d3bf47c7a38a72b3a1f0acb4d4caf68e6874b947b"}, + {file = "protobuf-4.24.4-cp39-cp39-win32.whl", hash = "sha256:b77272f3e28bb416e2071186cb39efd4abbf696d682cbb5dc731308ad37fa6dd"}, + {file = "protobuf-4.24.4-cp39-cp39-win_amd64.whl", hash = "sha256:9fee5e8aa20ef1b84123bb9232b3f4a5114d9897ed89b4b8142d81924e05d79b"}, + {file = "protobuf-4.24.4-py3-none-any.whl", hash = "sha256:80797ce7424f8c8d2f2547e2d42bfbb6c08230ce5832d6c099a37335c9c90a92"}, + {file = "protobuf-4.24.4.tar.gz", hash = "sha256:5a70731910cd9104762161719c3d883c960151eea077134458503723b60e3667"}, ] [[package]] @@ -1377,51 +1368,50 @@ files = [ [[package]] name = "pydantic" -version = "1.10.13" +version = "1.9.2" description = "Data validation and settings management using python type hints" optional = false -python-versions = ">=3.7" -files = [ - {file = "pydantic-1.10.13-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:efff03cc7a4f29d9009d1c96ceb1e7a70a65cfe86e89d34e4a5f2ab1e5693737"}, - {file = "pydantic-1.10.13-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3ecea2b9d80e5333303eeb77e180b90e95eea8f765d08c3d278cd56b00345d01"}, - {file = "pydantic-1.10.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1740068fd8e2ef6eb27a20e5651df000978edce6da6803c2bef0bc74540f9548"}, - {file = "pydantic-1.10.13-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84bafe2e60b5e78bc64a2941b4c071a4b7404c5c907f5f5a99b0139781e69ed8"}, - {file = "pydantic-1.10.13-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bc0898c12f8e9c97f6cd44c0ed70d55749eaf783716896960b4ecce2edfd2d69"}, - {file = "pydantic-1.10.13-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:654db58ae399fe6434e55325a2c3e959836bd17a6f6a0b6ca8107ea0571d2e17"}, - {file = "pydantic-1.10.13-cp310-cp310-win_amd64.whl", hash = "sha256:75ac15385a3534d887a99c713aa3da88a30fbd6204a5cd0dc4dab3d770b9bd2f"}, - {file = "pydantic-1.10.13-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c553f6a156deb868ba38a23cf0df886c63492e9257f60a79c0fd8e7173537653"}, - {file = "pydantic-1.10.13-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5e08865bc6464df8c7d61439ef4439829e3ab62ab1669cddea8dd00cd74b9ffe"}, - {file = "pydantic-1.10.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e31647d85a2013d926ce60b84f9dd5300d44535a9941fe825dc349ae1f760df9"}, - {file = "pydantic-1.10.13-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:210ce042e8f6f7c01168b2d84d4c9eb2b009fe7bf572c2266e235edf14bacd80"}, - {file = "pydantic-1.10.13-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8ae5dd6b721459bfa30805f4c25880e0dd78fc5b5879f9f7a692196ddcb5a580"}, - {file = "pydantic-1.10.13-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f8e81fc5fb17dae698f52bdd1c4f18b6ca674d7068242b2aff075f588301bbb0"}, - {file = "pydantic-1.10.13-cp311-cp311-win_amd64.whl", hash = "sha256:61d9dce220447fb74f45e73d7ff3b530e25db30192ad8d425166d43c5deb6df0"}, - {file = "pydantic-1.10.13-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4b03e42ec20286f052490423682016fd80fda830d8e4119f8ab13ec7464c0132"}, - {file = "pydantic-1.10.13-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f59ef915cac80275245824e9d771ee939133be38215555e9dc90c6cb148aaeb5"}, - {file = "pydantic-1.10.13-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a1f9f747851338933942db7af7b6ee8268568ef2ed86c4185c6ef4402e80ba8"}, - {file = "pydantic-1.10.13-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:97cce3ae7341f7620a0ba5ef6cf043975cd9d2b81f3aa5f4ea37928269bc1b87"}, - {file = "pydantic-1.10.13-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:854223752ba81e3abf663d685f105c64150873cc6f5d0c01d3e3220bcff7d36f"}, - {file = "pydantic-1.10.13-cp37-cp37m-win_amd64.whl", hash = "sha256:b97c1fac8c49be29486df85968682b0afa77e1b809aff74b83081cc115e52f33"}, - {file = "pydantic-1.10.13-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c958d053453a1c4b1c2062b05cd42d9d5c8eb67537b8d5a7e3c3032943ecd261"}, - {file = "pydantic-1.10.13-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4c5370a7edaac06daee3af1c8b1192e305bc102abcbf2a92374b5bc793818599"}, - {file = "pydantic-1.10.13-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d6f6e7305244bddb4414ba7094ce910560c907bdfa3501e9db1a7fd7eaea127"}, - {file = "pydantic-1.10.13-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3a3c792a58e1622667a2837512099eac62490cdfd63bd407993aaf200a4cf1f"}, - {file = "pydantic-1.10.13-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c636925f38b8db208e09d344c7aa4f29a86bb9947495dd6b6d376ad10334fb78"}, - {file = "pydantic-1.10.13-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:678bcf5591b63cc917100dc50ab6caebe597ac67e8c9ccb75e698f66038ea953"}, - {file = "pydantic-1.10.13-cp38-cp38-win_amd64.whl", hash = "sha256:6cf25c1a65c27923a17b3da28a0bdb99f62ee04230c931d83e888012851f4e7f"}, - {file = "pydantic-1.10.13-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8ef467901d7a41fa0ca6db9ae3ec0021e3f657ce2c208e98cd511f3161c762c6"}, - {file = "pydantic-1.10.13-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:968ac42970f57b8344ee08837b62f6ee6f53c33f603547a55571c954a4225691"}, - {file = "pydantic-1.10.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9849f031cf8a2f0a928fe885e5a04b08006d6d41876b8bbd2fc68a18f9f2e3fd"}, - {file = "pydantic-1.10.13-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:56e3ff861c3b9c6857579de282ce8baabf443f42ffba355bf070770ed63e11e1"}, - {file = "pydantic-1.10.13-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f00790179497767aae6bcdc36355792c79e7bbb20b145ff449700eb076c5f96"}, - {file = "pydantic-1.10.13-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:75b297827b59bc229cac1a23a2f7a4ac0031068e5be0ce385be1462e7e17a35d"}, - {file = "pydantic-1.10.13-cp39-cp39-win_amd64.whl", hash = "sha256:e70ca129d2053fb8b728ee7d1af8e553a928d7e301a311094b8a0501adc8763d"}, - {file = "pydantic-1.10.13-py3-none-any.whl", hash = "sha256:b87326822e71bd5f313e7d3bfdc77ac3247035ac10b0c0618bd99dcf95b1e687"}, - {file = "pydantic-1.10.13.tar.gz", hash = "sha256:32c8b48dcd3b2ac4e78b0ba4af3a2c2eb6048cb75202f0ea7b34feb740efc340"}, +python-versions = ">=3.6.1" +files = [ + {file = "pydantic-1.9.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9c9e04a6cdb7a363d7cb3ccf0efea51e0abb48e180c0d31dca8d247967d85c6e"}, + {file = "pydantic-1.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fafe841be1103f340a24977f61dee76172e4ae5f647ab9e7fd1e1fca51524f08"}, + {file = "pydantic-1.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afacf6d2a41ed91fc631bade88b1d319c51ab5418870802cedb590b709c5ae3c"}, + {file = "pydantic-1.9.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ee0d69b2a5b341fc7927e92cae7ddcfd95e624dfc4870b32a85568bd65e6131"}, + {file = "pydantic-1.9.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ff68fc85355532ea77559ede81f35fff79a6a5543477e168ab3a381887caea76"}, + {file = "pydantic-1.9.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c0f5e142ef8217019e3eef6ae1b6b55f09a7a15972958d44fbd228214cede567"}, + {file = "pydantic-1.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:615661bfc37e82ac677543704437ff737418e4ea04bef9cf11c6d27346606044"}, + {file = "pydantic-1.9.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:328558c9f2eed77bd8fffad3cef39dbbe3edc7044517f4625a769d45d4cf7555"}, + {file = "pydantic-1.9.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bd446bdb7755c3a94e56d7bdfd3ee92396070efa8ef3a34fab9579fe6aa1d84"}, + {file = "pydantic-1.9.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e0b214e57623a535936005797567231a12d0da0c29711eb3514bc2b3cd008d0f"}, + {file = "pydantic-1.9.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:d8ce3fb0841763a89322ea0432f1f59a2d3feae07a63ea2c958b2315e1ae8adb"}, + {file = "pydantic-1.9.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b34ba24f3e2d0b39b43f0ca62008f7ba962cff51efa56e64ee25c4af6eed987b"}, + {file = "pydantic-1.9.2-cp36-cp36m-win_amd64.whl", hash = "sha256:84d76ecc908d917f4684b354a39fd885d69dd0491be175f3465fe4b59811c001"}, + {file = "pydantic-1.9.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4de71c718c9756d679420c69f216776c2e977459f77e8f679a4a961dc7304a56"}, + {file = "pydantic-1.9.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5803ad846cdd1ed0d97eb00292b870c29c1f03732a010e66908ff48a762f20e4"}, + {file = "pydantic-1.9.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a8c5360a0297a713b4123608a7909e6869e1b56d0e96eb0d792c27585d40757f"}, + {file = "pydantic-1.9.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:cdb4272678db803ddf94caa4f94f8672e9a46bae4a44f167095e4d06fec12979"}, + {file = "pydantic-1.9.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:19b5686387ea0d1ea52ecc4cffb71abb21702c5e5b2ac626fd4dbaa0834aa49d"}, + {file = "pydantic-1.9.2-cp37-cp37m-win_amd64.whl", hash = "sha256:32e0b4fb13ad4db4058a7c3c80e2569adbd810c25e6ca3bbd8b2a9cc2cc871d7"}, + {file = "pydantic-1.9.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:91089b2e281713f3893cd01d8e576771cd5bfdfbff5d0ed95969f47ef6d676c3"}, + {file = "pydantic-1.9.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e631c70c9280e3129f071635b81207cad85e6c08e253539467e4ead0e5b219aa"}, + {file = "pydantic-1.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b3946f87e5cef3ba2e7bd3a4eb5a20385fe36521d6cc1ebf3c08a6697c6cfb3"}, + {file = "pydantic-1.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5565a49effe38d51882cb7bac18bda013cdb34d80ac336428e8908f0b72499b0"}, + {file = "pydantic-1.9.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:bd67cb2c2d9602ad159389c29e4ca964b86fa2f35c2faef54c3eb28b4efd36c8"}, + {file = "pydantic-1.9.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4aafd4e55e8ad5bd1b19572ea2df546ccace7945853832bb99422a79c70ce9b8"}, + {file = "pydantic-1.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:d70916235d478404a3fa8c997b003b5f33aeac4686ac1baa767234a0f8ac2326"}, + {file = "pydantic-1.9.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f0ca86b525264daa5f6b192f216a0d1e860b7383e3da1c65a1908f9c02f42801"}, + {file = "pydantic-1.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1061c6ee6204f4f5a27133126854948e3b3d51fcc16ead2e5d04378c199b2f44"}, + {file = "pydantic-1.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e78578f0c7481c850d1c969aca9a65405887003484d24f6110458fb02cca7747"}, + {file = "pydantic-1.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5da164119602212a3fe7e3bc08911a89db4710ae51444b4224c2382fd09ad453"}, + {file = "pydantic-1.9.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ead3cd020d526f75b4188e0a8d71c0dbbe1b4b6b5dc0ea775a93aca16256aeb"}, + {file = "pydantic-1.9.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7d0f183b305629765910eaad707800d2f47c6ac5bcfb8c6397abdc30b69eeb15"}, + {file = "pydantic-1.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:f1a68f4f65a9ee64b6ccccb5bf7e17db07caebd2730109cb8a95863cfa9c4e55"}, + {file = "pydantic-1.9.2-py3-none-any.whl", hash = "sha256:78a4d6bdfd116a559aeec9a4cfe77dda62acc6233f8b56a716edad2651023e5e"}, + {file = "pydantic-1.9.2.tar.gz", hash = "sha256:8cb0bc509bfb71305d7a59d00163d5f9fc4530f0881ea32c74ff4f74c85f3d3d"}, ] [package.dependencies] -typing-extensions = ">=4.2.0" +typing-extensions = ">=3.7.4.3" [package.extras] dotenv = ["python-dotenv (>=0.10.4)"] @@ -1607,23 +1597,25 @@ files = [ [[package]] name = "pywin32" -version = "227" +version = "306" description = "Python for Window Extensions" optional = false python-versions = "*" files = [ - {file = "pywin32-227-cp27-cp27m-win32.whl", hash = "sha256:371fcc39416d736401f0274dd64c2302728c9e034808e37381b5e1b22be4a6b0"}, - {file = "pywin32-227-cp27-cp27m-win_amd64.whl", hash = "sha256:4cdad3e84191194ea6d0dd1b1b9bdda574ff563177d2adf2b4efec2a244fa116"}, - {file = "pywin32-227-cp35-cp35m-win32.whl", hash = "sha256:f4c5be1a293bae0076d93c88f37ee8da68136744588bc5e2be2f299a34ceb7aa"}, - {file = "pywin32-227-cp35-cp35m-win_amd64.whl", hash = "sha256:a929a4af626e530383a579431b70e512e736e9588106715215bf685a3ea508d4"}, - {file = "pywin32-227-cp36-cp36m-win32.whl", hash = "sha256:300a2db938e98c3e7e2093e4491439e62287d0d493fe07cce110db070b54c0be"}, - {file = "pywin32-227-cp36-cp36m-win_amd64.whl", hash = "sha256:9b31e009564fb95db160f154e2aa195ed66bcc4c058ed72850d047141b36f3a2"}, - {file = "pywin32-227-cp37-cp37m-win32.whl", hash = "sha256:47a3c7551376a865dd8d095a98deba954a98f326c6fe3c72d8726ca6e6b15507"}, - {file = "pywin32-227-cp37-cp37m-win_amd64.whl", hash = "sha256:31f88a89139cb2adc40f8f0e65ee56a8c585f629974f9e07622ba80199057511"}, - {file = "pywin32-227-cp38-cp38-win32.whl", hash = "sha256:7f18199fbf29ca99dff10e1f09451582ae9e372a892ff03a28528a24d55875bc"}, - {file = "pywin32-227-cp38-cp38-win_amd64.whl", hash = "sha256:7c1ae32c489dc012930787f06244426f8356e129184a02c25aef163917ce158e"}, - {file = "pywin32-227-cp39-cp39-win32.whl", hash = "sha256:c054c52ba46e7eb6b7d7dfae4dbd987a1bb48ee86debe3f245a2884ece46e295"}, - {file = "pywin32-227-cp39-cp39-win_amd64.whl", hash = "sha256:f27cec5e7f588c3d1051651830ecc00294f90728d19c3bf6916e6dba93ea357c"}, + {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, + {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"}, + {file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"}, + {file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"}, + {file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"}, + {file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"}, + {file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"}, + {file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"}, + {file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"}, + {file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"}, + {file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"}, + {file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"}, + {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"}, + {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, ] [[package]] @@ -1638,7 +1630,6 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -1646,15 +1637,8 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, - {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, - {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, - {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -1671,7 +1655,6 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -1679,7 +1662,6 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -1740,24 +1722,24 @@ pyasn1 = ">=0.1.3" [[package]] name = "semver" -version = "3.0.1" +version = "3.0.2" description = "Python helper for Semantic Versioning (https://semver.org)" optional = false python-versions = ">=3.7" files = [ - {file = "semver-3.0.1-py3-none-any.whl", hash = "sha256:2a23844ba1647362c7490fe3995a86e097bb590d16f0f32dfc383008f19e4cdf"}, - {file = "semver-3.0.1.tar.gz", hash = "sha256:9ec78c5447883c67b97f98c3b6212796708191d22e4ad30f4570f840171cbce1"}, + {file = "semver-3.0.2-py3-none-any.whl", hash = "sha256:b1ea4686fe70b981f85359eda33199d60c53964284e0cfb4977d243e37cf4bf4"}, + {file = "semver-3.0.2.tar.gz", hash = "sha256:6253adb39c70f6e51afed2fa7152bcd414c411286088fb4b9effb133885ab4cc"}, ] [[package]] name = "sentry-sdk" -version = "1.31.0" +version = "1.32.0" description = "Python client for Sentry (https://sentry.io)" optional = false python-versions = "*" files = [ - {file = "sentry-sdk-1.31.0.tar.gz", hash = "sha256:6de2e88304873484207fed836388e422aeff000609b104c802749fd89d56ba5b"}, - {file = "sentry_sdk-1.31.0-py2.py3-none-any.whl", hash = "sha256:64a7141005fb775b9db298a30de93e3b83e0ddd1232dc6f36eb38aebc1553291"}, + {file = "sentry-sdk-1.32.0.tar.gz", hash = "sha256:935e8fbd7787a3702457393b74b13d89a5afb67185bc0af85c00cb27cbd42e7c"}, + {file = "sentry_sdk-1.32.0-py2.py3-none-any.whl", hash = "sha256:eeb0b3550536f3bbc05bb1c7e0feb3a78d74acb43b607159a606ed2ec0a33a4d"}, ] [package.dependencies] @@ -1914,13 +1896,13 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "websocket-client" -version = "1.6.3" +version = "1.6.4" description = "WebSocket client for Python with low level API options" optional = false python-versions = ">=3.8" files = [ - {file = "websocket-client-1.6.3.tar.gz", hash = "sha256:3aad25d31284266bcfcfd1fd8a743f63282305a364b8d0948a43bd606acc652f"}, - {file = "websocket_client-1.6.3-py3-none-any.whl", hash = "sha256:6cfc30d051ebabb73a5fa246efdcc14c8fbebbd0330f8984ac3bb6d9edd2ad03"}, + {file = "websocket-client-1.6.4.tar.gz", hash = "sha256:b3324019b3c28572086c4a319f91d1dcd44e6e11cd340232978c684a7650d0df"}, + {file = "websocket_client-1.6.4-py3-none-any.whl", hash = "sha256:084072e0a7f5f347ef2ac3d8698a5e0b4ffbfcab607628cadabc650fc9a83a24"}, ] [package.extras] @@ -2102,4 +2084,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "~3.10" -content-hash = "c8216f388f4a531c6dcfa8702c7398ac23d9a8b459680f9215326d62992270d5" +content-hash = "1de89e7d2152377c7ac94a01965243c73fd779fe4b5dc08e94f826e0bb8eae94" diff --git a/airbyte-ci/connectors/pipelines/pyproject.toml b/airbyte-ci/connectors/pipelines/pyproject.toml index 4564419a82e1..f3aa430d6fe6 100644 --- a/airbyte-ci/connectors/pipelines/pyproject.toml +++ b/airbyte-ci/connectors/pipelines/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api" [tool.poetry] name = "pipelines" -version = "1.4.4" +version = "1.7.2" description = "Packaged maintained by the connector operations team to perform CI for connectors' pipelines" authors = ["Airbyte "] @@ -14,7 +14,7 @@ dagger-io = "^0.6.4" asyncer = "^0.0.2" anyio = "^3.4.1" more-itertools = "^8.11.0" -docker = "^5.0.3" +docker = "^6.0.0" semver = "^3.0.1" airbyte-protocol-models = "*" tabulate = "^0.8.9" diff --git a/airbyte-ci/connectors/pipelines/tests/conftest.py b/airbyte-ci/connectors/pipelines/tests/conftest.py index 47cfb0fc195f..2e35e8e37bab 100644 --- a/airbyte-ci/connectors/pipelines/tests/conftest.py +++ b/airbyte-ci/connectors/pipelines/tests/conftest.py @@ -3,9 +3,10 @@ # import os +import platform import sys from pathlib import Path -from typing import Set +from typing import List import dagger import git @@ -68,5 +69,10 @@ def from_airbyte_root(airbyte_repo_path): @pytest.fixture(scope="session") -def all_connectors() -> Set[Connector]: - return ALL_CONNECTORS +def all_connectors() -> List[Connector]: + return sorted(ALL_CONNECTORS, key=lambda connector: connector.technical_name) + + +@pytest.fixture(scope="session") +def current_platform(): + return dagger.Platform(f"linux/{platform.machine()}") diff --git a/airbyte-ci/connectors/pipelines/tests/test_actions/test_environments.py b/airbyte-ci/connectors/pipelines/tests/test_actions/test_environments.py index b934995e1cd7..8794019cd5c7 100644 --- a/airbyte-ci/connectors/pipelines/tests/test_actions/test_environments.py +++ b/airbyte-ci/connectors/pipelines/tests/test_actions/test_environments.py @@ -3,9 +3,8 @@ # import pytest -from connector_ops.utils import Connector from pipelines.actions import environments -from pipelines.contexts import PipelineContext +from pipelines.contexts import ConnectorContext pytestmark = [ pytest.mark.anyio, @@ -13,31 +12,31 @@ @pytest.fixture -def python_connectors() -> Connector: - return [ - Connector("source-openweather"), # setup.py based - Connector("destination-duckdb"), # pyproject.toml based - ] - - -@pytest.fixture -def context(dagger_client): - context = PipelineContext( +def connector_context(dagger_client): + context = ConnectorContext( pipeline_name="test", - is_local=True, + connector="source-faker", git_branch="test", git_revision="test", + report_output_prefix="test", + is_local=True, + use_remote_secrets=True, ) context.dagger_client = dagger_client return context -async def test_with_installed_python_package(context, python_connectors): - for python_connector in python_connectors: - python_environment = context.dagger_client.container().from_("python:3.10") - installed_connector_package = await environments.with_installed_python_package( - context, - python_environment, - str(python_connector.code_directory), - ) - await installed_connector_package.with_exec(["python", "main.py", "spec"]) +@pytest.mark.parametrize("use_local_cdk", [True, False]) +async def test_apply_python_development_overrides(connector_context, use_local_cdk): + connector_context.use_local_cdk = use_local_cdk + fake_connector_container = connector_context.dagger_client.container().from_("airbyte/python-connector-base:1.0.0") + before_override_pip_freeze = await fake_connector_container.with_exec(["pip", "freeze"]).stdout() + + assert "airbyte-cdk" not in before_override_pip_freeze.splitlines(), "The base image should not have the airbyte-cdk installed." + connector_with_overrides = await environments.apply_python_development_overrides(connector_context, fake_connector_container) + + after_override_pip_freeze = await connector_with_overrides.with_exec(["pip", "freeze"]).stdout() + if use_local_cdk: + assert "airbyte-cdk" not in after_override_pip_freeze.splitlines(), "The override should not install the airbyte-cdk package." + else: + assert "airbyte-cdk" not in after_override_pip_freeze.splitlines(), "The override should install the airbyte-cdk package." diff --git a/airbyte-ci/connectors/pipelines/tests/test_builds/dummy_build_customization.py b/airbyte-ci/connectors/pipelines/tests/test_builds/dummy_build_customization.py new file mode 100644 index 000000000000..c583f12a8693 --- /dev/null +++ b/airbyte-ci/connectors/pipelines/tests/test_builds/dummy_build_customization.py @@ -0,0 +1,35 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# +from __future__ import annotations + +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from dagger import Container + + +async def pre_connector_install(base_image_container: Container) -> Container: + """This function will run before the connector installation. + It can mutate the base image container. + + Args: + base_image_container (Container): The base image container to mutate. + + Returns: + Container: The mutated base image container. + """ + return base_image_container.with_env_variable("MY_PRE_BUILD_ENV_VAR", "my_pre_build_env_var_value") + + +async def post_connector_install(connector_container: Container) -> Container: + """This function will run after the connector installation during the build process. + It can mutate the connector container. + + Args: + connector_container (Container): The connector container to mutate. + + Returns: + Container: The mutated connector container. + """ + return connector_container.with_env_variable("MY_POST_BUILD_ENV_VAR", "my_post_build_env_var_value") diff --git a/airbyte-ci/connectors/pipelines/tests/test_builds/test_python_connectors.py b/airbyte-ci/connectors/pipelines/tests/test_builds/test_python_connectors.py new file mode 100644 index 000000000000..d8b042491fb3 --- /dev/null +++ b/airbyte-ci/connectors/pipelines/tests/test_builds/test_python_connectors.py @@ -0,0 +1,157 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + +from pathlib import Path + +import pytest +from pipelines.bases import StepStatus +from pipelines.builds import build_customization, python_connectors +from pipelines.contexts import ConnectorContext + +pytestmark = [ + pytest.mark.anyio, +] + + +class TestBuildConnectorImage: + @pytest.fixture + def test_context(self, mocker): + return mocker.Mock(secrets_to_mask=[]) + + @pytest.fixture + def test_context_with_connector_with_base_image(self, test_context): + test_context.connector.metadata = {"connectorBuildOptions": {"baseImage": "xyz"}} + return test_context + + @pytest.fixture + def test_context_with_connector_without_base_image(self, test_context): + test_context.connector.metadata = {} + return test_context + + @pytest.fixture + def connector_with_base_image_no_build_customization(self, all_connectors): + for connector in all_connectors: + if connector.metadata and connector.metadata.get("connectorBuildOptions", {}).get("baseImage"): + if not (connector.code_directory / "build_customization.py").exists(): + return connector + pytest.skip("No connector with a connectorBuildOptions.baseImage metadata found") + + @pytest.fixture + def connector_with_base_image_with_build_customization(self, connector_with_base_image_no_build_customization): + dummy_build_customization = (Path(__file__).parent / "dummy_build_customization.py").read_text() + (connector_with_base_image_no_build_customization.code_directory / "build_customization.py").write_text(dummy_build_customization) + yield connector_with_base_image_no_build_customization + (connector_with_base_image_no_build_customization.code_directory / "build_customization.py").unlink() + + @pytest.fixture + def test_context_with_real_connector_using_base_image(self, connector_with_base_image_no_build_customization, dagger_client): + context = ConnectorContext( + pipeline_name="test build", + connector=connector_with_base_image_no_build_customization, + git_branch="test", + git_revision="test", + report_output_prefix="test", + is_local=True, + use_remote_secrets=True, + ) + context.dagger_client = dagger_client + return context + + @pytest.fixture + def test_context_with_real_connector_using_base_image_with_build_customization( + self, connector_with_base_image_with_build_customization, dagger_client + ): + context = ConnectorContext( + pipeline_name="test build", + connector=connector_with_base_image_with_build_customization, + git_branch="test", + git_revision="test", + report_output_prefix="test", + is_local=True, + use_remote_secrets=True, + ) + context.dagger_client = dagger_client + return context + + @pytest.fixture + def connector_without_base_image(self, all_connectors): + for connector in all_connectors: + if connector.metadata and not connector.metadata.get("connectorBuildOptions", {}).get("baseImage"): + return connector + pytest.skip("No connector without a connectorBuildOptions.baseImage metadata found") + + @pytest.fixture + def test_context_with_real_connector_without_base_image(self, connector_without_base_image, dagger_client): + context = ConnectorContext( + pipeline_name="test build", + connector=connector_without_base_image, + git_branch="test", + git_revision="test", + report_output_prefix="test", + is_local=True, + use_remote_secrets=True, + ) + context.dagger_client = dagger_client + return context + + async def test__run_using_base_image_with_mocks(self, mocker, test_context_with_connector_with_base_image, current_platform): + container_built_from_base = mocker.AsyncMock() + mocker.patch.object( + python_connectors.BuildConnectorImages, "_build_from_base_image", mocker.AsyncMock(return_value=container_built_from_base) + ) + mocker.patch.object(python_connectors.BuildConnectorImages, "get_step_result", mocker.AsyncMock()) + step = python_connectors.BuildConnectorImages(test_context_with_connector_with_base_image, current_platform) + step_result = await step._run() + step._build_from_base_image.assert_called_once() + container_built_from_base.with_exec.assert_called_once_with(["spec"]) + assert step_result.status is StepStatus.SUCCESS + assert step_result.output_artifact[current_platform] == container_built_from_base + + async def test_building_from_base_image_for_real(self, test_context_with_real_connector_using_base_image, current_platform): + step = python_connectors.BuildConnectorImages(test_context_with_real_connector_using_base_image, current_platform) + step_result = await step._run() + step_result.status is StepStatus.SUCCESS + built_container = step_result.output_artifact[current_platform] + assert await built_container.env_variable("AIRBYTE_ENTRYPOINT") == " ".join( + build_customization.get_entrypoint(step.context.connector) + ) + assert await built_container.workdir() == step.PATH_TO_INTEGRATION_CODE + assert await built_container.entrypoint() == build_customization.get_entrypoint(step.context.connector) + assert ( + await built_container.label("io.airbyte.version") + == test_context_with_real_connector_using_base_image.connector.metadata["dockerImageTag"] + ) + assert ( + await built_container.label("io.airbyte.name") + == test_context_with_real_connector_using_base_image.connector.metadata["dockerRepository"] + ) + + async def test_building_from_base_image_with_customization_for_real( + self, test_context_with_real_connector_using_base_image_with_build_customization, current_platform + ): + step = python_connectors.BuildConnectorImages( + test_context_with_real_connector_using_base_image_with_build_customization, current_platform + ) + step_result = await step._run() + step_result.status is StepStatus.SUCCESS + built_container = step_result.output_artifact[current_platform] + assert await built_container.env_variable("MY_PRE_BUILD_ENV_VAR") == "my_pre_build_env_var_value" + assert await built_container.env_variable("MY_POST_BUILD_ENV_VAR") == "my_post_build_env_var_value" + + async def test__run_using_base_dockerfile_with_mocks(self, mocker, test_context_with_connector_without_base_image, current_platform): + container_built_from_dockerfile = mocker.AsyncMock() + mocker.patch.object( + python_connectors.BuildConnectorImages, "_build_from_dockerfile", mocker.AsyncMock(return_value=container_built_from_dockerfile) + ) + step = python_connectors.BuildConnectorImages(test_context_with_connector_without_base_image, current_platform) + step_result = await step._run() + step._build_from_dockerfile.assert_called_once() + container_built_from_dockerfile.with_exec.assert_called_once_with(["spec"]) + assert step_result.status is StepStatus.SUCCESS + assert step_result.output_artifact[current_platform] == container_built_from_dockerfile + + async def test_building_from_dockerfile_for_real(self, test_context_with_real_connector_without_base_image, current_platform): + step = python_connectors.BuildConnectorImages(test_context_with_real_connector_without_base_image, current_platform) + step_result = await step._run() + step_result.status is StepStatus.SUCCESS diff --git a/airbyte-ci/connectors/pipelines/tests/test_tests/test_python_connectors.py b/airbyte-ci/connectors/pipelines/tests/test_tests/test_python_connectors.py new file mode 100644 index 000000000000..cd9b3c7d7730 --- /dev/null +++ b/airbyte-ci/connectors/pipelines/tests/test_tests/test_python_connectors.py @@ -0,0 +1,87 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# +import pytest +from connector_ops.utils import Connector +from pipelines.bases import StepResult +from pipelines.builds.python_connectors import BuildConnectorImages +from pipelines.contexts import ConnectorContext +from pipelines.tests.python_connectors import UnitTests + +pytestmark = [ + pytest.mark.anyio, +] + + +class TestUnitTests: + @pytest.fixture + def connector_with_setup(self): + return Connector("source-faker") + + @pytest.fixture + def connector_with_poetry(self): + return Connector("destination-duckdb") + + @pytest.fixture + def context_for_connector_with_setup(self, connector_with_setup, dagger_client): + context = ConnectorContext( + pipeline_name="test unit tests", + connector=connector_with_setup, + git_branch="test", + git_revision="test", + report_output_prefix="test", + is_local=True, + use_remote_secrets=True, + ) + context.dagger_client = dagger_client + context.connector_secrets = {} + return context + + @pytest.fixture + async def container_with_setup(self, context_for_connector_with_setup, current_platform): + result = await BuildConnectorImages(context_for_connector_with_setup, current_platform).run() + return result.output_artifact[current_platform] + + @pytest.fixture + def context_for_connector_with_poetry(self, connector_with_poetry, dagger_client): + context = ConnectorContext( + pipeline_name="test unit tests", + connector=connector_with_poetry, + git_branch="test", + git_revision="test", + report_output_prefix="test", + is_local=True, + use_remote_secrets=True, + ) + context.dagger_client = dagger_client + context.connector_secrets = {} + return context + + @pytest.fixture + async def container_with_poetry(self, context_for_connector_with_poetry, current_platform): + result = await BuildConnectorImages(context_for_connector_with_poetry, current_platform).run() + return result.output_artifact[current_platform] + + async def test__run_for_setup_py(self, context_for_connector_with_setup, container_with_setup): + # Assume that the tests directory is available + result = await UnitTests(context_for_connector_with_setup)._run(container_with_setup) + assert isinstance(result, StepResult) + assert "test session starts" in result.stdout or "test session starts" in result.stderr + pip_freeze_output = await result.output_artifact.with_exec(["pip", "freeze"], skip_entrypoint=True).stdout() + assert ( + context_for_connector_with_setup.connector.technical_name in pip_freeze_output + ), "The connector should be installed in the test environment." + assert "pytest" in pip_freeze_output, "The pytest package should be installed in the test environment." + + async def test__run_for_poetry(self, context_for_connector_with_poetry, container_with_poetry): + # Assume that the tests directory is available + result = await UnitTests(context_for_connector_with_poetry).run(container_with_poetry) + assert isinstance(result, StepResult) + # We only check for the presence of "test session starts" because we have no guarantee that the tests will pass + assert "test session starts" in result.stdout or "test session starts" in result.stderr, "The pytest tests should have started." + pip_freeze_output = await result.output_artifact.with_exec(["poetry", "run", "pip", "freeze"], skip_entrypoint=True).stdout() + + assert ( + context_for_connector_with_poetry.connector.technical_name in pip_freeze_output + ), "The connector should be installed in the test environment." + assert "pytest" in pip_freeze_output, "The pytest package should be installed in the test environment." diff --git a/airbyte-ci/connectors/pipelines/tests/utils.py b/airbyte-ci/connectors/pipelines/tests/utils.py index fc1c4ae5d6e6..4038b9f7d319 100644 --- a/airbyte-ci/connectors/pipelines/tests/utils.py +++ b/airbyte-ci/connectors/pipelines/tests/utils.py @@ -13,7 +13,7 @@ def pick_a_random_connector( language: ConnectorLanguage = None, support_level: str = None, other_picked_connectors: list = None ) -> Connector: """Pick a random connector from the list of all connectors.""" - all_connectors = list(ALL_CONNECTORS) + all_connectors = [c for c in list(ALL_CONNECTORS)] if language: all_connectors = [c for c in all_connectors if c.language is language] if support_level: diff --git a/airbyte-commons/src/main/java/io/airbyte/commons/json/Jsons.java b/airbyte-commons/src/main/java/io/airbyte/commons/json/Jsons.java index 18b40c7c5489..2d0420bf63f0 100644 --- a/airbyte-commons/src/main/java/io/airbyte/commons/json/Jsons.java +++ b/airbyte-commons/src/main/java/io/airbyte/commons/json/Jsons.java @@ -121,6 +121,14 @@ public static Optional tryDeserialize(final String jsonString, final Clas } } + public static Optional tryDeserializeExact(final String jsonString, final Class klass) { + try { + return Optional.of(OBJECT_MAPPER_EXACT.readValue(jsonString, klass)); + } catch (final Throwable e) { + return Optional.empty(); + } + } + public static Optional tryDeserialize(final String jsonString) { try { return Optional.of(OBJECT_MAPPER.readTree(jsonString)); diff --git a/airbyte-integrations/bases/base-java/javabase.sh b/airbyte-integrations/bases/base-java/javabase.sh index 34302052d40b..d835d4e9e0eb 100755 --- a/airbyte-integrations/bases/base-java/javabase.sh +++ b/airbyte-integrations/bases/base-java/javabase.sh @@ -15,6 +15,9 @@ if [[ $IS_CAPTURE_HEAP_DUMP_ON_ERROR = true ]]; then echo "APPLICATION=$APPLICATION" fi fi +#30781 - Allocate 32KB for log4j appender buffer to ensure that each line is logged in a single println +JAVA_OPTS=$JAVA_OPTS" -Dlog4j.encoder.byteBufferSize=32768" +export JAVA_OPTS # Wrap run script in a script so that we can lazy evaluate the value of APPLICATION. APPLICATION is # set by the dockerfile that inherits base-java, so it cannot be evaluated when base-java is built. diff --git a/airbyte-integrations/bases/base-typing-deduping-test/src/main/java/io/airbyte/integrations/base/destination/typing_deduping/BaseSqlGeneratorIntegrationTest.java b/airbyte-integrations/bases/base-typing-deduping-test/src/main/java/io/airbyte/integrations/base/destination/typing_deduping/BaseSqlGeneratorIntegrationTest.java index 5a9de40311aa..45a56c2d7a77 100644 --- a/airbyte-integrations/bases/base-typing-deduping-test/src/main/java/io/airbyte/integrations/base/destination/typing_deduping/BaseSqlGeneratorIntegrationTest.java +++ b/airbyte-integrations/bases/base-typing-deduping-test/src/main/java/io/airbyte/integrations/base/destination/typing_deduping/BaseSqlGeneratorIntegrationTest.java @@ -20,6 +20,7 @@ import io.airbyte.commons.string.Strings; import io.airbyte.protocol.models.v0.DestinationSyncMode; import io.airbyte.protocol.models.v0.SyncMode; +import java.util.Arrays; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; @@ -353,43 +354,6 @@ public void detectColumnChanged() throws Exception { "Altering a column was not detected as a schema change."); } - /** - * Test that T+D throws an error for an incremental-dedup sync where at least one record has a null - * primary key, and that we don't write any final records. - */ - @Test - public void incrementalDedupInvalidPrimaryKey() throws Exception { - createRawTable(streamId); - createFinalTable(incrementalDedupStream, ""); - insertRawTableRecords( - streamId, - List.of( - Jsons.deserialize( - """ - { - "_airbyte_raw_id": "10d6e27d-ae7a-41b5-baf8-c4c277ef9c11", - "_airbyte_extracted_at": "2023-01-01T00:00:00Z", - "_airbyte_data": {} - } - """), - Jsons.deserialize( - """ - { - "_airbyte_raw_id": "5ce60e70-98aa-4fe3-8159-67207352c4f0", - "_airbyte_extracted_at": "2023-01-01T00:00:00Z", - "_airbyte_data": {"id1": 1, "id2": 100} - } - """))); - - final String sql = generator.updateTable(incrementalDedupStream, ""); - assertThrows( - Exception.class, - () -> destinationHandler.execute(sql)); - DIFFER.diffFinalTableRecords( - emptyList(), - dumpFinalTableRecords(streamId, "")); - } - /** * Test that T+D supports streams whose name and namespace are the same. */ @@ -926,6 +890,46 @@ public void testReservedKeywords() throws Exception { dumpFinalTableRecords(streamId, "")); } + /** + * Verify that the final table does not include NON-NULL PKs (after + * https://github.com/airbytehq/airbyte/pull/31082) + */ + @Test + public void ensurePKsAreIndexedUnique() throws Exception { + createRawTable(streamId); + insertRawTableRecords( + streamId, + List.of(Jsons.deserialize( + """ + { + "_airbyte_raw_id": "14ba7c7f-e398-4e69-ac22-28d578400dbc", + "_airbyte_extracted_at": "2023-01-01T00:00:00Z", + "_airbyte_data": { + "id1": 1, + "id2": 2 + } + } + """))); + + final String createTable = generator.createTable(incrementalDedupStream, "", false); + + // should be OK with new tables + destinationHandler.execute(createTable); + final Optional existingTableA = destinationHandler.findExistingTable(streamId); + assertTrue(generator.existingSchemaMatchesStreamConfig(incrementalDedupStream, existingTableA.get())); + destinationHandler.execute("DROP TABLE " + streamId.finalTableId("")); + + // Hack the create query to add NOT NULLs to emulate the old behavior + final String createTableModified = Arrays.stream(createTable.split(System.lineSeparator())) + .map(line -> !line.contains("CLUSTER") && (line.contains("id1") || line.contains("id2") || line.contains("ID1") || line.contains("ID2")) + ? line.replace(",", " NOT NULL,") + : line) + .collect(Collectors.joining("\r\n")); + destinationHandler.execute(createTableModified); + final Optional existingTableB = destinationHandler.findExistingTable(streamId); + assertFalse(generator.existingSchemaMatchesStreamConfig(incrementalDedupStream, existingTableB.get())); + } + /** * A stream with no columns is weird, but we shouldn't treat it specially in any way. It should * create a final table as usual, and populate it with the relevant metadata columns. diff --git a/airbyte-integrations/bases/base-typing-deduping-test/src/main/resources/dat/sync_null_pk.jsonl b/airbyte-integrations/bases/base-typing-deduping-test/src/main/resources/dat/sync_null_pk.jsonl new file mode 100644 index 000000000000..03cc6d40e21d --- /dev/null +++ b/airbyte-integrations/bases/base-typing-deduping-test/src/main/resources/dat/sync_null_pk.jsonl @@ -0,0 +1,4 @@ +// there is no entry for id2, which is a required PK for this schema +{"type": "RECORD", "record": {"emitted_at": 1000, "data": {"id1": 1, "id2": null, "updated_at": "2000-01-01T00:00:00Z", "_ab_cdc_deleted_at": null, "name": "Alice", "address": {"city": "San Francisco", "state": "CA"}}}} +{"type": "RECORD", "record": {"emitted_at": 2000, "data": {"id1": 1, "id2": null, "updated_at": "2000-01-02T00:00:00Z", "_ab_cdc_deleted_at": null, "name": "Alice", "address": {"city": "San Francisco", "state": "CA"}}}} +{"type": "RECORD", "record": {"emitted_at": 3000, "data": {"id1": 1, "id2": null, "updated_at": "2000-01-03T00:00:00Z", "_ab_cdc_deleted_at": null, "name": "Alice", "address": {"city": "San Francisco", "state": "CA"}}}} diff --git a/airbyte-integrations/bases/base-typing-deduping/src/main/java/io/airbyte/integrations/base/destination/typing_deduping/BaseDestinationV1V2Migrator.java b/airbyte-integrations/bases/base-typing-deduping/src/main/java/io/airbyte/integrations/base/destination/typing_deduping/BaseDestinationV1V2Migrator.java index bdbf23a30c2d..8875cc69a954 100644 --- a/airbyte-integrations/bases/base-typing-deduping/src/main/java/io/airbyte/integrations/base/destination/typing_deduping/BaseDestinationV1V2Migrator.java +++ b/airbyte-integrations/bases/base-typing-deduping/src/main/java/io/airbyte/integrations/base/destination/typing_deduping/BaseDestinationV1V2Migrator.java @@ -22,7 +22,7 @@ public void migrateIfNecessary( final SqlGenerator sqlGenerator, final DestinationHandler destinationHandler, final StreamConfig streamConfig) - throws TableNotMigratedException, UnexpectedSchemaException { + throws TableNotMigratedException, UnexpectedSchemaException, Exception { LOGGER.info("Assessing whether migration is necessary for stream {}", streamConfig.id().finalName()); if (shouldMigrate(streamConfig)) { LOGGER.info("Starting v2 Migration for stream {}", streamConfig.id().finalName()); @@ -40,7 +40,7 @@ public void migrateIfNecessary( * @param streamConfig the stream in question * @return whether to migrate the stream */ - protected boolean shouldMigrate(final StreamConfig streamConfig) { + protected boolean shouldMigrate(final StreamConfig streamConfig) throws Exception { final var v1RawTable = convertToV1RawName(streamConfig); LOGGER.info("Checking whether v1 raw table {} in dataset {} exists", v1RawTable.tableName(), v1RawTable.namespace()); final var syncModeNeedsMigration = isMigrationRequiredForSyncMode(streamConfig.destinationSyncMode()); @@ -66,7 +66,7 @@ public void migrate(final SqlGenerator sqlGenerator, final var namespacedTableName = convertToV1RawName(streamConfig); try { destinationHandler.execute(sqlGenerator.migrateFromV1toV2(streamConfig.id(), namespacedTableName.namespace(), namespacedTableName.tableName())); - } catch (Exception e) { + } catch (final Exception e) { final var message = "Attempted and failed to migrate stream %s".formatted(streamConfig.id().finalName()); throw new TableNotMigratedException(message, e); } @@ -78,7 +78,7 @@ public void migrate(final SqlGenerator sqlGenerator, * @param existingV2AirbyteRawTable the v1 raw table * @return whether the schema is as expected */ - private boolean doesV1RawTableMatchExpectedSchema(DialectTableDefinition existingV2AirbyteRawTable) { + private boolean doesV1RawTableMatchExpectedSchema(final DialectTableDefinition existingV2AirbyteRawTable) { return schemaMatchesExpectation(existingV2AirbyteRawTable, LEGACY_RAW_TABLE_COLUMNS); } @@ -88,7 +88,7 @@ private boolean doesV1RawTableMatchExpectedSchema(DialectTableDefinition existin * * @param existingV2AirbyteRawTable the v2 raw table */ - private void validateAirbyteInternalNamespaceRawTableMatchExpectedV2Schema(DialectTableDefinition existingV2AirbyteRawTable) { + private void validateAirbyteInternalNamespaceRawTableMatchExpectedV2Schema(final DialectTableDefinition existingV2AirbyteRawTable) { if (!schemaMatchesExpectation(existingV2AirbyteRawTable, V2_RAW_TABLE_COLUMN_NAMES)) { throw new UnexpectedSchemaException("Destination V2 Raw Table does not match expected Schema"); } @@ -110,7 +110,7 @@ private boolean isMigrationRequiredForSyncMode(final DestinationSyncMode destina * @param streamConfig the raw table to check * @return whether it exists and is in the correct format */ - private boolean doesValidV2RawTableAlreadyExist(final StreamConfig streamConfig) { + private boolean doesValidV2RawTableAlreadyExist(final StreamConfig streamConfig) throws Exception { if (doesAirbyteInternalNamespaceExist(streamConfig)) { final var existingV2Table = getTableIfExists(streamConfig.id().rawNamespace(), streamConfig.id().rawName()); existingV2Table.ifPresent(this::validateAirbyteInternalNamespaceRawTableMatchExpectedV2Schema); @@ -126,7 +126,7 @@ private boolean doesValidV2RawTableAlreadyExist(final StreamConfig streamConfig) * @param tableName * @return whether it exists and is in the correct format */ - protected boolean doesValidV1RawTableExist(final String namespace, final String tableName) { + protected boolean doesValidV1RawTableExist(final String namespace, final String tableName) throws Exception { final var existingV1RawTable = getTableIfExists(namespace, tableName); return existingV1RawTable.isPresent() && doesV1RawTableMatchExpectedSchema(existingV1RawTable.get()); } @@ -137,7 +137,7 @@ protected boolean doesValidV1RawTableExist(final String namespace, final String * @param streamConfig the stream to check * @return whether the schema exists */ - abstract protected boolean doesAirbyteInternalNamespaceExist(StreamConfig streamConfig); + abstract protected boolean doesAirbyteInternalNamespaceExist(StreamConfig streamConfig) throws Exception; /** * Checks a Table's schema and compares it to an expected schema to make sure it matches @@ -155,7 +155,7 @@ protected boolean doesValidV1RawTableExist(final String namespace, final String * @param tableName * @return an optional potentially containing a reference to the table */ - abstract protected Optional getTableIfExists(String namespace, String tableName); + abstract protected Optional getTableIfExists(String namespace, String tableName) throws Exception; /** * We use different naming conventions for raw table names in destinations v2, we need a way to map diff --git a/airbyte-integrations/bases/base-typing-deduping/src/main/java/io/airbyte/integrations/base/destination/typing_deduping/DestinationV1V2Migrator.java b/airbyte-integrations/bases/base-typing-deduping/src/main/java/io/airbyte/integrations/base/destination/typing_deduping/DestinationV1V2Migrator.java index bfe3973e7d31..7e28906673a6 100644 --- a/airbyte-integrations/bases/base-typing-deduping/src/main/java/io/airbyte/integrations/base/destination/typing_deduping/DestinationV1V2Migrator.java +++ b/airbyte-integrations/bases/base-typing-deduping/src/main/java/io/airbyte/integrations/base/destination/typing_deduping/DestinationV1V2Migrator.java @@ -20,6 +20,6 @@ void migrateIfNecessary( final SqlGenerator sqlGenerator, final DestinationHandler destinationHandler, final StreamConfig streamConfig) - throws TableNotMigratedException, UnexpectedSchemaException; + throws TableNotMigratedException, UnexpectedSchemaException, Exception; } diff --git a/airbyte-integrations/bases/base-typing-deduping/src/test/java/io/airbyte/integrations/base/destination/typing_deduping/DestinationV1V2MigratorTest.java b/airbyte-integrations/bases/base-typing-deduping/src/test/java/io/airbyte/integrations/base/destination/typing_deduping/DestinationV1V2MigratorTest.java index fa6182813f52..e035c595963b 100644 --- a/airbyte-integrations/bases/base-typing-deduping/src/test/java/io/airbyte/integrations/base/destination/typing_deduping/DestinationV1V2MigratorTest.java +++ b/airbyte-integrations/bases/base-typing-deduping/src/test/java/io/airbyte/integrations/base/destination/typing_deduping/DestinationV1V2MigratorTest.java @@ -27,7 +27,7 @@ public class DestinationV1V2MigratorTest { public static class ShouldMigrateTestArgumentProvider implements ArgumentsProvider { @Override - public Stream provideArguments(ExtensionContext context) throws Exception { + public Stream provideArguments(final ExtensionContext context) throws Exception { // Don't throw an exception final boolean v2SchemaMatches = true; @@ -52,24 +52,25 @@ public Stream provideArguments(ExtensionContext context) th @ParameterizedTest @ArgumentsSource(ShouldMigrateTestArgumentProvider.class) - public void testShouldMigrate(final DestinationSyncMode destinationSyncMode, final BaseDestinationV1V2Migrator migrator, boolean expected) { + public void testShouldMigrate(final DestinationSyncMode destinationSyncMode, final BaseDestinationV1V2Migrator migrator, final boolean expected) + throws Exception { final StreamConfig config = new StreamConfig(STREAM_ID, null, destinationSyncMode, null, null, null); final var actual = migrator.shouldMigrate(config); Assertions.assertEquals(expected, actual); } @Test - public void testMismatchedSchemaThrowsException() { + public void testMismatchedSchemaThrowsException() throws Exception { final StreamConfig config = new StreamConfig(STREAM_ID, null, DestinationSyncMode.APPEND_DEDUP, null, null, null); final var migrator = makeMockMigrator(true, true, false, false, false); - UnexpectedSchemaException exception = Assertions.assertThrows(UnexpectedSchemaException.class, + final UnexpectedSchemaException exception = Assertions.assertThrows(UnexpectedSchemaException.class, () -> migrator.shouldMigrate(config)); Assertions.assertEquals("Destination V2 Raw Table does not match expected Schema", exception.getMessage()); } @SneakyThrows @Test - public void testMigrate() { + public void testMigrate() throws Exception { final var sqlGenerator = new MockSqlGenerator(); final StreamConfig stream = new StreamConfig(STREAM_ID, null, DestinationSyncMode.APPEND_DEDUP, null, null, null); final DestinationHandler handler = Mockito.mock(DestinationHandler.class); @@ -80,7 +81,7 @@ public void testMigrate() { Mockito.verify(handler).execute(sql); // Exception thrown when executing sql, TableNotMigratedException thrown Mockito.doThrow(Exception.class).when(handler).execute(Mockito.anyString()); - TableNotMigratedException exception = Assertions.assertThrows(TableNotMigratedException.class, + final TableNotMigratedException exception = Assertions.assertThrows(TableNotMigratedException.class, () -> migrator.migrate(sqlGenerator, handler, stream)); Assertions.assertEquals("Attempted and failed to migrate stream final_table", exception.getMessage()); } @@ -88,8 +89,9 @@ public void testMigrate() { public static BaseDestinationV1V2Migrator makeMockMigrator(final boolean v2NamespaceExists, final boolean v2TableExists, final boolean v2RawSchemaMatches, - boolean v1RawTableExists, - boolean v1RawTableSchemaMatches) { + final boolean v1RawTableExists, + final boolean v1RawTableSchemaMatches) + throws Exception { final BaseDestinationV1V2Migrator migrator = Mockito.spy(BaseDestinationV1V2Migrator.class); Mockito.when(migrator.doesAirbyteInternalNamespaceExist(Mockito.any())).thenReturn(v2NamespaceExists); final var existingTable = v2TableExists ? Optional.of("v2_raw") : Optional.empty(); @@ -103,7 +105,7 @@ public static BaseDestinationV1V2Migrator makeMockMigrator(final boolean v2Names return migrator; } - public static BaseDestinationV1V2Migrator noIssuesMigrator() { + public static BaseDestinationV1V2Migrator noIssuesMigrator() throws Exception { return makeMockMigrator(true, false, true, true, true); } diff --git a/airbyte-integrations/bases/connector-acceptance-test/Dockerfile b/airbyte-integrations/bases/connector-acceptance-test/Dockerfile index e703258b099e..313c17dab05f 100644 --- a/airbyte-integrations/bases/connector-acceptance-test/Dockerfile +++ b/airbyte-integrations/bases/connector-acceptance-test/Dockerfile @@ -6,7 +6,7 @@ ENV DOCKER_VERSION = "24.0.2" RUN apt-get update \ && pip install --upgrade pip \ - && apt-get install tzdata bash curl + && apt-get -y install tzdata bash curl # Docker is required for the dagger in docker use case. RUN curl -fsSL https://get.docker.com | sh diff --git a/airbyte-integrations/connectors/destination-bigquery/Dockerfile b/airbyte-integrations/connectors/destination-bigquery/Dockerfile index 71bc779c7472..4d63602c2d73 100644 --- a/airbyte-integrations/connectors/destination-bigquery/Dockerfile +++ b/airbyte-integrations/connectors/destination-bigquery/Dockerfile @@ -25,5 +25,5 @@ ENV AIRBYTE_NORMALIZATION_INTEGRATION bigquery COPY --from=build /airbyte /airbyte -LABEL io.airbyte.version=2.0.22 +LABEL io.airbyte.version=2.1.2 LABEL io.airbyte.name=airbyte/destination-bigquery diff --git a/airbyte-integrations/connectors/destination-bigquery/build.gradle b/airbyte-integrations/connectors/destination-bigquery/build.gradle index 0c4ec554ec2f..875e5e1ad4d8 100644 --- a/airbyte-integrations/connectors/destination-bigquery/build.gradle +++ b/airbyte-integrations/connectors/destination-bigquery/build.gradle @@ -4,7 +4,7 @@ plugins { } airbyteJavaConnector { - cdkVersionRequired = '0.1.0' + cdkVersionRequired = '0.1.7' features = ['db-destinations'] useLocalCdk = false } diff --git a/airbyte-integrations/connectors/destination-bigquery/metadata.yaml b/airbyte-integrations/connectors/destination-bigquery/metadata.yaml index 83e6a6d33e3c..d867f88a90ee 100644 --- a/airbyte-integrations/connectors/destination-bigquery/metadata.yaml +++ b/airbyte-integrations/connectors/destination-bigquery/metadata.yaml @@ -2,7 +2,7 @@ data: connectorSubtype: database connectorType: destination definitionId: 22f6c74f-5699-40ff-833c-4a879ea40133 - dockerImageTag: 2.0.22 + dockerImageTag: 2.1.2 dockerRepository: airbyte/destination-bigquery githubIssueLabel: destination-bigquery icon: bigquery.svg diff --git a/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/BigQueryGcsOperations.java b/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/BigQueryGcsOperations.java index 3f9da5220e0c..ddc8c31e897b 100644 --- a/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/BigQueryGcsOperations.java +++ b/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/BigQueryGcsOperations.java @@ -140,7 +140,7 @@ public void copyIntoTableFromStage(final String datasetId, .setFormatOptions(FormatOptions.csv()) .setSchema(tableSchema) .setWriteDisposition(WriteDisposition.WRITE_APPEND) - .setJobTimeoutMs(180000L) + .setJobTimeoutMs(300000L) // 5min .build(); final Job loadJob = this.bigQuery.create(JobInfo.of(configuration)); diff --git a/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/typing_deduping/BigQuerySqlGenerator.java b/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/typing_deduping/BigQuerySqlGenerator.java index 8c9776ccee13..02ce6bb13632 100644 --- a/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/typing_deduping/BigQuerySqlGenerator.java +++ b/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/typing_deduping/BigQuerySqlGenerator.java @@ -9,6 +9,8 @@ import static io.airbyte.integrations.base.destination.typing_deduping.CollectionUtils.matchingKey; import static java.util.stream.Collectors.joining; +import com.google.cloud.bigquery.Field; +import com.google.cloud.bigquery.Field.Mode; import com.google.cloud.bigquery.StandardSQLTypeName; import com.google.cloud.bigquery.StandardTableDefinition; import com.google.cloud.bigquery.TableDefinition; @@ -31,6 +33,7 @@ import io.airbyte.protocol.models.v0.DestinationSyncMode; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; @@ -273,6 +276,8 @@ public boolean partitioningMatches(final StandardTableDefinition existingTable) } public AlterTableReport buildAlterTableReport(final StreamConfig stream, final TableDefinition existingTable) { + final Set pks = getPks(stream); + final Map streamSchema = stream.columns().entrySet().stream() .collect(Collectors.toMap( entry -> entry.getKey().name(), @@ -295,17 +300,25 @@ public AlterTableReport buildAlterTableReport(final StreamConfig stream, final T .collect(Collectors.toSet()); // Columns that are typed differently than the StreamConfig - final Set columnsToChangeType = streamSchema.keySet().stream() - // If it's not in the existing schema, it should already be in the columnsToAdd Set - .filter(name -> { - // Big Query Columns are case-insensitive, first find the correctly cased key if it exists - return matchingKey(existingSchema.keySet(), name) - // if it does exist, only include it in this set if the type (the value in each respective map) - // is different between the stream and existing schemas - .map(key -> !existingSchema.get(key).equals(streamSchema.get(name))) - // if there is no matching key, then don't include it because it is probably already in columnsToAdd - .orElse(false); - }) + final Set columnsToChangeType = Stream.concat( + streamSchema.keySet().stream() + // If it's not in the existing schema, it should already be in the columnsToAdd Set + .filter(name -> { + // Big Query Columns are case-insensitive, first find the correctly cased key if it exists + return matchingKey(existingSchema.keySet(), name) + // if it does exist, only include it in this set if the type (the value in each respective map) + // is different between the stream and existing schemas + .map(key -> !existingSchema.get(key).equals(streamSchema.get(name))) + // if there is no matching key, then don't include it because it is probably already in columnsToAdd + .orElse(false); + }), + + // OR columns that used to have a non-null constraint and shouldn't + // (https://github.com/airbytehq/airbyte/pull/31082) + existingTable.getSchema().getFields().stream() + .filter(field -> pks.contains(field.getName())) + .filter(field -> field.getMode() == Mode.REQUIRED) + .map(Field::getName)) .collect(Collectors.toSet()); final boolean isDestinationV2Format = schemaContainAllFinalTableV2AirbyteColumns(existingSchema.keySet()); @@ -369,10 +382,6 @@ private String updateTableQueryBuilder(final StreamConfig stream, final String finalSuffix, final boolean verifyPrimaryKeys, final boolean forceSafeCasting) { - String validatePrimaryKeys = ""; - if (verifyPrimaryKeys && stream.destinationSyncMode() == DestinationSyncMode.APPEND_DEDUP) { - validatePrimaryKeys = validatePrimaryKeys(stream.id(), stream.primaryKey(), stream.columns(), forceSafeCasting); - } final String insertNewRecords = insertNewRecords(stream, finalSuffix, stream.columns(), forceSafeCasting); String dedupFinalTable = ""; String cdcDeletes = ""; @@ -386,28 +395,18 @@ private String updateTableQueryBuilder(final StreamConfig stream, final String commitRawTable = commitRawTable(stream.id()); return new StringSubstitutor(Map.of( - "validate_primary_keys", validatePrimaryKeys, "insert_new_records", insertNewRecords, "dedup_final_table", dedupFinalTable, "cdc_deletes", cdcDeletes, "dedupe_raw_table", dedupRawTable, "commit_raw_table", commitRawTable)).replace( """ - BEGIN TRANSACTION; - - ${validate_primary_keys} - ${insert_new_records} - ${dedup_final_table} - ${dedupe_raw_table} - ${cdc_deletes} - ${commit_raw_table} - COMMIT TRANSACTION; """); } @@ -434,36 +433,6 @@ private String updateTable(final StreamConfig stream, final String finalSuffix, """); } - @VisibleForTesting - String validatePrimaryKeys(final StreamId id, - final List primaryKeys, - final LinkedHashMap streamColumns, - final boolean forceSafeCasting) { - final String pkNullChecks = primaryKeys.stream().map( - pk -> { - final String jsonExtract = extractAndCast(pk, streamColumns.get(pk), forceSafeCasting); - return "AND " + jsonExtract + " IS NULL"; - }).collect(joining("\n")); - - return new StringSubstitutor(Map.of( - "project_id", '`' + projectId + '`', - "raw_table_id", id.rawTableId(QUOTE), - "pk_null_checks", pkNullChecks)).replace( - """ - SET missing_pk_count = ( - SELECT COUNT(1) - FROM ${project_id}.${raw_table_id} - WHERE - `_airbyte_loaded_at` IS NULL - ${pk_null_checks} - ); - - IF missing_pk_count > 0 THEN - RAISE USING message = FORMAT('Raw table has %s rows missing a primary key', CAST(missing_pk_count AS STRING)); - END IF - ;"""); - } - @VisibleForTesting String insertNewRecords(final StreamConfig stream, final String finalSuffix, @@ -724,6 +693,10 @@ private static String cast(final String content, final String asType, boolean us return wrap(open, content + " as " + asType, ")"); } + private static Set getPks(StreamConfig stream) { + return stream.primaryKey() != null ? stream.primaryKey().stream().map(ColumnId::name).collect(Collectors.toSet()) : Collections.emptySet(); + } + private static String wrap(final String open, final String content, final String close) { return open + content + close; } diff --git a/airbyte-integrations/connectors/destination-bigquery/src/main/resources/spec.json b/airbyte-integrations/connectors/destination-bigquery/src/main/resources/spec.json index 6183d2156724..b2ccb129d8c9 100644 --- a/airbyte-integrations/connectors/destination-bigquery/src/main/resources/spec.json +++ b/airbyte-integrations/connectors/destination-bigquery/src/main/resources/spec.json @@ -15,12 +15,14 @@ "type": "string", "description": "The GCP project ID for the project containing the target BigQuery dataset. Read more here.", "title": "Project ID", + "group": "connection", "order": 0 }, "dataset_location": { "type": "string", "description": "The location of the dataset. Warning: Changes made after creation will not be applied. Read more here.", "title": "Dataset Location", + "group": "connection", "order": 1, "enum": [ "US", @@ -69,16 +71,20 @@ "type": "string", "description": "The default BigQuery Dataset ID that tables are replicated to if the source does not specify a namespace. Read more here.", "title": "Default Dataset ID", + "group": "connection", "order": 2 }, "loading_method": { "type": "object", "title": "Loading Method", - "description": "Loading method used to send select the way data will be uploaded to BigQuery.
Standard Inserts - Direct uploading using SQL INSERT statements. This method is extremely inefficient and provided only for quick testing. In almost all cases, you should use staging.
GCS Staging - Writes large batches of records to a file, uploads the file to GCS, then uses COPY INTO table to upload the file. Recommended for most workloads for better speed and scalability. Read more about GCS Staging here.", + "description": "The way data will be uploaded to BigQuery.", + "display_type": "radio", + "group": "connection", "order": 3, "oneOf": [ { "title": "GCS Staging", + "description": "(recommended) Writes large batches of records to a file, uploads the file to GCS, then uses COPY INTO to load your data into BigQuery. Provides best-in-class speed, reliability and scalability. Read more about GCS Staging here.", "required": [ "method", "gcs_bucket_name", @@ -172,6 +178,7 @@ { "title": "Standard Inserts", "required": ["method"], + "description": "(not recommended) Direct loading using SQL INSERT statements. This method is extremely inefficient and provided only for quick testing. In all other cases, you should use GCS staging.", "properties": { "method": { "type": "string", @@ -186,6 +193,7 @@ "description": "The contents of the JSON service account key. Check out the docs if you need help generating this key. Default credentials will be used if this field is left empty.", "title": "Service Account Key JSON (Required for cloud, optional for open-source)", "airbyte_secret": true, + "group": "connection", "order": 4, "always_show": true }, @@ -195,7 +203,8 @@ "title": "Transformation Query Run Type", "default": "interactive", "enum": ["interactive", "batch"], - "order": 5 + "order": 5, + "group": "advanced" }, "big_query_client_buffer_size_mb": { "title": "Google BigQuery Client Chunk Size", @@ -205,14 +214,26 @@ "maximum": 15, "default": 15, "examples": ["15"], - "order": 6 + "order": 6, + "group": "advanced" }, "raw_data_dataset": { "type": "string", "description": "The dataset to write raw tables into", "title": "Destinations V2 Raw Table Dataset", - "order": 7 + "order": 7, + "group": "advanced" } - } + }, + "groups": [ + { + "id": "connection", + "title": "Connection" + }, + { + "id": "advanced", + "title": "Advanced" + } + ] } } diff --git a/airbyte-integrations/connectors/destination-bigquery/src/test-integration/java/io/airbyte/integrations/destination/bigquery/typing_deduping/AbstractBigQueryTypingDedupingTest.java b/airbyte-integrations/connectors/destination-bigquery/src/test-integration/java/io/airbyte/integrations/destination/bigquery/typing_deduping/AbstractBigQueryTypingDedupingTest.java index b34ea2650381..3e44f36f6789 100644 --- a/airbyte-integrations/connectors/destination-bigquery/src/test-integration/java/io/airbyte/integrations/destination/bigquery/typing_deduping/AbstractBigQueryTypingDedupingTest.java +++ b/airbyte-integrations/connectors/destination-bigquery/src/test-integration/java/io/airbyte/integrations/destination/bigquery/typing_deduping/AbstractBigQueryTypingDedupingTest.java @@ -4,6 +4,9 @@ package io.airbyte.integrations.destination.bigquery.typing_deduping; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ObjectNode; import com.google.cloud.bigquery.BigQuery; @@ -25,6 +28,7 @@ import io.airbyte.protocol.models.v0.ConfiguredAirbyteStream; import io.airbyte.protocol.models.v0.DestinationSyncMode; import io.airbyte.protocol.models.v0.SyncMode; +import io.airbyte.workers.exception.TestHarnessException; import java.io.IOException; import java.nio.file.Path; import java.util.List; @@ -123,6 +127,31 @@ public void testRawTableJsonToStringMigration() throws Exception { verifySyncResult(expectedRawRecords2, expectedFinalRecords2); } + @Test + public void testRemovingPKNonNullIndexes() throws Exception { + final ConfiguredAirbyteCatalog catalog = new ConfiguredAirbyteCatalog().withStreams(List.of( + new ConfiguredAirbyteStream() + .withSyncMode(SyncMode.INCREMENTAL) + .withDestinationSyncMode(DestinationSyncMode.APPEND_DEDUP) + .withPrimaryKey(List.of(List.of("id1"), List.of("id2"))) + .withStream(new AirbyteStream() + .withNamespace(streamNamespace) + .withName(streamName) + .withJsonSchema(SCHEMA)))); + + // First sync + final List messages = readMessages("dat/sync_null_pk.jsonl"); + final TestHarnessException e = assertThrows( + TestHarnessException.class, + () -> runSync(catalog, messages, "airbyte/destination-bigquery:2.0.20")); // this version introduced non-null PKs to the final tables + // ideally we would assert on the logged content of the original exception within e, but that is + // proving to be tricky + + // Second sync + runSync(catalog, messages); // does not throw with latest version + assertEquals(1, dumpFinalTableRecords(streamNamespace, streamName).toArray().length); + } + /** * Subclasses using a config with a nonstandard raw table dataset should override this method. */ diff --git a/airbyte-integrations/connectors/destination-bigquery/src/test/java/io/airbyte/integrations/destination/bigquery/CdkImportTest.java b/airbyte-integrations/connectors/destination-bigquery/src/test/java/io/airbyte/integrations/destination/bigquery/CdkImportTest.java index 840e6984172d..f25d018e776a 100644 --- a/airbyte-integrations/connectors/destination-bigquery/src/test/java/io/airbyte/integrations/destination/bigquery/CdkImportTest.java +++ b/airbyte-integrations/connectors/destination-bigquery/src/test/java/io/airbyte/integrations/destination/bigquery/CdkImportTest.java @@ -17,7 +17,7 @@ class CdkImportTest { */ @Test void cdkVersionShouldMatch() { - assertEquals("0.1.0", CDKConstants.VERSION.replace("-SNAPSHOT", "")); + assertEquals("0.1.7", CDKConstants.VERSION.replace("-SNAPSHOT", "")); } } diff --git a/airbyte-integrations/connectors/destination-chroma/Dockerfile b/airbyte-integrations/connectors/destination-chroma/Dockerfile index 93fb4d221be5..6c74f55542a0 100644 --- a/airbyte-integrations/connectors/destination-chroma/Dockerfile +++ b/airbyte-integrations/connectors/destination-chroma/Dockerfile @@ -41,5 +41,5 @@ COPY destination_chroma ./destination_chroma ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=0.0.2 +LABEL io.airbyte.version=0.0.3 LABEL io.airbyte.name=airbyte/destination-chroma diff --git a/airbyte-integrations/connectors/destination-chroma/metadata.yaml b/airbyte-integrations/connectors/destination-chroma/metadata.yaml index e51604370cad..627eb3c77e04 100644 --- a/airbyte-integrations/connectors/destination-chroma/metadata.yaml +++ b/airbyte-integrations/connectors/destination-chroma/metadata.yaml @@ -7,7 +7,7 @@ data: connectorSubtype: database connectorType: destination definitionId: 0b75218b-f702-4a28-85ac-34d3d84c0fc2 - dockerImageTag: 0.0.2 + dockerImageTag: 0.0.3 dockerRepository: airbyte/destination-chroma githubIssueLabel: destination-chroma icon: chroma.svg diff --git a/airbyte-integrations/connectors/destination-chroma/setup.py b/airbyte-integrations/connectors/destination-chroma/setup.py index 6f705d708b48..bc43a2e3a852 100644 --- a/airbyte-integrations/connectors/destination-chroma/setup.py +++ b/airbyte-integrations/connectors/destination-chroma/setup.py @@ -6,7 +6,7 @@ from setuptools import find_packages, setup MAIN_REQUIREMENTS = [ - "airbyte-cdk[vector-db-based]==0.51.22", + "airbyte-cdk[vector-db-based]==0.51.28", "chromadb", ] diff --git a/airbyte-integrations/connectors/destination-milvus/Dockerfile b/airbyte-integrations/connectors/destination-milvus/Dockerfile index f0b2d207968f..ad39f0417f94 100644 --- a/airbyte-integrations/connectors/destination-milvus/Dockerfile +++ b/airbyte-integrations/connectors/destination-milvus/Dockerfile @@ -37,5 +37,5 @@ COPY destination_milvus ./destination_milvus ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=0.0.3 +LABEL io.airbyte.version=0.0.4 LABEL io.airbyte.name=airbyte/destination-milvus diff --git a/airbyte-integrations/connectors/destination-milvus/metadata.yaml b/airbyte-integrations/connectors/destination-milvus/metadata.yaml index a7d86ec07b45..f190dcf46808 100644 --- a/airbyte-integrations/connectors/destination-milvus/metadata.yaml +++ b/airbyte-integrations/connectors/destination-milvus/metadata.yaml @@ -20,7 +20,7 @@ data: connectorSubtype: database connectorType: destination definitionId: 65de8962-48c9-11ee-be56-0242ac120002 - dockerImageTag: 0.0.3 + dockerImageTag: 0.0.4 dockerRepository: airbyte/destination-milvus githubIssueLabel: destination-milvus icon: milvus.svg diff --git a/airbyte-integrations/connectors/destination-milvus/setup.py b/airbyte-integrations/connectors/destination-milvus/setup.py index 9f8dc7ba0b6e..bf909b74b88b 100644 --- a/airbyte-integrations/connectors/destination-milvus/setup.py +++ b/airbyte-integrations/connectors/destination-milvus/setup.py @@ -5,7 +5,7 @@ from setuptools import find_packages, setup -MAIN_REQUIREMENTS = ["airbyte-cdk[vector-db-based]==0.51.22", "pymilvus==2.3.0"] +MAIN_REQUIREMENTS = ["airbyte-cdk[vector-db-based]==0.51.28", "pymilvus==2.3.0"] TEST_REQUIREMENTS = ["pytest~=6.2"] diff --git a/airbyte-integrations/connectors/destination-pinecone/Dockerfile b/airbyte-integrations/connectors/destination-pinecone/Dockerfile index a81ecf1972bf..152569d21d99 100644 --- a/airbyte-integrations/connectors/destination-pinecone/Dockerfile +++ b/airbyte-integrations/connectors/destination-pinecone/Dockerfile @@ -38,6 +38,6 @@ COPY destination_pinecone ./destination_pinecone ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=0.0.14 +LABEL io.airbyte.version=0.0.15 LABEL io.airbyte.name=airbyte/destination-pinecone diff --git a/airbyte-integrations/connectors/destination-pinecone/metadata.yaml b/airbyte-integrations/connectors/destination-pinecone/metadata.yaml index 8554f936e449..1f2ad88f09d7 100644 --- a/airbyte-integrations/connectors/destination-pinecone/metadata.yaml +++ b/airbyte-integrations/connectors/destination-pinecone/metadata.yaml @@ -20,7 +20,7 @@ data: connectorSubtype: database connectorType: destination definitionId: 3d2b6f84-7f0d-4e3f-a5e5-7c7d4b50eabd - dockerImageTag: 0.0.14 + dockerImageTag: 0.0.15 dockerRepository: airbyte/destination-pinecone githubIssueLabel: destination-pinecone icon: pinecone.svg diff --git a/airbyte-integrations/connectors/destination-pinecone/setup.py b/airbyte-integrations/connectors/destination-pinecone/setup.py index 103a7c7e8ce6..7cadc04b30b5 100644 --- a/airbyte-integrations/connectors/destination-pinecone/setup.py +++ b/airbyte-integrations/connectors/destination-pinecone/setup.py @@ -6,7 +6,7 @@ from setuptools import find_packages, setup MAIN_REQUIREMENTS = [ - "airbyte-cdk[vector-db-based]==0.51.22", + "airbyte-cdk[vector-db-based]==0.51.28", "pinecone-client[grpc]", ] diff --git a/airbyte-integrations/connectors/destination-qdrant/Dockerfile b/airbyte-integrations/connectors/destination-qdrant/Dockerfile index 5af20ed7328e..f56ab5821b1f 100644 --- a/airbyte-integrations/connectors/destination-qdrant/Dockerfile +++ b/airbyte-integrations/connectors/destination-qdrant/Dockerfile @@ -41,5 +41,5 @@ COPY destination_qdrant ./destination_qdrant ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=0.0.3 +LABEL io.airbyte.version=0.0.4 LABEL io.airbyte.name=airbyte/destination-qdrant diff --git a/airbyte-integrations/connectors/destination-qdrant/metadata.yaml b/airbyte-integrations/connectors/destination-qdrant/metadata.yaml index 8bc2c7945f82..b105f760724d 100644 --- a/airbyte-integrations/connectors/destination-qdrant/metadata.yaml +++ b/airbyte-integrations/connectors/destination-qdrant/metadata.yaml @@ -20,7 +20,7 @@ data: connectorSubtype: database connectorType: destination definitionId: 6eb1198a-6d38-43e5-aaaa-dccd8f71db2b - dockerImageTag: 0.0.3 + dockerImageTag: 0.0.4 dockerRepository: airbyte/destination-qdrant githubIssueLabel: destination-qdrant icon: qdrant.svg diff --git a/airbyte-integrations/connectors/destination-qdrant/setup.py b/airbyte-integrations/connectors/destination-qdrant/setup.py index 2e789b857cfb..a679e7d29927 100644 --- a/airbyte-integrations/connectors/destination-qdrant/setup.py +++ b/airbyte-integrations/connectors/destination-qdrant/setup.py @@ -5,7 +5,7 @@ from setuptools import find_packages, setup -MAIN_REQUIREMENTS = ["airbyte-cdk[vector-db-based]==0.51.22", "qdrant-client", "fastembed"] +MAIN_REQUIREMENTS = ["airbyte-cdk[vector-db-based]==0.51.28", "qdrant-client", "fastembed"] TEST_REQUIREMENTS = ["pytest~=6.2"] diff --git a/airbyte-integrations/connectors/destination-redshift/build.gradle b/airbyte-integrations/connectors/destination-redshift/build.gradle index ab907e62ce3d..f08e805a00d2 100644 --- a/airbyte-integrations/connectors/destination-redshift/build.gradle +++ b/airbyte-integrations/connectors/destination-redshift/build.gradle @@ -4,7 +4,7 @@ plugins { } airbyteJavaConnector { - cdkVersionRequired = '0.1.0' + cdkVersionRequired = '0.1.7' features = ['db-destinations'] useLocalCdk = false } @@ -13,7 +13,9 @@ airbyteJavaConnector.addCdkDependencies() application { mainClass = 'io.airbyte.integrations.destination.redshift.RedshiftDestination' - applicationDefaultJvmArgs = ['-XX:+ExitOnOutOfMemoryError', '-XX:MaxRAMPercentage=75.0'] + applicationDefaultJvmArgs = ['-XX:+ExitOnOutOfMemoryError', '-XX:MaxRAMPercentage=75.0', + '-XX:NativeMemoryTracking=detail', '-XX:+UnlockDiagnosticVMOptions', + '-XX:GCLockerRetryAllocationCount=100',] } repositories { diff --git a/airbyte-integrations/connectors/destination-redshift/metadata.yaml b/airbyte-integrations/connectors/destination-redshift/metadata.yaml index 0b7d33a37ced..d542d5acec16 100644 --- a/airbyte-integrations/connectors/destination-redshift/metadata.yaml +++ b/airbyte-integrations/connectors/destination-redshift/metadata.yaml @@ -2,7 +2,7 @@ data: connectorSubtype: database connectorType: destination definitionId: f7a7d195-377f-cf5b-70a5-be6b819019dc - dockerImageTag: 0.6.5 + dockerImageTag: 0.6.9 dockerRepository: airbyte/destination-redshift githubIssueLabel: destination-redshift icon: redshift.svg diff --git a/airbyte-integrations/connectors/destination-redshift/src/main/resources/spec.json b/airbyte-integrations/connectors/destination-redshift/src/main/resources/spec.json index 53c686b04f91..208f649bd5bd 100644 --- a/airbyte-integrations/connectors/destination-redshift/src/main/resources/spec.json +++ b/airbyte-integrations/connectors/destination-redshift/src/main/resources/spec.json @@ -15,6 +15,7 @@ "description": "Host Endpoint of the Redshift Cluster (must include the cluster-id, region and end with .redshift.amazonaws.com)", "type": "string", "title": "Host", + "group": "connection", "order": 1 }, "port": { @@ -25,12 +26,14 @@ "default": 5439, "examples": ["5439"], "title": "Port", + "group": "connection", "order": 2 }, "username": { "description": "Username to use to access the database.", "type": "string", "title": "Username", + "group": "connection", "order": 3 }, "password": { @@ -38,12 +41,14 @@ "type": "string", "airbyte_secret": true, "title": "Password", + "group": "connection", "order": 4 }, "database": { "description": "Name of the database.", "type": "string", "title": "Database", + "group": "connection", "order": 5 }, "schema": { @@ -51,6 +56,7 @@ "type": "string", "examples": ["public"], "default": "public", + "group": "connection", "title": "Default Schema", "order": 6 }, @@ -58,26 +64,20 @@ "title": "JDBC URL Params", "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", "type": "string", + "group": "connection", "order": 7 }, "uploading_method": { "title": "Uploading Method", "type": "object", - "description": "The method how the data will be uploaded to the database.", + "description": "The way data will be uploaded to Redshift.", + "group": "connection", "order": 8, + "display_type": "radio", "oneOf": [ - { - "title": "Standard", - "required": ["method"], - "properties": { - "method": { - "type": "string", - "const": "Standard" - } - } - }, { "title": "S3 Staging", + "description": "(recommended) Uploads data to S3 and then uses a COPY to insert the data into Redshift. COPY is recommended for production workloads for better speed and scalability. See AWS docs for more details.", "required": [ "method", "s3_bucket_name", @@ -93,7 +93,7 @@ "s3_bucket_name": { "title": "S3 Bucket Name", "type": "string", - "description": "The name of the staging S3 bucket to use if utilising a COPY strategy. COPY is recommended for production workloads for better speed and scalability. See AWS docs for more details.", + "description": "The name of the staging S3 bucket.", "examples": ["airbyte.staging"] }, "s3_bucket_path": { @@ -106,7 +106,7 @@ "title": "S3 Bucket Region", "type": "string", "default": "", - "description": "The region of the S3 staging bucket to use if utilising a COPY strategy. See AWS docs for details.", + "description": "The region of the S3 staging bucket.", "enum": [ "", "us-east-1", @@ -217,9 +217,26 @@ "examples": ["10"] } } + }, + { + "title": "Standard", + "required": ["method"], + "description": "(not recommended) Direct loading using SQL INSERT statements. This method is extremely inefficient and provided only for quick testing. In all other cases, you should use S3 uploading.", + "properties": { + "method": { + "type": "string", + "const": "Standard" + } + } } ] } - } + }, + "groups": [ + { + "id": "connection", + "title": "Connection" + } + ] } } diff --git a/airbyte-integrations/connectors/destination-snowflake/Dockerfile b/airbyte-integrations/connectors/destination-snowflake/Dockerfile index ed352496f7ff..9fb84b4af24c 100644 --- a/airbyte-integrations/connectors/destination-snowflake/Dockerfile +++ b/airbyte-integrations/connectors/destination-snowflake/Dockerfile @@ -29,5 +29,5 @@ RUN tar xf ${APPLICATION}.tar --strip-components=1 ENV ENABLE_SENTRY true -LABEL io.airbyte.version=3.1.19 +LABEL io.airbyte.version=3.2.2 LABEL io.airbyte.name=airbyte/destination-snowflake diff --git a/airbyte-integrations/connectors/destination-snowflake/build.gradle b/airbyte-integrations/connectors/destination-snowflake/build.gradle index 40e234cb4f0e..1dcb0bd2fe88 100644 --- a/airbyte-integrations/connectors/destination-snowflake/build.gradle +++ b/airbyte-integrations/connectors/destination-snowflake/build.gradle @@ -4,7 +4,7 @@ plugins { } airbyteJavaConnector { - cdkVersionRequired = '0.1.1' + cdkVersionRequired = '0.1.7' features = ['db-destinations'] useLocalCdk = false } @@ -17,6 +17,9 @@ application { applicationDefaultJvmArgs = [ '-XX:+ExitOnOutOfMemoryError', '-XX:MaxRAMPercentage=75.0', + '-XX:NativeMemoryTracking=detail', + '-XX:+UnlockDiagnosticVMOptions', + '-XX:GCLockerRetryAllocationCount=100', // '-XX:NativeMemoryTracking=detail', // '-Djava.rmi.server.hostname=localhost', // '-Dcom.sun.management.jmxremote=true', diff --git a/airbyte-integrations/connectors/destination-snowflake/metadata.yaml b/airbyte-integrations/connectors/destination-snowflake/metadata.yaml index 83ac861e4561..e8a65f8e2283 100644 --- a/airbyte-integrations/connectors/destination-snowflake/metadata.yaml +++ b/airbyte-integrations/connectors/destination-snowflake/metadata.yaml @@ -2,7 +2,7 @@ data: connectorSubtype: database connectorType: destination definitionId: 424892c4-daac-4491-b35d-c6688ba547ba - dockerImageTag: 3.1.19 + dockerImageTag: 3.2.2 dockerRepository: airbyte/destination-snowflake githubIssueLabel: destination-snowflake icon: snowflake.svg diff --git a/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/typing_deduping/SnowflakeColumnDefinition.java b/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/typing_deduping/SnowflakeColumnDefinition.java new file mode 100644 index 000000000000..5683553b9cf2 --- /dev/null +++ b/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/typing_deduping/SnowflakeColumnDefinition.java @@ -0,0 +1,12 @@ +/* + * Copyright (c) 2023 Airbyte, Inc., all rights reserved. + */ + +package io.airbyte.integrations.destination.snowflake.typing_deduping; + +/** + * isNullable is only used to execute a migration away from an older version of + * destination-snowflake, where we created PK columns as NOT NULL. This caused a lot of problems + * because many sources emit null PKs. We may want to remove this field eventually. + */ +public record SnowflakeColumnDefinition(String type, @Deprecated boolean isNullable) {} diff --git a/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/typing_deduping/SnowflakeDestinationHandler.java b/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/typing_deduping/SnowflakeDestinationHandler.java index 66f004b88571..bb9455550870 100644 --- a/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/typing_deduping/SnowflakeDestinationHandler.java +++ b/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/typing_deduping/SnowflakeDestinationHandler.java @@ -32,9 +32,9 @@ public SnowflakeDestinationHandler(final String databaseName, final JdbcDatabase public Optional findExistingTable(final StreamId id) throws SQLException { // The obvious database.getMetaData().getColumns() solution doesn't work, because JDBC translates // VARIANT as VARCHAR - final LinkedHashMap columns = database.queryJsons( + final LinkedHashMap columns = database.queryJsons( """ - SELECT column_name, data_type + SELECT column_name, data_type, is_nullable FROM information_schema.columns WHERE table_catalog = ? AND table_schema = ? @@ -45,10 +45,10 @@ public Optional findExistingTable(final StreamId id) t id.finalNamespace().toUpperCase(), id.finalName().toUpperCase()).stream() .collect(LinkedHashMap::new, - (map, row) -> map.put(row.get("COLUMN_NAME").asText(), row.get("DATA_TYPE").asText()), + (map, row) -> map.put( + row.get("COLUMN_NAME").asText(), + new SnowflakeColumnDefinition(row.get("DATA_TYPE").asText(), fromSnowflakeBoolean(row.get("IS_NULLABLE").asText()))), LinkedHashMap::putAll); - // TODO query for indexes/partitioning/etc - if (columns.isEmpty()) { return Optional.empty(); } else { @@ -100,4 +100,12 @@ public void execute(final String sql) throws Exception { LOGGER.info("Sql {} completed in {} ms", queryId, System.currentTimeMillis() - startTime); } + /** + * In snowflake information_schema tables, booleans return "YES" and "NO", which DataBind doesn't + * know how to use + */ + private boolean fromSnowflakeBoolean(String input) { + return input.equalsIgnoreCase("yes"); + } + } diff --git a/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/typing_deduping/SnowflakeSqlGenerator.java b/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/typing_deduping/SnowflakeSqlGenerator.java index 35afdf7cfb10..9dada3372ceb 100644 --- a/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/typing_deduping/SnowflakeSqlGenerator.java +++ b/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/typing_deduping/SnowflakeSqlGenerator.java @@ -22,10 +22,13 @@ import io.airbyte.integrations.base.destination.typing_deduping.UnsupportedOneOf; import io.airbyte.protocol.models.v0.DestinationSyncMode; import java.util.Arrays; +import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; import org.apache.commons.lang3.StringUtils; import org.apache.commons.text.StringSubstitutor; @@ -127,6 +130,7 @@ public String createTable(final StreamConfig stream, final String suffix, final @Override public boolean existingSchemaMatchesStreamConfig(final StreamConfig stream, final SnowflakeTableDefinition existingTable) throws TableNotMigratedException { + final Set pks = getPks(stream); // Check that the columns match, with special handling for the metadata columns. final LinkedHashMap intendedColumns = stream.columns().entrySet().stream() @@ -137,12 +141,17 @@ public boolean existingSchemaMatchesStreamConfig(final StreamConfig stream, fina .filter(column -> JavaBaseConstants.V2_FINAL_TABLE_METADATA_COLUMNS.stream().map(String::toUpperCase) .noneMatch(airbyteColumnName -> airbyteColumnName.equals(column.getKey()))) .collect(LinkedHashMap::new, - (map, column) -> map.put(column.getKey(), column.getValue()), + (map, column) -> map.put(column.getKey(), column.getValue().type()), LinkedHashMap::putAll); + // soft-resetting https://github.com/airbytehq/airbyte/pull/31082 + final boolean hasPksWithNonNullConstraint = existingTable.columns().entrySet().stream() + .anyMatch(c -> pks.contains(c.getKey()) && !c.getValue().isNullable()); + final boolean sameColumns = actualColumns.equals(intendedColumns) - && "TEXT".equals(existingTable.columns().get(JavaBaseConstants.COLUMN_NAME_AB_RAW_ID.toUpperCase())) - && "TIMESTAMP_TZ".equals(existingTable.columns().get(JavaBaseConstants.COLUMN_NAME_AB_EXTRACTED_AT.toUpperCase())) - && "VARIANT".equals(existingTable.columns().get(JavaBaseConstants.COLUMN_NAME_AB_META.toUpperCase())); + && !hasPksWithNonNullConstraint + && "TEXT".equals(existingTable.columns().get(JavaBaseConstants.COLUMN_NAME_AB_RAW_ID.toUpperCase()).type()) + && "TIMESTAMP_TZ".equals(existingTable.columns().get(JavaBaseConstants.COLUMN_NAME_AB_EXTRACTED_AT.toUpperCase()).type()) + && "VARIANT".equals(existingTable.columns().get(JavaBaseConstants.COLUMN_NAME_AB_META.toUpperCase()).type()); return sameColumns; } @@ -153,10 +162,6 @@ public String updateTable(final StreamConfig stream, final String finalSuffix) { } private String updateTable(final StreamConfig stream, final String finalSuffix, final boolean verifyPrimaryKeys) { - String validatePrimaryKeys = ""; - if (verifyPrimaryKeys && stream.destinationSyncMode() == DestinationSyncMode.APPEND_DEDUP) { - validatePrimaryKeys = validatePrimaryKeys(stream.id(), stream.primaryKey(), stream.columns()); - } final String insertNewRecords = insertNewRecords(stream, finalSuffix, stream.columns()); String dedupFinalTable = ""; String cdcDeletes = ""; @@ -170,7 +175,6 @@ private String updateTable(final StreamConfig stream, final String finalSuffix, final String commitRawTable = commitRawTable(stream.id()); return new StringSubstitutor(Map.of( - "validate_primary_keys", validatePrimaryKeys, "insert_new_records", insertNewRecords, "dedup_final_table", dedupFinalTable, "cdc_deletes", cdcDeletes, @@ -178,7 +182,6 @@ private String updateTable(final StreamConfig stream, final String finalSuffix, "commit_raw_table", commitRawTable)).replace( """ BEGIN TRANSACTION; - ${validate_primary_keys} ${insert_new_records} ${dedup_final_table} ${dedupe_raw_table} @@ -297,48 +300,6 @@ WHEN TYPEOF(${expression}) != 'ARRAY' } } - @VisibleForTesting - String validatePrimaryKeys(final StreamId id, - final List primaryKeys, - final LinkedHashMap streamColumns) { - if (primaryKeys.stream().anyMatch(c -> c.originalName().contains("`"))) { - // TODO why is snowflake throwing a bizarre error when we try to use a column with a backtick in it? - // E.g. even this trivial procedure fails: (it should return the string `'foo`bar') - // execute immediate 'BEGIN RETURN \'foo`bar\'; END;' - return ""; - } - - final String pkNullChecks = primaryKeys.stream().map( - pk -> { - final String jsonExtract = extractAndCastInsideScript(pk, streamColumns.get(pk)); - return "AND " + jsonExtract + " IS NULL"; - }).collect(joining("\n")); - - final String script = new StringSubstitutor(Map.of( - "raw_table_id", id.rawTableId(QUOTE), - "raw_table_id_for_string", escapeSingleQuotedString(id.rawTableId(QUOTE)), - "pk_null_checks", pkNullChecks)).replace( - // Wrap this inside a script block so that we can use the scripting language - """ - DECLARE _ab_missing_primary_key EXCEPTION (-20001, 'Table ${raw_table_id_for_string} has rows missing a primary key'); - BEGIN - LET missing_pk_count INTEGER := ( - SELECT COUNT(1) - FROM ${raw_table_id} - WHERE - "_airbyte_loaded_at" IS NULL - ${pk_null_checks} - ); - - IF (missing_pk_count > 0) THEN - RAISE _ab_missing_primary_key; - END IF; - RETURN 'SUCCESS'; - END; - """); - return "EXECUTE IMMEDIATE '" + escapeSingleQuotedString(script) + "';"; - } - @VisibleForTesting String insertNewRecords(final StreamConfig stream, final String finalSuffix, final LinkedHashMap streamColumns) { final String columnCasts = streamColumns.entrySet().stream().map( @@ -602,4 +563,8 @@ public static String escapeSingleQuotedString(final String str) { .replace("'", "\\'"); } + private static Set getPks(final StreamConfig stream) { + return stream.primaryKey() != null ? stream.primaryKey().stream().map(ColumnId::name).collect(Collectors.toSet()) : Collections.emptySet(); + } + } diff --git a/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/typing_deduping/SnowflakeTableDefinition.java b/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/typing_deduping/SnowflakeTableDefinition.java index 8524222fcd35..2535d9004b13 100644 --- a/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/typing_deduping/SnowflakeTableDefinition.java +++ b/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/typing_deduping/SnowflakeTableDefinition.java @@ -11,5 +11,4 @@ * {@link net.snowflake.client.jdbc.SnowflakeType} doesn't actually have all the types that * Snowflake supports. */ -// TODO fields for columns + indexes... or other stuff we want to set? -public record SnowflakeTableDefinition(LinkedHashMap columns) {} +public record SnowflakeTableDefinition(LinkedHashMap columns) {} diff --git a/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/typing_deduping/SnowflakeV1V2Migrator.java b/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/typing_deduping/SnowflakeV1V2Migrator.java index dd009d5b7bc7..28c352138af0 100644 --- a/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/typing_deduping/SnowflakeV1V2Migrator.java +++ b/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/typing_deduping/SnowflakeV1V2Migrator.java @@ -33,7 +33,7 @@ public SnowflakeV1V2Migrator(final NamingConventionTransformer namingConventionT @SneakyThrows @Override - protected boolean doesAirbyteInternalNamespaceExist(final StreamConfig streamConfig) { + protected boolean doesAirbyteInternalNamespaceExist(final StreamConfig streamConfig) throws Exception { return !database .queryJsons( """ @@ -54,15 +54,15 @@ protected boolean schemaMatchesExpectation(final SnowflakeTableDefinition existi @SneakyThrows @Override - protected Optional getTableIfExists(final String namespace, final String tableName) { + protected Optional getTableIfExists(final String namespace, final String tableName) throws Exception { // TODO this is mostly copied from SnowflakeDestinationHandler#findExistingTable, we should probably // reuse this logic // The obvious database.getMetaData().getColumns() solution doesn't work, because JDBC translates // VARIANT as VARCHAR - LinkedHashMap columns = + final LinkedHashMap columns = database.queryJsons( """ - SELECT column_name, data_type + SELECT column_name, data_type, is_nullable FROM information_schema.columns WHERE table_catalog = ? AND table_schema = ? @@ -74,7 +74,8 @@ protected Optional getTableIfExists(final String names tableName) .stream() .collect(LinkedHashMap::new, - (map, row) -> map.put(row.get("COLUMN_NAME").asText(), row.get("DATA_TYPE").asText()), + (map, row) -> map.put(row.get("COLUMN_NAME").asText(), + new SnowflakeColumnDefinition(row.get("DATA_TYPE").asText(), fromSnowflakeBoolean(row.get("IS_NULLABLE").asText()))), LinkedHashMap::putAll); if (columns.isEmpty()) { return Optional.empty(); @@ -92,10 +93,18 @@ protected NamespacedTableName convertToV1RawName(final StreamConfig streamConfig } @Override - protected boolean doesValidV1RawTableExist(final String namespace, final String tableName) { + protected boolean doesValidV1RawTableExist(final String namespace, final String tableName) throws Exception { // Previously we were not quoting table names and they were being implicitly upper-cased. // In v2 we preserve cases return super.doesValidV1RawTableExist(namespace.toUpperCase(), tableName.toUpperCase()); } + /** + * In snowflake information_schema tables, booleans return "YES" and "NO", which DataBind doesn't + * know how to use + */ + private boolean fromSnowflakeBoolean(final String input) { + return input.equalsIgnoreCase("yes"); + } + } diff --git a/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/typing_deduping/SnowflakeV2TableMigrator.java b/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/typing_deduping/SnowflakeV2TableMigrator.java index a710ce884c6d..cf26fc57e360 100644 --- a/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/typing_deduping/SnowflakeV2TableMigrator.java +++ b/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/typing_deduping/SnowflakeV2TableMigrator.java @@ -91,9 +91,9 @@ private static String escapeIdentifier_caseSensitive(final String identifier) { public Optional findExistingTable_caseSensitive(final StreamId id) throws SQLException { // The obvious database.getMetaData().getColumns() solution doesn't work, because JDBC translates // VARIANT as VARCHAR - final LinkedHashMap columns = database.queryJsons( + final LinkedHashMap columns = database.queryJsons( """ - SELECT column_name, data_type + SELECT column_name, data_type, is_nullable FROM information_schema.columns WHERE table_catalog = ? AND table_schema = ? @@ -104,10 +104,10 @@ public Optional findExistingTable_caseSensitive(final id.finalNamespace(), id.finalName()).stream() .collect(LinkedHashMap::new, - (map, row) -> map.put(row.get("COLUMN_NAME").asText(), row.get("DATA_TYPE").asText()), + (map, row) -> map.put( + row.get("COLUMN_NAME").asText(), + new SnowflakeColumnDefinition(row.get("DATA_TYPE").asText(), fromSnowflakeBoolean(row.get("IS_NULLABLE").asText()))), LinkedHashMap::putAll); - // TODO query for indexes/partitioning/etc - if (columns.isEmpty()) { return Optional.empty(); } else { @@ -115,4 +115,12 @@ public Optional findExistingTable_caseSensitive(final } } + /** + * In snowflake information_schema tables, booleans return "YES" and "NO", which DataBind doesn't + * know how to use + */ + private boolean fromSnowflakeBoolean(String input) { + return input.equalsIgnoreCase("yes"); + } + } diff --git a/airbyte-integrations/connectors/destination-snowflake/src/test-integration/java/io/airbyte/integrations/destination/snowflake/typing_deduping/AbstractSnowflakeTypingDedupingTest.java b/airbyte-integrations/connectors/destination-snowflake/src/test-integration/java/io/airbyte/integrations/destination/snowflake/typing_deduping/AbstractSnowflakeTypingDedupingTest.java index 0d2169e3fccf..ea8616c66489 100644 --- a/airbyte-integrations/connectors/destination-snowflake/src/test-integration/java/io/airbyte/integrations/destination/snowflake/typing_deduping/AbstractSnowflakeTypingDedupingTest.java +++ b/airbyte-integrations/connectors/destination-snowflake/src/test-integration/java/io/airbyte/integrations/destination/snowflake/typing_deduping/AbstractSnowflakeTypingDedupingTest.java @@ -4,6 +4,9 @@ package io.airbyte.integrations.destination.snowflake.typing_deduping; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ObjectNode; import io.airbyte.cdk.db.factory.DataSourceFactory; @@ -24,6 +27,7 @@ import io.airbyte.protocol.models.v0.ConfiguredAirbyteStream; import io.airbyte.protocol.models.v0.DestinationSyncMode; import io.airbyte.protocol.models.v0.SyncMode; +import io.airbyte.workers.exception.TestHarnessException; import java.nio.file.Path; import java.util.List; import java.util.Map; @@ -189,6 +193,31 @@ public void testFinalTableUppercasingMigration_overwrite() throws Exception { } } + @Test + public void testRemovingPKNonNullIndexes() throws Exception { + final ConfiguredAirbyteCatalog catalog = new ConfiguredAirbyteCatalog().withStreams(List.of( + new ConfiguredAirbyteStream() + .withSyncMode(SyncMode.INCREMENTAL) + .withDestinationSyncMode(DestinationSyncMode.APPEND_DEDUP) + .withPrimaryKey(List.of(List.of("id1"), List.of("id2"))) + .withStream(new AirbyteStream() + .withNamespace(streamNamespace) + .withName(streamName) + .withJsonSchema(SCHEMA)))); + + // First sync + final List messages = readMessages("dat/sync_null_pk.jsonl"); + final TestHarnessException e = assertThrows( + TestHarnessException.class, + () -> runSync(catalog, messages, "airbyte/destination-snowflake:3.1.18")); // this version introduced non-null PKs to the final tables + // ideally we would assert on the logged content of the original exception within e, but that is + // proving to be tricky + + // Second sync + runSync(catalog, messages); // does not throw with latest version + assertEquals(1, dumpFinalTableRecords(streamNamespace, streamName).toArray().length); + } + private String getDefaultSchema() { return getConfig().get("schema").asText(); } diff --git a/airbyte-integrations/connectors/destination-snowflake/src/test-integration/java/io/airbyte/integrations/destination/snowflake/typing_deduping/SnowflakeSqlGeneratorIntegrationTest.java b/airbyte-integrations/connectors/destination-snowflake/src/test-integration/java/io/airbyte/integrations/destination/snowflake/typing_deduping/SnowflakeSqlGeneratorIntegrationTest.java index a283dfd6bd43..2172f93893b0 100644 --- a/airbyte-integrations/connectors/destination-snowflake/src/test-integration/java/io/airbyte/integrations/destination/snowflake/typing_deduping/SnowflakeSqlGeneratorIntegrationTest.java +++ b/airbyte-integrations/connectors/destination-snowflake/src/test-integration/java/io/airbyte/integrations/destination/snowflake/typing_deduping/SnowflakeSqlGeneratorIntegrationTest.java @@ -5,14 +5,11 @@ package io.airbyte.integrations.destination.snowflake.typing_deduping; import static io.airbyte.integrations.destination.snowflake.SnowflakeTestUtils.timestampToString; -import static java.util.Collections.emptyList; import static java.util.stream.Collectors.joining; import static java.util.stream.Collectors.toMap; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.junit.jupiter.api.Assertions.assertTrue; import autovalue.shaded.com.google.common.collect.ImmutableMap; import com.fasterxml.jackson.databind.JsonNode; @@ -300,48 +297,6 @@ record -> { columns)); } - /** - * We test this for Snowflake because we made a special exception class, _ab_missing_primary_key and - * a custom error message - */ - @Override - @Test - public void incrementalDedupInvalidPrimaryKey() throws Exception { - createRawTable(streamId); - createFinalTable(incrementalDedupStream, ""); - insertRawTableRecords( - streamId, - List.of( - Jsons.deserialize( - """ - { - "_airbyte_raw_id": "10d6e27d-ae7a-41b5-baf8-c4c277ef9c11", - "_airbyte_extracted_at": "2023-01-01T00:00:00Z", - "_airbyte_data": {} - } - """), - Jsons.deserialize( - """ - { - "_airbyte_raw_id": "5ce60e70-98aa-4fe3-8159-67207352c4f0", - "_airbyte_extracted_at": "2023-01-01T00:00:00Z", - "_airbyte_data": {"id1": 1, "id2": 100} - } - """))); - - final String sql = generator.updateTable(incrementalDedupStream, ""); - final Exception exception = assertThrows( - RuntimeException.class, - () -> destinationHandler.execute(sql)); - - assertTrue(exception.getMessage().contains("_AB_MISSING_PRIMARY_KEY")); - assertTrue(exception.getMessage().contains("\"users_raw\" has rows missing a primary key")); - - DIFFER.diffFinalTableRecords( - emptyList(), - dumpFinalTableRecords(streamId, "")); - } - @Override protected void createV1RawTable(final StreamId v1RawTable) throws Exception { database.execute(String.format( diff --git a/airbyte-integrations/connectors/destination-weaviate/Dockerfile b/airbyte-integrations/connectors/destination-weaviate/Dockerfile index d82ca995e540..eca78a55aac2 100644 --- a/airbyte-integrations/connectors/destination-weaviate/Dockerfile +++ b/airbyte-integrations/connectors/destination-weaviate/Dockerfile @@ -37,5 +37,5 @@ COPY destination_weaviate ./destination_weaviate ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=0.2.0 +LABEL io.airbyte.version=0.2.1 LABEL io.airbyte.name=airbyte/destination-weaviate \ No newline at end of file diff --git a/airbyte-integrations/connectors/destination-weaviate/destination_weaviate/indexer.py b/airbyte-integrations/connectors/destination-weaviate/destination_weaviate/indexer.py index f0836b5fdd74..6d44278f028a 100644 --- a/airbyte-integrations/connectors/destination-weaviate/destination_weaviate/indexer.py +++ b/airbyte-integrations/connectors/destination-weaviate/destination_weaviate/indexer.py @@ -146,7 +146,7 @@ def _normalize(self, metadata: dict) -> dict: normalized_key = key[0].lower() + key[1:] # "id" and "additional" are reserved properties in Weaviate, prefix to disambiguate if key == "id" or key == "_id" or key == "_additional": - normalized_key = f"__{key}" + normalized_key = f"raw_{key}" if isinstance(value, list) and len(value) == 0: # Handling of empty list that's not part of defined schema otherwise Weaviate throws invalid string property continue diff --git a/airbyte-integrations/connectors/destination-weaviate/metadata.yaml b/airbyte-integrations/connectors/destination-weaviate/metadata.yaml index 77a65e66d926..86d64773d856 100644 --- a/airbyte-integrations/connectors/destination-weaviate/metadata.yaml +++ b/airbyte-integrations/connectors/destination-weaviate/metadata.yaml @@ -8,7 +8,7 @@ data: connectorSubtype: database connectorType: destination definitionId: 7b7d7a0d-954c-45a0-bcfc-39a634b97736 - dockerImageTag: 0.2.0 + dockerImageTag: 0.2.1 dockerRepository: airbyte/destination-weaviate githubIssueLabel: destination-weaviate icon: weaviate.svg diff --git a/airbyte-integrations/connectors/destination-weaviate/setup.py b/airbyte-integrations/connectors/destination-weaviate/setup.py index 5ba9b6035e85..dcb65d0c8b73 100644 --- a/airbyte-integrations/connectors/destination-weaviate/setup.py +++ b/airbyte-integrations/connectors/destination-weaviate/setup.py @@ -5,7 +5,7 @@ from setuptools import find_packages, setup -MAIN_REQUIREMENTS = ["airbyte-cdk[vector-db-based]==0.51.22", "weaviate-client==3.23.2"] +MAIN_REQUIREMENTS = ["airbyte-cdk[vector-db-based]==0.51.28", "weaviate-client==3.23.2"] TEST_REQUIREMENTS = ["pytest~=6.2", "docker", "pytest-docker"] diff --git a/airbyte-integrations/connectors/source-airtable/Dockerfile b/airbyte-integrations/connectors/source-airtable/Dockerfile index 9fea0a49d386..0b1d071d5259 100644 --- a/airbyte-integrations/connectors/source-airtable/Dockerfile +++ b/airbyte-integrations/connectors/source-airtable/Dockerfile @@ -34,5 +34,5 @@ COPY source_airtable ./source_airtable ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=3.0.1 +LABEL io.airbyte.version=4.1.2 LABEL io.airbyte.name=airbyte/source-airtable diff --git a/airbyte-integrations/connectors/source-airtable/acceptance-test-config.yml b/airbyte-integrations/connectors/source-airtable/acceptance-test-config.yml index d19419e1ff17..19e267aea061 100644 --- a/airbyte-integrations/connectors/source-airtable/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-airtable/acceptance-test-config.yml @@ -34,12 +34,30 @@ acceptance_tests: extra_fields: true exact_order: true extra_records: false + ignored_fields: + users/field_type_test/tblFcp5mncufoYaR9: + - name: "attachment" + bypass_reason: "Attachments' preview links are changed frequently" + "users/50_columns/tbl01Hi93Tt6XJ0u5": + - name: "attachments" + bypass_reason: "Attachments' preview links are changed frequently" + - name: "attachments_2" + bypass_reason: "Attachments' preview links are changed frequently" - config_path: "secrets/config_oauth.json" expect_records: path: "integration_tests/expected_records.jsonl" extra_fields: true exact_order: true extra_records: false + ignored_fields: + users/field_type_test/tblFcp5mncufoYaR9: + - name: "attachment" + bypass_reason: "Attachments' preview links are changed frequently" + "users/50_columns/tbl01Hi93Tt6XJ0u5": + - name: "attachments" + bypass_reason: "Attachments' preview links are changed frequently" + - name: "attachments_2" + bypass_reason: "Attachments' preview links are changed frequently" full_refresh: tests: - config_path: "secrets/config.json" diff --git a/airbyte-integrations/connectors/source-airtable/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-airtable/integration_tests/expected_records.jsonl index 85ccd4a6c395..e5b5bf265227 100644 --- a/airbyte-integrations/connectors/source-airtable/integration_tests/expected_records.jsonl +++ b/airbyte-integrations/connectors/source-airtable/integration_tests/expected_records.jsonl @@ -1,42 +1,43 @@ -{"stream": "users/table_1/tblmrNtgqio9IWVGx", "data": {"_airtable_id": "recgRMRMHxgcgJeDe", "_airtable_created_time": "2021-11-16T13:30:17.000Z", "name": "test2", "status": "test", "notes": "test_note2"}, "emitted_at": 1675276485893} -{"stream": "users/table_1/tblmrNtgqio9IWVGx", "data": {"_airtable_id": "recmJkSF51IKUGmlJ", "_airtable_created_time": "2022-12-22T20:58:05.000Z", "name": "test4_after_empty", "clo_with_empty_strings": "bla bla bla", "status": "In progress", "notes": "test_note4"}, "emitted_at": 1675276485893} -{"stream": "users/table_1/tblmrNtgqio9IWVGx", "data": {"_airtable_id": "recvp1qYYBlcOrzsc", "_airtable_created_time": "2021-11-16T13:30:17.000Z", "name": "test3", "clo_with_empty_strings": "test text here", "status": "test", "notes": "test-note3"}, "emitted_at": 1675276485894} -{"stream": "users/table_1/tblmrNtgqio9IWVGx", "data": {"_airtable_id": "reczEeQV9NrzFlVFF", "_airtable_created_time": "2021-11-16T13:30:17.000Z", "name": "test", "status": "test", "notes": "test_note"}, "emitted_at": 1675276485894} -{"stream": "users/table_2/tblCjIgm5yveWC4X5", "data": {"_airtable_id": "recB3upao4wpmeCEf", "_airtable_created_time": "2021-11-16T13:32:31.000Z", "status": "In progress", "name": "test2", "notes": "test2"}, "emitted_at": 1675276487209} -{"stream": "users/table_2/tblCjIgm5yveWC4X5", "data": {"_airtable_id": "recWeE6SiYeri4Duq", "_airtable_created_time": "2021-11-16T13:32:31.000Z", "status": "Todo", "name": "test", "notes": "test"}, "emitted_at": 1675276487209} -{"stream": "users/table_2/tblCjIgm5yveWC4X5", "data": {"_airtable_id": "recXn7kXbeEsJfDJQ", "_airtable_created_time": "2022-12-28T11:41:10.000Z", "name": " "}, "emitted_at": 1675276487210} -{"stream": "users/table_2/tblCjIgm5yveWC4X5", "data": {"_airtable_id": "recmMfFAec8plcOUY", "_airtable_created_time": "2021-11-16T13:32:31.000Z", "status": "Done", "name": "test 3", "notes": "test 3"}, "emitted_at": 1675276487210} -{"stream": "users/table_6/tblSXpxKHg0OiLxbI", "data": {"_airtable_id": "recHyy86oge9j5cYP", "_airtable_created_time": "2023-01-25T02:04:26.000Z", "name": "test_negative", "table_6": ["recHyy86oge9j5cYP", "recoY6ShPkGpav3Se"], "float": 0.3, "status": "In progress", "integer": -1.0, "assignee": [2.0], "assignee_(from_table_6)": [2.0, 2.0]}, "emitted_at": 1675276488139} -{"stream": "users/table_6/tblSXpxKHg0OiLxbI", "data": {"_airtable_id": "recLhKYa9btCCqmxs", "_airtable_created_time": "2023-01-25T02:04:26.000Z", "name": "test_attachment", "table_6": ["recLhKYa9btCCqmxs", "recoY6ShPkGpav3Se"], "float": 0.3, "status": "Todo", "integer": 1.0, "assignee": [2.0], "assignee_(from_table_6)": [2.0, 2.0]}, "emitted_at": 1675276488139} -{"stream": "users/table_6/tblSXpxKHg0OiLxbI", "data": {"_airtable_id": "recoY6ShPkGpav3Se", "_airtable_created_time": "2023-01-25T02:04:26.000Z", "name": "test_normal", "table_6": ["recoY6ShPkGpav3Se", "recHyy86oge9j5cYP", "recLhKYa9btCCqmxs"], "float": 0.7, "status": "Done", "integer": 2.0, "assignee": [2.0], "assignee_(from_table_6)": [2.0, 2.0, 2.0]}, "emitted_at": 1675276488140} -{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "rec0UJKftqCPj7zJu", "_airtable_created_time": "2022-12-01T20:27:46.000Z", "email": "integration-test-user@airbyte.io", "id": 17.0, "date": "2022-09-30", "multiple_select_(no_colors)": ["1", "2", "3"], "percent": 0.0, "rating": 5.0, "multiple_select_(colors)": ["1", "2", "3"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "checkbox": true, "number": 1.0, "duration": 0.0, "name": "John", "single_line": "Singe line", "phone": "(937) 999-999", "value": 1.0, "long_text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas vitae nisi nec justo laoreet tincidunt. Vivamus eget porttitor velit. Pellentesque gravida euismod massa, eget egestas sem facilisis gravida. Suspendisse quis mauris eget velit faucibus aliquam. Mauris porttitor urna lorem, eget tincidunt ex faucibus et. Nam viverra nibh quis turpis scelerisque, et condimentum nibh vulputate. Vivamus eu dolor posuere, finibus ligula vel, finibus erat. Sed hendrerit luctus erat, eu finibus ante blandit ut. Sed id mi ullamcorper, cursus urna nec, molestie lorem. In vulputate tempor nulla in laoreet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed a risus risus. Praesent neque lorem, fringilla vitae rhoncus a, semper eu augue.", "single_select_(colors)": "1", "single_select_(no_colors)": "1", "url": "airbyte.io", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"], "created_(with_time)": "2022-12-01T20:27:46.000Z", "created_(w/o_time)": "2022-12-01", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"}, "emitted_at": 1675276488924} -{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "rec3tSj3Yzi42uuS0", "_airtable_created_time": "2022-09-30T16:06:49.000Z", "id": 3.0, "100_columns": ["reccHYZ004lOuxLFH"], "name": "Blank", "created_(with_time)": "2022-09-30T16:06:49.000Z", "created_(w/o_time)": "2022-09-30", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"}, "emitted_at": 1675276488925} -{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "recAa5DUEhppIeeax", "_airtable_created_time": "2022-12-01T20:27:30.000Z", "email": "integration-test-user@airbyte.io", "id": 9.0, "date": "2022-09-30", "multiple_select_(no_colors)": ["1", "2", "3"], "percent": 0.0, "rating": 5.0, "multiple_select_(colors)": ["1", "2", "3"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "checkbox": true, "number": 1.0, "duration": 0.0, "name": "John", "single_line": "Singe line", "phone": "(937) 999-999", "value": 1.0, "long_text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas vitae nisi nec justo laoreet tincidunt. Vivamus eget porttitor velit. Pellentesque gravida euismod massa, eget egestas sem facilisis gravida. Suspendisse quis mauris eget velit faucibus aliquam. Mauris porttitor urna lorem, eget tincidunt ex faucibus et. Nam viverra nibh quis turpis scelerisque, et condimentum nibh vulputate. Vivamus eu dolor posuere, finibus ligula vel, finibus erat. Sed hendrerit luctus erat, eu finibus ante blandit ut. Sed id mi ullamcorper, cursus urna nec, molestie lorem. In vulputate tempor nulla in laoreet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed a risus risus. Praesent neque lorem, fringilla vitae rhoncus a, semper eu augue.", "single_select_(colors)": "1", "single_select_(no_colors)": "1", "url": "airbyte.io", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"], "created_(with_time)": "2022-12-01T20:27:30.000Z", "created_(w/o_time)": "2022-12-01", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"}, "emitted_at": 1675276488926} -{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "recG989xsdfSxookl", "_airtable_created_time": "2022-12-01T20:27:46.000Z", "email": "integration-test-user@airbyte.io", "id": 23.0, "date": "2022-10-03", "multiple_select_(no_colors)": ["a", "b", "c"], "percent": 1.0, "rating": 3.0, "multiple_select_(colors)": ["a", "b", "c"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "number": 123123871234.33, "duration": 169409880.0, "name": "Jane", "single_line": "09-30-2022", "phone": "(937) 999-999", "value": 1128312.23, "long_text": "18923671273628376328495623874562981345982 234953249857239045798 342098523495723495732 23489532475\n\n23453245234532453245234523453245\n\n2345234532452345", "single_select_(colors)": "a", "single_select_(no_colors)": "a", "url": "www.google.com", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"], "created_(with_time)": "2022-12-01T20:27:46.000Z", "created_(w/o_time)": "2022-12-01", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"}, "emitted_at": 1675276488927} -{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "recGVqF9BIpDD7Gj1", "_airtable_created_time": "2022-12-01T20:27:46.000Z", "email": "integration-test-user@airbyte.io", "id": 22.0, "date": "2022-09-30", "multiple_select_(no_colors)": ["1", "2", "3"], "percent": 0.0, "rating": 5.0, "multiple_select_(colors)": ["1", "2", "3"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "checkbox": true, "number": 1.0, "duration": 0.0, "name": "John", "single_line": "Singe line", "phone": "(937) 999-999", "value": 1.0, "long_text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas vitae nisi nec justo laoreet tincidunt. Vivamus eget porttitor velit. Pellentesque gravida euismod massa, eget egestas sem facilisis gravida. Suspendisse quis mauris eget velit faucibus aliquam. Mauris porttitor urna lorem, eget tincidunt ex faucibus et. Nam viverra nibh quis turpis scelerisque, et condimentum nibh vulputate. Vivamus eu dolor posuere, finibus ligula vel, finibus erat. Sed hendrerit luctus erat, eu finibus ante blandit ut. Sed id mi ullamcorper, cursus urna nec, molestie lorem. In vulputate tempor nulla in laoreet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed a risus risus. Praesent neque lorem, fringilla vitae rhoncus a, semper eu augue.", "single_select_(colors)": "1", "single_select_(no_colors)": "1", "url": "airbyte.io", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"], "created_(with_time)": "2022-12-01T20:27:46.000Z", "created_(w/o_time)": "2022-12-01", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"}, "emitted_at": 1675276488928} -{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "recHNlOoFvp6KjeZD", "_airtable_created_time": "2022-12-01T20:27:46.000Z", "id": 16.0, "name": "Blank", "created_(with_time)": "2022-12-01T20:27:46.000Z", "created_(w/o_time)": "2022-12-01", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"}, "emitted_at": 1675276488929} -{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "recL6sfQP0FyJr3Ua", "_airtable_created_time": "2022-12-01T20:27:46.000Z", "id": 21.0, "name": "Blank", "created_(with_time)": "2022-12-01T20:27:46.000Z", "created_(w/o_time)": "2022-12-01", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"}, "emitted_at": 1675276488929} -{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "recMtt4tMmdNbwV5R", "_airtable_created_time": "2022-12-01T20:27:20.000Z", "id": 8.0, "name": "Blank", "created_(with_time)": "2022-12-01T20:27:20.000Z", "created_(w/o_time)": "2022-12-01", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"}, "emitted_at": 1675276488930} -{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "recOz5BBo3Ey3ldb8", "_airtable_created_time": "2022-12-01T20:27:11.000Z", "email": "integration-test-user@airbyte.io", "id": 5.0, "date": "2022-10-03", "multiple_select_(no_colors)": ["a", "b", "c"], "percent": 1.0, "rating": 3.0, "multiple_select_(colors)": ["a", "b", "c"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "100_columns": ["recXVzpNmtsBcjrA2"], "number": 123123871234.33, "duration": 169409880.0, "name": "Jane", "single_line": "09-30-2022", "phone": "(937) 999-999", "value": 1128312.23, "long_text": "18923671273628376328495623874562981345982 234953249857239045798 342098523495723495732 23489532475\n\n23453245234532453245234523453245\n\n2345234532452345", "single_select_(colors)": "a", "single_select_(no_colors)": "a", "url": "www.google.com", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"], "created_(with_time)": "2022-12-01T20:27:11.000Z", "created_(w/o_time)": "2022-12-01", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"}, "emitted_at": 1675276488930} -{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "recSbSBPspxs22165", "_airtable_created_time": "2022-12-01T20:27:46.000Z", "email": "integration-test-user@airbyte.io", "id": 15.0, "date": "2022-10-03", "multiple_select_(no_colors)": ["a", "b", "c"], "percent": 1.0, "rating": 3.0, "multiple_select_(colors)": ["a", "b", "c"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "number": 123123871234.33, "duration": 169409880.0, "name": "Jane", "single_line": "09-30-2022", "phone": "(937) 999-999", "value": 1128312.23, "long_text": "18923671273628376328495623874562981345982 234953249857239045798 342098523495723495732 23489532475\n\n23453245234532453245234523453245\n\n2345234532452345", "single_select_(colors)": "a", "single_select_(no_colors)": "a", "url": "www.google.com", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"], "created_(with_time)": "2022-12-01T20:27:46.000Z", "created_(w/o_time)": "2022-12-01", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"}, "emitted_at": 1675276488931} -{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "recUzRSGAf5VYtXfZ", "_airtable_created_time": "2022-09-30T16:06:49.000Z", "email": "integration-test-user@airbyte.io", "id": 1.0, "date": "2022-09-30", "multiple_select_(no_colors)": ["1", "2", "3"], "percent": 0.0, "rating": 5.0, "multiple_select_(colors)": ["1", "2", "3"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "checkbox": true, "100_columns": ["rec2lCkcy9d0fZi8h"], "number": 1.0, "duration": 0.0, "name": "John", "single_line": "Singe line", "phone": "(937) 999-999", "value": 1.0, "long_text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas vitae nisi nec justo laoreet tincidunt. Vivamus eget porttitor velit. Pellentesque gravida euismod massa, eget egestas sem facilisis gravida. Suspendisse quis mauris eget velit faucibus aliquam. Mauris porttitor urna lorem, eget tincidunt ex faucibus et. Nam viverra nibh quis turpis scelerisque, et condimentum nibh vulputate. Vivamus eu dolor posuere, finibus ligula vel, finibus erat. Sed hendrerit luctus erat, eu finibus ante blandit ut. Sed id mi ullamcorper, cursus urna nec, molestie lorem. In vulputate tempor nulla in laoreet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed a risus risus. Praesent neque lorem, fringilla vitae rhoncus a, semper eu augue.", "single_select_(colors)": "1", "single_select_(no_colors)": "1", "url": "airbyte.io", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"], "created_(with_time)": "2022-09-30T16:06:49.000Z", "created_(w/o_time)": "2022-09-30", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"}, "emitted_at": 1675276488932} -{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "recbQy9sb5BM1K3Z1", "_airtable_created_time": "2022-12-01T20:27:17.000Z", "email": "integration-test-user@airbyte.io", "id": 6.0, "date": "2022-09-30", "multiple_select_(no_colors)": ["1", "2", "3"], "percent": 0.0, "rating": 5.0, "multiple_select_(colors)": ["1", "2", "3"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "checkbox": true, "number": 1.0, "duration": 0.0, "name": "John", "single_line": "Singe line", "phone": "(937) 999-999", "value": 1.0, "long_text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas vitae nisi nec justo laoreet tincidunt. Vivamus eget porttitor velit. Pellentesque gravida euismod massa, eget egestas sem facilisis gravida. Suspendisse quis mauris eget velit faucibus aliquam. Mauris porttitor urna lorem, eget tincidunt ex faucibus et. Nam viverra nibh quis turpis scelerisque, et condimentum nibh vulputate. Vivamus eu dolor posuere, finibus ligula vel, finibus erat. Sed hendrerit luctus erat, eu finibus ante blandit ut. Sed id mi ullamcorper, cursus urna nec, molestie lorem. In vulputate tempor nulla in laoreet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed a risus risus. Praesent neque lorem, fringilla vitae rhoncus a, semper eu augue.", "single_select_(colors)": "1", "single_select_(no_colors)": "1", "url": "airbyte.io", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"], "created_(with_time)": "2022-12-01T20:27:17.000Z", "created_(w/o_time)": "2022-12-01", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"}, "emitted_at": 1675276488932} -{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "recehwpjPyD1PLFkr", "_airtable_created_time": "2022-12-01T20:27:10.000Z", "email": "integration-test-user@airbyte.io", "id": 4.0, "date": "2022-09-30", "multiple_select_(no_colors)": ["1", "2", "3"], "percent": 0.0, "rating": 5.0, "multiple_select_(colors)": ["1", "2", "3"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "checkbox": true, "number": 1.0, "duration": 0.0, "name": "John", "single_line": "Singe line", "phone": "(937) 999-999", "value": 1.0, "long_text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas vitae nisi nec justo laoreet tincidunt. Vivamus eget porttitor velit. Pellentesque gravida euismod massa, eget egestas sem facilisis gravida. Suspendisse quis mauris eget velit faucibus aliquam. Mauris porttitor urna lorem, eget tincidunt ex faucibus et. Nam viverra nibh quis turpis scelerisque, et condimentum nibh vulputate. Vivamus eu dolor posuere, finibus ligula vel, finibus erat. Sed hendrerit luctus erat, eu finibus ante blandit ut. Sed id mi ullamcorper, cursus urna nec, molestie lorem. In vulputate tempor nulla in laoreet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed a risus risus. Praesent neque lorem, fringilla vitae rhoncus a, semper eu augue.", "single_select_(colors)": "1", "single_select_(no_colors)": "1", "url": "airbyte.io", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"], "created_(with_time)": "2022-12-01T20:27:10.000Z", "created_(w/o_time)": "2022-12-01", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"}, "emitted_at": 1675276488933} -{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "recfdnbGNkUx1Rs5F", "_airtable_created_time": "2022-12-01T20:27:46.000Z", "email": "integration-test-user@airbyte.io", "id": 19.0, "date": "2022-09-30", "multiple_select_(no_colors)": ["1", "2", "3"], "percent": 0.0, "rating": 5.0, "multiple_select_(colors)": ["1", "2", "3"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "checkbox": true, "number": 1.0, "duration": 0.0, "name": "John", "single_line": "Singe line", "phone": "(937) 999-999", "value": 1.0, "long_text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas vitae nisi nec justo laoreet tincidunt. Vivamus eget porttitor velit. Pellentesque gravida euismod massa, eget egestas sem facilisis gravida. Suspendisse quis mauris eget velit faucibus aliquam. Mauris porttitor urna lorem, eget tincidunt ex faucibus et. Nam viverra nibh quis turpis scelerisque, et condimentum nibh vulputate. Vivamus eu dolor posuere, finibus ligula vel, finibus erat. Sed hendrerit luctus erat, eu finibus ante blandit ut. Sed id mi ullamcorper, cursus urna nec, molestie lorem. In vulputate tempor nulla in laoreet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed a risus risus. Praesent neque lorem, fringilla vitae rhoncus a, semper eu augue.", "single_select_(colors)": "1", "single_select_(no_colors)": "1", "url": "airbyte.io", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"], "created_(with_time)": "2022-12-01T20:27:46.000Z", "created_(w/o_time)": "2022-12-01", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"}, "emitted_at": 1675276488934} -{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "recpkKhLwcFYbJLtJ", "_airtable_created_time": "2022-12-01T20:27:43.000Z", "email": "integration-test-user@airbyte.io", "id": 14.0, "date": "2022-09-30", "multiple_select_(no_colors)": ["1", "2", "3"], "percent": 0.0, "rating": 5.0, "multiple_select_(colors)": ["1", "2", "3"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "checkbox": true, "number": 1.0, "duration": 0.0, "name": "John", "single_line": "Singe line", "phone": "(937) 999-999", "value": 1.0, "long_text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas vitae nisi nec justo laoreet tincidunt. Vivamus eget porttitor velit. Pellentesque gravida euismod massa, eget egestas sem facilisis gravida. Suspendisse quis mauris eget velit faucibus aliquam. Mauris porttitor urna lorem, eget tincidunt ex faucibus et. Nam viverra nibh quis turpis scelerisque, et condimentum nibh vulputate. Vivamus eu dolor posuere, finibus ligula vel, finibus erat. Sed hendrerit luctus erat, eu finibus ante blandit ut. Sed id mi ullamcorper, cursus urna nec, molestie lorem. In vulputate tempor nulla in laoreet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed a risus risus. Praesent neque lorem, fringilla vitae rhoncus a, semper eu augue.", "single_select_(colors)": "1", "single_select_(no_colors)": "1", "url": "airbyte.io", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"], "created_(with_time)": "2022-12-01T20:27:43.000Z", "created_(w/o_time)": "2022-12-01", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"}, "emitted_at": 1675276488935} -{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "recqurXMR6u1PO5wT", "_airtable_created_time": "2022-12-01T20:27:18.000Z", "email": "integration-test-user@airbyte.io", "id": 7.0, "date": "2022-10-03", "multiple_select_(no_colors)": ["a", "b", "c"], "percent": 1.0, "rating": 3.0, "multiple_select_(colors)": ["a", "b", "c"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "number": 123123871234.33, "duration": 169409880.0, "name": "Jane", "single_line": "09-30-2022", "phone": "(937) 999-999", "value": 1128312.23, "long_text": "18923671273628376328495623874562981345982 234953249857239045798 342098523495723495732 23489532475\n\n23453245234532453245234523453245\n\n2345234532452345", "single_select_(colors)": "a", "single_select_(no_colors)": "a", "url": "www.google.com", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"], "created_(with_time)": "2022-12-01T20:27:18.000Z", "created_(w/o_time)": "2022-12-01", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"}, "emitted_at": 1675276488936} -{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "recuYRu9z5dlkHxop", "_airtable_created_time": "2022-12-01T20:27:30.000Z", "email": "integration-test-user@airbyte.io", "id": 10.0, "date": "2022-10-03", "multiple_select_(no_colors)": ["a", "b", "c"], "percent": 1.0, "rating": 3.0, "multiple_select_(colors)": ["a", "b", "c"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "number": 123123871234.33, "duration": 169409880.0, "name": "Jane", "single_line": "09-30-2022", "phone": "(937) 999-999", "value": 1128312.23, "long_text": "18923671273628376328495623874562981345982 234953249857239045798 342098523495723495732 23489532475\n\n23453245234532453245234523453245\n\n2345234532452345", "single_select_(colors)": "a", "single_select_(no_colors)": "a", "url": "www.google.com", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"], "created_(with_time)": "2022-12-01T20:27:30.000Z", "created_(w/o_time)": "2022-12-01", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"}, "emitted_at": 1675276488937} -{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "recw3jDJFziB562hu", "_airtable_created_time": "2022-12-01T20:27:46.000Z", "email": "integration-test-user@airbyte.io", "id": 18.0, "date": "2022-10-03", "multiple_select_(no_colors)": ["a", "b", "c"], "percent": 1.0, "rating": 3.0, "multiple_select_(colors)": ["a", "b", "c"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "number": 123123871234.33, "duration": 169409880.0, "name": "Jane", "single_line": "09-30-2022", "phone": "(937) 999-999", "value": 1128312.23, "long_text": "18923671273628376328495623874562981345982 234953249857239045798 342098523495723495732 23489532475\n\n23453245234532453245234523453245\n\n2345234532452345", "single_select_(colors)": "a", "single_select_(no_colors)": "a", "url": "www.google.com", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"], "created_(with_time)": "2022-12-01T20:27:46.000Z", "created_(w/o_time)": "2022-12-01", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"}, "emitted_at": 1675276488937} -{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "recyJGdkZikJbLFRi", "_airtable_created_time": "2022-09-30T16:06:49.000Z", "email": "integration-test-user@airbyte.io", "id": 2.0, "date": "2022-10-03", "multiple_select_(no_colors)": ["a", "b", "c"], "percent": 1.0, "rating": 3.0, "multiple_select_(colors)": ["a", "b", "c"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "number": 123123871234.33, "duration": 169409880.0, "name": "Jane", "single_line": "09-30-2022", "phone": "(937) 999-999", "value": 1128312.23, "long_text": "18923671273628376328495623874562981345982 234953249857239045798 342098523495723495732 23489532475\n\n23453245234532453245234523453245\n\n2345234532452345", "single_select_(colors)": "a", "single_select_(no_colors)": "a", "url": "www.google.com", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"], "created_(with_time)": "2022-09-30T16:06:49.000Z", "created_(w/o_time)": "2022-09-30", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"}, "emitted_at": 1675276488938} -{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "reczDi9vTuH3ezfJM", "_airtable_created_time": "2022-12-01T20:27:46.000Z", "email": "integration-test-user@airbyte.io", "id": 20.0, "date": "2022-10-03", "multiple_select_(no_colors)": ["a", "b", "c"], "percent": 1.0, "rating": 3.0, "multiple_select_(colors)": ["a", "b", "c"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "number": 123123871234.33, "duration": 169409880.0, "name": "Jane", "single_line": "09-30-2022", "phone": "(937) 999-999", "value": 1128312.23, "long_text": "18923671273628376328495623874562981345982 234953249857239045798 342098523495723495732 23489532475\n\n23453245234532453245234523453245\n\n2345234532452345", "single_select_(colors)": "a", "single_select_(no_colors)": "a", "url": "www.google.com", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"], "created_(with_time)": "2022-12-01T20:27:46.000Z", "created_(w/o_time)": "2022-12-01", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"}, "emitted_at": 1675276488939} -{"stream": "users/50_columns/tbl01Hi93Tt6XJ0u5", "data": {"_airtable_id": "rec2lCkcy9d0fZi8h", "_airtable_created_time": "2022-12-02T17:29:41.000Z", "notes": "dasdafsdag", "phone_3": "(999) 999-9999", "tags_2": ["alpha", "issue"], "select_2": "top", "date_2": "2023-01-03", "euro": 136.46, "collaborator": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "number": 423.0, "assignee": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "percent_2": 0.45299999999999996, "url": "airbyte.com", "duration": 9900.0, "notes_3": " dfhsh f g dh", "status": "Done", "rating_2": 1.0, "barcode": "{'text': '312515435'}", "number_2": 3453.0, "rating": 4.0, "field_type_test": ["recUzRSGAf5VYtXfZ"], "usd": 143.64, "done": true, "id": 1.0, "notes_2": "1. fsafsf sfkjkl fsafs", "phone_2": "(222) 222-2222", "email": "email@airbyte.io", "percent_3": 0.24300000000000002, "select": "1st", "int": 65.0, "label_2": "Lorem", "date": "2022-12-02", "label_3": "line", "name": "Thing 1", "phone": "(999) 999-9999", "label": "Nulla quis lorem ut libero malesuada feugiat.", "duration_2": 20580.0, "tags": ["tag1"], "decimal": 5.8797, "percent": 0.2, "email_(from_field_type_test)": ["integration-test-user@airbyte.io"], "count_(field_type_test)": 1.0, "created_(w/o_time)_(from_field_type_test)": ["2022-09-30"], "created": "2022-12-02T17:29:41.000Z", "last_modified": "2023-01-24T11:12:27.000Z", "last_modified_2": "2023-01-24T11:12:27.000Z", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"}, "emitted_at": 1675276490320} -{"stream": "users/50_columns/tbl01Hi93Tt6XJ0u5", "data": {"_airtable_id": "recXVzpNmtsBcjrA2", "_airtable_created_time": "2022-12-02T17:29:41.000Z", "notes": "opoiwepoirwe", "phone_3": "(999) 999-9999", "tags_2": ["ga"], "select_2": "bottom", "date_2": "2023-01-31", "euro": 279.62, "collaborator": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "number": 34535.5, "percent_2": 0.624, "duration": 10440.0, "notes_3": "hdfhe e et e true ttue ", "status": "Todo", "rating_2": 4.0, "barcode": "{'text': '351164554'}", "rating": 3.0, "field_type_test": ["recOz5BBo3Ey3ldb8"], "usd": 294.34, "done": true, "url_2": "airbyte.com", "id": 3.0, "notes_2": "3. flsflkj;flkjsf fskjlf lakjf; lskaj;klsjf", "phone_2": "(444) 444-4444", "percent_3": 0.13699999999999998, "select": "3rd", "int": 98.0, "date": "2022-12-14", "label_3": "line", "name": "Thing 3", "phone": "(999) 999-9999", "label": "Curabitur aliquet quam id dui posuere blandit.", "duration_2": 19740.0, "decimal": 6.6, "percent": 0.3, "email_(from_field_type_test)": ["integration-test-user@airbyte.io"], "count_(field_type_test)": 1.0, "created_(w/o_time)_(from_field_type_test)": ["2022-12-01"], "created": "2022-12-02T17:29:41.000Z", "last_modified": "2023-01-24T11:12:12.000Z", "last_modified_2": "2023-01-24T11:12:12.000Z", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"}, "emitted_at": 1675276490322} -{"stream": "users/50_columns/tbl01Hi93Tt6XJ0u5", "data": {"_airtable_id": "reccHYZ004lOuxLFH", "_airtable_created_time": "2022-12-02T17:29:41.000Z", "notes": "hjyyfhgjjfgjr", "phone_3": "(999) 999-9999", "tags_2": ["beta", "no issue"], "select_2": "mid", "date_2": "2023-01-17", "euro": 325.13, "number": 22424.5, "assignee": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "percent_2": 0.562, "duration": 11520.0, "notes_3": "fhdfhdhgf hfh hdfgh", "status": "In progress", "barcode": "{'text': '5531515315'}", "number_2": 3452.0, "rating": 5.0, "field_type_test": ["rec3tSj3Yzi42uuS0"], "usd": 342.24, "url_2": "docs.airbyte.com", "id": 2.0, "notes_2": "2. fskldf f;sfkjk s;lkjfkls", "phone_2": "(333) 333-3333", "email": "what@airbyte.io", "percent_3": 0.532, "select": "2nd", "int": 53.0, "date": "2022-11-10", "label_3": "line", "name": "Thing 2", "phone": "(999) 999-9999", "label": "Quisque velit nisi, pretium ut lacinia in, elementum id enim.", "duration_2": 18180.0, "collaborator_2": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "tags": ["tag2", "tag3"], "done_2": true, "decimal": 4.134, "percent": 0.15, "count_(field_type_test)": 1.0, "created_(w/o_time)_(from_field_type_test)": ["2022-09-30"], "created": "2022-12-02T17:29:41.000Z", "last_modified": "2023-01-24T11:12:11.000Z", "last_modified_2": "2023-01-24T11:12:11.000Z", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"}, "emitted_at": 1675276490323} -{"stream": "users/checkboxes/tbl81WIAUZg5nwGN8", "data": {"_airtable_id": "recLvpJ4k4mRG38My", "_airtable_created_time": "2022-12-02T19:50:00.000Z", "done_18": true, "done_21": true, "done_6": true, "done_11": true, "done_24": true, "done_2": true, "done_12": true, "done_16": true, "done_4": true, "done_10": true, "done_7": true, "done_22": true, "done_23": true, "done_20": true, "name": "Cloud"}, "emitted_at": 1675276491198} -{"stream": "users/checkboxes/tbl81WIAUZg5nwGN8", "data": {"_airtable_id": "reckszXRiFfg11IYD", "_airtable_created_time": "2022-12-02T19:50:00.000Z", "done_21": true, "done_6": true, "done_17": true, "done_5": true, "done_9": true, "done_11": true, "done_16": true, "done_25": true, "done_7": true, "done_22": true, "done_13": true, "done_3": true, "name": "Support"}, "emitted_at": 1675276491199} -{"stream": "users/checkboxes/tbl81WIAUZg5nwGN8", "data": {"_airtable_id": "recmaYwfPMvZtwTSJ", "_airtable_created_time": "2022-12-02T19:50:00.000Z", "done_5": true, "done_9": true, "done_19": true, "done_12": true, "done": true, "done_16": true, "done_14": true, "done_4": true, "done_25": true, "done_7": true, "done_23": true, "done_20": true, "name": "Airbyte"}, "emitted_at": 1675276491200} -{"stream": "untitled_base/table_1/tblT7mnwDS5TVtfOh", "data": {"_airtable_id": "recJ0l923fOFw6qbl", "_airtable_created_time": "2021-12-09T07:54:15.000Z", "name": "test2", "notes": "test2", "status": "In progress"}, "emitted_at": 1675276492018} -{"stream": "untitled_base/table_1/tblT7mnwDS5TVtfOh", "data": {"_airtable_id": "recNbrGzLJfOy6EjC", "_airtable_created_time": "2022-12-28T11:43:37.000Z", "name": "blank"}, "emitted_at": 1675276492018} -{"stream": "untitled_base/table_1/tblT7mnwDS5TVtfOh", "data": {"_airtable_id": "recZX1Je5k4nXhTi0", "_airtable_created_time": "2021-12-09T07:54:15.000Z", "name": "blank"}, "emitted_at": 1675276492019} -{"stream": "untitled_base/table_1/tblT7mnwDS5TVtfOh", "data": {"_airtable_id": "recxXAoQ0cC5yCMZ7", "_airtable_created_time": "2021-12-09T07:54:15.000Z", "name": "test1", "notes": "test", "status": "Todo"}, "emitted_at": 1675276492019} -{"stream": "untitled_base/table_1/tblT7mnwDS5TVtfOh", "data": {"_airtable_id": "reczJvdeo0b8KsM6K", "_airtable_created_time": "2022-12-28T11:43:38.000Z", "name": "test3", "notes": "test3", "status": "Done"}, "emitted_at": 1675276492019} +{"stream": "users/table_1/tblmrNtgqio9IWVGx", "data": {"_airtable_id": "recgRMRMHxgcgJeDe", "_airtable_created_time": "2021-11-16T13:30:17.000Z", "_airtable_table_name": "Table 1", "name": "test2", "status": "test", "notes": "test_note2"}, "emitted_at": 1696938630715} +{"stream": "users/table_1/tblmrNtgqio9IWVGx", "data": {"_airtable_id": "recmJkSF51IKUGmlJ", "_airtable_created_time": "2022-12-22T20:58:05.000Z", "_airtable_table_name": "Table 1", "name": "test4_after_empty", "clo_with_empty_strings": "bla bla bla", "status": "In progress", "notes": "test_note4"}, "emitted_at": 1696938630715} +{"stream": "users/table_1/tblmrNtgqio9IWVGx", "data": {"_airtable_id": "recvp1qYYBlcOrzsc", "_airtable_created_time": "2021-11-16T13:30:17.000Z", "_airtable_table_name": "Table 1", "name": "test3", "clo_with_empty_strings": "test text here", "status": "test", "notes": "test-note3"}, "emitted_at": 1696938630715} +{"stream": "users/table_1/tblmrNtgqio9IWVGx", "data": {"_airtable_id": "reczEeQV9NrzFlVFF", "_airtable_created_time": "2021-11-16T13:30:17.000Z", "_airtable_table_name": "Table 1", "name": "test", "status": "test", "notes": "test_note"}, "emitted_at": 1696938630716} +{"stream": "users/table_2/tblCjIgm5yveWC4X5", "data": {"_airtable_id": "recB3upao4wpmeCEf", "_airtable_created_time": "2021-11-16T13:32:31.000Z", "_airtable_table_name": "Table 2", "status": "In progress", "name": "test2", "notes": "test2"}, "emitted_at": 1696938631703} +{"stream": "users/table_2/tblCjIgm5yveWC4X5", "data": {"_airtable_id": "recWeE6SiYeri4Duq", "_airtable_created_time": "2021-11-16T13:32:31.000Z", "_airtable_table_name": "Table 2", "status": "Todo", "name": "test", "notes": "test"}, "emitted_at": 1696938631704} +{"stream": "users/table_2/tblCjIgm5yveWC4X5", "data": {"_airtable_id": "recXn7kXbeEsJfDJQ", "_airtable_created_time": "2022-12-28T11:41:10.000Z", "_airtable_table_name": "Table 2", "name": " "}, "emitted_at": 1696938631704} +{"stream": "users/table_2/tblCjIgm5yveWC4X5", "data": {"_airtable_id": "recmMfFAec8plcOUY", "_airtable_created_time": "2021-11-16T13:32:31.000Z", "_airtable_table_name": "Table 2", "status": "Done", "name": "test 3", "notes": "test 3"}, "emitted_at": 1696938631704} +{"stream": "users/table_6/tblSXpxKHg0OiLxbI", "data": {"_airtable_id": "recHyy86oge9j5cYP", "_airtable_created_time": "2023-01-25T02:04:26.000Z", "_airtable_table_name": "Table 6", "name": "test_negative", "table_6": ["recHyy86oge9j5cYP", "recoY6ShPkGpav3Se"], "float": 0.3, "status": "In progress", "integer": -1.0, "assignee": 2.0, "assignee_(from_table_6)": [2.0, 2.0]}, "emitted_at": 1696938632677} +{"stream": "users/table_6/tblSXpxKHg0OiLxbI", "data": {"_airtable_id": "recLhKYa9btCCqmxs", "_airtable_created_time": "2023-01-25T02:04:26.000Z", "_airtable_table_name": "Table 6", "name": "test_attachment", "table_6": ["recLhKYa9btCCqmxs", "recoY6ShPkGpav3Se"], "float": 0.3, "status": "Todo", "integer": 1.0, "assignee": 2.0, "assignee_(from_table_6)": [2.0, 2.0]}, "emitted_at": 1696938632677} +{"stream": "users/table_6/tblSXpxKHg0OiLxbI", "data": {"_airtable_id": "recoY6ShPkGpav3Se", "_airtable_created_time": "2023-01-25T02:04:26.000Z", "_airtable_table_name": "Table 6", "name": "test_normal", "table_6": ["recoY6ShPkGpav3Se", "recHyy86oge9j5cYP", "recLhKYa9btCCqmxs"], "float": 0.7, "status": "Done", "integer": 2.0, "assignee": 2.0, "assignee_(from_table_6)": [2.0, 2.0, 2.0]}, "emitted_at": 1696938632677} +{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "rec0UJKftqCPj7zJu", "_airtable_created_time": "2022-12-01T20:27:46.000Z", "_airtable_table_name": "Field Type Test", "email": "integration-test-user@airbyte.io", "id": 17.0, "date": "2022-09-30", "multiple_select_(no_colors)": ["1", "2", "3"], "percent": 0.0, "rating": 5.0, "multiple_select_(colors)": ["1", "2", "3"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "checkbox": true, "number": 1.0, "duration": 0.0, "name": "John", "single_line": "Singe line", "attachment": "[{'id': 'attSgnAhwJ2lZ8Kvp', 'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/Y8itnpzrb7hl71FKTu4YGg/_R8gsIdRqXUwHrJc6z9q6mjZ-Ni73bEHNBzpvUXbST_dpyLyL4Buonbe7eEb1SbcjYOkO1TauNU0YBr1-DKNQ_y7t_DfL6Q8hSp3_p9er7I0YFvx572HHw3C5-qWoMaD/xHCsSiGEA6MkydtHO6CU5uh1oucL4LP-iT5RCJHTerg', 'filename': 'mitre_logs_646490_txt.txt', 'size': 350181, 'type': 'text/plain'}]", "phone": "(937) 999-999", "value": 1.0, "long_text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas vitae nisi nec justo laoreet tincidunt. Vivamus eget porttitor velit. Pellentesque gravida euismod massa, eget egestas sem facilisis gravida. Suspendisse quis mauris eget velit faucibus aliquam. Mauris porttitor urna lorem, eget tincidunt ex faucibus et. Nam viverra nibh quis turpis scelerisque, et condimentum nibh vulputate. Vivamus eu dolor posuere, finibus ligula vel, finibus erat. Sed hendrerit luctus erat, eu finibus ante blandit ut. Sed id mi ullamcorper, cursus urna nec, molestie lorem. In vulputate tempor nulla in laoreet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed a risus risus. Praesent neque lorem, fringilla vitae rhoncus a, semper eu augue.", "single_select_(colors)": "1", "single_select_(no_colors)": "1", "url": "airbyte.io", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"], "created_(with_time)": "2022-12-01T20:27:46.000Z", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "created_(w/o_time)": "2022-12-01"}, "emitted_at": 1696938633884} +{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "rec3tSj3Yzi42uuS0", "_airtable_created_time": "2022-09-30T16:06:49.000Z", "_airtable_table_name": "Field Type Test", "id": 3.0, "100_columns": ["reccHYZ004lOuxLFH"], "name": "Blank", "created_(with_time)": "2022-09-30T16:06:49.000Z", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "created_(w/o_time)": "2022-09-30"}, "emitted_at": 1696938633885} +{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "recAa5DUEhppIeeax", "_airtable_created_time": "2022-12-01T20:27:30.000Z", "_airtable_table_name": "Field Type Test", "email": "integration-test-user@airbyte.io", "id": 9.0, "date": "2022-09-30", "multiple_select_(no_colors)": ["1", "2", "3"], "percent": 0.0, "rating": 5.0, "multiple_select_(colors)": ["1", "2", "3"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "checkbox": true, "number": 1.0, "duration": 0.0, "name": "John", "single_line": "Singe line", "attachment": "[{'id': 'attSgnAhwJ2lZ8Kvp', 'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/Y8itnpzrb7hl71FKTu4YGg/_R8gsIdRqXUwHrJc6z9q6mjZ-Ni73bEHNBzpvUXbST_dpyLyL4Buonbe7eEb1SbcjYOkO1TauNU0YBr1-DKNQ_y7t_DfL6Q8hSp3_p9er7I0YFvx572HHw3C5-qWoMaD/xHCsSiGEA6MkydtHO6CU5uh1oucL4LP-iT5RCJHTerg', 'filename': 'mitre_logs_646490_txt.txt', 'size': 350181, 'type': 'text/plain'}]", "phone": "(937) 999-999", "value": 1.0, "long_text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas vitae nisi nec justo laoreet tincidunt. Vivamus eget porttitor velit. Pellentesque gravida euismod massa, eget egestas sem facilisis gravida. Suspendisse quis mauris eget velit faucibus aliquam. Mauris porttitor urna lorem, eget tincidunt ex faucibus et. Nam viverra nibh quis turpis scelerisque, et condimentum nibh vulputate. Vivamus eu dolor posuere, finibus ligula vel, finibus erat. Sed hendrerit luctus erat, eu finibus ante blandit ut. Sed id mi ullamcorper, cursus urna nec, molestie lorem. In vulputate tempor nulla in laoreet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed a risus risus. Praesent neque lorem, fringilla vitae rhoncus a, semper eu augue.", "single_select_(colors)": "1", "single_select_(no_colors)": "1", "url": "airbyte.io", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"], "created_(with_time)": "2022-12-01T20:27:30.000Z", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "created_(w/o_time)": "2022-12-01"}, "emitted_at": 1696938633885} +{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "recG989xsdfSxookl", "_airtable_created_time": "2022-12-01T20:27:46.000Z", "_airtable_table_name": "Field Type Test", "email": "integration-test-user@airbyte.io", "id": 23.0, "date": "2022-10-03", "multiple_select_(no_colors)": ["a", "b", "c"], "percent": 1.0, "rating": 3.0, "multiple_select_(colors)": ["a", "b", "c"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "number": 123123871234.33, "duration": 169409880.0, "name": "Jane", "single_line": "09-30-2022", "attachment": "[{'id': 'attCx3wJdA0YahG34', 'width': 600, 'height': 201, 'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/GtCXXPc0drVyNXCGrHTKtQ/EpCnckqACDWilBmEQ813iNnUYsAIpFACzmaRyRM6MfIuJSCkSuE52JBoDif3Tv9VAgL5w8_cmUW8YksIridKKDQ5H2k8PF4cLMaPBIC6ETw/_hwChm4Y0VO637E-wzPTTBUbmWdQG7p3eCvtqlz1pxk', 'filename': 'email_signature.png', 'size': 112100, 'type': 'image/png', 'thumbnails': {'small': {'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/A3hZizS1p6ru5dRv94QFVQ/wqvVAY05wslLoJQRWdVKVXFTkK34efRjnVZfWO9ms6oB4DTuNuv9spB3O0tlp1u-tlSpU9pjYG2gw6AMWE9hqw/GglLpzscgR-QmuNgdkyw92fmefw17nYgYJMUIMko9Vg', 'width': 107, 'height': 36}, 'large': {'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/InjgprifvmFI-fSytEZ2Dg/yXLpCoZkT8erobAoDJxfZ18jR7XKEd71g04ZCoSo91WFYeoqAcPJPbGMIWvApVz8LV1zJZH3ED4fGq587Sbz1g/Y7daidsxdknj_ai8qlcb6ANySIFDhBH5k6ZoL7fPlLc', 'width': 600, 'height': 201}, 'full': {'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/ZQGMVCP7kSzt0A3Lw0I2FQ/HwqGkC2DaQ7Crnk7xXDs8h3y-C1H6NjmoqWd_3_xaagH80U1fmW2LA1BarNVFE6VOZWyGQIsm_bAZG6OO3kwWQ/5mIBdFM8bUOUfsEJP1FXf30OzYlGNbVt_59Sfc2NHbs', 'width': 3000, 'height': 3000}}}]", "phone": "(937) 999-999", "value": 1128312.23, "long_text": "18923671273628376328495623874562981345982 234953249857239045798 342098523495723495732 23489532475\n\n23453245234532453245234523453245\n\n2345234532452345", "single_select_(colors)": "a", "single_select_(no_colors)": "a", "url": "www.google.com", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"], "created_(with_time)": "2022-12-01T20:27:46.000Z", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "created_(w/o_time)": "2022-12-01"}, "emitted_at": 1696938633886} +{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "recGVqF9BIpDD7Gj1", "_airtable_created_time": "2022-12-01T20:27:46.000Z", "_airtable_table_name": "Field Type Test", "email": "integration-test-user@airbyte.io", "id": 22.0, "date": "2022-09-30", "multiple_select_(no_colors)": ["1", "2", "3"], "percent": 0.0, "rating": 5.0, "multiple_select_(colors)": ["1", "2", "3"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "checkbox": true, "number": 1.0, "duration": 0.0, "name": "John", "single_line": "Singe line", "attachment": "[{'id': 'attSgnAhwJ2lZ8Kvp', 'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/Y8itnpzrb7hl71FKTu4YGg/_R8gsIdRqXUwHrJc6z9q6mjZ-Ni73bEHNBzpvUXbST_dpyLyL4Buonbe7eEb1SbcjYOkO1TauNU0YBr1-DKNQ_y7t_DfL6Q8hSp3_p9er7I0YFvx572HHw3C5-qWoMaD/xHCsSiGEA6MkydtHO6CU5uh1oucL4LP-iT5RCJHTerg', 'filename': 'mitre_logs_646490_txt.txt', 'size': 350181, 'type': 'text/plain'}]", "phone": "(937) 999-999", "value": 1.0, "long_text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas vitae nisi nec justo laoreet tincidunt. Vivamus eget porttitor velit. Pellentesque gravida euismod massa, eget egestas sem facilisis gravida. Suspendisse quis mauris eget velit faucibus aliquam. Mauris porttitor urna lorem, eget tincidunt ex faucibus et. Nam viverra nibh quis turpis scelerisque, et condimentum nibh vulputate. Vivamus eu dolor posuere, finibus ligula vel, finibus erat. Sed hendrerit luctus erat, eu finibus ante blandit ut. Sed id mi ullamcorper, cursus urna nec, molestie lorem. In vulputate tempor nulla in laoreet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed a risus risus. Praesent neque lorem, fringilla vitae rhoncus a, semper eu augue.", "single_select_(colors)": "1", "single_select_(no_colors)": "1", "url": "airbyte.io", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"], "created_(with_time)": "2022-12-01T20:27:46.000Z", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "created_(w/o_time)": "2022-12-01"}, "emitted_at": 1696938633886} +{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "recHNlOoFvp6KjeZD", "_airtable_created_time": "2022-12-01T20:27:46.000Z", "_airtable_table_name": "Field Type Test", "id": 16.0, "name": "Blank", "created_(with_time)": "2022-12-01T20:27:46.000Z", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "created_(w/o_time)": "2022-12-01"}, "emitted_at": 1696938633887} +{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "recL6sfQP0FyJr3Ua", "_airtable_created_time": "2022-12-01T20:27:46.000Z", "_airtable_table_name": "Field Type Test", "id": 21.0, "name": "Blank", "created_(with_time)": "2022-12-01T20:27:46.000Z", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "created_(w/o_time)": "2022-12-01"}, "emitted_at": 1696938633887} +{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "recMtt4tMmdNbwV5R", "_airtable_created_time": "2022-12-01T20:27:20.000Z", "_airtable_table_name": "Field Type Test", "id": 8.0, "name": "Blank", "created_(with_time)": "2022-12-01T20:27:20.000Z", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "created_(w/o_time)": "2022-12-01"}, "emitted_at": 1696938633887} +{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "recOz5BBo3Ey3ldb8", "_airtable_created_time": "2022-12-01T20:27:11.000Z", "_airtable_table_name": "Field Type Test", "email": "integration-test-user@airbyte.io", "id": 5.0, "date": "2022-10-03", "multiple_select_(no_colors)": ["a", "b", "c"], "percent": 1.0, "rating": 3.0, "multiple_select_(colors)": ["a", "b", "c"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "100_columns": ["recXVzpNmtsBcjrA2"], "number": 123123871234.33, "duration": 169409880.0, "name": "Jane", "single_line": "09-30-2022", "attachment": "[{'id': 'attCx3wJdA0YahG34', 'width': 600, 'height': 201, 'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/GtCXXPc0drVyNXCGrHTKtQ/EpCnckqACDWilBmEQ813iNnUYsAIpFACzmaRyRM6MfIuJSCkSuE52JBoDif3Tv9VAgL5w8_cmUW8YksIridKKDQ5H2k8PF4cLMaPBIC6ETw/_hwChm4Y0VO637E-wzPTTBUbmWdQG7p3eCvtqlz1pxk', 'filename': 'email_signature.png', 'size': 112100, 'type': 'image/png', 'thumbnails': {'small': {'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/A3hZizS1p6ru5dRv94QFVQ/wqvVAY05wslLoJQRWdVKVXFTkK34efRjnVZfWO9ms6oB4DTuNuv9spB3O0tlp1u-tlSpU9pjYG2gw6AMWE9hqw/GglLpzscgR-QmuNgdkyw92fmefw17nYgYJMUIMko9Vg', 'width': 107, 'height': 36}, 'large': {'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/InjgprifvmFI-fSytEZ2Dg/yXLpCoZkT8erobAoDJxfZ18jR7XKEd71g04ZCoSo91WFYeoqAcPJPbGMIWvApVz8LV1zJZH3ED4fGq587Sbz1g/Y7daidsxdknj_ai8qlcb6ANySIFDhBH5k6ZoL7fPlLc', 'width': 600, 'height': 201}, 'full': {'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/ZQGMVCP7kSzt0A3Lw0I2FQ/HwqGkC2DaQ7Crnk7xXDs8h3y-C1H6NjmoqWd_3_xaagH80U1fmW2LA1BarNVFE6VOZWyGQIsm_bAZG6OO3kwWQ/5mIBdFM8bUOUfsEJP1FXf30OzYlGNbVt_59Sfc2NHbs', 'width': 3000, 'height': 3000}}}]", "phone": "(937) 999-999", "value": 1128312.23, "long_text": "18923671273628376328495623874562981345982 234953249857239045798 342098523495723495732 23489532475\n\n23453245234532453245234523453245\n\n2345234532452345", "single_select_(colors)": "a", "single_select_(no_colors)": "a", "url": "www.google.com", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"], "created_(with_time)": "2022-12-01T20:27:11.000Z", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "created_(w/o_time)": "2022-12-01"}, "emitted_at": 1696938633888} +{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "recSbSBPspxs22165", "_airtable_created_time": "2022-12-01T20:27:46.000Z", "_airtable_table_name": "Field Type Test", "email": "integration-test-user@airbyte.io", "id": 15.0, "date": "2022-10-03", "multiple_select_(no_colors)": ["a", "b", "c"], "percent": 1.0, "rating": 3.0, "multiple_select_(colors)": ["a", "b", "c"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "number": 123123871234.33, "duration": 169409880.0, "name": "Jane", "single_line": "09-30-2022", "attachment": "[{'id': 'attCx3wJdA0YahG34', 'width': 600, 'height': 201, 'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/GtCXXPc0drVyNXCGrHTKtQ/EpCnckqACDWilBmEQ813iNnUYsAIpFACzmaRyRM6MfIuJSCkSuE52JBoDif3Tv9VAgL5w8_cmUW8YksIridKKDQ5H2k8PF4cLMaPBIC6ETw/_hwChm4Y0VO637E-wzPTTBUbmWdQG7p3eCvtqlz1pxk', 'filename': 'email_signature.png', 'size': 112100, 'type': 'image/png', 'thumbnails': {'small': {'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/A3hZizS1p6ru5dRv94QFVQ/wqvVAY05wslLoJQRWdVKVXFTkK34efRjnVZfWO9ms6oB4DTuNuv9spB3O0tlp1u-tlSpU9pjYG2gw6AMWE9hqw/GglLpzscgR-QmuNgdkyw92fmefw17nYgYJMUIMko9Vg', 'width': 107, 'height': 36}, 'large': {'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/InjgprifvmFI-fSytEZ2Dg/yXLpCoZkT8erobAoDJxfZ18jR7XKEd71g04ZCoSo91WFYeoqAcPJPbGMIWvApVz8LV1zJZH3ED4fGq587Sbz1g/Y7daidsxdknj_ai8qlcb6ANySIFDhBH5k6ZoL7fPlLc', 'width': 600, 'height': 201}, 'full': {'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/ZQGMVCP7kSzt0A3Lw0I2FQ/HwqGkC2DaQ7Crnk7xXDs8h3y-C1H6NjmoqWd_3_xaagH80U1fmW2LA1BarNVFE6VOZWyGQIsm_bAZG6OO3kwWQ/5mIBdFM8bUOUfsEJP1FXf30OzYlGNbVt_59Sfc2NHbs', 'width': 3000, 'height': 3000}}}]", "phone": "(937) 999-999", "value": 1128312.23, "long_text": "18923671273628376328495623874562981345982 234953249857239045798 342098523495723495732 23489532475\n\n23453245234532453245234523453245\n\n2345234532452345", "single_select_(colors)": "a", "single_select_(no_colors)": "a", "url": "www.google.com", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"], "created_(with_time)": "2022-12-01T20:27:46.000Z", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "created_(w/o_time)": "2022-12-01"}, "emitted_at": 1696938633888} +{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "recUzRSGAf5VYtXfZ", "_airtable_created_time": "2022-09-30T16:06:49.000Z", "_airtable_table_name": "Field Type Test", "email": "integration-test-user@airbyte.io", "id": 1.0, "date": "2022-09-30", "multiple_select_(no_colors)": ["1", "2", "3"], "percent": 0.0, "rating": 5.0, "multiple_select_(colors)": ["1", "2", "3"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "checkbox": true, "100_columns": ["rec2lCkcy9d0fZi8h"], "number": 1.0, "duration": 0.0, "name": "John", "single_line": "Singe line", "attachment": "[{'id': 'attSgnAhwJ2lZ8Kvp', 'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/Y8itnpzrb7hl71FKTu4YGg/_R8gsIdRqXUwHrJc6z9q6mjZ-Ni73bEHNBzpvUXbST_dpyLyL4Buonbe7eEb1SbcjYOkO1TauNU0YBr1-DKNQ_y7t_DfL6Q8hSp3_p9er7I0YFvx572HHw3C5-qWoMaD/xHCsSiGEA6MkydtHO6CU5uh1oucL4LP-iT5RCJHTerg', 'filename': 'mitre_logs_646490_txt.txt', 'size': 350181, 'type': 'text/plain'}]", "phone": "(937) 999-999", "value": 1.0, "long_text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas vitae nisi nec justo laoreet tincidunt. Vivamus eget porttitor velit. Pellentesque gravida euismod massa, eget egestas sem facilisis gravida. Suspendisse quis mauris eget velit faucibus aliquam. Mauris porttitor urna lorem, eget tincidunt ex faucibus et. Nam viverra nibh quis turpis scelerisque, et condimentum nibh vulputate. Vivamus eu dolor posuere, finibus ligula vel, finibus erat. Sed hendrerit luctus erat, eu finibus ante blandit ut. Sed id mi ullamcorper, cursus urna nec, molestie lorem. In vulputate tempor nulla in laoreet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed a risus risus. Praesent neque lorem, fringilla vitae rhoncus a, semper eu augue.", "single_select_(colors)": "1", "single_select_(no_colors)": "1", "url": "airbyte.io", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"], "created_(with_time)": "2022-09-30T16:06:49.000Z", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "created_(w/o_time)": "2022-09-30"}, "emitted_at": 1696938633889} +{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "recbQy9sb5BM1K3Z1", "_airtable_created_time": "2022-12-01T20:27:17.000Z", "_airtable_table_name": "Field Type Test", "email": "integration-test-user@airbyte.io", "id": 6.0, "date": "2022-09-30", "multiple_select_(no_colors)": ["1", "2", "3"], "percent": 0.0, "rating": 5.0, "multiple_select_(colors)": ["1", "2", "3"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "checkbox": true, "number": 1.0, "duration": 0.0, "name": "John", "single_line": "Singe line", "attachment": "[{'id': 'attSgnAhwJ2lZ8Kvp', 'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/Y8itnpzrb7hl71FKTu4YGg/_R8gsIdRqXUwHrJc6z9q6mjZ-Ni73bEHNBzpvUXbST_dpyLyL4Buonbe7eEb1SbcjYOkO1TauNU0YBr1-DKNQ_y7t_DfL6Q8hSp3_p9er7I0YFvx572HHw3C5-qWoMaD/xHCsSiGEA6MkydtHO6CU5uh1oucL4LP-iT5RCJHTerg', 'filename': 'mitre_logs_646490_txt.txt', 'size': 350181, 'type': 'text/plain'}]", "phone": "(937) 999-999", "value": 1.0, "long_text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas vitae nisi nec justo laoreet tincidunt. Vivamus eget porttitor velit. Pellentesque gravida euismod massa, eget egestas sem facilisis gravida. Suspendisse quis mauris eget velit faucibus aliquam. Mauris porttitor urna lorem, eget tincidunt ex faucibus et. Nam viverra nibh quis turpis scelerisque, et condimentum nibh vulputate. Vivamus eu dolor posuere, finibus ligula vel, finibus erat. Sed hendrerit luctus erat, eu finibus ante blandit ut. Sed id mi ullamcorper, cursus urna nec, molestie lorem. In vulputate tempor nulla in laoreet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed a risus risus. Praesent neque lorem, fringilla vitae rhoncus a, semper eu augue.", "single_select_(colors)": "1", "single_select_(no_colors)": "1", "url": "airbyte.io", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"], "created_(with_time)": "2022-12-01T20:27:17.000Z", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "created_(w/o_time)": "2022-12-01"}, "emitted_at": 1696938633889} +{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "recehwpjPyD1PLFkr", "_airtable_created_time": "2022-12-01T20:27:10.000Z", "_airtable_table_name": "Field Type Test", "email": "integration-test-user@airbyte.io", "id": 4.0, "date": "2022-09-30", "multiple_select_(no_colors)": ["1", "2", "3"], "percent": 0.0, "rating": 5.0, "multiple_select_(colors)": ["1", "2", "3"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "checkbox": true, "number": 1.0, "duration": 0.0, "name": "John", "single_line": "Singe line", "attachment": "[{'id': 'attSgnAhwJ2lZ8Kvp', 'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/Y8itnpzrb7hl71FKTu4YGg/_R8gsIdRqXUwHrJc6z9q6mjZ-Ni73bEHNBzpvUXbST_dpyLyL4Buonbe7eEb1SbcjYOkO1TauNU0YBr1-DKNQ_y7t_DfL6Q8hSp3_p9er7I0YFvx572HHw3C5-qWoMaD/xHCsSiGEA6MkydtHO6CU5uh1oucL4LP-iT5RCJHTerg', 'filename': 'mitre_logs_646490_txt.txt', 'size': 350181, 'type': 'text/plain'}]", "phone": "(937) 999-999", "value": 1.0, "long_text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas vitae nisi nec justo laoreet tincidunt. Vivamus eget porttitor velit. Pellentesque gravida euismod massa, eget egestas sem facilisis gravida. Suspendisse quis mauris eget velit faucibus aliquam. Mauris porttitor urna lorem, eget tincidunt ex faucibus et. Nam viverra nibh quis turpis scelerisque, et condimentum nibh vulputate. Vivamus eu dolor posuere, finibus ligula vel, finibus erat. Sed hendrerit luctus erat, eu finibus ante blandit ut. Sed id mi ullamcorper, cursus urna nec, molestie lorem. In vulputate tempor nulla in laoreet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed a risus risus. Praesent neque lorem, fringilla vitae rhoncus a, semper eu augue.", "single_select_(colors)": "1", "single_select_(no_colors)": "1", "url": "airbyte.io", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"], "created_(with_time)": "2022-12-01T20:27:10.000Z", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "created_(w/o_time)": "2022-12-01"}, "emitted_at": 1696938633890} +{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "recfdnbGNkUx1Rs5F", "_airtable_created_time": "2022-12-01T20:27:46.000Z", "_airtable_table_name": "Field Type Test", "email": "integration-test-user@airbyte.io", "id": 19.0, "date": "2022-09-30", "multiple_select_(no_colors)": ["1", "2", "3"], "percent": 0.0, "rating": 5.0, "multiple_select_(colors)": ["1", "2", "3"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "checkbox": true, "number": 1.0, "duration": 0.0, "name": "John", "single_line": "Singe line", "attachment": "[{'id': 'attSgnAhwJ2lZ8Kvp', 'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/Y8itnpzrb7hl71FKTu4YGg/_R8gsIdRqXUwHrJc6z9q6mjZ-Ni73bEHNBzpvUXbST_dpyLyL4Buonbe7eEb1SbcjYOkO1TauNU0YBr1-DKNQ_y7t_DfL6Q8hSp3_p9er7I0YFvx572HHw3C5-qWoMaD/xHCsSiGEA6MkydtHO6CU5uh1oucL4LP-iT5RCJHTerg', 'filename': 'mitre_logs_646490_txt.txt', 'size': 350181, 'type': 'text/plain'}]", "phone": "(937) 999-999", "value": 1.0, "long_text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas vitae nisi nec justo laoreet tincidunt. Vivamus eget porttitor velit. Pellentesque gravida euismod massa, eget egestas sem facilisis gravida. Suspendisse quis mauris eget velit faucibus aliquam. Mauris porttitor urna lorem, eget tincidunt ex faucibus et. Nam viverra nibh quis turpis scelerisque, et condimentum nibh vulputate. Vivamus eu dolor posuere, finibus ligula vel, finibus erat. Sed hendrerit luctus erat, eu finibus ante blandit ut. Sed id mi ullamcorper, cursus urna nec, molestie lorem. In vulputate tempor nulla in laoreet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed a risus risus. Praesent neque lorem, fringilla vitae rhoncus a, semper eu augue.", "single_select_(colors)": "1", "single_select_(no_colors)": "1", "url": "airbyte.io", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"], "created_(with_time)": "2022-12-01T20:27:46.000Z", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "created_(w/o_time)": "2022-12-01"}, "emitted_at": 1696938633890} +{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "recpkKhLwcFYbJLtJ", "_airtable_created_time": "2022-12-01T20:27:43.000Z", "_airtable_table_name": "Field Type Test", "email": "integration-test-user@airbyte.io", "id": 14.0, "date": "2022-09-30", "multiple_select_(no_colors)": ["1", "2", "3"], "percent": 0.0, "rating": 5.0, "multiple_select_(colors)": ["1", "2", "3"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "checkbox": true, "number": 1.0, "duration": 0.0, "name": "John", "single_line": "Singe line", "attachment": "[{'id': 'attSgnAhwJ2lZ8Kvp', 'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/Y8itnpzrb7hl71FKTu4YGg/_R8gsIdRqXUwHrJc6z9q6mjZ-Ni73bEHNBzpvUXbST_dpyLyL4Buonbe7eEb1SbcjYOkO1TauNU0YBr1-DKNQ_y7t_DfL6Q8hSp3_p9er7I0YFvx572HHw3C5-qWoMaD/xHCsSiGEA6MkydtHO6CU5uh1oucL4LP-iT5RCJHTerg', 'filename': 'mitre_logs_646490_txt.txt', 'size': 350181, 'type': 'text/plain'}]", "phone": "(937) 999-999", "value": 1.0, "long_text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas vitae nisi nec justo laoreet tincidunt. Vivamus eget porttitor velit. Pellentesque gravida euismod massa, eget egestas sem facilisis gravida. Suspendisse quis mauris eget velit faucibus aliquam. Mauris porttitor urna lorem, eget tincidunt ex faucibus et. Nam viverra nibh quis turpis scelerisque, et condimentum nibh vulputate. Vivamus eu dolor posuere, finibus ligula vel, finibus erat. Sed hendrerit luctus erat, eu finibus ante blandit ut. Sed id mi ullamcorper, cursus urna nec, molestie lorem. In vulputate tempor nulla in laoreet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed a risus risus. Praesent neque lorem, fringilla vitae rhoncus a, semper eu augue.", "single_select_(colors)": "1", "single_select_(no_colors)": "1", "url": "airbyte.io", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"], "created_(with_time)": "2022-12-01T20:27:43.000Z", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "created_(w/o_time)": "2022-12-01"}, "emitted_at": 1696938633891} +{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "recqurXMR6u1PO5wT", "_airtable_created_time": "2022-12-01T20:27:18.000Z", "_airtable_table_name": "Field Type Test", "email": "integration-test-user@airbyte.io", "id": 7.0, "date": "2022-10-03", "multiple_select_(no_colors)": ["a", "b", "c"], "percent": 1.0, "rating": 3.0, "multiple_select_(colors)": ["a", "b", "c"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "number": 123123871234.33, "duration": 169409880.0, "name": "Jane", "single_line": "09-30-2022", "attachment": "[{'id': 'attCx3wJdA0YahG34', 'width': 600, 'height': 201, 'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/GtCXXPc0drVyNXCGrHTKtQ/EpCnckqACDWilBmEQ813iNnUYsAIpFACzmaRyRM6MfIuJSCkSuE52JBoDif3Tv9VAgL5w8_cmUW8YksIridKKDQ5H2k8PF4cLMaPBIC6ETw/_hwChm4Y0VO637E-wzPTTBUbmWdQG7p3eCvtqlz1pxk', 'filename': 'email_signature.png', 'size': 112100, 'type': 'image/png', 'thumbnails': {'small': {'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/A3hZizS1p6ru5dRv94QFVQ/wqvVAY05wslLoJQRWdVKVXFTkK34efRjnVZfWO9ms6oB4DTuNuv9spB3O0tlp1u-tlSpU9pjYG2gw6AMWE9hqw/GglLpzscgR-QmuNgdkyw92fmefw17nYgYJMUIMko9Vg', 'width': 107, 'height': 36}, 'large': {'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/InjgprifvmFI-fSytEZ2Dg/yXLpCoZkT8erobAoDJxfZ18jR7XKEd71g04ZCoSo91WFYeoqAcPJPbGMIWvApVz8LV1zJZH3ED4fGq587Sbz1g/Y7daidsxdknj_ai8qlcb6ANySIFDhBH5k6ZoL7fPlLc', 'width': 600, 'height': 201}, 'full': {'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/ZQGMVCP7kSzt0A3Lw0I2FQ/HwqGkC2DaQ7Crnk7xXDs8h3y-C1H6NjmoqWd_3_xaagH80U1fmW2LA1BarNVFE6VOZWyGQIsm_bAZG6OO3kwWQ/5mIBdFM8bUOUfsEJP1FXf30OzYlGNbVt_59Sfc2NHbs', 'width': 3000, 'height': 3000}}}]", "phone": "(937) 999-999", "value": 1128312.23, "long_text": "18923671273628376328495623874562981345982 234953249857239045798 342098523495723495732 23489532475\n\n23453245234532453245234523453245\n\n2345234532452345\n\n2345234532452345\n\n2345234532452345\n\n2345234532452345\n\n2345234532452345\n\n2345234532452345\n\n,2345234532452345,2345234532452345,2345234,2345234532452345532452345", "single_select_(colors)": "a", "single_select_(no_colors)": "a", "url": "www.google.com", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"], "created_(with_time)": "2022-12-01T20:27:18.000Z", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "created_(w/o_time)": "2022-12-01"}, "emitted_at": 1696938633891} +{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "recuYRu9z5dlkHxop", "_airtable_created_time": "2022-12-01T20:27:30.000Z", "_airtable_table_name": "Field Type Test", "email": "integration-test-user@airbyte.io", "id": 10.0, "date": "2022-10-03", "multiple_select_(no_colors)": ["a", "b", "c"], "percent": 1.0, "rating": 3.0, "multiple_select_(colors)": ["a", "b", "c"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "number": 123123871234.33, "duration": 169409880.0, "name": "Jane", "single_line": "09-30-2022", "attachment": "[{'id': 'attCx3wJdA0YahG34', 'width': 600, 'height': 201, 'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/GtCXXPc0drVyNXCGrHTKtQ/EpCnckqACDWilBmEQ813iNnUYsAIpFACzmaRyRM6MfIuJSCkSuE52JBoDif3Tv9VAgL5w8_cmUW8YksIridKKDQ5H2k8PF4cLMaPBIC6ETw/_hwChm4Y0VO637E-wzPTTBUbmWdQG7p3eCvtqlz1pxk', 'filename': 'email_signature.png', 'size': 112100, 'type': 'image/png', 'thumbnails': {'small': {'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/A3hZizS1p6ru5dRv94QFVQ/wqvVAY05wslLoJQRWdVKVXFTkK34efRjnVZfWO9ms6oB4DTuNuv9spB3O0tlp1u-tlSpU9pjYG2gw6AMWE9hqw/GglLpzscgR-QmuNgdkyw92fmefw17nYgYJMUIMko9Vg', 'width': 107, 'height': 36}, 'large': {'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/InjgprifvmFI-fSytEZ2Dg/yXLpCoZkT8erobAoDJxfZ18jR7XKEd71g04ZCoSo91WFYeoqAcPJPbGMIWvApVz8LV1zJZH3ED4fGq587Sbz1g/Y7daidsxdknj_ai8qlcb6ANySIFDhBH5k6ZoL7fPlLc', 'width': 600, 'height': 201}, 'full': {'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/ZQGMVCP7kSzt0A3Lw0I2FQ/HwqGkC2DaQ7Crnk7xXDs8h3y-C1H6NjmoqWd_3_xaagH80U1fmW2LA1BarNVFE6VOZWyGQIsm_bAZG6OO3kwWQ/5mIBdFM8bUOUfsEJP1FXf30OzYlGNbVt_59Sfc2NHbs', 'width': 3000, 'height': 3000}}}]", "phone": "(937) 999-999", "value": 1128312.23, "long_text": "18923671273628376328495623874562981345982 234953249857239045798 342098523495723495732 23489532475\n\n23453245234532453245234523453245\n\n2345234532452345", "single_select_(colors)": "a", "single_select_(no_colors)": "a", "url": "www.google.com", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"], "created_(with_time)": "2022-12-01T20:27:30.000Z", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "created_(w/o_time)": "2022-12-01"}, "emitted_at": 1696938633891} +{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "recw3jDJFziB562hu", "_airtable_created_time": "2022-12-01T20:27:46.000Z", "_airtable_table_name": "Field Type Test", "email": "integration-test-user@airbyte.io", "id": 18.0, "date": "2022-10-03", "multiple_select_(no_colors)": ["a", "b", "c"], "percent": 1.0, "rating": 3.0, "multiple_select_(colors)": ["a", "b", "c"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "number": 123123871234.33, "duration": 169409880.0, "name": "Jane", "single_line": "09-30-2022", "attachment": "[{'id': 'attCx3wJdA0YahG34', 'width': 600, 'height': 201, 'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/GtCXXPc0drVyNXCGrHTKtQ/EpCnckqACDWilBmEQ813iNnUYsAIpFACzmaRyRM6MfIuJSCkSuE52JBoDif3Tv9VAgL5w8_cmUW8YksIridKKDQ5H2k8PF4cLMaPBIC6ETw/_hwChm4Y0VO637E-wzPTTBUbmWdQG7p3eCvtqlz1pxk', 'filename': 'email_signature.png', 'size': 112100, 'type': 'image/png', 'thumbnails': {'small': {'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/A3hZizS1p6ru5dRv94QFVQ/wqvVAY05wslLoJQRWdVKVXFTkK34efRjnVZfWO9ms6oB4DTuNuv9spB3O0tlp1u-tlSpU9pjYG2gw6AMWE9hqw/GglLpzscgR-QmuNgdkyw92fmefw17nYgYJMUIMko9Vg', 'width': 107, 'height': 36}, 'large': {'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/InjgprifvmFI-fSytEZ2Dg/yXLpCoZkT8erobAoDJxfZ18jR7XKEd71g04ZCoSo91WFYeoqAcPJPbGMIWvApVz8LV1zJZH3ED4fGq587Sbz1g/Y7daidsxdknj_ai8qlcb6ANySIFDhBH5k6ZoL7fPlLc', 'width': 600, 'height': 201}, 'full': {'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/ZQGMVCP7kSzt0A3Lw0I2FQ/HwqGkC2DaQ7Crnk7xXDs8h3y-C1H6NjmoqWd_3_xaagH80U1fmW2LA1BarNVFE6VOZWyGQIsm_bAZG6OO3kwWQ/5mIBdFM8bUOUfsEJP1FXf30OzYlGNbVt_59Sfc2NHbs', 'width': 3000, 'height': 3000}}}]", "phone": "(937) 999-999", "value": 1128312.23, "long_text": "18923671273628376328495623874562981345982 234953249857239045798 342098523495723495732 23489532475\n\n23453245234532453245234523453245\n\n2345234532452345", "single_select_(colors)": "a", "single_select_(no_colors)": "a", "url": "www.google.com", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"], "created_(with_time)": "2022-12-01T20:27:46.000Z", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "created_(w/o_time)": "2022-12-01"}, "emitted_at": 1696938633892} +{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "recyJGdkZikJbLFRi", "_airtable_created_time": "2022-09-30T16:06:49.000Z", "_airtable_table_name": "Field Type Test", "email": "integration-test-user@airbyte.io", "id": 2.0, "date": "2022-10-03", "multiple_select_(no_colors)": ["a", "b", "c"], "percent": 1.0, "rating": 3.0, "multiple_select_(colors)": ["a", "b", "c"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "number": 123123871234.33, "duration": 169409880.0, "name": "Jane", "single_line": "09-30-2022", "attachment": "[{'id': 'attCx3wJdA0YahG34', 'width': 600, 'height': 201, 'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/GtCXXPc0drVyNXCGrHTKtQ/EpCnckqACDWilBmEQ813iNnUYsAIpFACzmaRyRM6MfIuJSCkSuE52JBoDif3Tv9VAgL5w8_cmUW8YksIridKKDQ5H2k8PF4cLMaPBIC6ETw/_hwChm4Y0VO637E-wzPTTBUbmWdQG7p3eCvtqlz1pxk', 'filename': 'email_signature.png', 'size': 112100, 'type': 'image/png', 'thumbnails': {'small': {'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/A3hZizS1p6ru5dRv94QFVQ/wqvVAY05wslLoJQRWdVKVXFTkK34efRjnVZfWO9ms6oB4DTuNuv9spB3O0tlp1u-tlSpU9pjYG2gw6AMWE9hqw/GglLpzscgR-QmuNgdkyw92fmefw17nYgYJMUIMko9Vg', 'width': 107, 'height': 36}, 'large': {'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/InjgprifvmFI-fSytEZ2Dg/yXLpCoZkT8erobAoDJxfZ18jR7XKEd71g04ZCoSo91WFYeoqAcPJPbGMIWvApVz8LV1zJZH3ED4fGq587Sbz1g/Y7daidsxdknj_ai8qlcb6ANySIFDhBH5k6ZoL7fPlLc', 'width': 600, 'height': 201}, 'full': {'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/ZQGMVCP7kSzt0A3Lw0I2FQ/HwqGkC2DaQ7Crnk7xXDs8h3y-C1H6NjmoqWd_3_xaagH80U1fmW2LA1BarNVFE6VOZWyGQIsm_bAZG6OO3kwWQ/5mIBdFM8bUOUfsEJP1FXf30OzYlGNbVt_59Sfc2NHbs', 'width': 3000, 'height': 3000}}}]", "phone": "(937) 999-999", "value": 1128312.23, "long_text": "18923671273628376328495623874562981345982 234953249857239045798 342098523495723495732 23489532475\n\n23453245234532453245234523453245\n\n2345234532452345", "single_select_(colors)": "a", "single_select_(no_colors)": "a", "url": "www.google.com", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"], "created_(with_time)": "2022-09-30T16:06:49.000Z", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "created_(w/o_time)": "2022-09-30"}, "emitted_at": 1696938633892} +{"stream": "users/field_type_test/tblFcp5mncufoYaR9", "data": {"_airtable_id": "reczDi9vTuH3ezfJM", "_airtable_created_time": "2022-12-01T20:27:46.000Z", "_airtable_table_name": "Field Type Test", "email": "integration-test-user@airbyte.io", "id": 20.0, "date": "2022-10-03", "multiple_select_(no_colors)": ["a", "b", "c"], "percent": 1.0, "rating": 3.0, "multiple_select_(colors)": ["a", "b", "c"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "number": 123123871234.33, "duration": 169409880.0, "name": "Jane", "single_line": "09-30-2022", "attachment": "[{'id': 'attCx3wJdA0YahG34', 'width': 600, 'height': 201, 'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/GtCXXPc0drVyNXCGrHTKtQ/EpCnckqACDWilBmEQ813iNnUYsAIpFACzmaRyRM6MfIuJSCkSuE52JBoDif3Tv9VAgL5w8_cmUW8YksIridKKDQ5H2k8PF4cLMaPBIC6ETw/_hwChm4Y0VO637E-wzPTTBUbmWdQG7p3eCvtqlz1pxk', 'filename': 'email_signature.png', 'size': 112100, 'type': 'image/png', 'thumbnails': {'small': {'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/A3hZizS1p6ru5dRv94QFVQ/wqvVAY05wslLoJQRWdVKVXFTkK34efRjnVZfWO9ms6oB4DTuNuv9spB3O0tlp1u-tlSpU9pjYG2gw6AMWE9hqw/GglLpzscgR-QmuNgdkyw92fmefw17nYgYJMUIMko9Vg', 'width': 107, 'height': 36}, 'large': {'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/InjgprifvmFI-fSytEZ2Dg/yXLpCoZkT8erobAoDJxfZ18jR7XKEd71g04ZCoSo91WFYeoqAcPJPbGMIWvApVz8LV1zJZH3ED4fGq587Sbz1g/Y7daidsxdknj_ai8qlcb6ANySIFDhBH5k6ZoL7fPlLc', 'width': 600, 'height': 201}, 'full': {'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/ZQGMVCP7kSzt0A3Lw0I2FQ/HwqGkC2DaQ7Crnk7xXDs8h3y-C1H6NjmoqWd_3_xaagH80U1fmW2LA1BarNVFE6VOZWyGQIsm_bAZG6OO3kwWQ/5mIBdFM8bUOUfsEJP1FXf30OzYlGNbVt_59Sfc2NHbs', 'width': 3000, 'height': 3000}}}]", "phone": "(937) 999-999", "value": 1128312.23, "long_text": "18923671273628376328495623874562981345982 234953249857239045798 342098523495723495732 23489532475\n\n23453245234532453245234523453245\n\n2345234532452345", "single_select_(colors)": "a", "single_select_(no_colors)": "a", "url": "www.google.com", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"], "created_(with_time)": "2022-12-01T20:27:46.000Z", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "created_(w/o_time)": "2022-12-01"}, "emitted_at": 1696938633893} +{"stream": "users/50_columns/tbl01Hi93Tt6XJ0u5", "data": {"_airtable_id": "rec2lCkcy9d0fZi8h", "_airtable_created_time": "2022-12-02T17:29:41.000Z", "_airtable_table_name": "50 Columns", "notes": "dasdafsdag", "phone_3": "(999) 999-9999", "tags_2": ["alpha", "issue"], "select_2": "top", "date_2": "2023-01-03", "euro": 136.46, "collaborator": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "number": 423.0, "assignee": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "percent_2": 0.45299999999999996, "url": "airbyte.com", "duration": 9900.0, "notes_3": " dfhsh f g dh", "status": "Done", "rating_2": 1.0, "barcode": "{'text': '312515435'}", "number_2": 3453.0, "rating": 4.0, "field_type_test": ["recUzRSGAf5VYtXfZ"], "usd": 143.64, "done": true, "id": 1.0, "notes_2": "1. fsafsf sfkjkl fsafs", "phone_2": "(222) 222-2222", "email": "email@airbyte.io", "percent_3": 0.24300000000000002, "select": "1st", "int": 65.0, "label_2": "Lorem", "date": "2022-12-02", "attachments": "[{'id': 'attX9RxylAGErJfMO', 'width': 973, 'height': 956, 'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/LYbNOJhFCbE3YIt3AC40pQ/8WIoUQBqzhD_iXjNzKzuI2u8UUJfal1bPp2exeEEeHOsMB3qgWk29-hiI7_D-bQ-vmfEfKebz2DVTUQ0kaMb7R2ncA_7HMkADX8FY3YgwZG6kxuipsUo-KZ6_wL6ED5i/2AhZIljLuOrh4RWj_FELvEovXwRB6b9HSW-FtyCZv3A', 'filename': 'octavia-hello-no-text.png', 'size': 248967, 'type': 'image/png', 'thumbnails': {'small': {'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/9YRq4yz0tWG8mc2qvFymWg/PqMhO_hx03gUpay3XPgCv_yU9noBM4PwjDMUmNLdZoFVKihAsvFOXmt_pP0CU_ssAm51K4pDxVovDmUGvNp9OQ/Kbq2ktuWzZ4X6X8oGk1YTkDcxoC9Ms6ohHbwZTFLdRU', 'width': 37, 'height': 36}, 'large': {'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/8SVA5qtF0SLiIOw2jlGZdQ/vcq1wQ-DM8IXYsagKln5wCGSd9uPy1Pc44wzdTnEBn8Xkp1zqEC2Un8Ovhe0m2bfufcPW8xQP8PpCp0W04aZrA/uLrD757BiMCeT-S1Vb2ljtitkUdRtpqMtMknyzXNOxI', 'width': 521, 'height': 512}, 'full': {'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/a_EVexsFKtYSgS20L_lBZA/AXmtleltix2zsVV7eAEEwYG9fVwXI6Kb4RXqqwppML7FwoEa9otYRiYgRVtq6uvAVIYazmUgVBXZm6EwW3VDLw/uUFc4xeoQ35vpPpvMNIvnoArgoaeoMVCXE5ocEMIAI4', 'width': 3000, 'height': 3000}}}]", "label_3": "line", "name": "Thing 1", "phone": "(999) 999-9999", "label": "Nulla quis lorem ut libero malesuada feugiat.", "duration_2": 20580.0, "tags": ["tag1"], "decimal": 5.8797, "percent": 0.2, "email_(from_field_type_test)": ["integration-test-user@airbyte.io"], "count_(field_type_test)": 1.0, "created_(w/o_time)_(from_field_type_test)": ["2022-09-30"], "created": "2022-12-02T17:29:41.000Z", "last_modified": "2023-01-24T11:12:27.000Z", "last_modified_2": "2023-01-24T11:12:27.000Z", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"}, "emitted_at": 1696938634827} +{"stream": "users/50_columns/tbl01Hi93Tt6XJ0u5", "data": {"_airtable_id": "recCn7Z7bgfxWraJu", "_airtable_created_time": "2023-10-05T18:56:16.000Z", "_airtable_table_name": "50 Columns", "id": 4.0, "name": "email@airbyte.io", "count_(field_type_test)": 0.0, "created": "2023-10-05T18:56:16.000Z", "last_modified": "2023-10-05T18:56:16.000Z", "last_modified_2": "2023-10-05T18:56:16.000Z", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"}, "emitted_at": 1696938634828} +{"stream": "users/50_columns/tbl01Hi93Tt6XJ0u5", "data": {"_airtable_id": "recXVzpNmtsBcjrA2", "_airtable_created_time": "2022-12-02T17:29:41.000Z", "_airtable_table_name": "50 Columns", "notes": "opoiwepoirwe", "phone_3": "(999) 999-9999", "tags_2": ["ga"], "select_2": "bottom", "date_2": "2023-01-31", "euro": 279.62, "collaborator": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "number": 34535.5, "percent_2": 0.624, "duration": 10440.0, "notes_3": "hdfhe e et e true ttue ", "status": "Todo", "rating_2": 4.0, "barcode": "{'text': '351164554'}", "rating": 3.0, "field_type_test": ["recOz5BBo3Ey3ldb8"], "usd": 294.34, "done": true, "url_2": "airbyte.com", "id": 3.0, "notes_2": "3. flsflkj;flkjsf fskjlf lakjf; lskaj;klsjf", "phone_2": "(444) 444-4444", "percent_3": 0.13699999999999998, "select": "3rd", "int": 98.0, "date": "2022-12-14", "label_3": "line", "name": "Thing 3", "phone": "(999) 999-9999", "label": "Curabitur aliquet quam id dui posuere blandit.", "duration_2": 19740.0, "decimal": 6.6, "percent": 0.3, "email_(from_field_type_test)": ["integration-test-user@airbyte.io"], "count_(field_type_test)": 1.0, "created_(w/o_time)_(from_field_type_test)": ["2022-12-01"], "created": "2022-12-02T17:29:41.000Z", "last_modified": "2023-01-24T11:12:12.000Z", "last_modified_2": "2023-01-24T11:12:12.000Z", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"}, "emitted_at": 1696938634828} +{"stream": "users/50_columns/tbl01Hi93Tt6XJ0u5", "data": {"_airtable_id": "reccHYZ004lOuxLFH", "_airtable_created_time": "2022-12-02T17:29:41.000Z", "_airtable_table_name": "50 Columns", "notes": "hjyyfhgjjfgjr", "phone_3": "(999) 999-9999", "tags_2": ["beta", "no issue"], "attachments_2": "[{'id': 'att0nyUmkrLpgE1Aq', 'width': 973, 'height': 956, 'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/2x8ET5i91p4Ll2A4zNUWVw/vXrY6PAxyaLxUoJC-Ut5SThEbtjgC1--6WFDZXHG3RUbBZeNy1FAvGYZX5O1PIPqbSJng_PojxxroQb2WoOK3OgzY3nT5BjlW5afleGFjG4APPZ_AqM8P1j2ASNgCCRL/oXD_WPj-y1rsKSbSYRhVm3JyGa71QQZJnkXbqk-jVWA', 'filename': 'octavia-hello-no-text.png', 'size': 248967, 'type': 'image/png', 'thumbnails': {'small': {'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/02eZUnxhE_ebQRulYCqtiQ/xD3sqsLrJCRs-DGS3rmNllekXwyZr86oFrVtv5Ee3sT8MJ0lMBjqhA32tqFhM5jcIe8mSpx5MrAxwWF7BVlJAg/Fc4jrijErYUHv--PNrSDDxZi4wVSf3cRlMp6W9QPyLw', 'width': 37, 'height': 36}, 'large': {'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/AD9KHXD8hoPyUIBHuyLuYg/KP9uCskRiWL1lOuzqB_6Xqk9tcNPKWheE4JtAEBrOrjRhAp0LY4GKcRdQHkf_xD6ffrb34L31prh_4PVfXxdCg/TyE1QunwSfdw2DHF7IbQBmf6hUU0X0yUuUIt6AbOjwc', 'width': 521, 'height': 512}, 'full': {'url': 'https://v5.airtableusercontent.com/v1/21/21/1696946400000/3Qao-gbL6Lu54c9xJ4-2zg/bWGTH-4xKRO4P-9uyuHK5eGnCPQRYsckTdVqEcv6Wg7Z1evaH_uDx_vH8oaMRkPS_LaknGR-LtKyLWHOYlFs7g/IEdgquu8RG_1uuwg1RanLkHVQ-DqF_PiYBpxj0Hef4U', 'width': 3000, 'height': 3000}}}]", "select_2": "mid", "date_2": "2023-01-17", "euro": 325.13, "number": 22424.5, "assignee": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "percent_2": 0.562, "duration": 11520.0, "notes_3": "fhdfhdhgf hfh hdfgh", "status": "In progress", "barcode": "{'text': '5531515315'}", "number_2": 3452.0, "rating": 5.0, "field_type_test": ["rec3tSj3Yzi42uuS0"], "usd": 342.24, "url_2": "docs.airbyte.com", "id": 2.0, "notes_2": "2. fskldf f;sfkjk s;lkjfkls", "phone_2": "(333) 333-3333", "email": "what@airbyte.io", "percent_3": 0.532, "select": "2nd", "int": 53.0, "date": "2022-11-10", "label_3": "line", "name": "Thing 2", "phone": "(999) 999-9999", "label": "Quisque velit nisi, pretium ut lacinia in, elementum id enim.", "duration_2": 18180.0, "collaborator_2": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "tags": ["tag2", "tag3"], "done_2": true, "decimal": 4.134, "percent": 0.15, "count_(field_type_test)": 1.0, "created_(w/o_time)_(from_field_type_test)": ["2022-09-30"], "created": "2022-12-02T17:29:41.000Z", "last_modified": "2023-01-24T11:12:11.000Z", "last_modified_2": "2023-01-24T11:12:11.000Z", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Airbyte Team'}"}, "emitted_at": 1696938634829} +{"stream": "users/checkboxes/tbl81WIAUZg5nwGN8", "data": {"_airtable_id": "recLvpJ4k4mRG38My", "_airtable_created_time": "2022-12-02T19:50:00.000Z", "_airtable_table_name": "Checkboxes", "name": "Cloud", "done_2": true, "done_4": true, "done_6": true, "done_7": true, "done_10": true, "done_11": true, "done_12": true, "done_16": true, "done_18": true, "done_20": true, "done_21": true, "done_22": true, "done_23": true, "done_24": true}, "emitted_at": 1696938635946} +{"stream": "users/checkboxes/tbl81WIAUZg5nwGN8", "data": {"_airtable_id": "reckszXRiFfg11IYD", "_airtable_created_time": "2022-12-02T19:50:00.000Z", "_airtable_table_name": "Checkboxes", "name": "Support", "done_3": true, "done_5": true, "done_6": true, "done_7": true, "done_9": true, "done_11": true, "done_13": true, "done_16": true, "done_17": true, "done_21": true, "done_22": true, "done_25": true}, "emitted_at": 1696938635947} +{"stream": "users/checkboxes/tbl81WIAUZg5nwGN8", "data": {"_airtable_id": "recmaYwfPMvZtwTSJ", "_airtable_created_time": "2022-12-02T19:50:00.000Z", "_airtable_table_name": "Checkboxes", "name": "Airbyte", "done": true, "done_4": true, "done_5": true, "done_7": true, "done_9": true, "done_12": true, "done_14": true, "done_16": true, "done_19": true, "done_20": true, "done_23": true, "done_25": true}, "emitted_at": 1696938635947} +{"stream": "untitled_base/table_1/tblT7mnwDS5TVtfOh", "data": {"_airtable_id": "recJ0l923fOFw6qbl", "_airtable_created_time": "2021-12-09T07:54:15.000Z", "_airtable_table_name": "Table 1", "name": "test2", "notes": "test2", "status": "In progress"}, "emitted_at": 1696938637044} +{"stream": "untitled_base/table_1/tblT7mnwDS5TVtfOh", "data": {"_airtable_id": "recNbrGzLJfOy6EjC", "_airtable_created_time": "2022-12-28T11:43:37.000Z", "_airtable_table_name": "Table 1", "name": "blank"}, "emitted_at": 1696938637044} +{"stream": "untitled_base/table_1/tblT7mnwDS5TVtfOh", "data": {"_airtable_id": "recZX1Je5k4nXhTi0", "_airtable_created_time": "2021-12-09T07:54:15.000Z", "_airtable_table_name": "Table 1", "name": "blank"}, "emitted_at": 1696938637044} +{"stream": "untitled_base/table_1/tblT7mnwDS5TVtfOh", "data": {"_airtable_id": "recxXAoQ0cC5yCMZ7", "_airtable_created_time": "2021-12-09T07:54:15.000Z", "_airtable_table_name": "Table 1", "name": "test1", "notes": "test", "status": "Todo"}, "emitted_at": 1696938637044} +{"stream": "untitled_base/table_1/tblT7mnwDS5TVtfOh", "data": {"_airtable_id": "reczJvdeo0b8KsM6K", "_airtable_created_time": "2022-12-28T11:43:38.000Z", "_airtable_table_name": "Table 1", "name": "test3", "notes": "test3", "status": "Done"}, "emitted_at": 1696938637045} diff --git a/airbyte-integrations/connectors/source-airtable/metadata.yaml b/airbyte-integrations/connectors/source-airtable/metadata.yaml index ea6c51182a8c..9a012cbad623 100644 --- a/airbyte-integrations/connectors/source-airtable/metadata.yaml +++ b/airbyte-integrations/connectors/source-airtable/metadata.yaml @@ -6,7 +6,7 @@ data: connectorSubtype: api connectorType: source definitionId: 14c6e7ea-97ed-4f5e-a7b5-25e9a80b8212 - dockerImageTag: 3.0.1 + dockerImageTag: 4.1.2 dockerRepository: airbyte/source-airtable githubIssueLabel: source-airtable icon: airtable.svg @@ -21,6 +21,11 @@ data: documentationUrl: https://docs.airbyte.com/integrations/sources/airtable tags: - language:python + releases: + breakingChanges: + 4.0.0: + message: This release introduces changes to columns with formula to parse values directly from `array` to `string` or `number` (where it is possible). Users should refresh the source schema and reset affected streams after upgrading to ensure uninterrupted syncs. + upgradeDeadline: "2023-10-23" ab_internal: sl: 200 ql: 400 diff --git a/airbyte-integrations/connectors/source-airtable/source_airtable/auth.py b/airbyte-integrations/connectors/source-airtable/source_airtable/auth.py index 3e49d0855e62..692e09ecae40 100644 --- a/airbyte-integrations/connectors/source-airtable/source_airtable/auth.py +++ b/airbyte-integrations/connectors/source-airtable/source_airtable/auth.py @@ -5,11 +5,13 @@ from typing import Any, Mapping, Union import requests +from airbyte_cdk.models import FailureType from airbyte_cdk.sources.streams.http.requests_native_auth import ( BasicHttpAuthenticator, SingleUseRefreshTokenOauth2Authenticator, TokenAuthenticator, ) +from airbyte_cdk.utils import AirbyteTracedException class AirtableOAuth(SingleUseRefreshTokenOauth2Authenticator): @@ -42,8 +44,15 @@ def _get_refresh_access_token_response(self) -> Mapping[str, Any]: data=self.build_refresh_request_body(), headers=self.build_refresh_request_headers(), ) + content = response.json() + if response.status_code == 400 and content.get("error") == "invalid_grant": + raise AirbyteTracedException( + internal_message=content.get("error_description"), + message="Refresh token is invalid or expired. Please re-authenticate to restore access to Airtable.", + failure_type=FailureType.config_error, + ) response.raise_for_status() - return response.json() + return content class AirtableAuth: diff --git a/airbyte-integrations/connectors/source-airtable/source_airtable/schema_helpers.py b/airbyte-integrations/connectors/source-airtable/source_airtable/schema_helpers.py index a075118b7930..5ec6f022df9f 100644 --- a/airbyte-integrations/connectors/source-airtable/source_airtable/schema_helpers.py +++ b/airbyte-integrations/connectors/source-airtable/source_airtable/schema_helpers.py @@ -63,7 +63,7 @@ class SchemaTypes: "singleSelect": SchemaTypes.string, "externalSyncSource": SchemaTypes.string, "url": SchemaTypes.string, - # referal default type + # referral default type "simpleText": SchemaTypes.string, } @@ -76,6 +76,8 @@ class SchemaTypes: "rollup": SchemaTypes.array_with_any, } +ARRAY_FORMULAS = ("ARRAYCOMPACT", "ARRAYFLATTEN", "ARRAYUNIQUE", "ARRAYSLICE") + class SchemaHelpers: @staticmethod @@ -87,6 +89,7 @@ def get_json_schema(table: Dict[str, Any]) -> Dict[str, str]: properties: Dict = { "_airtable_id": SchemaTypes.string, "_airtable_created_time": SchemaTypes.string, + "_airtable_table_name": SchemaTypes.string, } fields: Dict = table.get("fields", {}) @@ -106,7 +109,11 @@ def get_json_schema(table: Dict[str, Any]) -> Dict[str, str]: # Other edge cases, if `field_type` not in SIMPLE_AIRTABLE_TYPES, fall back to "simpleText" == `string` # reference issue: https://github.com/airbytehq/oncall/issues/1432#issuecomment-1412743120 if complex_type == SchemaTypes.array_with_any: - if field_type in SIMPLE_AIRTABLE_TYPES: + if original_type == "formula" and field_type in ("number", "currency", "percent", "duration"): + complex_type = SchemaTypes.number + elif original_type == "formula" and not any((options.get("formula").startswith(x) for x in ARRAY_FORMULAS)): + complex_type = SchemaTypes.string + elif field_type in SIMPLE_AIRTABLE_TYPES: complex_type["items"] = deepcopy(SIMPLE_AIRTABLE_TYPES.get(field_type)) else: complex_type["items"] = SchemaTypes.string diff --git a/airbyte-integrations/connectors/source-airtable/source_airtable/source.py b/airbyte-integrations/connectors/source-airtable/source_airtable/source.py index 9c249e9d5659..dea6119f0fca 100644 --- a/airbyte-integrations/connectors/source-airtable/source_airtable/source.py +++ b/airbyte-integrations/connectors/source-airtable/source_airtable/source.py @@ -78,7 +78,7 @@ def discover(self, logger: AirbyteLogger, config) -> AirbyteCatalog: base_id = base.get("id") base_name = SchemaHelpers.clean_name(base.get("name")) # list and process each table under each base to generate the JSON Schema - for table in list(AirtableTables(base_id, authenticator=auth).read_records(sync_mode=None)): + for table in AirtableTables(base_id, authenticator=auth).read_records(sync_mode=None): self.streams_catalog.append( { "stream_path": f"{base_id}/{table.get('id')}", @@ -86,6 +86,7 @@ def discover(self, logger: AirbyteLogger, config) -> AirbyteCatalog: f"{base_name}/{SchemaHelpers.clean_name(table.get('name'))}/{table.get('id')}", SchemaHelpers.get_json_schema(table), ), + "table_name": table.get("name"), } ) return AirbyteCatalog(streams=[stream["stream"] for stream in self.streams_catalog]) @@ -101,5 +102,6 @@ def streams(self, config: Mapping[str, Any]) -> List[Stream]: stream_path=stream["stream_path"], stream_name=stream["stream"].name, stream_schema=stream["stream"].json_schema, + table_name=stream["table_name"], authenticator=self._auth, ) diff --git a/airbyte-integrations/connectors/source-airtable/source_airtable/streams.py b/airbyte-integrations/connectors/source-airtable/source_airtable/streams.py index 94c99c59edd8..65fda78ca0aa 100644 --- a/airbyte-integrations/connectors/source-airtable/source_airtable/streams.py +++ b/airbyte-integrations/connectors/source-airtable/source_airtable/streams.py @@ -8,6 +8,7 @@ import requests from airbyte_cdk.sources.streams.http import HttpStream +from airbyte_cdk.sources.streams.http.requests_native_auth import TokenAuthenticator from airbyte_cdk.sources.utils.transform import TransformConfig, TypeTransformer from source_airtable.schema_helpers import SchemaHelpers @@ -71,7 +72,17 @@ def parse_response(self, response: requests.Response, **kwargs) -> Mapping[str, } """ records = response.json().get(self.name) - yield from records + for base in records: + if base.get("permissionLevel") == "none": + if isinstance(self._session.auth, TokenAuthenticator): + additional_message = "if you'd like to see tables from this base, add base to the Access list for Personal Access Token, see Airtable docs for more info: https://support.airtable.com/docs/creating-and-using-api-keys-and-access-tokens#understanding-personal-access-token-basic-actions" + else: + additional_message = "reauthenticate and add this base to the Access list, see Airtable docs for more info: https://support.airtable.com/docs/third-party-integrations-via-oauth-overview#granting-access-to-airtable-workspaces-bases" + self.logger.warning( + f"Skipping base `{base.get('name')}` with id `{base.get('id')}`: Not enough permissions, {additional_message}" + ) + else: + yield base class AirtableTables(AirtableBases): @@ -89,11 +100,12 @@ def path(self, **kwargs) -> str: class AirtableStream(HttpStream, ABC): - def __init__(self, stream_path: str, stream_name: str, stream_schema, **kwargs): + def __init__(self, stream_path: str, stream_name: str, stream_schema, table_name: str, **kwargs): super().__init__(**kwargs) self.stream_path = stream_path self.stream_name = stream_name self.stream_schema = stream_schema + self.table_name = table_name url_base = URL_BASE primary_key = "id" @@ -146,6 +158,7 @@ def process_records(self, records) -> Iterable[Mapping[str, Any]]: yield { "_airtable_id": record.get("id"), "_airtable_created_time": record.get("createdTime"), + "_airtable_table_name": self.table_name, **{SchemaHelpers.clean_name(k): v for k, v in data.items()}, } diff --git a/airbyte-integrations/connectors/source-airtable/unit_tests/conftest.py b/airbyte-integrations/connectors/source-airtable/unit_tests/conftest.py index 96d31e5bebc0..f2a42ae96efb 100644 --- a/airbyte-integrations/connectors/source-airtable/unit_tests/conftest.py +++ b/airbyte-integrations/connectors/source-airtable/unit_tests/conftest.py @@ -89,11 +89,12 @@ def streams_json_response(): @pytest.fixture -def streams_processed_response(): +def streams_processed_response(table): return [ { "_airtable_id": "some_id", "_airtable_created_time": "2022-12-02T19:50:00.000Z", + "_airtable_table_name": table, "field1": True, "field2": "test", "field3": 123, @@ -109,6 +110,7 @@ def expected_json_schema(): "properties": { "_airtable_created_time": {"type": ["null", "string"]}, "_airtable_id": {"type": ["null", "string"]}, + "_airtable_table_name": {"type": ["null", "string"]}, "test": {"type": ["null", "string"]}, }, "type": "object", @@ -116,7 +118,7 @@ def expected_json_schema(): @pytest.fixture(scope="function", autouse=True) -def prepared_stream(): +def prepared_stream(table): return { "stream_path": "some_base_id/some_table_id", "stream": AirbyteStream( @@ -128,12 +130,14 @@ def prepared_stream(): "properties": { "_airtable_id": {"type": ["null", "string"]}, "_airtable_created_time": {"type": ["null", "string"]}, + "_airtable_table_name": {"type": ["null", "string"]}, "name": {"type": ["null", "string"]}, }, }, supported_sync_modes=[SyncMode.full_refresh], supported_destination_sync_modes=[DestinationSyncMode.overwrite, DestinationSyncMode.append_dedup], ), + "table_name": table, } @@ -144,6 +148,7 @@ def make(name): stream_path=prepared_stream["stream_path"], stream_name=name, stream_schema=prepared_stream["stream"].json_schema, + table_name=prepared_stream["table_name"], authenticator=fake_auth, ) diff --git a/airbyte-integrations/connectors/source-airtable/unit_tests/expected_schema_for_sample_table.json b/airbyte-integrations/connectors/source-airtable/unit_tests/expected_schema_for_sample_table.json new file mode 100644 index 000000000000..209748dda06a --- /dev/null +++ b/airbyte-integrations/connectors/source-airtable/unit_tests/expected_schema_for_sample_table.json @@ -0,0 +1,55 @@ +{ + "$schema": "https://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "_airtable_created_time": { + "type": ["null", "string"] + }, + "_airtable_id": { + "type": ["null", "string"] + }, + "_airtable_table_name": { + "type": ["null", "string"] + }, + "assignee_(from_table_6)": { + "items": { + "type": ["null", "number"] + }, + "type": ["null", "array"] + }, + "barcode": { + "type": ["null", "string"] + }, + "float": { + "type": ["null", "number"] + }, + "formula_1": { + "type": ["null", "number"] + }, + "formula_2_(array)": { + "items": { + "type": ["null", "string"] + }, + "type": ["null", "array"] + }, + "formula_3_simple_text": { + "type": ["null", "string"] + }, + "integer": { + "type": ["null", "number"] + }, + "name": { + "type": ["null", "string"] + }, + "status": { + "type": ["null", "string"] + }, + "table_6": { + "items": { + "type": ["null", "string"] + }, + "type": ["null", "array"] + } + }, + "type": "object" +} diff --git a/airbyte-integrations/connectors/source-airtable/unit_tests/sample_table_with_formulas.json b/airbyte-integrations/connectors/source-airtable/unit_tests/sample_table_with_formulas.json new file mode 100644 index 000000000000..541684ae6911 --- /dev/null +++ b/airbyte-integrations/connectors/source-airtable/unit_tests/sample_table_with_formulas.json @@ -0,0 +1,139 @@ +{ + "id": "tblSXpxKHg0OiLxbI", + "name": "Table 1", + "primaryFieldId": "some_id", + "fields": [ + { + "type": "singleLineText", + "id": "some_id", + "name": "Name" + }, + { + "type": "formula", + "options": { + "isValid": true, + "formula": "1+1", + "referencedFieldIds": [], + "result": { + "type": "number", + "options": { + "precision": 0 + } + } + }, + "id": "fldG2UVGl3hEglGJq", + "name": "Formula 1" + }, + { + "type": "formula", + "options": { + "isValid": true, + "formula": "ARRAYFLATTEN(1,2,3)", + "referencedFieldIds": [], + "result": { + "type": "string", + "options": { + "precision": 0 + } + } + }, + "id": "fldG2UVGl3hEg123Jq", + "name": "Formula 2 (array)" + }, + + { + "type": "formula", + "options": { + "isValid": true, + "formula": "CONCAT(1,2,3)", + "referencedFieldIds": [], + "result": { + "type": "string", + "options": { + "precision": 0 + } + } + }, + "id": "fldG2UVGl3hEg123Jq", + "name": "Formula 3 simple text" + }, + { + "type": "singleSelect", + "options": { + "choices": [ + { + "id": "seleFjJiXuyLDHNUM", + "name": "Todo", + "color": "redLight2" + }, + { + "id": "selskIXEljPBrKHLz", + "name": "In progress", + "color": "yellowLight2" + }, + { + "id": "selg4w4LeypED2gpW", + "name": "Done", + "color": "greenLight2" + } + ] + }, + "id": "fldpwaVKzdfcHe2YV", + "name": "Status" + }, + { + "type": "number", + "options": { + "precision": 1 + }, + "id": "fldZNvmdvMZymPxUc", + "name": "Float" + }, + { + "type": "number", + "options": { + "precision": 0 + }, + "id": "fldsjTjrIkKTv6KjG", + "name": "Integer" + }, + { + "type": "barcode", + "id": "fld899obV6ycadgWS", + "name": "Barcode" + }, + { + "type": "multipleRecordLinks", + "options": { + "linkedTableId": "tblSXpxKHg0OiLxbI", + "isReversed": false, + "prefersSingleRecordLink": false + }, + "id": "fldMkP8CfDgqc5r3j", + "name": "Table 6" + }, + { + "type": "multipleLookupValues", + "options": { + "isValid": true, + "recordLinkFieldId": "fldMkP8CfDgqc5r3j", + "fieldIdInLinkedTable": "fldG2UVGl3hEglGJq", + "result": { + "type": "number", + "options": { + "precision": 0 + } + } + }, + "id": "fldLQOO0P7mB4lm7x", + "name": "Assignee (from Table 6)" + } + ], + "views": [ + { + "id": "viwadxF7ds4lOBf3R", + "name": "Grid view", + "type": "grid" + } + ] +} diff --git a/airbyte-integrations/connectors/source-airtable/unit_tests/test_helpers.py b/airbyte-integrations/connectors/source-airtable/unit_tests/test_helpers.py index 4cc7097e691d..5942592cffdb 100644 --- a/airbyte-integrations/connectors/source-airtable/unit_tests/test_helpers.py +++ b/airbyte-integrations/connectors/source-airtable/unit_tests/test_helpers.py @@ -2,10 +2,19 @@ # Copyright (c) 2023 Airbyte, Inc., all rights reserved. # +import json +import os +from typing import Any, Mapping from source_airtable.schema_helpers import SchemaHelpers +# HELPERS +def load_file(file_name: str) -> Mapping[str, Any]: + with open(f"{os.path.dirname(__file__)}/{file_name}", "r") as data: + return json.load(data) + + def test_clean_name(field_name_to_cleaned, expected_clean_name): assert expected_clean_name == SchemaHelpers.clean_name(field_name_to_cleaned) @@ -20,3 +29,12 @@ def test_get_airbyte_stream(table, expected_json_schema): assert stream assert stream.name == table assert stream.json_schema == expected_json_schema + + +def test_table_with_formulas(): + table = load_file("sample_table_with_formulas.json") + + stream_schema = SchemaHelpers.get_json_schema(table) + + expected_schema = load_file("expected_schema_for_sample_table.json") + assert stream_schema == expected_schema diff --git a/airbyte-integrations/connectors/source-airtable/unit_tests/test_streams.py b/airbyte-integrations/connectors/source-airtable/unit_tests/test_streams.py index cb849179b139..d43e470935a2 100644 --- a/airbyte-integrations/connectors/source-airtable/unit_tests/test_streams.py +++ b/airbyte-integrations/connectors/source-airtable/unit_tests/test_streams.py @@ -93,6 +93,7 @@ def stream_instance(self, prepared_stream): stream_path=prepared_stream["stream_path"], stream_name=prepared_stream["stream"].name, stream_schema=prepared_stream["stream"].json_schema, + table_name=prepared_stream["table_name"], authenticator=MagicMock(), ) diff --git a/airbyte-integrations/connectors/source-alloydb-strict-encrypt/.dockerignore b/airbyte-integrations/connectors/source-alloydb-strict-encrypt/.dockerignore deleted file mode 100644 index e4fbece78752..000000000000 --- a/airbyte-integrations/connectors/source-alloydb-strict-encrypt/.dockerignore +++ /dev/null @@ -1,3 +0,0 @@ -* -!Dockerfile -!build/distributions diff --git a/airbyte-integrations/connectors/source-alloydb-strict-encrypt/acceptance-test-config.yml b/airbyte-integrations/connectors/source-alloydb-strict-encrypt/acceptance-test-config.yml deleted file mode 100644 index f497d002a406..000000000000 --- a/airbyte-integrations/connectors/source-alloydb-strict-encrypt/acceptance-test-config.yml +++ /dev/null @@ -1,6 +0,0 @@ -# See [Connector Acceptance Tests](https://docs.airbyte.com/connector-development/testing-connectors/connector-acceptance-tests-reference) -# for more information about how to configure these tests -connector_image: airbyte/source-postgres-strict-encrypt:dev -tests: - spec: - - spec_path: "src/test/resources/expected_spec.json" diff --git a/airbyte-integrations/connectors/source-alloydb-strict-encrypt/build.gradle b/airbyte-integrations/connectors/source-alloydb-strict-encrypt/build.gradle deleted file mode 100644 index a37b7a8821a6..000000000000 --- a/airbyte-integrations/connectors/source-alloydb-strict-encrypt/build.gradle +++ /dev/null @@ -1,25 +0,0 @@ -plugins { - id 'application' - id 'airbyte-java-connector' -} - -airbyteJavaConnector { - cdkVersionRequired = '0.1.0' - features = ['db-sources'] - useLocalCdk = false -} - -airbyteJavaConnector.addCdkDependencies() - -application { - mainClass = 'io.airbyte.integrations.source.alloydb.AlloyDbStrictEncryptSource' - applicationDefaultJvmArgs = ['-XX:+ExitOnOutOfMemoryError', '-XX:MaxRAMPercentage=75.0'] -} - -dependencies { - implementation project(':airbyte-integrations:connectors:source-postgres') - implementation project(':airbyte-integrations:connectors:source-postgres-strict-encrypt') - implementation libs.airbyte.protocol - - testImplementation libs.testcontainers.postgresql -} diff --git a/airbyte-integrations/connectors/source-alloydb-strict-encrypt/icon.svg b/airbyte-integrations/connectors/source-alloydb-strict-encrypt/icon.svg deleted file mode 100644 index 03c290b6d3b6..000000000000 --- a/airbyte-integrations/connectors/source-alloydb-strict-encrypt/icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-alloydb-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/source-alloydb-strict-encrypt/metadata.yaml deleted file mode 100644 index d3898532abe2..000000000000 --- a/airbyte-integrations/connectors/source-alloydb-strict-encrypt/metadata.yaml +++ /dev/null @@ -1,24 +0,0 @@ -data: - allowedHosts: - hosts: - - ${host} - - ${tunnel_method.tunnel_host} - registries: - cloud: - enabled: false # strict encrypt connectors are deployed to Cloud by their non strict encrypt sibling. - oss: - enabled: false # strict encrypt connectors are not used on OSS. - connectorSubtype: database - connectorType: source - definitionId: 1fa90628-2b9e-11ed-a261-0242ac120002 - dockerImageTag: 3.1.5 - dockerRepository: airbyte/source-alloydb-strict-encrypt - githubIssueLabel: source-alloydb - icon: alloydb.svg - license: MIT - name: AlloyDB for PostgreSQL - releaseStage: generally_available - documentationUrl: https://docs.airbyte.com/integrations/sources/alloydb - tags: - - language:java -metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-alloydb-strict-encrypt/src/main/java/io/airbyte/integrations/source/alloydb/AlloyDbStrictEncryptSource.java b/airbyte-integrations/connectors/source-alloydb-strict-encrypt/src/main/java/io/airbyte/integrations/source/alloydb/AlloyDbStrictEncryptSource.java deleted file mode 100644 index faefbdfc56c7..000000000000 --- a/airbyte-integrations/connectors/source-alloydb-strict-encrypt/src/main/java/io/airbyte/integrations/source/alloydb/AlloyDbStrictEncryptSource.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright (c) 2023 Airbyte, Inc., all rights reserved. - */ - -package io.airbyte.integrations.source.alloydb; - -import static io.airbyte.cdk.integrations.source.relationaldb.state.StateManager.LOGGER; - -import io.airbyte.cdk.integrations.base.IntegrationRunner; -import io.airbyte.cdk.integrations.base.Source; -import io.airbyte.integrations.source.postgres_strict_encrypt.PostgresSourceStrictEncrypt; - -public class AlloyDbStrictEncryptSource { - - public static void main(String[] args) throws Exception { - final Source source = new PostgresSourceStrictEncrypt(); - LOGGER.info("starting source: {}", PostgresSourceStrictEncrypt.class); - new IntegrationRunner(source).run(args); - LOGGER.info("completed source: {}", PostgresSourceStrictEncrypt.class); - } - -} diff --git a/airbyte-integrations/connectors/source-alloydb/.dockerignore b/airbyte-integrations/connectors/source-alloydb/.dockerignore deleted file mode 100644 index e4fbece78752..000000000000 --- a/airbyte-integrations/connectors/source-alloydb/.dockerignore +++ /dev/null @@ -1,3 +0,0 @@ -* -!Dockerfile -!build/distributions diff --git a/airbyte-integrations/connectors/source-alloydb/acceptance-test-config.yml b/airbyte-integrations/connectors/source-alloydb/acceptance-test-config.yml deleted file mode 100644 index 2838a5ca4273..000000000000 --- a/airbyte-integrations/connectors/source-alloydb/acceptance-test-config.yml +++ /dev/null @@ -1,6 +0,0 @@ -# See [Connector Acceptance Tests](https://docs.airbyte.com/connector-development/testing-connectors/connector-acceptance-tests-reference) -# for more information about how to configure these tests -connector_image: airbyte/source-alloydb:dev -tests: - spec: - - spec_path: "src/test/resources/expected_spec.json" diff --git a/airbyte-integrations/connectors/source-alloydb/build.gradle b/airbyte-integrations/connectors/source-alloydb/build.gradle deleted file mode 100644 index aed9cbfaadef..000000000000 --- a/airbyte-integrations/connectors/source-alloydb/build.gradle +++ /dev/null @@ -1,24 +0,0 @@ -plugins { - id 'application' - id 'airbyte-java-connector' -} - -airbyteJavaConnector { - cdkVersionRequired = '0.1.0' - features = ['db-sources'] - useLocalCdk = false -} - -airbyteJavaConnector.addCdkDependencies() - -application { - mainClass = 'io.airbyte.integrations.source.alloydb.AlloyDbSource' - applicationDefaultJvmArgs = ['-XX:+ExitOnOutOfMemoryError', '-XX:MaxRAMPercentage=75.0'] -} - -dependencies { - implementation project(':airbyte-integrations:connectors:source-postgres') - implementation libs.airbyte.protocol - - testImplementation libs.testcontainers.postgresql -} diff --git a/airbyte-integrations/connectors/source-alloydb/icon.svg b/airbyte-integrations/connectors/source-alloydb/icon.svg deleted file mode 100644 index 03c290b6d3b6..000000000000 --- a/airbyte-integrations/connectors/source-alloydb/icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-alloydb/metadata.yaml b/airbyte-integrations/connectors/source-alloydb/metadata.yaml deleted file mode 100644 index de164d7209d3..000000000000 --- a/airbyte-integrations/connectors/source-alloydb/metadata.yaml +++ /dev/null @@ -1,29 +0,0 @@ -data: - allowedHosts: - hosts: - - ${host} - - ${tunnel_method.tunnel_host} - connectorSubtype: database - connectorType: source - definitionId: 1fa90628-2b9e-11ed-a261-0242ac120002 - dockerImageTag: 3.1.8 - dockerRepository: airbyte/source-alloydb - githubIssueLabel: source-alloydb - icon: alloydb.svg - license: MIT - name: AlloyDB for PostgreSQL - registries: - cloud: - dockerRepository: airbyte/source-alloydb-strict-encrypt - enabled: true - oss: - enabled: true - releaseStage: generally_available - documentationUrl: https://docs.airbyte.com/integrations/sources/alloydb - tags: - - language:java - ab_internal: - sl: 200 - ql: 400 - supportLevel: certified -metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-alloydb/src/main/java/io/airbyte/integrations/source/alloydb/AlloyDbSource.java b/airbyte-integrations/connectors/source-alloydb/src/main/java/io/airbyte/integrations/source/alloydb/AlloyDbSource.java deleted file mode 100644 index 65c4d92fc1dc..000000000000 --- a/airbyte-integrations/connectors/source-alloydb/src/main/java/io/airbyte/integrations/source/alloydb/AlloyDbSource.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (c) 2023 Airbyte, Inc., all rights reserved. - */ - -package io.airbyte.integrations.source.alloydb; - -import io.airbyte.cdk.integrations.base.IntegrationRunner; -import io.airbyte.cdk.integrations.base.Source; -import io.airbyte.integrations.source.postgres.PostgresSource; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class AlloyDbSource { - - private static final Logger LOGGER = LoggerFactory.getLogger(AlloyDbSource.class); - - /** - * AlloyDB for PostgreSQL is a fully managed PostgreSQL-compatible database service. So the - * source-postgres connector is used under the hood. For more details please check the - * https://cloud.google.com/alloydb - */ - public static void main(final String[] args) throws Exception { - final Source source = PostgresSource.sshWrappedSource(); - LOGGER.info("starting source: AlloyDB for {}", PostgresSource.class); - new IntegrationRunner(source).run(args); - LOGGER.info("completed source: AlloyDB for {}", PostgresSource.class); - } - -} diff --git a/airbyte-integrations/connectors/source-amazon-ads/Dockerfile b/airbyte-integrations/connectors/source-amazon-ads/Dockerfile index 7dc8eb565236..8768ca9df837 100644 --- a/airbyte-integrations/connectors/source-amazon-ads/Dockerfile +++ b/airbyte-integrations/connectors/source-amazon-ads/Dockerfile @@ -13,5 +13,5 @@ ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=3.3.0 +LABEL io.airbyte.version=3.4.0 LABEL io.airbyte.name=airbyte/source-amazon-ads diff --git a/airbyte-integrations/connectors/source-amazon-ads/acceptance-test-config.yml b/airbyte-integrations/connectors/source-amazon-ads/acceptance-test-config.yml index 5f27efd45933..6c89363b6ee0 100644 --- a/airbyte-integrations/connectors/source-amazon-ads/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-amazon-ads/acceptance-test-config.yml @@ -27,6 +27,8 @@ acceptance_tests: bypass_reason: "can't populate stream because it requires real ad campaign" - name: sponsored_products_report_stream bypass_reason: "can't populate stream because it requires real ad campaign" + - name: sponsored_display_creatives + bypass_reason: "can't populate stream because it requires real ad campaign" ignored_fields: sponsored_product_campaigns: - name: dailyBudget diff --git a/airbyte-integrations/connectors/source-amazon-ads/metadata.yaml b/airbyte-integrations/connectors/source-amazon-ads/metadata.yaml index 458d14f52f01..e583bbb24f55 100644 --- a/airbyte-integrations/connectors/source-amazon-ads/metadata.yaml +++ b/airbyte-integrations/connectors/source-amazon-ads/metadata.yaml @@ -8,7 +8,7 @@ data: connectorSubtype: api connectorType: source definitionId: c6b0a29e-1da9-4512-9002-7bfd0cba2246 - dockerImageTag: 3.3.0 + dockerImageTag: 3.4.0 dockerRepository: airbyte/source-amazon-ads githubIssueLabel: source-amazon-ads icon: amazonads.svg diff --git a/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/schemas/__init__.py b/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/schemas/__init__.py index 8c3f0963a5ae..e9c8aae725fc 100644 --- a/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/schemas/__init__.py +++ b/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/schemas/__init__.py @@ -5,7 +5,7 @@ from .common import CatalogModel, Keywords, MetricsReport, NegativeKeywords, Portfolio from .profile import Profile from .sponsored_brands import BrandsAdGroup, BrandsCampaign -from .sponsored_display import DisplayAdGroup, DisplayBudgetRules, DisplayCampaign, DisplayProductAds, DisplayTargeting +from .sponsored_display import DisplayAdGroup, DisplayBudgetRules, DisplayCampaign, DisplayCreatives, DisplayProductAds, DisplayTargeting from .sponsored_products import ( ProductAd, ProductAdGroupBidRecommendations, @@ -25,6 +25,7 @@ "DisplayTargeting", "DisplayBudgetRules", "Keywords", + "DisplayCreatives", "MetricsReport", "NegativeKeywords", "Portfolio", diff --git a/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/schemas/sponsored_display.py b/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/schemas/sponsored_display.py index 51caba0c11c1..92f2c0ea4892 100644 --- a/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/schemas/sponsored_display.py +++ b/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/schemas/sponsored_display.py @@ -3,7 +3,7 @@ # from decimal import Decimal -from typing import Dict, List, Optional +from typing import Any, Dict, List, Optional from .common import CatalogModel, Targeting @@ -48,6 +48,14 @@ class DisplayTargeting(Targeting): resolvedExpression: List[Dict[str, str]] +class DisplayCreatives(CatalogModel): + adGroupId: Decimal + creativeId: Decimal + creativeType: str + properties: Dict[str, Any] + moderationStatus: str + + class DisplayBudgetRuleDetailsPerformanceMeasureCondition(CatalogModel): metricName: str comparisonOperator: str diff --git a/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/source.py b/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/source.py index c8e2ff8a1647..9d1852c33330 100644 --- a/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/source.py +++ b/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/source.py @@ -28,6 +28,7 @@ SponsoredDisplayAdGroups, SponsoredDisplayBudgetRules, SponsoredDisplayCampaigns, + SponsoredDisplayCreatives, SponsoredDisplayProductAds, SponsoredDisplayReportStream, SponsoredDisplayTargetings, @@ -104,6 +105,7 @@ def streams(self, config: Mapping[str, Any]) -> List[Stream]: non_profile_stream_classes = [ SponsoredDisplayCampaigns, SponsoredDisplayAdGroups, + SponsoredDisplayCreatives, SponsoredDisplayProductAds, SponsoredDisplayTargetings, SponsoredDisplayReportStream, diff --git a/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/streams/__init__.py b/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/streams/__init__.py index fb27c5d5c792..a449faafedb6 100644 --- a/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/streams/__init__.py +++ b/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/streams/__init__.py @@ -21,6 +21,7 @@ SponsoredDisplayAdGroups, SponsoredDisplayBudgetRules, SponsoredDisplayCampaigns, + SponsoredDisplayCreatives, SponsoredDisplayProductAds, SponsoredDisplayTargetings, ) @@ -45,6 +46,7 @@ "SponsoredDisplayTargetings", "SponsoredDisplayBudgetRules", "SponsoredProductAdGroups", + "SponsoredDisplayCreatives", "SponsoredProductAdGroupBidRecommendations", "SponsoredProductAdGroupSuggestedKeywords", "SponsoredProductAds", diff --git a/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/streams/sponsored_display.py b/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/streams/sponsored_display.py index 35520f22f1c2..9c2b0f24fb85 100644 --- a/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/streams/sponsored_display.py +++ b/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/streams/sponsored_display.py @@ -4,7 +4,14 @@ from typing import Any, Mapping -from source_amazon_ads.schemas import DisplayAdGroup, DisplayBudgetRules, DisplayCampaign, DisplayProductAds, DisplayTargeting +from source_amazon_ads.schemas import ( + DisplayAdGroup, + DisplayBudgetRules, + DisplayCampaign, + DisplayCreatives, + DisplayProductAds, + DisplayTargeting, +) from source_amazon_ads.streams.common import SubProfilesStream @@ -71,6 +78,19 @@ def path(self, **kwargs) -> str: return "sd/targets" +class SponsoredDisplayCreatives(SubProfilesStream): + """ + This stream corresponds to Amazon Advertising API - Sponsored Displays Creatives + https://advertising.amazon.com/API/docs/en-us/sponsored-display/3-0/openapi#/Creatives/listCreatives + """ + + primary_key = "creativeId" + model = DisplayCreatives + + def path(self, **kwargs) -> str: + return "/sd/creatives" + + class SponsoredDisplayBudgetRules(SubProfilesStream): """ This stream corresponds to Amazon Advertising API - Sponsored Displays BudgetRules diff --git a/airbyte-integrations/connectors/source-amazon-ads/unit_tests/conftest.py b/airbyte-integrations/connectors/source-amazon-ads/unit_tests/conftest.py index e15a62df598f..8ee9193d81a1 100644 --- a/airbyte-integrations/connectors/source-amazon-ads/unit_tests/conftest.py +++ b/airbyte-integrations/connectors/source-amazon-ads/unit_tests/conftest.py @@ -73,6 +73,13 @@ def targeting_response(): """ +@fixture +def creatives_response(): + return """ +[{"creativeId":0,"adGroupId":0,"creativeType":"IMAGE","properties":{"headline":"string"},"moderationStatus":"APPROVED"}] +""" + + @fixture def attribution_report_response(): def _internal(report_type: str): diff --git a/airbyte-integrations/connectors/source-amazon-ads/unit_tests/test_source.py b/airbyte-integrations/connectors/source-amazon-ads/unit_tests/test_source.py index 01f59efa65d0..f3e8e9d93954 100644 --- a/airbyte-integrations/connectors/source-amazon-ads/unit_tests/test_source.py +++ b/airbyte-integrations/connectors/source-amazon-ads/unit_tests/test_source.py @@ -91,7 +91,7 @@ def test_source_streams(config): setup_responses() source = SourceAmazonAds() streams = source.streams(config) - assert len(streams) == 28 + assert len(streams) == 29 actual_stream_names = {stream.name for stream in streams} expected_stream_names = set( [ diff --git a/airbyte-integrations/connectors/source-amazon-ads/unit_tests/test_streams.py b/airbyte-integrations/connectors/source-amazon-ads/unit_tests/test_streams.py index 537b9a803047..1eb1a45d3ac1 100644 --- a/airbyte-integrations/connectors/source-amazon-ads/unit_tests/test_streams.py +++ b/airbyte-integrations/connectors/source-amazon-ads/unit_tests/test_streams.py @@ -22,6 +22,7 @@ def setup_responses( targeting_response=None, product_ads_response=None, generic_response=None, + creatives_response=None, ): responses.add( responses.POST, @@ -64,6 +65,12 @@ def setup_responses( "https://advertising-api.amazon.com/sd/productAds", body=product_ads_response, ) + if creatives_response: + responses.add( + responses.GET, + "https://advertising-api.amazon.com/sd/creatives", + body=creatives_response, + ) if generic_response: responses.add( responses.GET, @@ -217,23 +224,19 @@ def test_streams_campaigns_pagination_403_error_expected(mocker, config, profile ("sponsored_display_ad_groups", "sd/adGroups"), ("sponsored_display_product_ads", "sd/productAds"), ("sponsored_display_targetings", "sd/targets"), + ("sponsored_display_creatives", "sd/creatives"), ], ) @responses.activate def test_streams_displays( - config, - stream_name, - endpoint, - profiles_response, - adgroups_response, - targeting_response, - product_ads_response, + config, stream_name, endpoint, profiles_response, adgroups_response, targeting_response, product_ads_response, creatives_response ): setup_responses( profiles_response=profiles_response, adgroups_response=adgroups_response, targeting_response=targeting_response, product_ads_response=product_ads_response, + creatives_response=creatives_response, ) source = SourceAmazonAds() diff --git a/airbyte-integrations/connectors/source-apify-dataset/Dockerfile b/airbyte-integrations/connectors/source-apify-dataset/Dockerfile index 0e4fe3cd8143..e83b72f6ecf0 100644 --- a/airbyte-integrations/connectors/source-apify-dataset/Dockerfile +++ b/airbyte-integrations/connectors/source-apify-dataset/Dockerfile @@ -34,5 +34,5 @@ COPY source_apify_dataset ./source_apify_dataset ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=1.0.0 +LABEL io.airbyte.version=2.0.0 LABEL io.airbyte.name=airbyte/source-apify-dataset diff --git a/airbyte-integrations/connectors/source-apify-dataset/README.md b/airbyte-integrations/connectors/source-apify-dataset/README.md index 6d679120e45c..2a3da072031c 100644 --- a/airbyte-integrations/connectors/source-apify-dataset/README.md +++ b/airbyte-integrations/connectors/source-apify-dataset/README.md @@ -5,15 +5,50 @@ For information about how to use this connector within Airbyte, see [the documen ## Local development +#### Building via Python + +Create a Python virtual environment + +``` +virtualenv --python $(which python3.10) .venv +``` + +Source it + +``` +source .venv/bin/activate +``` + +Check connector specifications/definition + +``` +python main.py spec +``` + +Basic check - check connection to the API + +``` +python main.py check --config secrets/config.json +``` + +Integration tests - read operation from the API + +``` +python main.py read --config secrets/config.json --catalog integration_tests/configured_catalog.json +``` + #### Building via Gradle + You can also build the connector in Gradle. This is typically used in CI and not needed for your development workflow. To build using Gradle, from the Airbyte repository root, run: + ``` ./gradlew :airbyte-integrations:connectors:source-apify-dataset:build ``` #### Create credentials + **If you are a community contributor**, follow the instructions in the [documentation](https://docs.airbyte.com/integrations/sources/apify-dataset) to generate the necessary credentials. Then create a file `secrets/config.json` conforming to the `source_apify_dataset/spec.yaml` file. Note that any directory named `secrets` is gitignored across the entire Airbyte repo, so there is no danger of accidentally checking in sensitive information. @@ -25,56 +60,73 @@ and place them into `secrets/config.json`. ### Locally running the connector docker image #### Build + First, make sure you build the latest Docker image: + ``` docker build . -t airbyte/source-apify-dataset:dev ``` You can also build the connector image via Gradle: + ``` ./gradlew :airbyte-integrations:connectors:source-apify-dataset:airbyteDocker ``` + When building via Gradle, the docker image name and tag, respectively, are the values of the `io.airbyte.name` and `io.airbyte.version` `LABEL`s in the Dockerfile. #### Run + Then run any of the connector commands as follows: + ``` docker run --rm airbyte/source-apify-dataset:dev spec docker run --rm -v $(pwd)/secrets:/secrets airbyte/source-apify-dataset:dev check --config /secrets/config.json docker run --rm -v $(pwd)/secrets:/secrets airbyte/source-apify-dataset:dev discover --config /secrets/config.json docker run --rm -v $(pwd)/secrets:/secrets -v $(pwd)/integration_tests:/integration_tests airbyte/source-apify-dataset:dev read --config /secrets/config.json --catalog /integration_tests/configured_catalog.json ``` + ## Testing #### Acceptance Tests + Customize `acceptance-test-config.yml` file to configure tests. See [Connector Acceptance Tests](https://docs.airbyte.com/connector-development/testing-connectors/connector-acceptance-tests-reference) for more information. If your connector requires to create or destroy resources for use during acceptance tests create fixtures for it and place them inside integration_tests/acceptance.py. To run your integration tests with Docker, run: + ``` ./acceptance-test-docker.sh ``` ### Using gradle to run tests + All commands should be run from airbyte project root. To run unit tests: + ``` ./gradlew :airbyte-integrations:connectors:source-apify-dataset:unitTest ``` + To run acceptance and custom integration tests: + ``` ./gradlew :airbyte-integrations:connectors:source-apify-dataset:integrationTest ``` ## Dependency Management + All of your dependencies should go in `setup.py`, NOT `requirements.txt`. The requirements file is only used to connect internal Airbyte dependencies in the monorepo for local development. We split dependencies between two groups, dependencies that are: -* required for your connector to work need to go to `MAIN_REQUIREMENTS` list. -* required for the testing need to go to `TEST_REQUIREMENTS` list + +- required for your connector to work need to go to `MAIN_REQUIREMENTS` list. +- required for the testing need to go to `TEST_REQUIREMENTS` list ### Publishing a new version of the connector + You've checked out the repo, implemented a million dollar feature, and you're ready to share your changes with the world. Now what? + 1. Make sure your changes are passing unit and integration tests. 1. Bump the connector version in `Dockerfile` -- just increment the value of the `LABEL io.airbyte.version` appropriately (we use [SemVer](https://semver.org/)). 1. Create a Pull Request. diff --git a/airbyte-integrations/connectors/source-apify-dataset/acceptance-test-config.yml b/airbyte-integrations/connectors/source-apify-dataset/acceptance-test-config.yml index 3d4eb90bf608..71a772f72426 100644 --- a/airbyte-integrations/connectors/source-apify-dataset/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-apify-dataset/acceptance-test-config.yml @@ -4,7 +4,7 @@ acceptance_tests: tests: - spec_path: "source_apify_dataset/spec.yaml" backward_compatibility_tests_config: - disable_for_version: 0.2.0 + disable_for_version: 2.0.0 connection: tests: - config_path: "secrets/config.json" @@ -15,7 +15,7 @@ acceptance_tests: tests: - config_path: "secrets/config.json" backward_compatibility_tests_config: - disable_for_version: 0.2.0 + disable_for_version: 2.0.0 basic_read: tests: - config_path: "secrets/config.json" @@ -32,7 +32,7 @@ acceptance_tests: - config_path: "secrets/config.json" configured_catalog_path: "integration_tests/configured_catalog.json" ignored_fields: - datasets: + dataset_collection: - name: "accessedAt" bypass_reason: "Change everytime" - name: "stats/readCount" diff --git a/airbyte-integrations/connectors/source-apify-dataset/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-apify-dataset/integration_tests/configured_catalog.json index a7db5266dd74..6a76c95e966e 100644 --- a/airbyte-integrations/connectors/source-apify-dataset/integration_tests/configured_catalog.json +++ b/airbyte-integrations/connectors/source-apify-dataset/integration_tests/configured_catalog.json @@ -2,7 +2,7 @@ "streams": [ { "stream": { - "name": "datasets", + "name": "dataset_collection", "json_schema": {}, "supported_sync_modes": ["full_refresh"] }, @@ -20,7 +20,7 @@ }, { "stream": { - "name": "item_collection", + "name": "item_collection_website_content_crawler", "json_schema": {}, "supported_sync_modes": ["full_refresh"] }, diff --git a/airbyte-integrations/connectors/source-apify-dataset/metadata.yaml b/airbyte-integrations/connectors/source-apify-dataset/metadata.yaml index 4b3349457147..3c165d9154d0 100644 --- a/airbyte-integrations/connectors/source-apify-dataset/metadata.yaml +++ b/airbyte-integrations/connectors/source-apify-dataset/metadata.yaml @@ -11,7 +11,7 @@ data: connectorSubtype: api connectorType: source definitionId: 47f17145-fe20-4ef5-a548-e29b048adf84 - dockerImageTag: 1.0.0 + dockerImageTag: 2.0.0 dockerRepository: airbyte/source-apify-dataset githubIssueLabel: source-apify-dataset icon: apify-dataset.svg @@ -24,6 +24,9 @@ data: 1.0.0: upgradeDeadline: 2023-08-30 message: "Update spec to use token and ingest all 3 streams correctly" + 2.0.0: + upgradeDeadline: 2023-09-18 + message: "Fix broken stream, manifest refactor" supportLevel: community documentationUrl: https://docs.airbyte.com/integrations/sources/apify-dataset tags: diff --git a/airbyte-integrations/connectors/source-apify-dataset/source_apify_dataset/manifest.yaml b/airbyte-integrations/connectors/source-apify-dataset/source_apify_dataset/manifest.yaml index 314758404801..600dfa99356a 100644 --- a/airbyte-integrations/connectors/source-apify-dataset/source_apify_dataset/manifest.yaml +++ b/airbyte-integrations/connectors/source-apify-dataset/source_apify_dataset/manifest.yaml @@ -1,109 +1,115 @@ -version: "0.29.0" +version: "0.51.11" +type: DeclarativeSource -definitions: - selector: - type: RecordSelector - extractor: - type: DpathExtractor - field_path: ["data"] - requester: - type: HttpRequester - url_base: "https://api.apify.com/v2/" - http_method: "GET" - authenticator: - type: NoAuth - request_parameters: - token: "{{ config['token'] }}" +spec: + type: Spec + documentation_url: https://docs.airbyte.com/integrations/sources/apify-dataset + connection_specification: + $schema: http://json-schema.org/draft-07/schema# + title: Apify Dataset Spec + type: object + required: + - token + - dataset_id + properties: + token: + type: string + title: API token + description: >- + Personal API token of your Apify account. In Apify Console, you can find your API token in the + Settings section under the Integrations tab + after you login. See the Apify Docs + for more information. + examples: + - apify_api_PbVwb1cBbuvbfg2jRmAIHZKgx3NQyfEMG7uk + airbyte_secret: true + dataset_id: + type: string + title: Dataset ID + description: >- + ID of the dataset you would like to load to Airbyte. In Apify Console, you can view your datasets in the + Storage section under the Datasets tab + after you login. See the Apify Docs + for more information. + examples: + - rHuMdwm6xCFt6WiGU + additionalProperties: true +definitions: retriever: type: SimpleRetriever - record_selector: - $ref: "#/definitions/selector" - paginator: - type: "NoPagination" requester: - $ref: "#/definitions/requester" - - base_paginator: - type: "DefaultPaginator" - page_size_option: - type: "RequestOption" - inject_into: "request_parameter" - field_name: "limit" - pagination_strategy: - type: "OffsetIncrement" - page_size: 50 - page_token_option: - type: "RequestOption" - field_name: "offset" - inject_into: "request_parameter" - - base_stream: - type: DeclarativeStream - retriever: - $ref: "#/definitions/retriever" + type: HttpRequester + url_base: "https://api.apify.com/v2/" + http_method: "GET" + authenticator: + type: BearerAuthenticator + api_token: "{{ config['token'] }}" + paginator: + type: "DefaultPaginator" + page_size_option: + type: "RequestOption" + inject_into: "request_parameter" + field_name: "limit" + pagination_strategy: + type: "OffsetIncrement" + page_size: 50 + page_token_option: + type: "RequestOption" + field_name: "offset" + inject_into: "request_parameter" - datasets_stream: - $ref: "#/definitions/base_stream" +streams: + - type: DeclarativeStream + name: dataset_collection + primary_key: "id" $parameters: - name: "datasets" - primary_key: "id" path: "datasets" + schema_loader: + type: JsonFileSchemaLoader + file_path: "./source_apify_dataset/schemas/dataset_collection.json" retriever: $ref: "#/definitions/retriever" - paginator: - $ref: "#/definitions/base_paginator" record_selector: - $ref: "#/definitions/selector" + type: RecordSelector extractor: type: DpathExtractor field_path: ["data", "items"] - datasets_partition_router: - type: SubstreamPartitionRouter - parent_stream_configs: - - stream: "#/definitions/datasets_stream" - parent_key: "id" - partition_field: "parent_id" - - dataset_stream: - $ref: "#/definitions/base_stream" + - type: DeclarativeStream + name: dataset + primary_key: "id" $parameters: - name: "dataset" - primary_key: "id" - path: "datasets/{{ stream_partition.parent_id }}" + path: "datasets/{{ config['dataset_id'] }}" + schema_loader: + type: JsonFileSchemaLoader + file_path: "./source_apify_dataset/schemas/dataset.json" retriever: $ref: "#/definitions/retriever" - paginator: - $ref: "#/definitions/base_paginator" - partition_router: - $ref: "#/definitions/datasets_partition_router" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: ["data"] - item_collection_stream: - $ref: "#/definitions/base_stream" + - type: DeclarativeStream + name: item_collection_website_content_crawler $parameters: - name: "item_collection" - path: "datasets/{{ stream_partition.parent_id }}/items" + path: "datasets/{{ config['dataset_id'] }}/items" + schema_loader: + type: JsonFileSchemaLoader + file_path: "./source_apify_dataset/schemas/item_collection_wcc.json" retriever: $ref: "#/definitions/retriever" - paginator: - $ref: "#/definitions/base_paginator" record_selector: - $ref: "#/definitions/selector" + type: RecordSelector extractor: type: DpathExtractor field_path: [] - partition_router: - $ref: "#/definitions/datasets_partition_router" - -streams: - - "#/definitions/datasets_stream" - - "#/definitions/dataset_stream" - - "#/definitions/item_collection_stream" check: type: CheckStream stream_names: - - "datasets" - - "dataset" - - "item_collection" + - dataset_collection + - dataset + - item_collection_website_content_crawler diff --git a/airbyte-integrations/connectors/source-apify-dataset/source_apify_dataset/schemas/dataset.json b/airbyte-integrations/connectors/source-apify-dataset/source_apify_dataset/schemas/dataset.json index b9a6b4240908..c98d9e2d81e4 100644 --- a/airbyte-integrations/connectors/source-apify-dataset/source_apify_dataset/schemas/dataset.json +++ b/airbyte-integrations/connectors/source-apify-dataset/source_apify_dataset/schemas/dataset.json @@ -18,6 +18,7 @@ }, "stats": { "type": ["null", "object"], + "additionalProperties": true, "properties": { "readCount": { "type": ["null", "number"] @@ -31,7 +32,7 @@ } }, "schema": { - "type": ["null", "string"] + "type": ["null", "string", "object"] }, "modifiedAt": { "type": ["null", "string"] @@ -51,6 +52,9 @@ "actRunId": { "type": ["null", "string"] }, + "title": { + "type": ["null", "string"] + }, "fields": { "anyOf": [ { diff --git a/airbyte-integrations/connectors/source-apify-dataset/source_apify_dataset/schemas/datasets.json b/airbyte-integrations/connectors/source-apify-dataset/source_apify_dataset/schemas/dataset_collection.json similarity index 93% rename from airbyte-integrations/connectors/source-apify-dataset/source_apify_dataset/schemas/datasets.json rename to airbyte-integrations/connectors/source-apify-dataset/source_apify_dataset/schemas/dataset_collection.json index 4a98370556a6..ed494c694ff2 100644 --- a/airbyte-integrations/connectors/source-apify-dataset/source_apify_dataset/schemas/datasets.json +++ b/airbyte-integrations/connectors/source-apify-dataset/source_apify_dataset/schemas/dataset_collection.json @@ -30,6 +30,7 @@ }, "stats": { "type": ["null", "object"], + "additionalProperties": true, "properties": { "readCount": { "type": ["null", "number"] @@ -54,6 +55,9 @@ "actRunId": { "type": ["null", "string"] }, + "title": { + "type": ["null", "string"] + }, "fields": { "anyOf": [ { diff --git a/airbyte-integrations/connectors/source-apify-dataset/source_apify_dataset/schemas/item_collection.json b/airbyte-integrations/connectors/source-apify-dataset/source_apify_dataset/schemas/item_collection.json deleted file mode 100644 index edb421509303..000000000000 --- a/airbyte-integrations/connectors/source-apify-dataset/source_apify_dataset/schemas/item_collection.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "type": ["null", "object"], - "title": "Item collection schema", - "additionalProperties": true, - "properties": { - "url": { - "type": ["null", "string"] - }, - "#debug": { - "type": ["null", "object"], - "additionalProperties": true - }, - "pageTitle": { - "type": ["null", "string"] - }, - "#error": { - "type": ["null", "boolean"] - } - } -} diff --git a/airbyte-integrations/connectors/source-apify-dataset/source_apify_dataset/schemas/item_collection_wcc.json b/airbyte-integrations/connectors/source-apify-dataset/source_apify_dataset/schemas/item_collection_wcc.json new file mode 100644 index 000000000000..dc7c8a68ab47 --- /dev/null +++ b/airbyte-integrations/connectors/source-apify-dataset/source_apify_dataset/schemas/item_collection_wcc.json @@ -0,0 +1,59 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Item collection - Website Content Crawler (WCC)", + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "crawl": { + "additionalProperties": true, + "properties": { + "depth": { + "type": ["null", "number"] + }, + "httpStatusCode": { + "type": ["null", "number"] + }, + "loadedTime": { + "type": ["null", "string"] + }, + "loadedUrl": { + "type": ["null", "string"] + }, + "referrerUrl": { + "type": ["null", "string"] + } + }, + "type": ["null", "object"] + }, + "markdown": { + "type": ["null", "string"] + }, + "metadata": { + "additionalProperties": true, + "properties": { + "canonicalUrl": { + "type": ["null", "string"] + }, + "description": { + "type": ["null", "string"] + }, + "languageCode": { + "type": ["null", "string"] + }, + "title": { + "type": ["null", "string"] + } + }, + "type": ["null", "object"] + }, + "text": { + "type": ["null", "string"] + }, + "url": { + "type": ["null", "string"] + }, + "screenshotUrl": { + "type": ["null", "string"] + } + } +} diff --git a/airbyte-integrations/connectors/source-apify-dataset/source_apify_dataset/source.py b/airbyte-integrations/connectors/source-apify-dataset/source_apify_dataset/source.py index a65846dcdc8b..5b99be176ad1 100644 --- a/airbyte-integrations/connectors/source-apify-dataset/source_apify_dataset/source.py +++ b/airbyte-integrations/connectors/source-apify-dataset/source_apify_dataset/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceApifyDataset(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "manifest.yaml"}) + super().__init__(path_to_yaml="manifest.yaml") diff --git a/airbyte-integrations/connectors/source-apify-dataset/source_apify_dataset/spec.yaml b/airbyte-integrations/connectors/source-apify-dataset/source_apify_dataset/spec.yaml deleted file mode 100644 index a5d0acadad36..000000000000 --- a/airbyte-integrations/connectors/source-apify-dataset/source_apify_dataset/spec.yaml +++ /dev/null @@ -1,30 +0,0 @@ -documentationUrl: https://docs.airbyte.com/integrations/sources/apify-dataset -connectionSpecification: - $schema: http://json-schema.org/draft-07/schema# - title: Apify Dataset Spec - type: object - required: - - token - additionalProperties: true - properties: - token: - title: Personal API tokens - description: >- - Your application's Client Secret. You can find this value on the console integrations tab - after you login. - type: string - examples: - - "Personal API tokens" - airbyte_secret: true - datasetId: - type: string - title: Dataset ID - description: ID of the dataset you would like to load to Airbyte. - clean: - type: boolean - title: Clean - description: - If set to true, only clean items will be downloaded from the dataset. - See description of what clean means in Apify - API docs. If not sure, set clean to false. diff --git a/airbyte-integrations/connectors/source-auth0/Dockerfile b/airbyte-integrations/connectors/source-auth0/Dockerfile deleted file mode 100644 index 288be74357d7..000000000000 --- a/airbyte-integrations/connectors/source-auth0/Dockerfile +++ /dev/null @@ -1,38 +0,0 @@ -FROM python:3.9.11-alpine3.15 as base - -# build and load all requirements -FROM base as builder -WORKDIR /airbyte/integration_code - -# upgrade pip to the latest version -RUN apk --no-cache upgrade \ - && pip install --upgrade pip \ - && apk --no-cache add tzdata build-base - - -COPY setup.py ./ -# install necessary packages to a temporary folder -RUN pip install --prefix=/install . - -# build a clean environment -FROM base -WORKDIR /airbyte/integration_code - -# copy all loaded and built libraries to a pure basic image -COPY --from=builder /install /usr/local -# add default timezone settings -COPY --from=builder /usr/share/zoneinfo/Etc/UTC /etc/localtime -RUN echo "Etc/UTC" > /etc/timezone - -# bash is installed for more convenient debugging. -RUN apk --no-cache add bash - -# copy payload code only -COPY main.py ./ -COPY source_auth0 ./source_auth0 - -ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" -ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] - -LABEL io.airbyte.version=0.4.1 -LABEL io.airbyte.name=airbyte/source-auth0 diff --git a/airbyte-integrations/connectors/source-auth0/metadata.yaml b/airbyte-integrations/connectors/source-auth0/metadata.yaml index 0418556bae3c..38bc9fbf74d3 100644 --- a/airbyte-integrations/connectors/source-auth0/metadata.yaml +++ b/airbyte-integrations/connectors/source-auth0/metadata.yaml @@ -8,11 +8,11 @@ data: cloud: enabled: true connectorBuildOptions: - baseImage: airbyte/airbyte-python-connectors-base:0.1.0 + baseImage: airbyte/python-connector-base:1.0.0 connectorSubtype: api connectorType: source definitionId: 6c504e48-14aa-4221-9a72-19cf5ff1ae78 - dockerImageTag: 0.4.1 + dockerImageTag: 0.5.0 dockerRepository: airbyte/source-auth0 githubIssueLabel: source-auth0 icon: auth0.svg diff --git a/airbyte-integrations/connectors/source-bing-ads/Dockerfile b/airbyte-integrations/connectors/source-bing-ads/Dockerfile index 9e35163c3563..079d1b57db78 100644 --- a/airbyte-integrations/connectors/source-bing-ads/Dockerfile +++ b/airbyte-integrations/connectors/source-bing-ads/Dockerfile @@ -12,5 +12,5 @@ RUN pip install . ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=0.2.3 +LABEL io.airbyte.version=1.0.0 LABEL io.airbyte.name=airbyte/source-bing-ads diff --git a/airbyte-integrations/connectors/source-bing-ads/metadata.yaml b/airbyte-integrations/connectors/source-bing-ads/metadata.yaml index 8ff4120d8626..d8fc3ee4c87c 100644 --- a/airbyte-integrations/connectors/source-bing-ads/metadata.yaml +++ b/airbyte-integrations/connectors/source-bing-ads/metadata.yaml @@ -11,7 +11,7 @@ data: connectorSubtype: api connectorType: source definitionId: 47f25999-dd5e-4636-8c39-e7cea2453331 - dockerImageTag: 0.2.3 + dockerImageTag: 1.0.0 dockerRepository: airbyte/source-bing-ads githubIssueLabel: source-bing-ads icon: bingads.svg @@ -29,5 +29,10 @@ data: ab_internal: sl: 200 ql: 400 + releases: + breakingChanges: + 1.0.0: + message: "Version 1.0.0 removes the primary keys from the geographic performance report streams. This will prevent the connector from loosing data in the incremental append+dedup sync mode because of deduplication and incorrect primary keys. A data reset and schema refresh of all the effected streams is required for the changes to take effect." + upgradeDeadline: "2023-10-25" supportLevel: certified metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-bing-ads/source_bing_ads/source.py b/airbyte-integrations/connectors/source-bing-ads/source_bing_ads/source.py index b2587970c7b1..da126a55b1b5 100644 --- a/airbyte-integrations/connectors/source-bing-ads/source_bing_ads/source.py +++ b/airbyte-integrations/connectors/source-bing-ads/source_bing_ads/source.py @@ -698,7 +698,8 @@ class GeographicPerformanceReport(PerformanceReportsMixin, BingAdsStream): additional_fields: str = "" cursor_field = "TimePeriod" report_schema_name = "geographic_performance_report" - primary_key = [ + + report_columns = [ "AccountId", "CampaignId", "AdGroupId", @@ -713,10 +714,6 @@ class GeographicPerformanceReport(PerformanceReportsMixin, BingAdsStream): "DeviceOS", "TopVsOther", "BidMatchType", - ] - - report_columns = [ - *primary_key, "MetroArea", "State", "City", diff --git a/airbyte-integrations/connectors/source-e2e-test-cloud/metadata.yaml b/airbyte-integrations/connectors/source-e2e-test-cloud/metadata.yaml index c6eeee25e73c..a988b663087e 100644 --- a/airbyte-integrations/connectors/source-e2e-test-cloud/metadata.yaml +++ b/airbyte-integrations/connectors/source-e2e-test-cloud/metadata.yaml @@ -2,7 +2,7 @@ data: connectorSubtype: api connectorType: source definitionId: 50bd8338-7c4e-46f1-8c7f-3ef95de19fdd - dockerImageTag: 2.1.0 + dockerImageTag: 2.1.5 dockerRepository: airbyte/source-e2e-test-cloud githubIssueLabel: source-e2e-test-cloud icon: airbyte.svg diff --git a/airbyte-integrations/connectors/source-e2e-test/build.gradle b/airbyte-integrations/connectors/source-e2e-test/build.gradle index bbbb90a8230e..9e9904ca2f08 100644 --- a/airbyte-integrations/connectors/source-e2e-test/build.gradle +++ b/airbyte-integrations/connectors/source-e2e-test/build.gradle @@ -23,9 +23,9 @@ dependencies { // random Json object generation from Json schema // https://github.com/airbytehq/jsongenerator - implementation 'net.jimblackler.jsonschemafriend:core:0.11.2' + implementation 'net.jimblackler.jsonschemafriend:core:0.12.1' implementation 'org.mozilla:rhino-engine:1.7.14' - implementation group: 'com.github.airbytehq', name: 'jsongenerator', version: '1.0.1' + implementation group: 'com.github.airbytehq', name: 'jsongenerator', version: '1.0.2' testImplementation project(":airbyte-json-validation") diff --git a/airbyte-integrations/connectors/source-e2e-test/metadata.yaml b/airbyte-integrations/connectors/source-e2e-test/metadata.yaml index c695e3a3052f..cde52423510d 100644 --- a/airbyte-integrations/connectors/source-e2e-test/metadata.yaml +++ b/airbyte-integrations/connectors/source-e2e-test/metadata.yaml @@ -2,7 +2,7 @@ data: connectorSubtype: api connectorType: source definitionId: d53f9084-fa6b-4a5a-976c-5b8392f4ad8a - dockerImageTag: 2.1.4 + dockerImageTag: 2.1.5 dockerRepository: airbyte/source-e2e-test githubIssueLabel: source-e2e-test icon: airbyte.svg diff --git a/airbyte-integrations/connectors/source-facebook-marketing/Dockerfile b/airbyte-integrations/connectors/source-facebook-marketing/Dockerfile index 4f125ab72ffd..f1918a7ae667 100644 --- a/airbyte-integrations/connectors/source-facebook-marketing/Dockerfile +++ b/airbyte-integrations/connectors/source-facebook-marketing/Dockerfile @@ -14,5 +14,5 @@ ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=1.1.14 +LABEL io.airbyte.version=1.1.16 LABEL io.airbyte.name=airbyte/source-facebook-marketing diff --git a/airbyte-integrations/connectors/source-facebook-marketing/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-facebook-marketing/integration_tests/expected_records.jsonl index 2c23f932fc9b..e1c73a9e01ee 100644 --- a/airbyte-integrations/connectors/source-facebook-marketing/integration_tests/expected_records.jsonl +++ b/airbyte-integrations/connectors/source-facebook-marketing/integration_tests/expected_records.jsonl @@ -1,29 +1,29 @@ {"stream":"ad_account","data":{"id":"act_212551616838260","account_id":"212551616838260","account_status":1,"age":1219.3692361111,"amount_spent":"39125","balance":"0","business":{"id":"1506473679510495","name":"Airbyte"},"business_city":"","business_country_code":"US","business_name":"","business_street":"","business_street2":"","can_create_brand_lift_study":false,"capabilities":["CAN_CREATE_CALL_ADS","CAN_SEE_GROWTH_OPPORTUNITY_DATA","ENABLE_IA_RECIRC_AD_DISPLAY_FORMAT","CAN_USE_MOBILE_EXTERNAL_PAGE_TYPE","CAN_USE_FB_FEED_POSITION_IN_VIDEO_VIEW_15S","ENABLE_BIZ_DISCO_ADS","ENABLE_BRAND_OBJECTIVES_FOR_BIZ_DISCO_ADS","ENABLE_DIRECT_REACH_FOR_BIZ_DISCO_ADS","ENABLE_DYNAMIC_ADS_ON_IG_STORIES_ADS","ENABLE_IG_STORIES_ADS_PPE_OBJECTIVE","ENABLE_IG_STORIES_ADS_MESSENGER_DESTINATION","ENABLE_PAC_FOR_BIZ_DISCO_ADS","CAN_USE_FB_INSTREAM_POSITION_IN_VIDEO_VIEW_15S","CAN_USE_FB_STORY_POSITION_IN_VIDEO_VIEW_15S","CAN_USE_AN_INSTREAM_POSITION_IN_VIDEO_VIEW_15S","CAN_USE_IG_STORY_POSITION_IN_VIDEO_VIEW_15S","CAN_USE_FB_IA_POSITION_IN_VIDEO_VIEW_15S","CAN_USE_FB_SUG_VIDEO_POSITION_IN_VIDEO_VIEW_15S","CAN_USE_FB_MKT_PLACE_POSITION_IN_VIDEO_VIEW_15S","CAN_USE_IG_FEED_POSITION_IN_VIDEO_VIEW_15S","CAN_USE_IG_EXPLORE_POSITION_IN_VIDEO_VIEW_15S","CAN_USE_AN_CLASSIC_POSITION_IN_VIDEO_VIEW_15S","CAN_USE_AN_REWARD_VIDEO_POSITION_IN_VIDEO_VIEW_15S","CAN_USE_RECURRING_BUDGET","HAS_VALID_PAYMENT_METHODS","CAN_USE_LINK_CLICK_BILLING_EVENT","CAN_USE_CPA_BILLING_EVENT","CAN_SEE_NEW_CONVERSION_WINDOW_NUX","ADS_INSTREAM_INTERFACE_INTEGRITY","ADS_INSTREAM_LINK_CLICK","ADS_INSTREAM_LINK_CLICK_IMAGE","ADS_IN_OBJECTIVES_DEPRECATION","MESSENGER_INBOX_ADS_PRODUCT_CATALOG_SALES","CAN_SHOW_MESSENGER_DUPLICSTION_UPSELL","ALLOW_INSTREAM_ONLY_FOR_REACH","ADS_INSTREAM_VIDEO_PLACEMENT_CONVERSIONS","CAN_CREATE_INSTAGRAM_EXPLORE_ADS","ALLOW_INSTREAM_VIDEOS_PLACEMENT_ONLY","ALLOW_INSTREAM_NON_INTERRUPTIVE_LEADGEN","INSTREAM_VIDEO_AD_DESKTOP_CONVERSION_AD_PREVIEW","ALLOW_INSTREAM_ONLY_FOR_BRAND_AWARENESS_AUCTION","ALLOW_SUGGESTED_VIDEOS_PLACEMENT_ONLY","WHATSAPP_DESTINATION_ADS","CTM_ADS_CREATION_CLICK_TO_DIRECT","CTW_ADS_ENABLE_IG_FEED_PLACEMENT","CTW_ADS_FOR_NON_MESSAGES_OBJECTIVE","CTW_ADS_TRUSTED_TIER_2_PLUS_ADVERTISER","CTW_ADS_TRUSTED_TIER_ADVERTISER","ADS_PLACEMENT_MARKETPLACE","CAN_CHANGE_BILLING_THRESHOLD","CAN_USE_APP_EVENT_AVERAGE_COST_BIDDING","CAN_USE_LEAD_GEN_AVERAGE_COST_BIDDING","ADS_VALUE_OPTIMIZATION_DYNAMIC_ADS_1D","ADS_DELIVERY_INSIGHTS_IN_BIDDING_PRESET_EXPERIMENT","ADS_DELIVERY_INSIGHTS_OPTIMIZATION_PRESET","CAN_SEE_APP_AD_EVENTS","CAN_SEE_NEW_STANDARD_EVENTS_BETA","CAN_SEE_VCK_HOLIDAY_TEMPLATES","ENABLE_DCO_FOR_FB_STORY_ADS","CAN_USE_IG_EXPLORE_GRID_HOME_PLACEMENT","CAN_USE_IG_EXPLORE_HOME_IN_REACH_AND_FREQUENCY","CAN_USE_IG_EXPLORE_HOME_POST_ENGAGEMENT_MESSAGES","CAN_USE_IG_SEARCH_PLACEMENT","CAN_USE_IG_SEARCH_GRID_ADS","CAN_USE_IG_REELS_PAC_CAROUSEL","CAN_USE_IG_REELS_POSITION","CAN_SEE_CONVERSION_LIFT_SUMMARY","CAN_USE_IG_PROFILE_FEED_POSITION","CAN_USE_IG_PROFILE_FEED_AUTO_PLACEMENT","CAN_USE_IG_PROFILE_FEED_DPA_CREATION","CAN_USE_IG_REELS_AUTO_PLACEMENT","CAN_USE_IG_REELS_REACH_AND_FREQUENCY","CAN_USE_IG_REELS_OVERLAY_POSITION","CAN_USE_IG_REELS_OVERLAY_AUTO_PLACEMENT","CAN_USE_IG_REELS_OVERLAY_PAC","CAN_USE_IG_SHOP_TAB_PAC","CAN_SEE_LEARNING_STAGE","ENABLE_WEBSITE_CONVERSIONS_FOR_FB_STORY_ADS","ENABLE_MESSENGER_INBOX_VIDEO_ADS","ENABLE_VIDEO_VIEWS_FOR_FB_STORY_ADS","ENABLE_LINK_CLICKS_FOR_FB_STORY_ADS","ENABLE_REACH_FOR_FB_STORY_ADS","CAN_USE_CALL_TO_ACTION_LINK_IMPORT_EXPORT","ADS_INSTREAM_VIDEO_ENABLE_SLIDE_SHOW","ALLOW_INSTREAM_VIDEOS_PLACEMENT_ONLY_IN_VV_REACH_AND_FREQUENCY","ENABLE_MOBILE_APP_INSTALLS_FOR_FB_STORY_ADS","ENABLE_LEAD_GEN_FOR_FB_STORY_ADS","CAN_USE_FB_MKT_PLACE_POSITION_IN_REACH","CAN_USE_FB_MKT_PLACE_POSITION_IN_VIDEO_VIEW","CAN_USE_FB_MKT_PLACE_POSITION_IN_STORE_VISIT","ENABLE_MOBILE_APP_ENGAGEMENT_FOR_FB_STORY_ADS","CAN_USE_FB_MKT_PLACE_POSITION_IN_BRAND_AWARENESS","CAN_USE_FB_MKT_PLACE_POSITION_IN_APP_INSTALLS","CAN_USE_FB_MKT_PLACE_POSITION_IN_LEAD_GENERATION","CAN_USE_FB_MKT_PLACE_POSITION_IN_MESSAGE","CAN_USE_FB_MKT_PLACE_POSITION_IN_PAGE_LIKE","CAN_USE_FB_MKT_PLACE_POSITION_IN_POST_ENGAGEMENT","RF_ALLOW_MARKETPLACE_ACCOUNT","RF_ALLOW_SEARCH_ACCOUNT","VERTICAL_VIDEO_PAC_INSTREAM_UPSELL","IX_COLLECTION_ENABLED_FOR_BAO_AND_REACH","ADS_BM_REQUIREMENTS_OCT_15_RELEASE","ENABLE_POST_ENGAGEMENT_FOR_FB_STORY","ENBABLE_CATALOG_SALES_FOR_FB_STORY","CAN_USE_WHATSAPP_DESTINATION_ON_LINK_CLICKS_AND_CONVERSIONS","CAN_USE_WHATSAPP_DESTINATION_ON_CONVERSIONS","IS_NON_TAIL_AD_ACCOUNT","IS_IN_DSA_GK","IS_IN_IG_EXISTING_POST_CTA_DEFAULTING_EXPERIMENT","IS_IN_SHORT_WA_LINK_CTWA_UNCONV_TRAFFIC_EXPERIMENT","IS_IN_ODAX_EXPERIENCE","IS_IN_REACH_BRAND_AWARENESS_WHATSAPP_L1_DESTINATION_EXPERIMENT","IS_IN_VIDEO_VIEWS_WHATSAPP_L1_DESTINATION_EXPERIMENT","IS_IN_WHATSAPP_DESTINATION_DEFAULTING_EXPERIMENT","CAN_USE_MARKETPLACE_DESKTOP","ADS_MERCHANT_OVERLAYS_DEPRECATION","CONNECTIONS_DEPRECATION_V2","CAN_USE_LIVE_VIDEO_FOR_THRUPLAY","CAN_SEE_HEC_AM_FLOW","CAN_SEE_POLITICAL_FLOW","ADS_INSTREAM_PLACEMENT_CATALOG_SALES","ENABLE_CONVERSIONS_FOR_FB_GROUP_TAB_ADS","ENABLE_LINK_CLICK_FOR_FB_GROUP_TAB_ADS","ENABLE_REACH_FOR_FB_GROUP_TAB_ADS","CAN_USE_CONVERSATIONS_OPTIMIZATION","ENABLE_THRUPLAY_OPTIMIZATION_MESSENGER_STORY_ADS","CAN_USE_IG_STORY_POLLS_PAC_CREATION","IOS14_CEO_CAMPAIGN_CREATION","ENABLE_VIDEO_CHANNEL_PLACEMENT_FOR_RSVP_ADS","DIGITAL_CIRCULAR_ADS","CAN_SEE_SAFR_V3_FLOW","CAN_USE_FB_REELS_POSITION","CAN_USE_ADS_ON_FB_REELS_POSITION","CAN_USE_FB_REELS_AUTO_PLACEMENT","ENABLE_FB_REELS_CREATION_PAC_ADS","ENABLE_FB_REELS_CREATION_DCO_ADS","ENABLE_FB_REELS_POSTLOOP_CREATION_DCO_ADS","ENABLE_FB_REELS_POSTLOOP_CREATION_PAC_ADS","RF_CPA_BILLING_DEPRECATION_PHASE_2","ENABLE_APP_INSTALL_CUSTOM_PRODUCT_PAGES","ENABLE_ADS_ON_FB_REELS_PLACEMENT_UNIFICATION","ENABLE_ADS_ON_FB_REELS_PLACEMENT_UNIFICATION_L2_NUX","ENABLE_ADS_ON_IG_SHOP_TAB_DEPRECATION_L2_NUX","ADS_RF_FB_REELS_PLACEMENT","ENABLE_ADS_ON_FB_INSTANT_ARTICLE_DEPRECATION_L2_NUX","REELS_DM_ADS_ENABLE_REACH_AND_FREQUENCY"],"created_time":"2020-04-13T18:04:59-0700","currency":"USD","disable_reason":0,"end_advertiser":1506473679510495,"end_advertiser_name":"Airbyte","fb_entity":85,"has_migrated_permissions":true,"is_attribution_spec_system_default":true,"is_direct_deals_enabled":false,"is_in_3ds_authorization_enabled_market":false,"is_notifications_enabled":true,"is_personal":0,"is_tax_id_required":false,"min_campaign_group_spend_cap":10000,"min_daily_budget":100,"name":"Airbyte","offsite_pixels_tos_accepted":true,"owner":1506473679510495,"rf_spec":{"min_reach_limits":{"US":200000,"CA":200000,"GB":200000,"AR":200000,"AU":200000,"AT":200000,"BE":200000,"BR":200000,"CL":200000,"CN":200000,"CO":200000,"HR":200000,"DK":200000,"DO":200000,"EG":200000,"FI":200000,"FR":200000,"DE":200000,"GR":200000,"HK":200000,"IN":200000,"ID":200000,"IE":200000,"IL":200000,"IT":200000,"JP":200000,"JO":200000,"KW":200000,"LB":200000,"MY":200000,"MX":200000,"NL":200000,"NZ":200000,"NG":200000,"NO":200000,"PK":200000,"PA":200000,"PE":200000,"PH":200000,"PL":200000,"RU":200000,"SA":200000,"RS":200000,"SG":200000,"ZA":200000,"KR":200000,"ES":200000,"SE":200000,"CH":200000,"TW":200000,"TH":200000,"TR":200000,"AE":200000,"VE":200000,"PT":200000,"LU":200000,"BG":200000,"CZ":200000,"SI":200000,"IS":200000,"SK":200000,"LT":200000,"TT":200000,"BD":200000,"LK":200000,"KE":200000,"HU":200000,"MA":200000,"CY":200000,"JM":200000,"EC":200000,"RO":200000,"BO":200000,"GT":200000,"CR":200000,"QA":200000,"SV":200000,"HN":200000,"NI":200000,"PY":200000,"UY":200000,"PR":200000,"BA":200000,"PS":200000,"TN":200000,"BH":200000,"VN":200000,"GH":200000,"MU":200000,"UA":200000,"MT":200000,"BS":200000,"MV":200000,"OM":200000,"MK":200000,"LV":200000,"EE":200000,"IQ":200000,"DZ":200000,"AL":200000,"NP":200000,"MO":200000,"ME":200000,"SN":200000,"GE":200000,"BN":200000,"UG":200000,"GP":200000,"BB":200000,"AZ":200000,"TZ":200000,"LY":200000,"MQ":200000,"CM":200000,"BW":200000,"ET":200000,"KZ":200000,"NA":200000,"MG":200000,"NC":200000,"MD":200000,"FJ":200000,"BY":200000,"JE":200000,"GU":200000,"YE":200000,"ZM":200000,"IM":200000,"HT":200000,"KH":200000,"AW":200000,"PF":200000,"AF":200000,"BM":200000,"GY":200000,"AM":200000,"MW":200000,"AG":200000,"RW":200000,"GG":200000,"GM":200000,"FO":200000,"LC":200000,"KY":200000,"BJ":200000,"AD":200000,"GD":200000,"VI":200000,"BZ":200000,"VC":200000,"MN":200000,"MZ":200000,"ML":200000,"AO":200000,"GF":200000,"UZ":200000,"DJ":200000,"BF":200000,"MC":200000,"TG":200000,"GL":200000,"GA":200000,"GI":200000,"CD":200000,"KG":200000,"PG":200000,"BT":200000,"KN":200000,"SZ":200000,"LS":200000,"LA":200000,"LI":200000,"MP":200000,"SR":200000,"SC":200000,"VG":200000,"TC":200000,"DM":200000,"MR":200000,"AX":200000,"SM":200000,"SL":200000,"NE":200000,"CG":200000,"AI":200000,"YT":200000,"CV":200000,"GN":200000,"TM":200000,"BI":200000,"TJ":200000,"VU":200000,"SB":200000,"ER":200000,"WS":200000,"AS":200000,"FK":200000,"GQ":200000,"TO":200000,"KM":200000,"PW":200000,"FM":200000,"CF":200000,"SO":200000,"MH":200000,"VA":200000,"TD":200000,"KI":200000,"ST":200000,"TV":200000,"NR":200000,"RE":200000,"LR":200000,"ZW":200000,"CI":200000,"MM":200000,"AN":200000,"AQ":200000,"BQ":200000,"BV":200000,"IO":200000,"CX":200000,"CC":200000,"CK":200000,"CW":200000,"TF":200000,"GW":200000,"HM":200000,"XK":200000,"MS":200000,"NU":200000,"NF":200000,"PN":200000,"BL":200000,"SH":200000,"MF":200000,"PM":200000,"SX":200000,"GS":200000,"SS":200000,"SJ":200000,"TL":200000,"TK":200000,"UM":200000,"WF":200000,"EH":200000},"countries":["US","CA","GB","AR","AU","AT","BE","BR","CL","CN","CO","HR","DK","DO","EG","FI","FR","DE","GR","HK","IN","ID","IE","IL","IT","JP","JO","KW","LB","MY","MX","NL","NZ","NG","NO","PK","PA","PE","PH","PL","RU","SA","RS","SG","ZA","KR","ES","SE","CH","TW","TH","TR","AE","VE","PT","LU","BG","CZ","SI","IS","SK","LT","TT","BD","LK","KE","HU","MA","CY","JM","EC","RO","BO","GT","CR","QA","SV","HN","NI","PY","UY","PR","BA","PS","TN","BH","VN","GH","MU","UA","MT","BS","MV","OM","MK","EE","LV","IQ","DZ","AL","NP","MO","ME","SN","GE","BN","UG","GP","BB","ZW","CI","AZ","TZ","LY","MQ","MM","CM","BW","ET","KZ","NA","MG","NC","MD","FJ","BY","JE","GU","YE","ZM","IM","HT","KH","AW","PF","AF","BM","GY","AM","MW","AG","RW","GG","GM","FO","LC","KY","BJ","AD","GD","VI","BZ","VC","MN","MZ","ML","AO","GF","UZ","DJ","BF","MC","TG","GL","GA","GI","CD","KG","PG","BT","KN","SZ","LS","LA","LI","MP","SR","SC","VG","TC","DM","MR","AX","SM","SL","NE","CG","AI","YT","LR","CV","GN","TM","BI","TJ","VU","SB","ER","WS","AS","FK","GQ","TO","KM","PW","FM","CF","SO","MH","VA","TD","KI","ST","TV","NR","RE","AN","AQ","BQ","BV","IO","CX","CC","CK","CW","TF","GW","HM","XK","MS","NU","NF","PN","BL","SH","MF","PM","SX","GS","SS","SJ","TL","TK","UM","WF","EH"],"min_campaign_duration":{"US":1,"CA":1,"GB":1,"AR":1,"AU":1,"AT":1,"BE":1,"BR":1,"CL":1,"CN":1,"CO":1,"HR":1,"DK":1,"DO":1,"EG":1,"FI":1,"FR":1,"DE":1,"GR":1,"HK":1,"IN":1,"ID":1,"IE":1,"IL":1,"IT":1,"JP":1,"JO":1,"KW":1,"LB":1,"MY":1,"MX":1,"NL":1,"NZ":1,"NG":1,"NO":1,"PK":1,"PA":1,"PE":1,"PH":1,"PL":1,"RU":1,"SA":1,"RS":1,"SG":1,"ZA":1,"KR":1,"ES":1,"SE":1,"CH":1,"TW":1,"TH":1,"TR":1,"AE":1,"VE":1,"PT":1,"LU":1,"BG":1,"CZ":1,"SI":1,"IS":1,"SK":1,"LT":1,"TT":1,"BD":1,"LK":1,"KE":1,"HU":1,"MA":1,"CY":1,"JM":1,"EC":1,"RO":1,"BO":1,"GT":1,"CR":1,"QA":1,"SV":1,"HN":1,"NI":1,"PY":1,"UY":1,"PR":1,"BA":1,"PS":1,"TN":1,"BH":1,"VN":1,"GH":1,"MU":1,"UA":1,"MT":1,"BS":1,"MV":1,"OM":1,"MK":1,"LV":1,"EE":1,"IQ":1,"DZ":1,"AL":1,"NP":1,"MO":1,"ME":1,"SN":1,"GE":1,"BN":1,"UG":1,"GP":1,"BB":1,"AZ":1,"TZ":1,"LY":1,"MQ":1,"CM":1,"BW":1,"ET":1,"KZ":1,"NA":1,"MG":1,"NC":1,"MD":1,"FJ":1,"BY":1,"JE":1,"GU":1,"YE":1,"ZM":1,"IM":1,"HT":1,"KH":1,"AW":1,"PF":1,"AF":1,"BM":1,"GY":1,"AM":1,"MW":1,"AG":1,"RW":1,"GG":1,"GM":1,"FO":1,"LC":1,"KY":1,"BJ":1,"AD":1,"GD":1,"VI":1,"BZ":1,"VC":1,"MN":1,"MZ":1,"ML":1,"AO":1,"GF":1,"UZ":1,"DJ":1,"BF":1,"MC":1,"TG":1,"GL":1,"GA":1,"GI":1,"CD":1,"KG":1,"PG":1,"BT":1,"KN":1,"SZ":1,"LS":1,"LA":1,"LI":1,"MP":1,"SR":1,"SC":1,"VG":1,"TC":1,"DM":1,"MR":1,"AX":1,"SM":1,"SL":1,"NE":1,"CG":1,"AI":1,"YT":1,"CV":1,"GN":1,"TM":1,"BI":1,"TJ":1,"VU":1,"SB":1,"ER":1,"WS":1,"AS":1,"FK":1,"GQ":1,"TO":1,"KM":1,"PW":1,"FM":1,"CF":1,"SO":1,"MH":1,"VA":1,"TD":1,"KI":1,"ST":1,"TV":1,"NR":1,"RE":1,"LR":1,"ZW":1,"CI":1,"MM":1,"AN":1,"AQ":1,"BQ":1,"BV":1,"IO":1,"CX":1,"CC":1,"CK":1,"CW":1,"TF":1,"GW":1,"HM":1,"XK":1,"MS":1,"NU":1,"NF":1,"PN":1,"BL":1,"SH":1,"MF":1,"PM":1,"SX":1,"GS":1,"SS":1,"SJ":1,"TL":1,"TK":1,"UM":1,"WF":1,"EH":1},"max_campaign_duration":{"US":90,"CA":90,"GB":90,"AR":90,"AU":90,"AT":90,"BE":90,"BR":90,"CL":90,"CN":90,"CO":90,"HR":90,"DK":90,"DO":90,"EG":90,"FI":90,"FR":90,"DE":90,"GR":90,"HK":90,"IN":90,"ID":90,"IE":90,"IL":90,"IT":90,"JP":90,"JO":90,"KW":90,"LB":90,"MY":90,"MX":90,"NL":90,"NZ":90,"NG":90,"NO":90,"PK":90,"PA":90,"PE":90,"PH":90,"PL":90,"RU":90,"SA":90,"RS":90,"SG":90,"ZA":90,"KR":90,"ES":90,"SE":90,"CH":90,"TW":90,"TH":90,"TR":90,"AE":90,"VE":90,"PT":90,"LU":90,"BG":90,"CZ":90,"SI":90,"IS":90,"SK":90,"LT":90,"TT":90,"BD":90,"LK":90,"KE":90,"HU":90,"MA":90,"CY":90,"JM":90,"EC":90,"RO":90,"BO":90,"GT":90,"CR":90,"QA":90,"SV":90,"HN":90,"NI":90,"PY":90,"UY":90,"PR":90,"BA":90,"PS":90,"TN":90,"BH":90,"VN":90,"GH":90,"MU":90,"UA":90,"MT":90,"BS":90,"MV":90,"OM":90,"MK":90,"LV":90,"EE":90,"IQ":90,"DZ":90,"AL":90,"NP":90,"MO":90,"ME":90,"SN":90,"GE":90,"BN":90,"UG":90,"GP":90,"BB":90,"AZ":90,"TZ":90,"LY":90,"MQ":90,"CM":90,"BW":90,"ET":90,"KZ":90,"NA":90,"MG":90,"NC":90,"MD":90,"FJ":90,"BY":90,"JE":90,"GU":90,"YE":90,"ZM":90,"IM":90,"HT":90,"KH":90,"AW":90,"PF":90,"AF":90,"BM":90,"GY":90,"AM":90,"MW":90,"AG":90,"RW":90,"GG":90,"GM":90,"FO":90,"LC":90,"KY":90,"BJ":90,"AD":90,"GD":90,"VI":90,"BZ":90,"VC":90,"MN":90,"MZ":90,"ML":90,"AO":90,"GF":90,"UZ":90,"DJ":90,"BF":90,"MC":90,"TG":90,"GL":90,"GA":90,"GI":90,"CD":90,"KG":90,"PG":90,"BT":90,"KN":90,"SZ":90,"LS":90,"LA":90,"LI":90,"MP":90,"SR":90,"SC":90,"VG":90,"TC":90,"DM":90,"MR":90,"AX":90,"SM":90,"SL":90,"NE":90,"CG":90,"AI":90,"YT":90,"CV":90,"GN":90,"TM":90,"BI":90,"TJ":90,"VU":90,"SB":90,"ER":90,"WS":90,"AS":90,"FK":90,"GQ":90,"TO":90,"KM":90,"PW":90,"FM":90,"CF":90,"SO":90,"MH":90,"VA":90,"TD":90,"KI":90,"ST":90,"TV":90,"NR":90,"RE":90,"LR":90,"ZW":90,"CI":90,"MM":90,"AN":90,"AQ":90,"BQ":90,"BV":90,"IO":90,"CX":90,"CC":90,"CK":90,"CW":90,"TF":90,"GW":90,"HM":90,"XK":90,"MS":90,"NU":90,"NF":90,"PN":90,"BL":90,"SH":90,"MF":90,"PM":90,"SX":90,"GS":90,"SS":90,"SJ":90,"TL":90,"TK":90,"UM":90,"WF":90,"EH":90},"max_days_to_finish":{"US":180,"CA":180,"GB":180,"AR":180,"AU":180,"AT":180,"BE":180,"BR":180,"CL":180,"CN":180,"CO":180,"HR":180,"DK":180,"DO":180,"EG":180,"FI":180,"FR":180,"DE":180,"GR":180,"HK":180,"IN":180,"ID":180,"IE":180,"IL":180,"IT":180,"JP":180,"JO":180,"KW":180,"LB":180,"MY":180,"MX":180,"NL":180,"NZ":180,"NG":180,"NO":180,"PK":180,"PA":180,"PE":180,"PH":180,"PL":180,"RU":180,"SA":180,"RS":180,"SG":180,"ZA":180,"KR":180,"ES":180,"SE":180,"CH":180,"TW":180,"TH":180,"TR":180,"AE":180,"VE":180,"PT":180,"LU":180,"BG":180,"CZ":180,"SI":180,"IS":180,"SK":180,"LT":180,"TT":180,"BD":180,"LK":180,"KE":180,"HU":180,"MA":180,"CY":180,"JM":180,"EC":180,"RO":180,"BO":180,"GT":180,"CR":180,"QA":180,"SV":180,"HN":180,"NI":180,"PY":180,"UY":180,"PR":180,"BA":180,"PS":180,"TN":180,"BH":180,"VN":180,"GH":180,"MU":180,"UA":180,"MT":180,"BS":180,"MV":180,"OM":180,"MK":180,"LV":180,"EE":180,"IQ":180,"DZ":180,"AL":180,"NP":180,"MO":180,"ME":180,"SN":180,"GE":180,"BN":180,"UG":180,"GP":180,"BB":180,"AZ":180,"TZ":180,"LY":180,"MQ":180,"CM":180,"BW":180,"ET":180,"KZ":180,"NA":180,"MG":180,"NC":180,"MD":180,"FJ":180,"BY":180,"JE":180,"GU":180,"YE":180,"ZM":180,"IM":180,"HT":180,"KH":180,"AW":180,"PF":180,"AF":180,"BM":180,"GY":180,"AM":180,"MW":180,"AG":180,"RW":180,"GG":180,"GM":180,"FO":180,"LC":180,"KY":180,"BJ":180,"AD":180,"GD":180,"VI":180,"BZ":180,"VC":180,"MN":180,"MZ":180,"ML":180,"AO":180,"GF":180,"UZ":180,"DJ":180,"BF":180,"MC":180,"TG":180,"GL":180,"GA":180,"GI":180,"CD":180,"KG":180,"PG":180,"BT":180,"KN":180,"SZ":180,"LS":180,"LA":180,"LI":180,"MP":180,"SR":180,"SC":180,"VG":180,"TC":180,"DM":180,"MR":180,"AX":180,"SM":180,"SL":180,"NE":180,"CG":180,"AI":180,"YT":180,"CV":180,"GN":180,"TM":180,"BI":180,"TJ":180,"VU":180,"SB":180,"ER":180,"WS":180,"AS":180,"FK":180,"GQ":180,"TO":180,"KM":180,"PW":180,"FM":180,"CF":180,"SO":180,"MH":180,"VA":180,"TD":180,"KI":180,"ST":180,"TV":180,"NR":180,"RE":180,"LR":180,"ZW":180,"CI":180,"MM":180,"AN":180,"AQ":180,"BQ":180,"BV":180,"IO":180,"CX":180,"CC":180,"CK":180,"CW":180,"TF":180,"GW":180,"HM":180,"XK":180,"MS":180,"NU":180,"NF":180,"PN":180,"BL":180,"SH":180,"MF":180,"PM":180,"SX":180,"GS":180,"SS":180,"SJ":180,"TL":180,"TK":180,"UM":180,"WF":180,"EH":180},"global_io_max_campaign_duration":100},"spend_cap":"0","tax_id_status":0,"timezone_id":1,"timezone_name":"America/Los_Angeles","timezone_offset_hours_utc":-7,"tos_accepted":{"web_custom_audience_tos":1},"user_tasks":["DRAFT","ANALYZE"]},"emitted_at":1692180820858} -{"stream":"ads", "data": {"bid_type": "ABSOLUTE_OCPM", "account_id": "212551616838260", "campaign_id": "23853619670350398", "adset_id": "23853619670380398", "status": "ACTIVE", "creative": {"id": "23853666125630398"}, "id": "23853620198790398", "updated_time": "2023-03-21T22:33:56-0700", "created_time": "2023-03-17T08:04:29-0700", "name": "Don't Compromise Between Cost/Relaibility", "targeting": {"age_max": 60, "age_min": 18, "custom_audiences": [{"id": "23853630753300398", "name": "Lookalike (US, 10%) - Airbyte Cloud Users"}, {"id": "23853683587660398", "name": "Web Traffic [ALL] - _copy"}], "geo_locations": {"countries": ["US"], "location_types": ["home", "recent"]}, "brand_safety_content_filter_levels": ["FACEBOOK_STANDARD", "AN_STANDARD"], "targeting_relaxation_types": {"lookalike": 1, "custom_audience": 1}, "publisher_platforms": ["facebook", "instagram", "audience_network", "messenger"], "facebook_positions": ["feed", "biz_disco_feed", "facebook_reels", "facebook_reels_overlay", "right_hand_column", "video_feeds", "instant_article", "instream_video", "marketplace", "story", "search"], "instagram_positions": ["stream", "story", "explore", "reels", "shop", "explore_home", "profile_feed"], "device_platforms": ["mobile", "desktop"], "messenger_positions": ["story"], "audience_network_positions": ["classic", "instream_video", "rewarded_video"]}, "effective_status": "ACTIVE", "last_updated_by_app_id": "119211728144504", "source_ad_id": "0", "tracking_specs": [{"action.type": ["offsite_conversion"], "fb_pixel": ["917042523049733"]}, {"action.type": ["post_engagement"], "page": ["112704783733939"], "post": ["660122622785523", "662226992575086"]}, {"action.type": ["link_click"], "post": ["660122622785523", "662226992575086"], "post.wall": ["112704783733939"]}], "conversion_specs": [{"action.type": ["offsite_conversion"], "conversion_id": ["6015304265216283"]}]}, "emitted_at": 1682686047377} +{"stream":"ads","data":{"bid_type":"ABSOLUTE_OCPM","account_id":"212551616838260","campaign_id":"23853619670350398","adset_id":"23853619670380398","status":"ACTIVE","creative":{"id":"23853666125630398"},"id":"23853620198790398","updated_time":"2023-03-21T22:33:56-0700","created_time":"2023-03-17T08:04:29-0700","name":"Don't Compromise Between Cost/Relaibility","targeting":{"age_max":60,"age_min":18,"custom_audiences":[{"id":"23853630753300398","name":"Lookalike (US, 10%) - Airbyte Cloud Users"},{"id":"23853683587660398","name":"Web Traffic [ALL] - _copy"}],"geo_locations":{"countries":["US"],"location_types":["home","recent"]},"brand_safety_content_filter_levels":["FACEBOOK_STANDARD","AN_STANDARD"],"targeting_relaxation_types":{"lookalike":1,"custom_audience":1},"publisher_platforms":["facebook","instagram","audience_network","messenger"],"facebook_positions":["feed","biz_disco_feed","facebook_reels","facebook_reels_overlay","right_hand_column","video_feeds","instant_article","instream_video","marketplace","story","search"],"instagram_positions":["stream","story","explore","reels","shop","explore_home","profile_feed"],"device_platforms":["mobile","desktop"],"messenger_positions":["story"],"audience_network_positions":["classic","instream_video","rewarded_video"]},"effective_status":"ACTIVE","last_updated_by_app_id":"119211728144504","source_ad_id":"0","tracking_specs":[{"action.type":["offsite_conversion"],"fb_pixel":["917042523049733"]},{"action.type":["post_engagement"],"page":["112704783733939"],"post":["660122622785523","662226992575086"]},{"action.type":["link_click"],"post":["660122622785523","662226992575086"],"post.wall":["112704783733939"]}],"conversion_specs":[{"action.type":["offsite_conversion"],"conversion_id":["6015304265216283"]}]},"emitted_at":1682686047377} {"stream":"ad_sets","data":{"name":"Lookalike audience_Free Connector Program","promoted_object":{"pixel_id":"917042523049733","custom_event_type":"COMPLETE_REGISTRATION"},"id":"23853619670380398","account_id":"212551616838260","updated_time":"2023-03-21T14:20:51-0700","daily_budget":2000,"budget_remaining":2000,"effective_status":"ACTIVE","campaign_id":"23853619670350398","created_time":"2023-03-17T08:04:28-0700","start_time":"2023-03-17T08:04:28-0700","lifetime_budget":0,"targeting":{"age_max":60,"age_min":18,"custom_audiences":[{"id":"23853630753300398","name":"Lookalike (US, 10%) - Airbyte Cloud Users"},{"id":"23853683587660398","name":"Web Traffic [ALL] - _copy"}],"geo_locations":{"countries":["US"],"location_types":["home","recent"]},"brand_safety_content_filter_levels":["FACEBOOK_STANDARD","AN_STANDARD"],"targeting_relaxation_types":{"lookalike":1,"custom_audience":1},"publisher_platforms":["facebook","instagram","audience_network","messenger"],"facebook_positions":["feed","biz_disco_feed","facebook_reels","facebook_reels_overlay","right_hand_column","video_feeds","instant_article","instream_video","marketplace","story","search"],"instagram_positions":["stream","story","explore","reels","shop","explore_home","profile_feed"],"device_platforms":["mobile","desktop"],"messenger_positions":["story"],"audience_network_positions":["classic","instream_video","rewarded_video"]},"bid_strategy":"LOWEST_COST_WITHOUT_CAP"},"emitted_at":1692180821847} {"stream":"campaigns","data":{"id":"23846542053890398","account_id":"212551616838260","budget_rebalance_flag":false,"budget_remaining":0.0,"buying_type":"AUCTION","created_time":"2021-01-18T21:36:42-0800","configured_status":"PAUSED","effective_status":"PAUSED","name":"Fake Campaign 0","objective":"MESSAGES","smart_promotion_type":"GUIDED_CREATION","source_campaign_id":0.0,"special_ad_category":"NONE","start_time":"1969-12-31T15:59:59-0800","status":"PAUSED","updated_time":"2021-02-18T01:00:02-0800"},"emitted_at":1694795155769} {"stream":"custom_audiences","data":{"id":"23853683587660398","account_id":"212551616838260","approximate_count_lower_bound":4700,"approximate_count_upper_bound":5600,"customer_file_source":"PARTNER_PROVIDED_ONLY","data_source":{"type":"UNKNOWN","sub_type":"ANYTHING","creation_params":"[]"},"delivery_status":{"code":200,"description":"This audience is ready for use."},"description":"Custom Audience-Web Traffic [ALL] - _copy","is_value_based":false,"name":"Web Traffic [ALL] - _copy","operation_status":{"code":200,"description":"Normal"},"permission_for_actions":{"can_edit":false,"can_see_insight":"True","can_share":"False","subtype_supports_lookalike":"True","supports_recipient_lookalike":"False"},"retention_days":0,"subtype":"CUSTOM","time_content_updated":1679433484,"time_created":1679433479,"time_updated":1679433484},"emitted_at":1692028917200} {"stream":"ad_creatives","data":{"id":"23844568440620398","account_id":"212551616838260","actor_id":"112704783733939","asset_feed_spec":{"images":[{"adlabels":[{"name":"placement_asset_fb19ee1baacc68_1586830094862","id":"23844521781280398"}],"hash":"7394ffb578c53e8761b6498d3008725b","image_crops":{"191x100":[[0,411],[589,719]]}},{"adlabels":[{"name":"placement_asset_f1f518506ae7e68_1586830094842","id":"23844521781340398"}],"hash":"7394ffb578c53e8761b6498d3008725b","image_crops":{"100x100":[[12,282],[574,844]]}},{"adlabels":[{"name":"placement_asset_f311b79c14a30c_1586830094845","id":"23844521781330398"}],"hash":"7394ffb578c53e8761b6498d3008725b","image_crops":{"90x160":[[14,72],[562,1046]]}},{"adlabels":[{"name":"placement_asset_f2c2fe4f20af66c_1586830157386","id":"23844521783780398"}],"hash":"7394ffb578c53e8761b6498d3008725b","image_crops":{"90x160":[[0,0],[589,1047]]}}],"bodies":[{"adlabels":[{"name":"placement_asset_f2d65f15340e594_1586830094852","id":"23844521781260398"},{"name":"placement_asset_f1f97c3e3a63d74_1586830094858","id":"23844521781300398"},{"name":"placement_asset_f14cee2ab5d786_1586830094863","id":"23844521781370398"},{"name":"placement_asset_f14877915fb5acc_1586830157387","id":"23844521783760398"}],"text":""}],"call_to_action_types":["LEARN_MORE"],"descriptions":[{"text":"Unmatched attribution, ad performances, and lead conversion, by unlocking your ad-blocked traffic across all your tools."}],"link_urls":[{"adlabels":[{"name":"placement_asset_f309294689f2c6c_1586830094864","id":"23844521781290398"},{"name":"placement_asset_f136a02466f2bc_1586830094856","id":"23844521781310398"},{"name":"placement_asset_fa79b032b68274_1586830094860","id":"23844521781320398"},{"name":"placement_asset_f28a128696c7428_1586830157387","id":"23844521783790398"}],"website_url":"http://dataline.io/","display_url":""}],"titles":[{"adlabels":[{"name":"placement_asset_f1013e29f89c38_1586830094864","id":"23844521781350398"},{"name":"placement_asset_fcb53b78a11574_1586830094859","id":"23844521781360398"},{"name":"placement_asset_f1a3b3d525f4998_1586830094854","id":"23844521781380398"},{"name":"placement_asset_f890656071c9ac_1586830157387","id":"23844521783770398"}],"text":"Unblock all your adblocked traffic"}],"ad_formats":["AUTOMATIC_FORMAT"],"asset_customization_rules":[{"customization_spec":{"age_max":65,"age_min":13,"publisher_platforms":["instagram","audience_network","messenger"],"instagram_positions":["story"],"messenger_positions":["story"],"audience_network_positions":["classic"]},"image_label":{"name":"placement_asset_f311b79c14a30c_1586830094845","id":"23844521781330398"},"body_label":{"name":"placement_asset_f1f97c3e3a63d74_1586830094858","id":"23844521781300398"},"link_url_label":{"name":"placement_asset_fa79b032b68274_1586830094860","id":"23844521781320398"},"title_label":{"name":"placement_asset_fcb53b78a11574_1586830094859","id":"23844521781360398"},"priority":1},{"customization_spec":{"age_max":65,"age_min":13,"publisher_platforms":["facebook"],"facebook_positions":["right_hand_column","instant_article","search"]},"image_label":{"name":"placement_asset_fb19ee1baacc68_1586830094862","id":"23844521781280398"},"body_label":{"name":"placement_asset_f14cee2ab5d786_1586830094863","id":"23844521781370398"},"link_url_label":{"name":"placement_asset_f309294689f2c6c_1586830094864","id":"23844521781290398"},"title_label":{"name":"placement_asset_f1013e29f89c38_1586830094864","id":"23844521781350398"},"priority":2},{"customization_spec":{"age_max":65,"age_min":13,"publisher_platforms":["facebook"],"facebook_positions":["story"]},"image_label":{"name":"placement_asset_f2c2fe4f20af66c_1586830157386","id":"23844521783780398"},"body_label":{"name":"placement_asset_f14877915fb5acc_1586830157387","id":"23844521783760398"},"link_url_label":{"name":"placement_asset_f28a128696c7428_1586830157387","id":"23844521783790398"},"title_label":{"name":"placement_asset_f890656071c9ac_1586830157387","id":"23844521783770398"},"priority":3},{"customization_spec":{"age_max":65,"age_min":13},"image_label":{"name":"placement_asset_f1f518506ae7e68_1586830094842","id":"23844521781340398"},"body_label":{"name":"placement_asset_f2d65f15340e594_1586830094852","id":"23844521781260398"},"link_url_label":{"name":"placement_asset_f136a02466f2bc_1586830094856","id":"23844521781310398"},"title_label":{"name":"placement_asset_f1a3b3d525f4998_1586830094854","id":"23844521781380398"},"priority":4}],"optimization_type":"PLACEMENT","additional_data":{"multi_share_end_card":false,"is_click_to_message":false}},"effective_object_story_id":"112704783733939_117519556585795","name":"{{product.name}} 2020-04-21-49cbe5bd90ed9861ea68bb38f7d6fc7c","instagram_actor_id":"3437258706290825","object_story_spec":{"page_id":"112704783733939","instagram_actor_id":"3437258706290825"},"object_type":"SHARE","status":"ACTIVE","thumbnail_url":"https://scontent-dus1-1.xx.fbcdn.net/v/t45.1600-4/93287504_23844521781140398_125048020067680256_n.jpg?_nc_cat=108&ccb=1-7&_nc_sid=a3999f&_nc_ohc=-TT4Z0FkPeYAX97qejq&_nc_ht=scontent-dus1-1.xx&edm=AAT1rw8EAAAA&stp=c0.5000x0.5000f_dst-emg0_p64x64_q75&ur=58080a&oh=00_AfBjMrayWFyOLmIgVt8Owtv2fBSJVyCmtNuPLpCQyggdpg&oe=64E18154"},"emitted_at":1692180825964} -{"stream":"activities","data":{"actor_id":"10167035656105444","actor_name":"Ilana Enoukov","application_id":"119211728144504","application_name":"Power Editor","date_time_in_timezone":"03/21/2023 at 2:20 PM","event_time":"2023-03-21T21:20:39+0000","event_type":"update_ad_set_target_spec","extra_data":"{\"old_value\":[{\"content\":\"Custom audience:\",\"children\":[\"Web Traffic [ALL] - _copy\"]},{\"content\":\"Location:\",\"children\":[\"United States\"]},{\"content\":\"Age:\",\"children\":[\"18 - 60\"]},{\"content\":\"Placements:\",\"children\":[\"on pages: Feed on desktop computers, Video feeds on desktop computers, Instagram feed, Instagram Stories, Instagram Profile Feed, Instagram Explore, Instagram Explore home, Instagram Reels, Instagram Shop, Third-party apps and websites on mobile devices, Feed on mobile devices, Video feeds on mobile devices, Right column on desktop computers, Instream video on mobile devices, Instream video on desktop computers, Instant Article, Marketplace on desktop computers, Marketplace on mobile devices, Facebook Stories on mobile devices, Messenger Stories, Marketplace search on desktop devices, Marketplace search on mobile devices, Search on mobile devices, Search on desktop devices, Facebook Reels overlay on mobile devices, Facebook Business Explore on mobile devices, Facebook Reels or Video search on mobile devices\"]},{\"content\":\"Advantage custom audience:\",\"children\":[\"Off\"]}],\"new_value\":[{\"content\":\"Custom audience:\",\"children\":[\"Lookalike (US, 10\\u0025) - Airbyte Cloud Users or Web Traffic [ALL] - _copy\"]},{\"content\":\"Location:\",\"children\":[\"United States\"]},{\"content\":\"Age:\",\"children\":[\"18 - 60\"]},{\"content\":\"Placements:\",\"children\":[\"on pages: Feed on desktop computers, Video feeds on desktop computers, Instagram feed, Instagram Stories, Instagram Profile Feed, Instagram Explore, Instagram Explore home, Instagram Reels, Instagram Shop, Third-party apps and websites on mobile devices, Feed on mobile devices, Video feeds on mobile devices, Right column on desktop computers, Instream video on mobile devices, Instream video on desktop computers, Instant Article, Marketplace on desktop computers, Marketplace on mobile devices, Facebook Stories on mobile devices, Messenger Stories, Marketplace search on desktop devices, Marketplace search on mobile devices, Search on mobile devices, Search on desktop devices, Facebook Reels overlay on mobile devices, Facebook Business Explore on mobile devices, Facebook Reels or Video search on mobile devices\"]},{\"content\":\"Advantage custom audience:\",\"children\":[\"On\"]}],\"type\":\"targets_spec\"}","object_id":"23853619670380398","object_name":"Lookalike audience_Free Connector Program","object_type":"CAMPAIGN","translated_event_type":"Ad set targeting updated"},"emitted_at":1692180829460} +{"stream":"activities","data":{"actor_id":"122043039268043192","actor_name":"Payments RTU Processor","application_id":"0","date_time_in_timezone":"03/13/2023 at 6:30 AM","event_time":"2023-03-13T13:30:47+0000","event_type":"ad_account_billing_charge","extra_data":"{\"currency\":\"USD\",\"new_value\":1188,\"transaction_id\":\"5885578541558696-11785530\",\"action\":67,\"type\":\"payment_amount\"}","object_id":"212551616838260","object_name":"Airbyte","object_type":"ACCOUNT","translated_event_type":"Account billed"},"emitted_at":1696931251153} {"stream":"custom_conversions","data":{"id":"694166388077667","account_id":"212551616838260","creation_time":"2020-04-22T01:36:00+0000","custom_event_type":"CONTACT","data_sources":[{"id":"2667253716886462","source_type":"PIXEL","name":"Dataline's Pixel"}],"default_conversion_value":0,"event_source_type":"pixel","is_archived":true,"is_unavailable":false,"name":"SubscribedButtonClick","retention_days":0,"rule":"{\"and\":[{\"event\":{\"eq\":\"PageView\"}},{\"or\":[{\"URL\":{\"i_contains\":\"SubscribedButtonClick\"}}]}]}"},"emitted_at":1692180839174} {"stream":"images","data":{"id":"212551616838260:c1e94a8768a405f0f212d71fe8336647","account_id":"212551616838260","name":"Audience_1_Ad_3_1200x1200_blue_CTA_arrow.png_105","creatives":["23853630775340398","23853630871360398","23853666124200398"],"original_height":1200,"original_width":1200,"permalink_url":"https://www.facebook.com/ads/image/?d=AQIDNjjLb7VzVJ26jXb_HpudCEUJqbV_lLF2JVsdruDcBxnXQEKfzzd21VVJnkm0B-JLosUXNNg1BH78y7FxnK3AH-0D_lnk7kn39_bIcOMK7Z9HYyFInfsVY__adup3A5zGTIcHC9Y98Je5qK-yD8F6","status":"ACTIVE","url":"https://scontent-dus1-1.xx.fbcdn.net/v/t45.1600-4/335907140_23853620220420398_4375584095210967511_n.png?_nc_cat=104&ccb=1-7&_nc_sid=2aac32&_nc_ohc=xdjrPpbRGNAAX8Dck01&_nc_ht=scontent-dus1-1.xx&edm=AJcBmwoEAAAA&oh=00_AfDCqQ6viqrgLcfbO3O5-n030Usq7Zyt2c1TmsatqnYf7Q&oe=64E2779A","created_time":"2023-03-16T13:13:17-0700","hash":"c1e94a8768a405f0f212d71fe8336647","url_128":"https://scontent-dus1-1.xx.fbcdn.net/v/t45.1600-4/335907140_23853620220420398_4375584095210967511_n.png?stp=dst-png_s128x128&_nc_cat=104&ccb=1-7&_nc_sid=2aac32&_nc_ohc=xdjrPpbRGNAAX8Dck01&_nc_ht=scontent-dus1-1.xx&edm=AJcBmwoEAAAA&oh=00_AfAY50CMpox2s4w_f18IVx7sZuXlg4quF6YNIJJ8D4PZew&oe=64E2779A","is_associated_creatives_in_adgroups":true,"updated_time":"2023-03-17T08:09:56-0700","height":1200,"width":1200},"emitted_at":1692180839582} -{"stream":"ads_insights", "data": {"account_currency": "USD", "account_id": "212551616838260", "account_name": "Airbyte", "actions": [{"action_destination": "244953057175777", "action_target_id": "244953057175777", "action_type": "link_click", "value": 3.0, "1d_click": 3.0, "7d_click": 3.0, "28d_click": 3.0}, {"action_destination": "244953057175777", "action_target_id": "244953057175777", "action_type": "page_engagement", "value": 3.0, "1d_click": 3.0, "7d_click": 3.0, "28d_click": 3.0}, {"action_destination": "244953057175777", "action_target_id": "244953057175777", "action_type": "post_engagement", "value": 3.0, "1d_click": 3.0, "7d_click": 3.0, "28d_click": 3.0}], "ad_id": "23846765228310398", "ad_name": "Airbyte Ad", "adset_id": "23846765228280398", "adset_name": "Vanilla awareness ad set", "buying_type": "AUCTION", "campaign_id": "23846765228240398", "campaign_name": "Airbyte Awareness Campaign 1 (sherif)", "catalog_segment_value_mobile_purchase_roas": [{"value": 0.0}], "clicks": 3, "conversion_rate_ranking": "UNKNOWN", "cost_per_estimated_ad_recallers": 0.007, "cost_per_inline_link_click": 0.396667, "cost_per_inline_post_engagement": 0.396667, "cost_per_unique_click": 0.396667, "cost_per_unique_inline_link_click": 0.396667, "cpc": 0.396667, "cpm": 0.902199, "cpp": 0.948207, "created_time": "2021-02-09", "ctr": 0.227445, "date_start": "2021-02-15", "date_stop": "2021-02-15", "engagement_rate_ranking": "UNKNOWN", "estimated_ad_recall_rate": 13.545817, "estimated_ad_recallers": 170.0, "frequency": 1.050996, "impressions": 1319, "inline_link_click_ctr": 0.227445, "inline_link_clicks": 3, "inline_post_engagement": 3, "mobile_app_purchase_roas": [{"value": 0.0}], "objective": "BRAND_AWARENESS", "optimization_goal": "AD_RECALL_LIFT", "outbound_clicks": [{"action_destination": "244953057175777", "action_target_id": "244953057175777", "action_type": "outbound_click", "value": 3.0}], "quality_ranking": "UNKNOWN", "reach": 1255, "social_spend": 0.0, "spend": 1.19, "unique_actions": [{"action_destination": "244953057175777", "action_target_id": "244953057175777", "action_type": "link_click", "value": 3.0, "1d_click": 3.0, "7d_click": 3.0, "28d_click": 3.0}, {"action_destination": "244953057175777", "action_target_id": "244953057175777", "action_type": "page_engagement", "value": 3.0, "1d_click": 3.0, "7d_click": 3.0, "28d_click": 3.0}, {"action_destination": "244953057175777", "action_target_id": "244953057175777", "action_type": "post_engagement", "value": 3.0, "1d_click": 3.0, "7d_click": 3.0, "28d_click": 3.0}], "unique_clicks": 3, "unique_ctr": 0.239044, "unique_inline_link_click_ctr": 0.239044, "unique_inline_link_clicks": 3, "unique_link_clicks_ctr": 0.239044, "unique_outbound_clicks": [{"action_destination": "244953057175777", "action_target_id": "244953057175777", "action_type": "outbound_click", "value": 3.0}], "updated_time": "2021-08-27", "website_ctr": [{"action_type": "link_click", "value": 0.227445}], "website_purchase_roas": [{"value": 0.0}], "wish_bid": 0.0}, "emitted_at": 1682686057366} -{"stream":"ads_insights_action_carousel_card","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","catalog_segment_value_mobile_purchase_roas":[{"value":0}],"clicks":3,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.007,"cost_per_inline_link_click":0.396667,"cost_per_inline_post_engagement":0.396667,"cost_per_unique_click":0.396667,"cost_per_unique_inline_link_click":0.396667,"cpc":0.396667,"cpm":0.902199,"cpp":0.948207,"created_time":"2021-02-09","ctr":0.227445,"date_start":"2021-02-15","date_stop":"2021-02-15","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":13.545817,"estimated_ad_recallers":170,"frequency":1.050996,"impressions":1319,"inline_link_click_ctr":0.227445,"inline_link_clicks":3,"inline_post_engagement":3,"mobile_app_purchase_roas":[{"value":0}],"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":1255,"social_spend":0,"spend":1.19,"unique_actions":[{"value":3,"1d_click":3,"7d_click":3,"28d_click":3}],"unique_clicks":3,"unique_ctr":0.239044,"unique_inline_link_click_ctr":0.239044,"unique_inline_link_clicks":3,"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.227445}],"website_purchase_roas":[{"value":0}],"wish_bid":0},"emitted_at":1692180857757} -{"stream":"ads_insights_action_conversion_device","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","catalog_segment_value_mobile_purchase_roas":[{"value":0}],"clicks":0,"cost_per_estimated_ad_recallers":0.01,"cpm":1.470588,"cpp":1.492537,"created_time":"2021-02-09","ctr":0,"date_start":"2021-02-11","date_stop":"2021-02-11","estimated_ad_recall_rate":14.925373,"estimated_ad_recallers":10,"frequency":1.014925,"impressions":68,"inline_link_clicks":0,"inline_post_engagement":0,"mobile_app_purchase_roas":[{"value":0}],"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","reach":67,"spend":0.1,"unique_clicks":0,"unique_ctr":0,"unique_inline_link_clicks":0,"unique_link_clicks_ctr":0,"updated_time":"2021-08-27","website_purchase_roas":[{"value":0}],"device_platform":"desktop"},"emitted_at":1692180864186} -{"stream":"ads_insights_action_reaction","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"conversion_rate_ranking":"UNKNOWN","created_time":"2021-02-09","date_start":"2021-02-08","date_stop":"2021-02-08","engagement_rate_ranking":"UNKNOWN","frequency":0,"impressions":0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":0,"social_spend":0,"spend":0,"unique_clicks":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1692180909192} -{"stream":"ads_insights_action_type","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_type":"link_click","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_type":"page_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_type":"post_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2}],"ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","catalog_segment_value_mobile_purchase_roas":[{"value":0}],"clicks":2,"conversion_rate_ranking":"UNKNOWN","cost_per_action_type":[{"action_type":"link_click","value":0.23,"1d_click":0.23,"7d_click":0.23,"28d_click":0.23},{"action_type":"page_engagement","value":0.23,"1d_click":0.23,"7d_click":0.23,"28d_click":0.23},{"action_type":"post_engagement","value":0.23,"1d_click":0.23,"7d_click":0.23,"28d_click":0.23}],"cost_per_estimated_ad_recallers":0.006571,"cost_per_inline_link_click":0.23,"cost_per_inline_post_engagement":0.23,"cost_per_outbound_click":[{"action_type":"outbound_click","value":0.23}],"cost_per_unique_action_type":[{"action_type":"link_click","value":0.23,"1d_click":0.23,"7d_click":0.23,"28d_click":0.23},{"action_type":"page_engagement","value":0.23,"1d_click":0.23,"7d_click":0.23,"28d_click":0.23},{"action_type":"post_engagement","value":0.23,"1d_click":0.23,"7d_click":0.23,"28d_click":0.23}],"cost_per_unique_click":0.23,"cost_per_unique_inline_link_click":0.23,"cost_per_unique_outbound_click":[{"action_type":"outbound_click","value":0.23}],"cpc":0.23,"cpm":0.946502,"cpp":0.964361,"created_time":"2021-02-09","ctr":0.411523,"date_start":"2021-02-11","date_stop":"2021-02-11","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":14.675052,"estimated_ad_recallers":70,"frequency":1.018868,"impressions":486,"inline_link_click_ctr":0.411523,"inline_link_clicks":2,"inline_post_engagement":2,"mobile_app_purchase_roas":[{"value":0}],"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_type":"outbound_click","value":2}],"outbound_clicks_ctr":[{"action_type":"outbound_click","value":0.411523}],"quality_ranking":"UNKNOWN","reach":477,"social_spend":0,"spend":0.46,"unique_actions":[{"action_type":"link_click","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_type":"page_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_type":"post_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2}],"unique_clicks":2,"unique_ctr":0.419287,"unique_inline_link_click_ctr":0.419287,"unique_inline_link_clicks":2,"unique_link_clicks_ctr":0.419287,"unique_outbound_clicks":[{"action_type":"outbound_click","value":2}],"unique_outbound_clicks_ctr":[{"action_type":"outbound_click","value":0.419287}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.411523}],"website_purchase_roas":[{"value":0}],"wish_bid":0},"emitted_at":1692180948892} -{"stream":"ads_insights_action_video_sound","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"conversion_rate_ranking":"UNKNOWN","created_time":"2021-02-09","date_start":"2021-02-08","date_stop":"2021-02-08","engagement_rate_ranking":"UNKNOWN","frequency":0,"impressions":0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":0,"social_spend":0,"spend":0,"unique_clicks":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1692180958086} -{"stream":"ads_insights_action_video_type","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"conversion_rate_ranking":"UNKNOWN","created_time":"2021-02-09","date_start":"2021-02-08","date_stop":"2021-02-08","engagement_rate_ranking":"UNKNOWN","frequency":0,"impressions":0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":0,"social_spend":0,"spend":0,"unique_clicks":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1692180966403} -{"stream":"ads_insights_age_and_gender","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","catalog_segment_value_mobile_purchase_roas":[{"value":0}],"clicks":0,"cost_per_estimated_ad_recallers":0.01,"cpm":0.714286,"cpp":0.769231,"created_time":"2021-02-09","ctr":0,"date_start":"2021-02-11","date_stop":"2021-02-11","estimated_ad_recall_rate":7.692308,"estimated_ad_recallers":1,"frequency":1.076923,"gender_targeting":"female","impressions":14,"inline_link_clicks":0,"inline_post_engagement":0,"mobile_app_purchase_roas":[{"value":0}],"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","reach":13,"spend":0.01,"unique_clicks":0,"unique_ctr":0,"unique_inline_link_clicks":0,"unique_link_clicks_ctr":0,"updated_time":"2021-08-27","website_purchase_roas":[{"value":0}],"age":"18-24","gender":"female"},"emitted_at":1692180975689} -{"stream":"ads_insights_country","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","catalog_segment_value_mobile_purchase_roas":[{"value":0}],"clicks":0,"cost_per_estimated_ad_recallers":0.008667,"cpm":1.293532,"cpp":1.381142,"created_time":"2021-02-09","ctr":0,"date_start":"2021-02-12","date_stop":"2021-02-12","estimated_ad_recall_rate":15.936255,"estimated_ad_recallers":120,"frequency":1.067729,"impressions":804,"inline_link_clicks":0,"inline_post_engagement":0,"mobile_app_purchase_roas":[{"value":0}],"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","reach":753,"spend":1.04,"unique_clicks":0,"unique_ctr":0,"unique_inline_link_clicks":0,"unique_link_clicks_ctr":0,"updated_time":"2021-08-27","website_purchase_roas":[{"value":0}],"country":"US"},"emitted_at":1692180985386} -{"stream":"ads_insights_delivery_device","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","catalog_segment_value_mobile_purchase_roas":[{"value":0}],"clicks":0,"cost_per_estimated_ad_recallers":0.01,"cpm":1.470588,"cpp":1.492537,"created_time":"2021-02-09","ctr":0,"date_start":"2021-02-11","date_stop":"2021-02-11","estimated_ad_recall_rate":14.925373,"estimated_ad_recallers":10,"frequency":1.014925,"impressions":68,"inline_link_clicks":0,"inline_post_engagement":0,"mobile_app_purchase_roas":[{"value":0}],"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","reach":67,"spend":0.1,"unique_clicks":0,"unique_ctr":0,"unique_inline_link_clicks":0,"unique_link_clicks_ctr":0,"updated_time":"2021-08-27","website_purchase_roas":[{"value":0}],"device_platform":"desktop"},"emitted_at":1692180993524} -{"stream":"ads_insights_delivery_platform","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_type":"link_click","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_type":"page_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_type":"post_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2}],"ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","catalog_segment_value_mobile_purchase_roas":[{"value":0}],"clicks":2,"cost_per_action_type":[{"action_type":"link_click","value":0.225,"1d_click":0.225,"7d_click":0.225,"28d_click":0.225},{"action_type":"page_engagement","value":0.225,"1d_click":0.225,"7d_click":0.225,"28d_click":0.225},{"action_type":"post_engagement","value":0.225,"1d_click":0.225,"7d_click":0.225,"28d_click":0.225}],"cost_per_estimated_ad_recallers":0.0075,"cost_per_inline_link_click":0.225,"cost_per_inline_post_engagement":0.225,"cost_per_outbound_click":[{"action_type":"outbound_click","value":0.225}],"cost_per_unique_action_type":[{"action_type":"link_click","value":0.225,"1d_click":0.225,"7d_click":0.225,"28d_click":0.225},{"action_type":"page_engagement","value":0.225,"1d_click":0.225,"7d_click":0.225,"28d_click":0.225},{"action_type":"post_engagement","value":0.225,"1d_click":0.225,"7d_click":0.225,"28d_click":0.225}],"cost_per_unique_click":0.225,"cost_per_unique_inline_link_click":0.225,"cost_per_unique_outbound_click":[{"action_type":"outbound_click","value":0.225}],"cpc":0.225,"cpm":1.034483,"cpp":1.056338,"created_time":"2021-02-09","ctr":0.45977,"date_start":"2021-02-11","date_stop":"2021-02-11","estimated_ad_recall_rate":14.084507,"estimated_ad_recallers":60,"frequency":1.021127,"impressions":435,"inline_link_click_ctr":0.45977,"inline_link_clicks":2,"inline_post_engagement":2,"mobile_app_purchase_roas":[{"value":0}],"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_type":"outbound_click","value":2}],"outbound_clicks_ctr":[{"action_type":"outbound_click","value":0.45977}],"reach":426,"spend":0.45,"unique_actions":[{"action_type":"link_click","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_type":"page_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_type":"post_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2}],"unique_clicks":2,"unique_ctr":0.469484,"unique_inline_link_click_ctr":0.469484,"unique_inline_link_clicks":2,"unique_link_clicks_ctr":0.469484,"unique_outbound_clicks":[{"action_type":"outbound_click","value":2}],"unique_outbound_clicks_ctr":[{"action_type":"outbound_click","value":0.469484}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.45977}],"website_purchase_roas":[{"value":0}],"publisher_platform":"facebook"},"emitted_at":1692181004988} -{"stream":"ads_insights_delivery_platform_and_device_platform","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","catalog_segment_value_mobile_purchase_roas":[{"value":0}],"clicks":0,"cost_per_estimated_ad_recallers":0.01,"cpm":1.470588,"cpp":1.492537,"created_time":"2021-02-09","ctr":0,"date_start":"2021-02-11","date_stop":"2021-02-11","estimated_ad_recall_rate":14.925373,"estimated_ad_recallers":10,"frequency":1.014925,"impressions":68,"inline_link_clicks":0,"inline_post_engagement":0,"mobile_app_purchase_roas":[{"value":0}],"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","reach":67,"spend":0.1,"unique_clicks":0,"unique_ctr":0,"unique_inline_link_clicks":0,"unique_link_clicks_ctr":0,"updated_time":"2021-08-27","website_purchase_roas":[{"value":0}],"publisher_platform":"facebook","device_platform":"desktop"},"emitted_at":1692181043593} -{"stream":"ads_insights_demographics_age","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","catalog_segment_value_mobile_purchase_roas":[{"value":0}],"clicks":0,"cost_per_estimated_ad_recallers":0.0045,"cpm":0.633803,"cpp":0.656934,"created_time":"2021-02-09","ctr":0,"date_start":"2021-02-11","date_stop":"2021-02-11","estimated_ad_recall_rate":14.59854,"estimated_ad_recallers":20,"frequency":1.036496,"impressions":142,"inline_link_clicks":0,"inline_post_engagement":0,"mobile_app_purchase_roas":[{"value":0}],"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","reach":137,"spend":0.09,"unique_clicks":0,"unique_ctr":0,"unique_inline_link_clicks":0,"unique_link_clicks_ctr":0,"updated_time":"2021-08-27","website_purchase_roas":[{"value":0}],"age":"18-24"},"emitted_at":1692181051722} -{"stream":"ads_insights_demographics_country","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_type":"link_click","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_type":"page_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_type":"post_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2}],"ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","catalog_segment_value_mobile_purchase_roas":[{"value":0}],"clicks":2,"cost_per_action_type":[{"action_type":"link_click","value":0.23,"1d_click":0.23,"7d_click":0.23,"28d_click":0.23},{"action_type":"page_engagement","value":0.23,"1d_click":0.23,"7d_click":0.23,"28d_click":0.23},{"action_type":"post_engagement","value":0.23,"1d_click":0.23,"7d_click":0.23,"28d_click":0.23}],"cost_per_estimated_ad_recallers":0.006571,"cost_per_inline_link_click":0.23,"cost_per_inline_post_engagement":0.23,"cost_per_outbound_click":[{"action_type":"outbound_click","value":0.23}],"cost_per_unique_action_type":[{"action_type":"link_click","value":0.23,"1d_click":0.23,"7d_click":0.23,"28d_click":0.23},{"action_type":"page_engagement","value":0.23,"1d_click":0.23,"7d_click":0.23,"28d_click":0.23},{"action_type":"post_engagement","value":0.23,"1d_click":0.23,"7d_click":0.23,"28d_click":0.23}],"cost_per_unique_click":0.23,"cost_per_unique_inline_link_click":0.23,"cost_per_unique_outbound_click":[{"action_type":"outbound_click","value":0.23}],"cpc":0.23,"cpm":0.946502,"cpp":0.964361,"created_time":"2021-02-09","ctr":0.411523,"date_start":"2021-02-11","date_stop":"2021-02-11","estimated_ad_recall_rate":14.675052,"estimated_ad_recallers":70,"frequency":1.018868,"impressions":486,"inline_link_click_ctr":0.411523,"inline_link_clicks":2,"inline_post_engagement":2,"mobile_app_purchase_roas":[{"value":0}],"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_type":"outbound_click","value":2}],"outbound_clicks_ctr":[{"action_type":"outbound_click","value":0.411523}],"reach":477,"spend":0.46,"unique_actions":[{"action_type":"link_click","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_type":"page_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_type":"post_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2}],"unique_clicks":2,"unique_ctr":0.419287,"unique_inline_link_click_ctr":0.419287,"unique_inline_link_clicks":2,"unique_link_clicks_ctr":0.419287,"unique_outbound_clicks":[{"action_type":"outbound_click","value":2}],"unique_outbound_clicks_ctr":[{"action_type":"outbound_click","value":0.419287}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.411523}],"website_purchase_roas":[{"value":0}],"country":"US"},"emitted_at":1692181061009} -{"stream":"ads_insights_demographics_dma_region","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"cost_per_estimated_ad_recallers":0,"cpm":0,"created_time":"2021-02-09","ctr":0,"date_start":"2021-02-12","date_stop":"2021-02-12","estimated_ad_recallers":1,"frequency":1.333333,"impressions":4,"inline_link_clicks":0,"inline_post_engagement":0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks_ctr":[{"value":0}],"reach":3,"spend":0,"unique_clicks":0,"unique_outbound_clicks_ctr":[{"value":0}],"updated_time":"2021-08-27","dma":"Abilene-Sweetwater"},"emitted_at":1692181100592} -{"stream":"ads_insights_demographics_gender","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","catalog_segment_value_mobile_purchase_roas":[{"value":0}],"clicks":0,"cost_per_estimated_ad_recallers":0.008,"cpm":1.333333,"cpp":1.37931,"created_time":"2021-02-09","ctr":0,"date_start":"2021-02-11","date_stop":"2021-02-11","estimated_ad_recall_rate":17.241379,"estimated_ad_recallers":10,"frequency":1.034483,"gender_targeting":"female","impressions":60,"inline_link_clicks":0,"inline_post_engagement":0,"mobile_app_purchase_roas":[{"value":0}],"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","reach":58,"spend":0.08,"unique_clicks":0,"unique_ctr":0,"unique_inline_link_clicks":0,"unique_link_clicks_ctr":0,"updated_time":"2021-08-27","website_purchase_roas":[{"value":0}],"gender":"female"},"emitted_at":1692181125390} -{"stream":"ads_insights_dma","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"cost_per_estimated_ad_recallers":0,"cpm":0,"created_time":"2021-02-09","ctr":0,"date_start":"2021-02-12","date_stop":"2021-02-12","estimated_ad_recallers":1,"frequency":1.333333,"impressions":4,"inline_link_clicks":0,"inline_post_engagement":0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","reach":3,"spend":0,"unique_clicks":0,"updated_time":"2021-08-27","dma":"Abilene-Sweetwater"},"emitted_at":1692181165207} -{"stream":"ads_insights_platform_and_device","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","catalog_segment_value_mobile_purchase_roas":[{"value":0}],"clicks":0,"cost_per_estimated_ad_recallers":0.007,"cpm":1.627907,"cpp":1.627907,"created_time":"2021-02-09","ctr":0,"date_start":"2021-02-11","date_stop":"2021-02-11","estimated_ad_recall_rate":23.255814,"estimated_ad_recallers":10,"frequency":1,"impressions":43,"inline_link_clicks":0,"inline_post_engagement":0,"mobile_app_purchase_roas":[{"value":0}],"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","reach":43,"spend":0.07,"unique_clicks":0,"unique_ctr":0,"unique_inline_link_clicks":0,"unique_link_clicks_ctr":0,"updated_time":"2021-08-27","website_purchase_roas":[{"value":0}],"publisher_platform":"facebook","platform_position":"feed","impression_device":"android_smartphone"},"emitted_at":1692181188895} -{"stream":"ads_insights_region","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"cost_per_estimated_ad_recallers":0,"cpm":0,"cpp":0,"created_time":"2021-02-09","ctr":0,"date_start":"2021-02-11","date_stop":"2021-02-11","estimated_ad_recall_rate":8.333333,"estimated_ad_recallers":1,"frequency":1,"impressions":12,"inline_link_clicks":0,"inline_post_engagement":0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","reach":12,"spend":0,"unique_clicks":0,"unique_ctr":0,"unique_inline_link_clicks":0,"unique_link_clicks_ctr":0,"updated_time":"2021-08-27","region":"Alabama"},"emitted_at":1692181230021} -{"stream": "customcustom_insight_stream", "data": {"account_id": "212551616838260", "cpc": 0.27, "ad_id": "23846765228310398", "clicks": 1, "account_name": "Airbyte", "date_start": "2021-02-15", "date_stop": "2021-02-15", "gender": "female"}, "emitted_at": 1695385890508} \ No newline at end of file +{"stream":"ads_insights","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"page_engagement","value":3.0,"1d_click":3.0,"7d_click":3.0,"28d_click":3.0},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"post_engagement","value":3.0,"1d_click":3.0,"7d_click":3.0,"28d_click":3.0},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"link_click","value":3.0,"1d_click":3.0,"7d_click":3.0,"28d_click":3.0}],"ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":3,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.007,"cost_per_inline_link_click":0.396667,"cost_per_inline_post_engagement":0.396667,"cost_per_unique_click":0.396667,"cost_per_unique_inline_link_click":0.396667,"cpc":0.396667,"cpm":0.902199,"cpp":0.948207,"created_time":"2021-02-09","ctr":0.227445,"date_start":"2021-02-15","date_stop":"2021-02-15","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":13.545817,"estimated_ad_recallers":170.0,"frequency":1.050996,"impressions":1319,"inline_link_click_ctr":0.227445,"inline_link_clicks":3,"inline_post_engagement":3,"instant_experience_clicks_to_open":1.0,"instant_experience_clicks_to_start":1.0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"outbound_click","value":3.0}],"quality_ranking":"UNKNOWN","reach":1255,"social_spend":0.0,"spend":1.19,"unique_actions":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"page_engagement","value":3.0,"1d_click":3.0,"7d_click":3.0,"28d_click":3.0},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"post_engagement","value":3.0,"1d_click":3.0,"7d_click":3.0,"28d_click":3.0},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"link_click","value":3.0,"1d_click":3.0,"7d_click":3.0,"28d_click":3.0}],"unique_clicks":3,"unique_ctr":0.239044,"unique_inline_link_click_ctr":0.239044,"unique_inline_link_clicks":3,"unique_link_clicks_ctr":0.239044,"unique_outbound_clicks":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"outbound_click","value":3.0}],"updated_time":"2021-08-27","video_play_curve_actions":[{"action_type":"video_view"}],"website_ctr":[{"action_type":"link_click","value":0.227445}],"wish_bid":0.0},"emitted_at":1682686057366} +{"stream":"ads_insights_action_carousel_card","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":3,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.007,"cost_per_inline_link_click":0.396667,"cost_per_inline_post_engagement":0.396667,"cost_per_unique_click":0.396667,"cost_per_unique_inline_link_click":0.396667,"cpc":0.396667,"cpm":0.902199,"cpp":0.948207,"created_time":"2021-02-09","ctr":0.227445,"date_start":"2021-02-15","date_stop":"2021-02-15","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":13.545817,"estimated_ad_recallers":170.0,"frequency":1.050996,"impressions":1319,"inline_link_click_ctr":0.227445,"inline_post_engagement":3,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":1255,"social_spend":0.0,"spend":1.19,"unique_actions":[{"action_type":"page_engagement","value":3.0,"1d_click":3.0,"7d_click":3.0,"28d_click":3.0},{"action_type":"post_engagement","value":3.0,"1d_click":3.0,"7d_click":3.0,"28d_click":3.0},{"action_type":"link_click","value":3.0,"1d_click":3.0,"7d_click":3.0,"28d_click":3.0}],"unique_clicks":3,"unique_ctr":0.239044,"unique_inline_link_click_ctr":0.239044,"unique_inline_link_clicks":3,"updated_time":"2021-08-27","video_play_curve_actions":[{"action_type":"video_view"}],"website_ctr":[{"action_type":"link_click","value":0.227445}],"wish_bid":0.0},"emitted_at":1692180857757} +{"stream":"ads_insights_action_conversion_device","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"cost_per_estimated_ad_recallers":0.004,"cpm":0.754717,"cpp":0.784314,"created_time":"2021-02-11","ctr":0.0,"date_start":"2021-02-15","date_stop":"2021-02-15","estimated_ad_recall_rate":19.607843,"estimated_ad_recallers":10.0,"frequency":1.039216,"impressions":53,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","reach":51,"spend":0.04,"unique_clicks":0,"updated_time":"2021-08-27","device_platform":"desktop"},"emitted_at":1696936270620} +{"stream":"ads_insights_action_reaction","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":1,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.008889,"cost_per_unique_click":0.8,"cpc":0.8,"cpm":1.255887,"cpp":1.296596,"created_time":"2021-02-11","ctr":0.156986,"date_start":"2021-02-14","date_stop":"2021-02-14","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":14.58671,"estimated_ad_recallers":90.0,"frequency":1.032415,"impressions":637,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":617,"social_spend":0.0,"spend":0.8,"unique_clicks":1,"unique_ctr":0.162075,"updated_time":"2021-08-27","video_play_curve_actions":[{"action_type":"video_view"}],"wish_bid":0.0},"emitted_at":1696936287351} +{"stream":"ads_insights_action_type","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":1,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.008889,"cost_per_unique_click":0.8,"cpc":0.8,"cpm":1.255887,"cpp":1.296596,"created_time":"2021-02-11","ctr":0.156986,"date_start":"2021-02-14","date_stop":"2021-02-14","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":14.58671,"estimated_ad_recallers":90.0,"frequency":1.032415,"impressions":637,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":617,"social_spend":0.0,"spend":0.8,"unique_clicks":1,"unique_ctr":0.162075,"updated_time":"2021-08-27","video_play_curve_actions":[{"action_type":"video_view"}],"wish_bid":0.0},"emitted_at":1696936315908} +{"stream":"ads_insights_action_video_sound","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":1,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.008889,"cost_per_unique_click":0.8,"cpc":0.8,"cpm":1.255887,"cpp":1.296596,"created_time":"2021-02-11","ctr":0.156986,"date_start":"2021-02-14","date_stop":"2021-02-14","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":14.58671,"estimated_ad_recallers":90.0,"frequency":1.032415,"impressions":637,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":617,"social_spend":0.0,"spend":0.8,"unique_clicks":1,"unique_ctr":0.162075,"updated_time":"2021-08-27","wish_bid":0.0},"emitted_at":1696936296894} +{"stream":"ads_insights_action_video_type","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":1,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.008889,"cost_per_unique_click":0.8,"cpc":0.8,"cpm":1.255887,"cpp":1.296596,"created_time":"2021-02-11","ctr":0.156986,"date_start":"2021-02-14","date_stop":"2021-02-14","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":14.58671,"estimated_ad_recallers":90.0,"frequency":1.032415,"impressions":637,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":617,"social_spend":0.0,"spend":0.8,"unique_clicks":1,"unique_ctr":0.162075,"updated_time":"2021-08-27","video_play_curve_actions":[{"action_type":"video_view"}],"wish_bid":0.0},"emitted_at":1696936306631} +{"stream":"ads_insights_age_and_gender","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"cost_per_estimated_ad_recallers":0.02,"cpm":0.869565,"cpp":0.952381,"created_time":"2021-02-11","ctr":0.0,"date_start":"2021-02-15","date_stop":"2021-02-15","estimated_ad_recall_rate":4.761905,"estimated_ad_recallers":1.0,"frequency":1.095238,"gender_targeting":"female","impressions":23,"instant_experience_clicks_to_open":1.0,"instant_experience_clicks_to_start":1.0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","reach":21,"spend":0.02,"unique_clicks":0,"updated_time":"2021-08-27","age":"55-64","gender":"female"},"emitted_at":1696939548058} +{"stream":"ads_insights_country","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":1,"cost_per_estimated_ad_recallers":0.008889,"cost_per_unique_click":0.8,"cpc":0.8,"cpm":1.255887,"cpp":1.296596,"created_time":"2021-02-11","ctr":0.156986,"date_start":"2021-02-14","date_stop":"2021-02-14","estimated_ad_recall_rate":14.58671,"estimated_ad_recallers":90.0,"frequency":1.032415,"impressions":637,"instant_experience_clicks_to_open":1.0,"instant_experience_clicks_to_start":1.0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","reach":617,"spend":0.8,"unique_clicks":1,"unique_ctr":0.162075,"updated_time":"2021-08-27","country":"US"},"emitted_at":1696936565587} +{"stream":"ads_insights_delivery_device","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"cost_per_estimated_ad_recallers":0.0075,"cpm":1.630435,"cpp":1.744186,"created_time":"2021-02-09","ctr":0.0,"date_start":"2021-02-15","date_stop":"2021-02-15","estimated_ad_recall_rate":23.255814,"estimated_ad_recallers":20.0,"frequency":1.069767,"impressions":92,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","reach":86,"spend":0.15,"unique_clicks":0,"updated_time":"2021-08-27","device_platform":"desktop"},"emitted_at":1696936327621} +{"stream":"ads_insights_delivery_platform","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_type":"page_engagement","value":3.0,"1d_click":3.0,"7d_click":3.0,"28d_click":3.0},{"action_type":"post_engagement","value":3.0,"1d_click":3.0,"7d_click":3.0,"28d_click":3.0},{"action_type":"link_click","value":3.0,"1d_click":3.0,"7d_click":3.0,"28d_click":3.0}],"ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":3,"cost_per_action_type":[{"action_type":"post_engagement","value":0.39,"1d_click":0.39,"7d_click":0.39,"28d_click":0.39},{"action_type":"page_engagement","value":0.39,"1d_click":0.39,"7d_click":0.39,"28d_click":0.39},{"action_type":"link_click","value":0.39,"1d_click":0.39,"7d_click":0.39,"28d_click":0.39}],"cost_per_estimated_ad_recallers":0.006882,"cost_per_inline_link_click":0.39,"cost_per_inline_post_engagement":0.39,"cost_per_outbound_click":[{"action_type":"outbound_click","value":0.39}],"cost_per_unique_action_type":[{"action_type":"post_engagement","value":0.39,"1d_click":0.39,"7d_click":0.39,"28d_click":0.39},{"action_type":"page_engagement","value":0.39,"1d_click":0.39,"7d_click":0.39,"28d_click":0.39},{"action_type":"link_click","value":0.39,"1d_click":0.39,"7d_click":0.39,"28d_click":0.39}],"cost_per_unique_click":0.39,"cost_per_unique_inline_link_click":0.39,"cost_per_unique_outbound_click":[{"action_type":"outbound_click","value":0.39}],"cpc":0.39,"cpm":0.922713,"cpp":0.971761,"created_time":"2021-02-09","ctr":0.236593,"date_start":"2021-02-15","date_stop":"2021-02-15","estimated_ad_recall_rate":14.119601,"estimated_ad_recallers":170.0,"frequency":1.053156,"impressions":1268,"inline_link_click_ctr":0.236593,"inline_link_clicks":3,"inline_post_engagement":3,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_type":"outbound_click","value":3.0}],"outbound_clicks_ctr":[{"action_type":"outbound_click","value":0.236593}],"reach":1204,"spend":1.17,"unique_actions":[{"action_type":"page_engagement","value":3.0,"1d_click":3.0,"7d_click":3.0,"28d_click":3.0},{"action_type":"post_engagement","value":3.0,"1d_click":3.0,"7d_click":3.0,"28d_click":3.0},{"action_type":"link_click","value":3.0,"1d_click":3.0,"7d_click":3.0,"28d_click":3.0}],"unique_clicks":3,"unique_ctr":0.249169,"unique_inline_link_click_ctr":0.249169,"unique_inline_link_clicks":3,"unique_link_clicks_ctr":0.249169,"unique_outbound_clicks":[{"action_type":"outbound_click","value":3.0}],"unique_outbound_clicks_ctr":[{"action_type":"outbound_click","value":0.249169}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.236593}],"publisher_platform":"facebook"},"emitted_at":1696936337306} +{"stream":"ads_insights_delivery_platform_and_device_platform","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"cost_per_estimated_ad_recallers":0.002,"cpm":0.392157,"cpp":0.392157,"created_time":"2021-02-09","ctr":0.0,"date_start":"2021-02-15","date_stop":"2021-02-15","estimated_ad_recall_rate":19.607843,"estimated_ad_recallers":10.0,"frequency":1.0,"impressions":51,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","reach":51,"spend":0.02,"unique_clicks":0,"updated_time":"2021-08-27","publisher_platform":"instagram","device_platform":"mobile_app"},"emitted_at":1696967644628} +{"stream":"ads_insights_demographics_age","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"cost_per_estimated_ad_recallers":0.0085,"cpm":1.14094,"cpp":1.188811,"created_time":"2021-02-11","ctr":0.0,"date_start":"2021-02-15","date_stop":"2021-02-15","estimated_ad_recall_rate":13.986014,"estimated_ad_recallers":20.0,"frequency":1.041958,"impressions":149,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","reach":143,"spend":0.17,"unique_clicks":0,"updated_time":"2021-08-27","age":"25-34"},"emitted_at":1696936389857} +{"stream":"ads_insights_demographics_country","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":1,"cost_per_estimated_ad_recallers":0.008889,"cost_per_unique_click":0.8,"cpc":0.8,"cpm":1.255887,"cpp":1.296596,"created_time":"2021-02-11","ctr":0.156986,"date_start":"2021-02-14","date_stop":"2021-02-14","estimated_ad_recall_rate":14.58671,"estimated_ad_recallers":90.0,"frequency":1.032415,"impressions":637,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","reach":617,"spend":0.8,"unique_clicks":1,"unique_ctr":0.162075,"updated_time":"2021-08-27","country":"US"},"emitted_at":1696936440731} +{"stream":"ads_insights_demographics_dma_region","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"cost_per_estimated_ad_recallers":0.0,"cpm":0.0,"created_time":"2021-02-11","ctr":0.0,"date_start":"2021-02-15","date_stop":"2021-02-15","estimated_ad_recallers":1.0,"frequency":1.0,"impressions":1,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","reach":1,"spend":0.0,"unique_clicks":0,"updated_time":"2021-08-27","dma":"Anchorage"},"emitted_at":1696936491393} +{"stream":"ads_insights_demographics_gender","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"cost_per_estimated_ad_recallers":0.0085,"cpm":1.268657,"cpp":1.338583,"created_time":"2021-02-11","ctr":0.0,"date_start":"2021-02-14","date_stop":"2021-02-14","estimated_ad_recall_rate":15.748032,"estimated_ad_recallers":20.0,"frequency":1.055118,"gender_targeting":"female","impressions":134,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","reach":127,"spend":0.17,"unique_clicks":0,"updated_time":"2021-08-27","gender":"female"},"emitted_at":1696967753477} +{"stream":"ads_insights_dma","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"cost_per_estimated_ad_recallers":0.0,"cpm":0.0,"created_time":"2021-02-11","ctr":0.0,"date_start":"2021-02-15","date_stop":"2021-02-15","estimated_ad_recallers":1.0,"frequency":1.0,"impressions":1,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","reach":1,"spend":0.0,"unique_clicks":0,"updated_time":"2021-08-27","dma":"West Palm Beach-Ft. Pierce"},"emitted_at":1696936556045} +{"stream":"ads_insights_platform_and_device","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"cost_per_estimated_ad_recallers":0.0,"cpm":0.0,"cpp":0.0,"created_time":"2021-02-11","ctr":0.0,"date_start":"2021-02-15","date_stop":"2021-02-15","estimated_ad_recall_rate":12.5,"estimated_ad_recallers":1.0,"frequency":1.0,"impressions":8,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","reach":8,"spend":0.0,"unique_clicks":0,"updated_time":"2021-08-27","publisher_platform":"instagram","platform_position":"feed","impression_device":"android_smartphone"},"emitted_at":1696936579028} +{"stream":"ads_insights_region","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"cost_per_estimated_ad_recallers":0.02,"cpm":1.111111,"cpp":1.111111,"created_time":"2021-02-11","ctr":0.0,"date_start":"2021-02-15","date_stop":"2021-02-15","estimated_ad_recall_rate":5.555556,"estimated_ad_recallers":1.0,"frequency":1.0,"impressions":18,"instant_experience_clicks_to_open":1.0,"instant_experience_clicks_to_start":1.0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","reach":18,"spend":0.02,"unique_clicks":0,"updated_time":"2021-08-27","region":"New York"},"emitted_at":1696936621899} +{"stream":"customcustom_insight_stream","data":{"account_id":"212551616838260","cpc":0.27,"ad_id":"23846765228310398","clicks":1,"account_name":"Airbyte","date_start":"2021-02-15","date_stop":"2021-02-15","gender":"female"},"emitted_at":1695385890508} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-facebook-marketing/metadata.yaml b/airbyte-integrations/connectors/source-facebook-marketing/metadata.yaml index 031027b0d0eb..20a02664bc26 100644 --- a/airbyte-integrations/connectors/source-facebook-marketing/metadata.yaml +++ b/airbyte-integrations/connectors/source-facebook-marketing/metadata.yaml @@ -5,7 +5,7 @@ data: connectorSubtype: api connectorType: source definitionId: e7778cfc-e97c-4458-9ecb-b4f2bba8946c - dockerImageTag: 1.1.14 + dockerImageTag: 1.1.16 dockerRepository: airbyte/source-facebook-marketing githubIssueLabel: source-facebook-marketing icon: facebook.svg diff --git a/airbyte-integrations/connectors/source-facebook-marketing/source_facebook_marketing/streams/base_insight_streams.py b/airbyte-integrations/connectors/source-facebook-marketing/source_facebook_marketing/streams/base_insight_streams.py index 17ceae6d0598..0372057c645f 100644 --- a/airbyte-integrations/connectors/source-facebook-marketing/source_facebook_marketing/streams/base_insight_streams.py +++ b/airbyte-integrations/connectors/source-facebook-marketing/source_facebook_marketing/streams/base_insight_streams.py @@ -124,7 +124,9 @@ def read_records( job = stream_slice["insight_job"] try: for obj in job.get_result(): - yield obj.export_all_data() + data = obj.export_all_data() + if self._response_data_is_valid(data): + yield data except FacebookBadObjectError as e: raise AirbyteTracedException( message=f"API error occurs on Facebook side during job: {job}, wrong (empty) response received with errors: {e} " @@ -221,6 +223,12 @@ def check_breakdowns(self): } self._api.account.get_insights(params=params, is_async=False) + def _response_data_is_valid(self, data: Iterable[Mapping[str, Any]]) -> bool: + """ + Ensure data contains all the fields specified in self.breakdowns + """ + return all([breakdown in data for breakdown in self.breakdowns]) + def stream_slices( self, sync_mode: SyncMode, cursor_field: List[str] = None, stream_state: Mapping[str, Any] = None ) -> Iterable[Optional[Mapping[str, Any]]]: diff --git a/airbyte-integrations/connectors/source-facebook-marketing/source_facebook_marketing/streams/streams.py b/airbyte-integrations/connectors/source-facebook-marketing/source_facebook_marketing/streams/streams.py index eb018352dec0..23fd4b565bdf 100644 --- a/airbyte-integrations/connectors/source-facebook-marketing/source_facebook_marketing/streams/streams.py +++ b/airbyte-integrations/connectors/source-facebook-marketing/source_facebook_marketing/streams/streams.py @@ -13,6 +13,7 @@ from facebook_business.adobjects.adaccount import AdAccount as FBAdAccount from facebook_business.adobjects.adimage import AdImage from facebook_business.adobjects.user import User +from facebook_business.exceptions import FacebookRequestError from .base_insight_streams import AdsInsights from .base_streams import FBMarketingIncrementalStream, FBMarketingReversedIncrementalStream, FBMarketingStream @@ -187,15 +188,31 @@ def fields(self) -> List[str]: # https://developers.facebook.com/docs/marketing-apis/guides/javascript-ads-dialog-for-payments/ # To access "funding_source_details", the user making the API call must have a MANAGE task permission for # that specific ad account. - if "funding_source_details" in properties and "MANAGE" not in self.get_task_permissions(): + permissions = self.get_task_permissions() + if "funding_source_details" in properties and "MANAGE" not in permissions: properties.remove("funding_source_details") - if "is_prepay_account" in properties and "MANAGE" not in self.get_task_permissions(): + if "is_prepay_account" in properties and "MANAGE" not in permissions: properties.remove("is_prepay_account") return properties def list_objects(self, params: Mapping[str, Any]) -> Iterable: """noop in case of AdAccount""" - return [FBAdAccount(self._api.account.get_id()).api_get(fields=self.fields)] + fields = self.fields + try: + return [FBAdAccount(self._api.account.get_id()).api_get(fields=fields)] + except FacebookRequestError as e: + # This is a workaround for cases when account seem to have all the required permissions + # but despite of that is not allowed to get `owner` field. See (https://github.com/airbytehq/oncall/issues/3167) + if e.api_error_code() == 200 and e.api_error_message() == "(#200) Requires business_management permission to manage the object": + fields.remove("owner") + return [FBAdAccount(self._api.account.get_id()).api_get(fields=fields)] + # FB api returns a non-obvious error when accessing the `funding_source_details` field + # even though user is granted all the required permissions (`MANAGE`) + # https://github.com/airbytehq/oncall/issues/3031 + if e.api_error_code() == 100 and e.api_error_message() == "Unsupported request - method type: get": + fields.remove("funding_source_details") + return [FBAdAccount(self._api.account.get_id()).api_get(fields=fields)] + raise e class Images(FBMarketingReversedIncrementalStream): diff --git a/airbyte-integrations/connectors/source-facebook-marketing/unit_tests/test_base_insight_streams.py b/airbyte-integrations/connectors/source-facebook-marketing/unit_tests/test_base_insight_streams.py index a92cd95b4912..6f98004bcfce 100644 --- a/airbyte-integrations/connectors/source-facebook-marketing/unit_tests/test_base_insight_streams.py +++ b/airbyte-integrations/connectors/source-facebook-marketing/unit_tests/test_base_insight_streams.py @@ -305,3 +305,20 @@ def test_level_custom(self, api): ) assert stream.level == "adset" + + def test_breackdowns_fields_present_in_response_data(self, api): + stream = AdsInsights( + api=api, + start_date=datetime(2010, 1, 1), + end_date=datetime(2011, 1, 1), + breakdowns=["age", "gender"], + insights_lookback_window=28, + ) + + data = {"age": "0-100", "gender": "male"} + + assert stream._response_data_is_valid(data) + + data = {"id": "0000001", "name": "Pipenpodl Absakopalis"} + + assert not stream._response_data_is_valid(data) diff --git a/airbyte-integrations/connectors/source-facebook-marketing/unit_tests/test_errors.py b/airbyte-integrations/connectors/source-facebook-marketing/unit_tests/test_errors.py index 69462249c352..372ca7c5cdd2 100644 --- a/airbyte-integrations/connectors/source-facebook-marketing/unit_tests/test_errors.py +++ b/airbyte-integrations/connectors/source-facebook-marketing/unit_tests/test_errors.py @@ -10,13 +10,14 @@ from airbyte_cdk.utils.traced_exception import AirbyteTracedException from facebook_business import FacebookAdsApi, FacebookSession from source_facebook_marketing.api import API -from source_facebook_marketing.streams import AdCreatives, AdsInsights +from source_facebook_marketing.streams import AdAccount, AdCreatives, AdsInsights FB_API_VERSION = FacebookAdsApi.API_VERSION account_id = "unknown_account" some_config = {"start_date": "2021-01-23T00:00:00Z", "account_id": account_id, "access_token": "unknown_token"} -act_url = f"{FacebookSession.GRAPH}/{FB_API_VERSION}/act_{account_id}/" +base_url = f"{FacebookSession.GRAPH}/{FB_API_VERSION}/" +act_url = f"{base_url}act_{account_id}/" ad_account_response = { "json": { @@ -105,6 +106,8 @@ # Re-authenticate (for cloud) or refresh access token (for oss) and check if all required permissions are granted ), ( + # One of possible reasons why this error happen is an attempt to access `owner` field: + # GET /act_?fields=,owner,... "error_403_requires_permission", "Credentials don't have enough permissions. Re-authenticate if FB oauth is used or refresh access token with all required permissions.", { @@ -209,6 +212,8 @@ # # # https://developers.facebook.com/community/threads/1232870724022634/ # # I observed that if I remove preview_shareable_link field from the request, the code is working properly. + # # Update (Denys Davydov): same for me, but removing the `funding_source_details` field helps, so + # # we do remove it and do not raise errors; this is tested by a different unit test - see `test_adaccount_list_objects_retry`. # # ), ] @@ -371,3 +376,52 @@ def test_config_error_insights_during_actual_nodes_read(self, requests_mock, nam assert isinstance(error, AirbyteTracedException) assert error.failure_type == FailureType.config_error assert friendly_msg in error.message + + @pytest.mark.parametrize( + "failure_response", + ( + { + "status_code": 403, + "json": { + "message": "(#200) Requires business_management permission to manage the object", + "type": "OAuthException", + "code": 200, + "fbtrace_id": "AOm48i-YaiRlzqnNEnECcW8", + }, + }, + { + "status_code": 400, + "json": { + "message": "Unsupported request - method type: get", + "type": "GraphMethodException", + "code": 100, + "fbtrace_id": "AOm48i-YaiRlzqnNEnECcW8", + }, + }, + ), + ) + def test_adaccount_list_objects_retry(self, requests_mock, failure_response): + """ + Sometimes we get an error: "Requires business_management permission to manage the object" when account has all the required permissions: + [ + 'ads_management', + 'ads_read', + 'business_management', + 'public_profile' + ] + As a workaround for this case we can retry the API call excluding `owner` from `?fields=` GET query param. + """ + api = API(account_id=some_config["account_id"], access_token=some_config["access_token"], page_size=100) + stream = AdAccount(api=api) + + business_user = {"account_id": account_id, "business": {"id": "1", "name": "TEST"}} + requests_mock.register_uri("GET", f"{base_url}me/business_users", status_code=200, json=business_user) + + assigend_users = {"account_id": account_id, "tasks": ["TASK"]} + requests_mock.register_uri("GET", f"{act_url}assigned_users", status_code=200, json=assigend_users) + + success_response = {"status_code": 200, "json": {"account_id": account_id}} + requests_mock.register_uri("GET", f"{act_url}", [failure_response, success_response]) + + record_gen = stream.read_records(sync_mode=SyncMode.full_refresh, stream_slice=None, stream_state={}) + assert list(record_gen) == [{"account_id": "unknown_account", "id": "act_unknown_account"}] diff --git a/airbyte-integrations/connectors/source-github/Dockerfile b/airbyte-integrations/connectors/source-github/Dockerfile index 0d0f3dbf83f1..ae22a18673a7 100644 --- a/airbyte-integrations/connectors/source-github/Dockerfile +++ b/airbyte-integrations/connectors/source-github/Dockerfile @@ -12,5 +12,5 @@ RUN pip install . ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=1.4.6 +LABEL io.airbyte.version=1.5.1 LABEL io.airbyte.name=airbyte/source-github diff --git a/airbyte-integrations/connectors/source-github/metadata.yaml b/airbyte-integrations/connectors/source-github/metadata.yaml index 917baf516516..d60f6edc9007 100644 --- a/airbyte-integrations/connectors/source-github/metadata.yaml +++ b/airbyte-integrations/connectors/source-github/metadata.yaml @@ -5,7 +5,7 @@ data: connectorSubtype: api connectorType: source definitionId: ef69ef6e-aa7f-4af1-a01d-ef775033524e - dockerImageTag: 1.4.6 + dockerImageTag: 1.5.1 maxSecondsBetweenMessages: 5400 dockerRepository: airbyte/source-github githubIssueLabel: source-github diff --git a/airbyte-integrations/connectors/source-github/source_github/schemas/contributor_activity.json b/airbyte-integrations/connectors/source-github/source_github/schemas/contributor_activity.json index 8a4decb6dabc..43bbe08efe1e 100644 --- a/airbyte-integrations/connectors/source-github/source_github/schemas/contributor_activity.json +++ b/airbyte-integrations/connectors/source-github/source_github/schemas/contributor_activity.json @@ -75,7 +75,8 @@ "type": ["null", "boolean"] }, "starred_at": { - "type": ["null", "string"] + "type": ["null", "string"], + "format": "date-time" }, "total": { "type": ["null", "integer"] diff --git a/airbyte-integrations/connectors/source-github/source_github/schemas/issue_timeline_events.json b/airbyte-integrations/connectors/source-github/source_github/schemas/issue_timeline_events.json index 6f520aea2641..3abd58ae3f08 100644 --- a/airbyte-integrations/connectors/source-github/source_github/schemas/issue_timeline_events.json +++ b/airbyte-integrations/connectors/source-github/source_github/schemas/issue_timeline_events.json @@ -76,7 +76,8 @@ "type": "boolean" }, "starred_at": { - "type": "string" + "type": "string", + "format": "date-time" } } }, @@ -179,7 +180,8 @@ "type": "boolean" }, "starred_at": { - "type": "string" + "type": "string", + "format": "date-time" } } } @@ -393,7 +395,8 @@ "type": "boolean" }, "starred_at": { - "type": "string" + "type": "string", + "format": "date-time" } } }, @@ -573,7 +576,8 @@ "type": "boolean" }, "starred_at": { - "type": "string" + "type": "string", + "format": "date-time" } } } @@ -644,7 +648,8 @@ "type": "boolean" }, "starred_at": { - "type": "string" + "type": "string", + "format": "date-time" } } }, @@ -824,7 +829,8 @@ "type": "boolean" }, "starred_at": { - "type": "string" + "type": "string", + "format": "date-time" } } } @@ -996,7 +1002,7 @@ "received_events_url": { "type": "string" }, "type": { "type": "string" }, "site_admin": { "type": "boolean" }, - "starred_at": { "type": "string" } + "starred_at": { "type": "string", "format": "date-time" } } } }, @@ -1027,7 +1033,7 @@ "received_events_url": { "type": "string" }, "type": { "type": "string" }, "site_admin": { "type": "boolean" }, - "starred_at": { "type": "string" } + "starred_at": { "type": "string", "format": "date-time" } } } }, diff --git a/airbyte-integrations/connectors/source-github/source_github/schemas/shared/events/comment.json b/airbyte-integrations/connectors/source-github/source_github/schemas/shared/events/comment.json index 3163cdc70c36..f3555b3b2adf 100644 --- a/airbyte-integrations/connectors/source-github/source_github/schemas/shared/events/comment.json +++ b/airbyte-integrations/connectors/source-github/source_github/schemas/shared/events/comment.json @@ -29,7 +29,7 @@ "received_events_url": { "type": "string" }, "type": { "type": "string" }, "site_admin": { "type": "boolean" }, - "starred_at": { "type": "string" } + "starred_at": { "type": "string", "format": "date-time" } } }, "id": { @@ -70,7 +70,7 @@ "received_events_url": { "type": "string" }, "type": { "type": "string" }, "site_admin": { "type": "boolean" }, - "starred_at": { "type": "string" } + "starred_at": { "type": "string", "format": "date-time" } } }, "created_at": { "type": "string", "format": "date-time" }, @@ -126,7 +126,7 @@ "received_events_url": { "type": "string" }, "type": { "type": "string" }, "site_admin": { "type": "boolean" }, - "starred_at": { "type": "string" } + "starred_at": { "type": "string", "format": "date-time" } } } ] diff --git a/airbyte-integrations/connectors/source-github/source_github/schemas/shared/events/commented.json b/airbyte-integrations/connectors/source-github/source_github/schemas/shared/events/commented.json index cd982b7e426a..671f979a92f7 100644 --- a/airbyte-integrations/connectors/source-github/source_github/schemas/shared/events/commented.json +++ b/airbyte-integrations/connectors/source-github/source_github/schemas/shared/events/commented.json @@ -49,7 +49,7 @@ "received_events_url": { "type": "string" }, "type": { "type": "string" }, "site_admin": { "type": "boolean" }, - "starred_at": { "type": "string" } + "starred_at": { "type": "string", "format": "date-time" } } }, "body": { "type": "string" }, diff --git a/airbyte-integrations/connectors/source-github/source_github/schemas/shared/events/cross_referenced.json b/airbyte-integrations/connectors/source-github/source_github/schemas/shared/events/cross_referenced.json index 36b9aa9d9f85..19a0f40395ac 100644 --- a/airbyte-integrations/connectors/source-github/source_github/schemas/shared/events/cross_referenced.json +++ b/airbyte-integrations/connectors/source-github/source_github/schemas/shared/events/cross_referenced.json @@ -27,7 +27,7 @@ "received_events_url": { "type": "string" }, "type": { "type": "string" }, "site_admin": { "type": "boolean" }, - "starred_at": { "type": "string" } + "starred_at": { "type": "string", "format": "date-time" } } }, "created_at": { "type": "string", "format": "date-time" }, @@ -84,7 +84,7 @@ "received_events_url": { "type": "string" }, "type": { "type": "string" }, "site_admin": { "type": "boolean" }, - "starred_at": { "type": "string" } + "starred_at": { "type": "string", "format": "date-time" } } } ] @@ -139,7 +139,7 @@ "received_events_url": { "type": "string" }, "type": { "type": "string" }, "site_admin": { "type": "boolean" }, - "starred_at": { "type": "string" } + "starred_at": { "type": "string", "format": "date-time" } } } ] @@ -171,7 +171,7 @@ "site_admin": { "type": "boolean" }, - "starred_at": { "type": "string" } + "starred_at": { "type": "string", "format": "date-time" } } } }, @@ -220,7 +220,10 @@ "received_events_url": { "type": "string" }, "type": { "type": "string" }, "site_admin": { "type": "boolean" }, - "starred_at": { "type": "string" } + "starred_at": { + "type": "string", + "format": "date-time" + } } } ] @@ -289,7 +292,7 @@ "received_events_url": { "type": "string" }, "type": { "type": "string" }, "site_admin": { "type": "boolean" }, - "starred_at": { "type": "string" } + "starred_at": { "type": "string", "format": "date-time" } } } ] @@ -350,7 +353,10 @@ "received_events_url": { "type": "string" }, "type": { "type": "string" }, "site_admin": { "type": "boolean" }, - "starred_at": { "type": "string" } + "starred_at": { + "type": "string", + "format": "date-time" + } } } ] @@ -389,7 +395,7 @@ "received_events_url": { "type": "string" }, "type": { "type": "string" }, "site_admin": { "type": "boolean" }, - "starred_at": { "type": "string" } + "starred_at": { "type": "string", "format": "date-time" } } }, "private": { "type": "boolean" }, @@ -570,9 +576,9 @@ "archived": { "type": "boolean" }, "disabled": { "type": "boolean" }, "visibility": { "type": "string" }, - "pushed_at": { "type": "string" }, - "created_at": { "type": "string" }, - "updated_at": { "type": "string" }, + "pushed_at": { "type": "string", "format": "date-time" }, + "created_at": { "type": "string", "format": "date-time" }, + "updated_at": { "type": "string", "format": "date-time" }, "permissions": { "type": "object", "properties": { @@ -617,7 +623,7 @@ "open_issues": { "type": "integer" }, "watchers": { "type": "integer" }, "master_branch": { "type": "string" }, - "starred_at": { "type": "string" }, + "starred_at": { "type": "string", "format": "date-time" }, "anonymous_access_enabled": { "type": "boolean" } }, "performed_via_github_app": { @@ -659,7 +665,10 @@ "received_events_url": { "type": "string" }, "type": { "type": "string" }, "site_admin": { "type": "boolean" }, - "starred_at": { "type": "string" } + "starred_at": { + "type": "string", + "format": "date-time" + } } } ] diff --git a/airbyte-integrations/connectors/source-github/source_github/schemas/shared/events/reviewed.json b/airbyte-integrations/connectors/source-github/source_github/schemas/shared/events/reviewed.json index e3458ac4b770..50fc00c05395 100644 --- a/airbyte-integrations/connectors/source-github/source_github/schemas/shared/events/reviewed.json +++ b/airbyte-integrations/connectors/source-github/source_github/schemas/shared/events/reviewed.json @@ -78,7 +78,8 @@ "type": "boolean" }, "starred_at": { - "type": "string" + "type": "string", + "format": "date-time" } } }, diff --git a/airbyte-integrations/connectors/source-github/source_github/streams.py b/airbyte-integrations/connectors/source-github/source_github/streams.py index d36e98167e8c..b8cf452d4a8e 100644 --- a/airbyte-integrations/connectors/source-github/source_github/streams.py +++ b/airbyte-integrations/connectors/source-github/source_github/streams.py @@ -352,13 +352,13 @@ def parse_response(self, response: requests.Response, stream_slice: Mapping[str, class Assignees(GithubStream): """ - API docs: https://docs.github.com/en/rest/reference/issues#list-assignees + API docs: https://docs.github.com/en/rest/issues/assignees?apiVersion=2022-11-28#list-assignees """ class Branches(GithubStream): """ - API docs: https://docs.github.com/en/rest/reference/repos#list-branches + API docs: https://docs.github.com/en/rest/branches/branches?apiVersion=2022-11-28#list-branches """ primary_key = ["repository", "name"] @@ -369,13 +369,13 @@ def path(self, stream_slice: Mapping[str, Any] = None, **kwargs) -> str: class Collaborators(GithubStream): """ - API docs: https://docs.github.com/en/rest/reference/repos#list-repository-collaborators + API docs: https://docs.github.com/en/rest/collaborators/collaborators?apiVersion=2022-11-28#list-repository-collaborators """ class IssueLabels(GithubStream): """ - API docs: https://docs.github.com/en/rest/issues/labels#list-labels-for-a-repository + API docs: https://docs.github.com/en/rest/issues/labels?apiVersion=2022-11-28#list-labels-for-a-repository """ def path(self, stream_slice: Mapping[str, Any] = None, **kwargs) -> str: @@ -384,7 +384,7 @@ def path(self, stream_slice: Mapping[str, Any] = None, **kwargs) -> str: class Organizations(GithubStreamABC): """ - API docs: https://docs.github.com/en/rest/reference/orgs#get-an-organization + API docs: https://docs.github.com/en/rest/orgs/orgs?apiVersion=2022-11-28#list-organizations """ # GitHub pagination could be from 1 to 100. @@ -412,7 +412,7 @@ def transform(self, record: MutableMapping[str, Any], stream_slice: Mapping[str, class Repositories(SemiIncrementalMixin, Organizations): """ - API docs: https://docs.github.com/en/rest/reference/repos#list-organization-repositories + API docs: https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#list-organization-repositories """ is_sorted = "desc" @@ -431,7 +431,7 @@ def parse_response(self, response: requests.Response, stream_slice: Mapping[str, class Tags(GithubStream): """ - API docs: https://docs.github.com/en/rest/reference/repos#list-repository-tags + API docs: https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#list-repository-tags """ primary_key = ["repository", "name"] @@ -442,7 +442,7 @@ def path(self, stream_slice: Mapping[str, Any] = None, **kwargs) -> str: class Teams(Organizations): """ - API docs: https://docs.github.com/en/rest/reference/teams#list-teams + API docs: https://docs.github.com/en/rest/teams/teams?apiVersion=2022-11-28#list-teams """ use_cache = True @@ -457,7 +457,7 @@ def parse_response(self, response: requests.Response, stream_slice: Mapping[str, class Users(Organizations): """ - API docs: https://docs.github.com/en/rest/reference/orgs#list-organization-members + API docs: https://docs.github.com/en/rest/orgs/members?apiVersion=2022-11-28#list-organization-members """ def path(self, stream_slice: Mapping[str, Any] = None, **kwargs) -> str: @@ -473,7 +473,7 @@ def parse_response(self, response: requests.Response, stream_slice: Mapping[str, class Releases(SemiIncrementalMixin, GithubStream): """ - API docs: https://docs.github.com/en/rest/reference/repos#list-releases + API docs: https://docs.github.com/en/rest/releases/releases?apiVersion=2022-11-28#list-releases """ cursor_field = "created_at" @@ -491,7 +491,7 @@ def transform(self, record: MutableMapping[str, Any], stream_slice: Mapping[str, class Events(SemiIncrementalMixin, GithubStream): """ - API docs: https://docs.github.com/en/rest/reference/activity#list-repository-events + API docs: https://docs.github.com/en/rest/activity/events?apiVersion=2022-11-28#list-repository-events """ cursor_field = "created_at" @@ -499,7 +499,7 @@ class Events(SemiIncrementalMixin, GithubStream): class PullRequests(SemiIncrementalMixin, GithubStream): """ - API docs: https://docs.github.com/en/rest/pulls/pulls#list-pull-requests + API docs: https://docs.github.com/en/rest/pulls/pulls?apiVersion=2022-11-28#list-pull-requests """ use_cache = True @@ -548,7 +548,7 @@ def is_sorted(self) -> str: class CommitComments(SemiIncrementalMixin, GithubStream): """ - API docs: https://docs.github.com/en/rest/reference/repos#list-commit-comments-for-a-repository + API docs: https://docs.github.com/en/rest/commits/comments?apiVersion=2022-11-28#list-commit-comments-for-a-repository """ use_cache = True @@ -559,7 +559,7 @@ def path(self, stream_slice: Mapping[str, Any] = None, **kwargs) -> str: class IssueMilestones(SemiIncrementalMixin, GithubStream): """ - API docs: https://docs.github.com/en/rest/reference/issues#list-milestones + API docs: https://docs.github.com/en/rest/issues/milestones?apiVersion=2022-11-28#list-milestones """ is_sorted = "desc" @@ -575,7 +575,7 @@ def path(self, stream_slice: Mapping[str, Any] = None, **kwargs) -> str: class Stargazers(SemiIncrementalMixin, GithubStream): """ - API docs: https://docs.github.com/en/rest/reference/activity#list-stargazers + API docs: https://docs.github.com/en/rest/activity/starring?apiVersion=2022-11-28#list-stargazers """ primary_key = "user_id" @@ -601,7 +601,7 @@ def transform(self, record: MutableMapping[str, Any], stream_slice: Mapping[str, class Projects(SemiIncrementalMixin, GithubStream): """ - API docs: https://docs.github.com/en/rest/reference/projects#list-repository-projects + API docs: https://docs.github.com/en/rest/projects/projects?apiVersion=2022-11-28#list-repository-projects """ use_cache = True @@ -620,7 +620,7 @@ def request_headers(self, **kwargs) -> Mapping[str, Any]: class IssueEvents(SemiIncrementalMixin, GithubStream): """ - API docs: https://docs.github.com/en/rest/reference/issues#list-issue-events-for-a-repository + API docs: https://docs.github.com/en/rest/issues/events?apiVersion=2022-11-28#list-issue-events-for-a-repository """ cursor_field = "created_at" @@ -634,7 +634,7 @@ def path(self, stream_slice: Mapping[str, Any] = None, **kwargs) -> str: class Comments(IncrementalMixin, GithubStream): """ - API docs: https://docs.github.com/en/rest/reference/issues#list-issue-comments-for-a-repository + API docs: https://docs.github.com/en/rest/issues/comments?apiVersion=2022-11-28#list-issue-comments-for-a-repository """ use_cache = True @@ -647,7 +647,7 @@ def path(self, stream_slice: Mapping[str, Any] = None, **kwargs) -> str: class Commits(IncrementalMixin, GithubStream): """ - API docs: https://docs.github.com/en/rest/reference/repos#list-commits + API docs: https://docs.github.com/en/rest/commits/commits?apiVersion=2022-11-28#list-commits Pull commits from each branch of each repository, tracking state for each branch """ @@ -701,7 +701,7 @@ def get_updated_state(self, current_stream_state: MutableMapping[str, Any], late class Issues(IncrementalMixin, GithubStream): """ - API docs: https://docs.github.com/en/rest/issues/issues#list-repository-issues + API docs: https://docs.github.com/en/rest/issues/issues?apiVersion=2022-11-28#list-repository-issues """ use_cache = True @@ -717,7 +717,7 @@ class Issues(IncrementalMixin, GithubStream): class ReviewComments(IncrementalMixin, GithubStream): """ - API docs: https://docs.github.com/en/rest/reference/pulls#list-review-comments-in-a-repository + API docs: https://docs.github.com/en/rest/pulls/comments?apiVersion=2022-11-28#list-review-comments-in-a-repository """ use_cache = True @@ -799,7 +799,7 @@ def request_headers(self, **kwargs) -> Mapping[str, Any]: class Reviews(SemiIncrementalMixin, GitHubGraphQLStream): """ - API docs: https://docs.github.com/en/graphql/reference/objects#pullrequestreview + API docs: https://docs.github.com/en/rest/pulls/reviews?apiVersion=2022-11-28#list-reviews-for-a-pull-request """ is_sorted = False @@ -873,7 +873,7 @@ def request_body_json( class PullRequestCommits(GithubStream): """ - API docs: https://docs.github.com/en/rest/reference/pulls#list-commits-on-a-pull-request + API docs: https://docs.github.com/en/rest/pulls/pulls?apiVersion=2022-11-28#list-commits-on-a-pull-request """ primary_key = "sha" @@ -906,7 +906,7 @@ def transform(self, record: MutableMapping[str, Any], stream_slice: Mapping[str, class ProjectsV2(SemiIncrementalMixin, GitHubGraphQLStream): """ - API docs: https://docs.github.com/en/graphql/reference/objects#pullrequest + API docs: https://docs.github.com/en/graphql/reference/objects#projectv2 """ is_sorted = "asc" @@ -1016,7 +1016,7 @@ def transform(self, record: MutableMapping[str, Any], stream_slice: Mapping[str, class CommitCommentReactions(ReactionStream): """ - API docs: https://docs.github.com/en/rest/reference/reactions#list-reactions-for-a-commit-comment + API docs: https://docs.github.com/en/rest/reference/reactions?apiVersion=2022-11-28#list-reactions-for-a-commit-comment """ parent_entity = CommitComments @@ -1024,7 +1024,7 @@ class CommitCommentReactions(ReactionStream): class IssueCommentReactions(ReactionStream): """ - API docs: https://docs.github.com/en/rest/reference/reactions#list-reactions-for-an-issue-comment + API docs: https://docs.github.com/en/rest/reactions/reactions?apiVersion=2022-11-28#list-reactions-for-an-issue-comment """ parent_entity = Comments @@ -1213,7 +1213,7 @@ def request_body_json( class Deployments(SemiIncrementalMixin, GithubStream): """ - API docs: https://docs.github.com/en/rest/deployments/deployments#list-deployments + API docs: https://docs.github.com/en/rest/deployments/deployments?apiVersion=2022-11-28#list-deployments """ def path(self, stream_slice: Mapping[str, Any] = None, **kwargs) -> str: @@ -1222,7 +1222,7 @@ def path(self, stream_slice: Mapping[str, Any] = None, **kwargs) -> str: class ProjectColumns(GithubStream): """ - API docs: https://docs.github.com/en/rest/reference/projects#list-project-columns + API docs: https://docs.github.com/en/rest/projects/columns?apiVersion=2022-11-28#list-project-columns """ use_cache = True @@ -1292,7 +1292,7 @@ def transform(self, record: MutableMapping[str, Any], stream_slice: Mapping[str, class ProjectCards(GithubStream): """ - API docs: https://docs.github.com/en/rest/reference/projects#list-project-cards + API docs: https://docs.github.com/en/rest/projects/cards?apiVersion=2022-11-28#list-project-cards """ cursor_field = "updated_at" @@ -1368,7 +1368,7 @@ def transform(self, record: MutableMapping[str, Any], stream_slice: Mapping[str, class Workflows(SemiIncrementalMixin, GithubStream): """ Get all workflows of a GitHub repository - API documentation: https://docs.github.com/en/rest/actions/workflows#list-repository-workflows + API documentation: https://docs.github.com/en/rest/actions/workflows?apiVersion=2022-11-28#list-repository-workflows """ def path(self, stream_slice: Mapping[str, Any] = None, **kwargs) -> str: @@ -1386,7 +1386,7 @@ def convert_cursor_value(self, value): class WorkflowRuns(SemiIncrementalMixin, GithubStream): """ Get all workflow runs for a GitHub repository - API documentation: https://docs.github.com/en/rest/actions/workflow-runs#list-workflow-runs-for-a-repository + API documentation: https://docs.github.com/en/rest/actions/workflow-runs?apiVersion=2022-11-28#list-workflow-runs-for-a-repository """ # key for accessing slice value from record @@ -1434,7 +1434,7 @@ def read_records( class WorkflowJobs(SemiIncrementalMixin, GithubStream): """ Get all workflow jobs for a workflow run - API documentation: https://docs.github.com/pt/rest/actions/workflow-jobs#list-jobs-for-a-workflow-run + API documentation: https://docs.github.com/pt/rest/actions/workflow-jobs?apiVersion=2022-11-28#list-jobs-for-a-workflow-run """ cursor_field = "completed_at" @@ -1488,7 +1488,7 @@ def request_params( class TeamMembers(GithubStream): """ - API docs: https://docs.github.com/en/rest/reference/teams#list-team-members + API docs: https://docs.github.com/en/rest/teams/members?apiVersion=2022-11-28#list-team-members """ use_cache = True @@ -1522,7 +1522,7 @@ def transform(self, record: MutableMapping[str, Any], stream_slice: Mapping[str, class TeamMemberships(GithubStream): """ - API docs: https://docs.github.com/en/rest/reference/teams#get-team-membership-for-a-user + API docs: https://docs.github.com/en/rest/teams/members?apiVersion=2022-11-28#get-team-membership-for-a-user """ primary_key = ["url"] @@ -1584,7 +1584,7 @@ def should_retry(self, response: requests.Response) -> bool: return True def backoff_time(self, response: requests.Response) -> Optional[float]: - return 60 if response.status_code == requests.codes.ACCEPTED else super().backoff_time(response) + return 90 if response.status_code == requests.codes.ACCEPTED else super().backoff_time(response) def parse_response( self, @@ -1603,7 +1603,7 @@ def parse_response( class IssueTimelineEvents(GithubStream): """ - API docs https://docs.github.com/en/rest/issues/timeline?apiVersion=2022-11-28 + API docs https://docs.github.com/en/rest/issues/timeline?apiVersion=2022-11-28#list-timeline-events-for-an-issue """ primary_key = ["repository", "issue_number"] diff --git a/airbyte-integrations/connectors/source-github/unit_tests/pull_request_stats_query.json b/airbyte-integrations/connectors/source-github/unit_tests/pull_request_stats_query.json new file mode 100644 index 000000000000..b825c3696376 --- /dev/null +++ b/airbyte-integrations/connectors/source-github/unit_tests/pull_request_stats_query.json @@ -0,0 +1,3 @@ +{ + "query": "query {\n repository(owner: \"airbytehq\", name: \"airbyte\") {\n name\n owner {\n login\n }\n pullRequests(first: 10, orderBy: {field: UPDATED_AT, direction: ASC}) {\n nodes {\n node_id: id\n id: databaseId\n number\n updated_at: updatedAt\n changed_files: changedFiles\n deletions\n additions\n merged\n mergeable\n can_be_rebased: canBeRebased\n maintainer_can_modify: maintainerCanModify\n merge_state_status: mergeStateStatus\n comments {\n totalCount\n }\n commits {\n totalCount\n }\n review_comments: reviews(first: 100) {\n totalCount\n nodes {\n comments {\n totalCount\n }\n }\n }\n merged_by: mergedBy {\n __typename\n ... on User {\n node_id: id\n id: databaseId\n login\n avatar_url: avatarUrl\n html_url: url\n site_admin: isSiteAdmin\n }\n }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n}" +} diff --git a/airbyte-integrations/connectors/source-github/unit_tests/responses/contributor_activity_response.json b/airbyte-integrations/connectors/source-github/unit_tests/responses/contributor_activity_response.json new file mode 100644 index 000000000000..1f818bd9aa3f --- /dev/null +++ b/airbyte-integrations/connectors/source-github/unit_tests/responses/contributor_activity_response.json @@ -0,0 +1,33 @@ +[ + { + "author": { + "login": "octocat", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/octocat_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/octocat", + "html_url": "https://github.com/octocat", + "followers_url": "https://api.github.com/users/octocat/followers", + "following_url": "https://api.github.com/users/octocat/following{/other_user}", + "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", + "organizations_url": "https://api.github.com/users/octocat/orgs", + "repos_url": "https://api.github.com/users/octocat/repos", + "events_url": "https://api.github.com/users/octocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/octocat/received_events", + "type": "User", + "site_admin": false + }, + "total": 135, + "weeks": [ + { + "w": 1367712000, + "a": 6898, + "d": 77, + "c": 10 + } + ] + } +] diff --git a/airbyte-integrations/connectors/source-github/unit_tests/graphql_reviews_responses.json b/airbyte-integrations/connectors/source-github/unit_tests/responses/graphql_reviews_responses.json similarity index 100% rename from airbyte-integrations/connectors/source-github/unit_tests/graphql_reviews_responses.json rename to airbyte-integrations/connectors/source-github/unit_tests/responses/graphql_reviews_responses.json diff --git a/airbyte-integrations/connectors/source-github/unit_tests/responses/projects_v2_response.json b/airbyte-integrations/connectors/source-github/unit_tests/responses/projects_v2_response.json new file mode 100644 index 000000000000..2ae61a1d045f --- /dev/null +++ b/airbyte-integrations/connectors/source-github/unit_tests/responses/projects_v2_response.json @@ -0,0 +1,45 @@ +{ + "data": { + "repository": { + "name": "integration-test", + "owner": { + "login": "airbytehq" + }, + "projectsV2": { + "nodes": [ + { + "closed": false, + "created_at": "2023-09-25T18:34:52Z", + "closed_at": null, + "updated_at": "2023-09-25T18:35:45Z", + "creator": { + "avatarUrl": "https://avatars.githubusercontent.com/u/92915184?u=e53c87d81ec6fb0596bc0f75e12e84e8f0df8d83&v=4", + "login": "airbyteio", + "resourcePath": "/airbyteio", + "url": "https://github.com/airbyteio" + }, + "node_id": "PVT_kwDOA4_XW84AV7NS", + "id": 5747538, + "number": 58, + "public": false, + "readme": "# Title\nintegration test project", + "short_description": "integration test project description", + "template": false, + "title": "integration test project", + "url": "https://github.com/orgs/airbytehq/projects/58", + "viewerCanClose": true, + "viewerCanReopen": true, + "viewerCanUpdate": true, + "owner": { + "id": "MDEyOk9yZ2FuaXphdGlvbjU5NzU4NDI3" + } + } + ], + "pageInfo": { + "hasNextPage": false, + "endCursor": "MQ" + } + } + } + } +} diff --git a/airbyte-integrations/connectors/source-github/unit_tests/pull_request_comment_reactions.json b/airbyte-integrations/connectors/source-github/unit_tests/responses/pull_request_comment_reactions.json similarity index 100% rename from airbyte-integrations/connectors/source-github/unit_tests/pull_request_comment_reactions.json rename to airbyte-integrations/connectors/source-github/unit_tests/responses/pull_request_comment_reactions.json diff --git a/airbyte-integrations/connectors/source-github/unit_tests/responses/pull_request_stats_response.json b/airbyte-integrations/connectors/source-github/unit_tests/responses/pull_request_stats_response.json new file mode 100644 index 000000000000..f4a53929e237 --- /dev/null +++ b/airbyte-integrations/connectors/source-github/unit_tests/responses/pull_request_stats_response.json @@ -0,0 +1,317 @@ +{ + "data": { + "repository": { + "name": "integration-test", + "owner": { + "login": "airbytehq" + }, + "pullRequests": { + "nodes": [ + { + "node_id": "MDExOlB1bGxSZXF1ZXN0NzIxNDM1NTA2", + "id": 721435506, + "number": 5, + "updated_at": "2021-08-27T15:53:14Z", + "changed_files": 5, + "deletions": 0, + "additions": 5, + "merged": false, + "mergeable": "MERGEABLE", + "can_be_rebased": true, + "maintainer_can_modify": false, + "merge_state_status": "BLOCKED", + "comments": { + "totalCount": 0 + }, + "commits": { + "totalCount": 5 + }, + "review_comments": { + "totalCount": 1, + "nodes": [ + { + "comments": { + "totalCount": 0 + } + } + ] + }, + "merged_by": null + }, + { + "node_id": "MDExOlB1bGxSZXF1ZXN0NzIxNDM1NDA3", + "id": 721435407, + "number": 2, + "updated_at": "2021-08-27T15:53:27Z", + "changed_files": 5, + "deletions": 0, + "additions": 5, + "merged": false, + "mergeable": "MERGEABLE", + "can_be_rebased": true, + "maintainer_can_modify": false, + "merge_state_status": "BLOCKED", + "comments": { + "totalCount": 0 + }, + "commits": { + "totalCount": 5 + }, + "review_comments": { + "totalCount": 1, + "nodes": [ + { + "comments": { + "totalCount": 0 + } + } + ] + }, + "merged_by": null + }, + { + "node_id": "MDExOlB1bGxSZXF1ZXN0NzIxNDM1NDQw", + "id": 721435440, + "number": 3, + "updated_at": "2021-08-27T16:02:49Z", + "changed_files": 5, + "deletions": 0, + "additions": 5, + "merged": true, + "mergeable": "UNKNOWN", + "can_be_rebased": false, + "maintainer_can_modify": false, + "merge_state_status": "UNKNOWN", + "comments": { + "totalCount": 0 + }, + "commits": { + "totalCount": 5 + }, + "review_comments": { + "totalCount": 1, + "nodes": [ + { + "comments": { + "totalCount": 0 + } + } + ] + }, + "merged_by": { + "__typename": "User", + "node_id": "MDQ6VXNlcjc0MzkwMQ==", + "id": 743901, + "login": "gaart", + "avatar_url": "https://avatars.githubusercontent.com/u/743901?v=4", + "html_url": "https://github.com/gaart", + "site_admin": false + } + }, + { + "node_id": "MDExOlB1bGxSZXF1ZXN0NzIxNDM1NDY2", + "id": 721435466, + "number": 4, + "updated_at": "2021-08-31T12:01:15Z", + "changed_files": 5, + "deletions": 0, + "additions": 5, + "merged": false, + "mergeable": "MERGEABLE", + "can_be_rebased": true, + "maintainer_can_modify": false, + "merge_state_status": "BLOCKED", + "comments": { + "totalCount": 0 + }, + "commits": { + "totalCount": 5 + }, + "review_comments": { + "totalCount": 3, + "nodes": [ + { + "comments": { + "totalCount": 0 + } + }, + { + "comments": { + "totalCount": 0 + } + }, + { + "comments": { + "totalCount": 1 + } + } + ] + }, + "merged_by": null + }, + { + "node_id": "PR_kwDOF9hP9c4xmEi6", + "id": 832063674, + "number": 12, + "updated_at": "2022-01-26T03:46:56Z", + "changed_files": 1, + "deletions": 0, + "additions": 2, + "merged": true, + "mergeable": "UNKNOWN", + "can_be_rebased": false, + "maintainer_can_modify": false, + "merge_state_status": "UNKNOWN", + "comments": { + "totalCount": 0 + }, + "commits": { + "totalCount": 1 + }, + "review_comments": { + "totalCount": 1, + "nodes": [ + { + "comments": { + "totalCount": 0 + } + } + ] + }, + "merged_by": { + "__typename": "User", + "node_id": "MDQ6VXNlcjUxNTQzMjI=", + "id": 5154322, + "login": "marcosmarxm", + "avatar_url": "https://avatars.githubusercontent.com/u/5154322?u=92c89b82271d48f41fad03923b0a24083e049038&v=4", + "html_url": "https://github.com/marcosmarxm", + "site_admin": false + } + }, + { + "node_id": "MDExOlB1bGxSZXF1ZXN0NzIxNDM1Mzcz", + "id": 721435373, + "number": 1, + "updated_at": "2022-03-31T11:06:06Z", + "changed_files": 5, + "deletions": 0, + "additions": 5, + "merged": false, + "mergeable": "MERGEABLE", + "can_be_rebased": true, + "maintainer_can_modify": false, + "merge_state_status": "BLOCKED", + "comments": { + "totalCount": 0 + }, + "commits": { + "totalCount": 5 + }, + "review_comments": { + "totalCount": 1, + "nodes": [ + { + "comments": { + "totalCount": 0 + } + } + ] + }, + "merged_by": null + }, + { + "node_id": "PR_kwDOF9hP9c46s2Qa", + "id": 984835098, + "number": 14, + "updated_at": "2022-10-04T17:41:29Z", + "changed_files": 1, + "deletions": 0, + "additions": 1, + "merged": false, + "mergeable": "MERGEABLE", + "can_be_rebased": true, + "maintainer_can_modify": false, + "merge_state_status": "BLOCKED", + "comments": { + "totalCount": 0 + }, + "commits": { + "totalCount": 2 + }, + "review_comments": { + "totalCount": 1, + "nodes": [ + { + "comments": { + "totalCount": 0 + } + } + ] + }, + "merged_by": null + }, + { + "node_id": "PR_kwDOF9hP9c41Vftv", + "id": 894827375, + "number": 13, + "updated_at": "2023-05-03T06:50:23Z", + "changed_files": 1, + "deletions": 1, + "additions": 1, + "merged": false, + "mergeable": "MERGEABLE", + "can_be_rebased": true, + "maintainer_can_modify": false, + "merge_state_status": "BLOCKED", + "comments": { + "totalCount": 0 + }, + "commits": { + "totalCount": 1 + }, + "review_comments": { + "totalCount": 0, + "nodes": [] + }, + "merged_by": null + }, + { + "node_id": "PR_kwDOF9hP9c5PqZhG", + "id": 1336514630, + "number": 15, + "updated_at": "2023-05-04T10:07:46Z", + "changed_files": 1, + "deletions": 0, + "additions": 1, + "merged": false, + "mergeable": "MERGEABLE", + "can_be_rebased": false, + "maintainer_can_modify": false, + "merge_state_status": "BLOCKED", + "comments": { + "totalCount": 1 + }, + "commits": { + "totalCount": 1 + }, + "review_comments": { + "totalCount": 1, + "nodes": [ + { + "comments": { + "totalCount": 0 + } + } + ] + }, + "merged_by": null + } + ], + "pageInfo": { + "hasNextPage": false, + "endCursor": "Y3Vyc29yOnYyOpK5MjAyMy0wNS0wNFQxMzowNzo0NiswMzowMM5PqZhG" + } + } + } + } +} diff --git a/airbyte-integrations/connectors/source-github/unit_tests/test_source.py b/airbyte-integrations/connectors/source-github/unit_tests/test_source.py index 90dfbaed7c4a..8ec9d79c574d 100644 --- a/airbyte-integrations/connectors/source-github/unit_tests/test_source.py +++ b/airbyte-integrations/connectors/source-github/unit_tests/test_source.py @@ -343,3 +343,26 @@ def test_streams_config_start_date(config, expected): assert project_stream._start_date == "2021-08-27T00:00:46Z" else: assert not project_stream._start_date + + +@pytest.mark.parametrize( + "error_message, expected_user_friendly_message", + [ + ( + "404 Client Error: Not Found for url: https://api.github.com/repos/repo_name", + 'Repo name: "repo_name" is unknown, "repository" config option should use existing full repo name /', + ), + ( + "404 Client Error: Not Found for url: https://api.github.com/orgs/org_name", + 'Organization name: "org_name" is unknown, "repository" config option should be updated. Please validate your repository config.', + ), + ( + "401 Client Error: Unauthorized for url", + "Github credentials have expired or changed, please review your credentials and re-authenticate or renew your access token.", + ), + ], +) +def test_user_friendly_message(error_message, expected_user_friendly_message): + source = SourceGithub() + user_friendly_error_message = source.user_friendly_error_message(error_message) + assert user_friendly_error_message == expected_user_friendly_message diff --git a/airbyte-integrations/connectors/source-github/unit_tests/test_stream.py b/airbyte-integrations/connectors/source-github/unit_tests/test_stream.py index d184bda20f6d..88465dc192a5 100644 --- a/airbyte-integrations/connectors/source-github/unit_tests/test_stream.py +++ b/airbyte-integrations/connectors/source-github/unit_tests/test_stream.py @@ -214,6 +214,12 @@ def test_stream_teams_502(sleep_mock): assert set(call.request.url for call in responses.calls).symmetric_difference({f"{url}?per_page=100"}) == set() +def test_stream_organizations_availability_report(): + organization_args = {"organizations": ["org1", "org2"]} + stream = Organizations(**organization_args) + assert stream.availability_strategy is None + + @responses.activate def test_stream_organizations_read(): organization_args = {"organizations": ["org1", "org2"]} @@ -885,7 +891,7 @@ def test_stream_reviews_incremental_read(): stream = Reviews(**repository_args_with_start_date) stream.page_size = 2 - f = Path(__file__).parent / "graphql_reviews_responses.json" + f = Path(__file__).parent / "responses/graphql_reviews_responses.json" response_objects = json.load(open(f)) def request_callback(request): @@ -1259,7 +1265,7 @@ def test_stream_pull_request_comment_reactions_read(): stream = PullRequestCommentReactions(**repository_args_with_start_date) stream.page_size = 2 - f = Path(__file__).parent / "pull_request_comment_reactions.json" + f = Path(__file__).parent / "responses/pull_request_comment_reactions.json" response_objects = json.load(open(f)) def request_callback(request): @@ -1318,6 +1324,7 @@ def test_stream_projects_v2_graphql_retry(): assert resp.call_count == stream.max_retries + 1 +@responses.activate def test_stream_projects_v2_graphql_query(): repository_args_with_start_date = { "start_date": "2022-01-01T00:00:00Z", @@ -1326,11 +1333,18 @@ def test_stream_projects_v2_graphql_query(): } stream = ProjectsV2(**repository_args_with_start_date) query = stream.request_body_json(stream_state={}, stream_slice={"repository": "airbytehq/airbyte"}) - + responses.add( + responses.POST, + "https://api.github.com/graphql", + json=json.load(open(Path(__file__).parent / "responses/projects_v2_response.json")), + ) f = Path(__file__).parent / "projects_v2_pull_requests_query.json" expected_query = json.load(open(f)) + records = list(read_full_refresh(stream)) assert query == expected_query + assert records[0].get("owner_id") + assert records[0].get("repository") @responses.activate @@ -1353,6 +1367,41 @@ def test_stream_contributor_activity_parse_empty_response(caplog): assert expected_message in caplog.messages +@responses.activate +@patch("time.sleep", return_value=0) +def test_stream_contributor_activity_accepted_response(caplog): + repository_args = { + "page_size_for_large_streams": 20, + "repositories": ["airbytehq/airbyte"], + } + stream = ContributorActivity(**repository_args) + resp = responses.add( + responses.GET, + "https://api.github.com/repos/airbytehq/airbyte/stats/contributors", + body="", + status=202, + ) + with pytest.raises(UserDefinedBackoffException): + list(read_full_refresh(stream)) + assert resp.call_count == 6 + + +@responses.activate +def test_stream_contributor_activity_parse_response(): + repository_args = { + "page_size_for_large_streams": 20, + "repositories": ["airbytehq/airbyte"], + } + stream = ContributorActivity(**repository_args) + responses.add( + responses.GET, + "https://api.github.com/repos/airbytehq/airbyte/stats/contributors", + json=json.load(open(Path(__file__).parent / "responses/contributor_activity_response.json")), + ) + records = list(read_full_refresh(stream)) + assert len(records) == 1 + + @responses.activate def test_issues_timeline_events(): repository_args = { @@ -1368,3 +1417,23 @@ def test_issues_timeline_events(): stream = IssueTimelineEvents(**repository_args) records = list(stream.read_records(sync_mode=SyncMode.full_refresh, stream_slice={"repository": "airbytehq/airbyte", "number": 1})) assert expected_records == records + + +@responses.activate +def test_pull_request_stats(): + repository_args = { + "page_size_for_large_streams": 10, + "repositories": ["airbytehq/airbyte"], + } + stream = PullRequestStats(**repository_args) + query = stream.request_body_json(stream_state={}, stream_slice={"repository": "airbytehq/airbyte"}) + responses.add( + responses.POST, + "https://api.github.com/graphql", + json=json.load(open(Path(__file__).parent / "responses/pull_request_stats_response.json")), + ) + f = Path(__file__).parent / "pull_request_stats_query.json" + expected_query = json.load(open(f)) + + list(read_full_refresh(stream)) + assert query == expected_query diff --git a/airbyte-integrations/connectors/source-gitlab/Dockerfile b/airbyte-integrations/connectors/source-gitlab/Dockerfile index 67e6a7b6081b..aa7f3ad6e4a4 100644 --- a/airbyte-integrations/connectors/source-gitlab/Dockerfile +++ b/airbyte-integrations/connectors/source-gitlab/Dockerfile @@ -13,5 +13,5 @@ COPY main.py ./ ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=1.6.0 +LABEL io.airbyte.version=1.7.0 LABEL io.airbyte.name=airbyte/source-gitlab diff --git a/airbyte-integrations/connectors/source-gitlab/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-gitlab/integration_tests/configured_catalog.json index 1aa8a2060837..67009e00a6da 100644 --- a/airbyte-integrations/connectors/source-gitlab/integration_tests/configured_catalog.json +++ b/airbyte-integrations/connectors/source-gitlab/integration_tests/configured_catalog.json @@ -185,6 +185,19 @@ "destination_sync_mode": "overwrite", "primary_key": [["name"]] }, + { + "stream": { + "name": "deployments", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_cursor_field": ["updated_at"], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite", + "primary_key": [["id"]] + }, { "stream": { "name": "tags", diff --git a/airbyte-integrations/connectors/source-gitlab/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-gitlab/integration_tests/expected_records.jsonl index b6607d921ac9..b1c7dfe2eb8f 100644 --- a/airbyte-integrations/connectors/source-gitlab/integration_tests/expected_records.jsonl +++ b/airbyte-integrations/connectors/source-gitlab/integration_tests/expected_records.jsonl @@ -1,42 +1,40 @@ -{"stream": "project_milestones", "data": {"id": 1943563, "iid": 1, "project_id": 25156633, "title": "Sample GitLab Project Milestone 1", "description": "Sample GitLab Project Milestone 1", "state": "active", "created_at": "2021-02-15T16:00:33.349Z", "updated_at": "2021-02-15T16:00:33.349Z", "due_date": "2021-03-12", "start_date": null, "expired": true, "web_url": "https://gitlab.com/airbyte.io/ci-test-project/-/milestones/1"}, "emitted_at": 1686568101690} -{"stream": "project_milestones", "data": {"id": 1943564, "iid": 2, "project_id": 25156633, "title": "Sample GitLab Project Milestone 2", "description": "Sample GitLab Project Milestone 2", "state": "active", "created_at": "2021-02-15T16:00:46.934Z", "updated_at": "2021-02-15T16:00:46.934Z", "due_date": "2021-03-19", "start_date": null, "expired": true, "web_url": "https://gitlab.com/airbyte.io/ci-test-project/-/milestones/2"}, "emitted_at": 1686568101692} -{"stream": "project_milestones", "data": {"id": 1943565, "iid": 3, "project_id": 25156633, "title": "Sample GitLab Project Milestone 3", "description": "Sample GitLab Project Milestone 3", "state": "active", "created_at": "2021-02-15T16:01:07.153Z", "updated_at": "2021-02-15T16:01:07.153Z", "due_date": "2021-03-26", "start_date": null, "expired": true, "web_url": "https://gitlab.com/airbyte.io/ci-test-project/-/milestones/3"}, "emitted_at": 1686568101692} -{"stream": "pipelines_extended", "data": {"id": 272632767, "iid": 2, "project_id": 25157276, "sha": "6ad3dd49539391774db738c9e7b7d69f2d872c98", "ref": "master", "status": "failed", "source": "push", "created_at": "2021-03-18T12:51:06.262Z", "updated_at": "2021-03-18T12:51:52.007Z", "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/pipelines/272632767", "before_sha": "2831d897ba0214f8d3168647e8ad4232b83987ef", "tag": false, "yaml_errors": null, "user": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "started_at": "2021-03-18T12:51:07.816Z", "finished_at": "2021-03-18T12:51:52.000Z", "committed_at": null, "duration": 43, "queued_duration": 1, "coverage": null, "detailed_status": {"icon": "status_failed", "text": "failed", "label": "failed", "group": "failed", "tooltip": "failed", "has_details": false, "details_path": "/new-group-airbute/new-ci-test-project/-/pipelines/272632767", "illustration": null, "favicon": "/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png"}, "name": null}, "emitted_at": 1686568215223} -{"stream": "pipelines_extended", "data": {"id": 272631271, "iid": 1, "project_id": 25157276, "sha": "028c02d96f40afe9b4d1173c1d0f712dd6d07302", "ref": "ykurochkin/add-fake-CI-config", "status": "failed", "source": "push", "created_at": "2021-03-18T12:48:49.174Z", "updated_at": "2021-03-18T12:49:38.092Z", "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/pipelines/272631271", "before_sha": "0000000000000000000000000000000000000000", "tag": false, "yaml_errors": null, "user": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "started_at": "2021-03-18T12:48:50.166Z", "finished_at": "2021-03-18T12:49:38.084Z", "committed_at": null, "duration": 47, "queued_duration": null, "coverage": null, "detailed_status": {"icon": "status_failed", "text": "failed", "label": "failed", "group": "failed", "tooltip": "failed", "has_details": false, "details_path": "/new-group-airbute/new-ci-test-project/-/pipelines/272631271", "illustration": null, "favicon": "/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png"}, "name": null}, "emitted_at": 1686568215999} +{"stream": "project_milestones", "data": {"id": 1943705, "iid": 51, "project_id": 25157276, "title": "Project Milestone 51", "description": null, "state": "active", "created_at": "2021-03-15T15:33:16.915Z", "updated_at": "2021-03-15T15:33:16.915Z", "due_date": null, "start_date": null, "expired": false, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/milestones/51"}, "emitted_at": 1696947569422} +{"stream": "project_milestones", "data": {"id": 1943704, "iid": 50, "project_id": 25157276, "title": "Project Milestone 50", "description": null, "state": "active", "created_at": "2021-03-15T15:33:16.329Z", "updated_at": "2021-03-15T15:33:16.329Z", "due_date": null, "start_date": null, "expired": false, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/milestones/50"}, "emitted_at": 1696947569423} +{"stream": "project_milestones", "data": {"id": 1943703, "iid": 49, "project_id": 25157276, "title": "Project Milestone 49", "description": null, "state": "active", "created_at": "2021-03-15T15:33:15.960Z", "updated_at": "2021-03-15T15:33:15.960Z", "due_date": null, "start_date": null, "expired": false, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/milestones/49"}, "emitted_at": 1696947569423} +{"stream": "pipelines_extended", "data": {"id": 272632767, "iid": 2, "project_id": 25157276, "sha": "6ad3dd49539391774db738c9e7b7d69f2d872c98", "ref": "master", "status": "failed", "source": "push", "created_at": "2021-03-18T12:51:06.262Z", "updated_at": "2021-03-18T12:51:52.007Z", "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/pipelines/272632767", "before_sha": "2831d897ba0214f8d3168647e8ad4232b83987ef", "tag": false, "yaml_errors": null, "user": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "started_at": "2021-03-18T12:51:07.816Z", "finished_at": "2021-03-18T12:51:52.000Z", "committed_at": null, "duration": 43, "queued_duration": 1, "coverage": null, "detailed_status": {"icon": "status_failed", "text": "Failed", "label": "failed", "group": "failed", "tooltip": "failed", "has_details": false, "details_path": "/new-group-airbute/new-ci-test-project/-/pipelines/272632767", "illustration": null, "favicon": "/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png"}, "name": null}, "emitted_at": 1696948219689} +{"stream": "pipelines_extended", "data": {"id": 272631271, "iid": 1, "project_id": 25157276, "sha": "028c02d96f40afe9b4d1173c1d0f712dd6d07302", "ref": "ykurochkin/add-fake-CI-config", "status": "failed", "source": "push", "created_at": "2021-03-18T12:48:49.174Z", "updated_at": "2021-03-18T12:49:38.092Z", "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/pipelines/272631271", "before_sha": "0000000000000000000000000000000000000000", "tag": false, "yaml_errors": null, "user": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "started_at": "2021-03-18T12:48:50.166Z", "finished_at": "2021-03-18T12:49:38.084Z", "committed_at": null, "duration": 47, "queued_duration": null, "coverage": null, "detailed_status": {"icon": "status_failed", "text": "Failed", "label": "failed", "group": "failed", "tooltip": "failed", "has_details": false, "details_path": "/new-group-airbute/new-ci-test-project/-/pipelines/272631271", "illustration": null, "favicon": "/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png"}, "name": null}, "emitted_at": 1696948220075} {"stream": "group_issue_boards", "data": {"id": 5099065, "name": "Development", "hide_backlog_list": false, "hide_closed_list": false, "project": null, "lists": [], "group": {"id": 11329647, "web_url": "https://gitlab.com/groups/new-group-airbute", "name": "New Group Airbute"}, "group_id": 11329647}, "emitted_at": 1686568061140} -{"stream": "merge_requests", "data": {"id": 92098762, "iid": 30, "project_id": 25156633, "title": "Id blanditiis consequatur ut.", "description": "##### Voluptatum\nPorro et quo. Laborum molestias ducimus. Labore dolorum adipisci. Quisquam est quis. Sint accusamus maxime.\n* Veritatis. \n* Eos. \n* Adipisci. \n* Quibusdam. \n* Sint. \n* Consequuntur. \n* Hic. \n* Voluptate. \n* Velit.", "state": "opened", "created_at": "2021-02-15T15:55:38.117Z", "updated_at": "2021-02-15T15:55:38.117Z", "merged_by": null, "merge_user": null, "merged_at": null, "closed_by": null, "closed_at": null, "target_branch": "master", "source_branch": "laudantium-unde-et-iste-et", "user_notes_count": 15, "upvotes": 0, "downvotes": 0, "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "assignees": [], "assignee": null, "reviewers": [], "source_project_id": 25156633, "target_project_id": 25156633, "labels": ["asperiores-ex", "quidem-labore", "sed-consequuntur"], "draft": false, "work_in_progress": false, "milestone": null, "merge_when_pipeline_succeeds": false, "merge_status": "can_be_merged", "detailed_merge_status": "mergeable", "sha": "d49703b85913ee7a8c85e1893057ef4cdb06ff85", "merge_commit_sha": null, "squash_commit_sha": null, "discussion_locked": null, "should_remove_source_branch": null, "force_remove_source_branch": null, "prepared_at": "2021-02-15T15:55:38.117Z", "reference": "!30", "references": {"short": "!30", "relative": "!30", "full": "airbyte.io/ci-test-project!30"}, "web_url": "https://gitlab.com/airbyte.io/ci-test-project/-/merge_requests/30", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "squash": false, "squash_on_merge": false, "task_completion_status": {"count": 0, "completed_count": 0}, "has_conflicts": false, "blocking_discussions_resolved": true, "approvals_before_merge": null, "author_id": 8375961, "assignee_id": null, "closed_by_id": null, "milestone_id": null, "merged_by_id": null}, "emitted_at": 1686568137434} -{"stream": "merge_requests", "data": {"id": 92098761, "iid": 29, "project_id": 25156633, "title": "Fugiat aut voluptatem voluptas.", "description": "###### Unde\nEligendi nemo quam. Veritatis delectus iure. Placeat ut odit. Officiis accusantium sit. Eos sequi cupiditate.\n# Eum", "state": "opened", "created_at": "2021-02-15T15:55:34.534Z", "updated_at": "2021-02-15T15:55:34.534Z", "merged_by": null, "merge_user": null, "merged_at": null, "closed_by": null, "closed_at": null, "target_branch": "master", "source_branch": "ea-dolor-quia-et-sint", "user_notes_count": 4, "upvotes": 0, "downvotes": 0, "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "assignees": [], "assignee": null, "reviewers": [], "source_project_id": 25156633, "target_project_id": 25156633, "labels": ["earum-eaque", "nisi-et", "sed-voluptatem"], "draft": false, "work_in_progress": false, "milestone": null, "merge_when_pipeline_succeeds": false, "merge_status": "can_be_merged", "detailed_merge_status": "mergeable", "sha": "45afadfbf4eb1a9d6468950b23e8557bf72445fa", "merge_commit_sha": null, "squash_commit_sha": null, "discussion_locked": null, "should_remove_source_branch": null, "force_remove_source_branch": null, "prepared_at": "2021-02-15T15:55:34.534Z", "reference": "!29", "references": {"short": "!29", "relative": "!29", "full": "airbyte.io/ci-test-project!29"}, "web_url": "https://gitlab.com/airbyte.io/ci-test-project/-/merge_requests/29", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "squash": false, "squash_on_merge": false, "task_completion_status": {"count": 0, "completed_count": 0}, "has_conflicts": false, "blocking_discussions_resolved": true, "approvals_before_merge": null, "author_id": 8375961, "assignee_id": null, "closed_by_id": null, "milestone_id": null, "merged_by_id": null}, "emitted_at": 1686568137437} -{"stream": "merge_requests", "data": {"id": 92098758, "iid": 28, "project_id": 25156633, "title": "Delectus sit quod repellendus.", "description": "###### Corporis\nMolestias eius corrupti. Est maiores ut. Deleniti itaque deserunt. Perspiciatis quis et. Non et quia.\n### Dolorum\nNihil at et. Eligendi recusandae omnis. Eaque ratione dolorem.\n### Quam\nRem ad vel. Officiis sint voluptatem. Asperiores odit non.\n0. Hic. \n1. Labore. \n2. Voluptates. \n3. Dolores. \n4. Laborum. \n5. Non. \n6. Odit.", "state": "opened", "created_at": "2021-02-15T15:55:31.164Z", "updated_at": "2021-02-15T15:55:31.164Z", "merged_by": null, "merge_user": null, "merged_at": null, "closed_by": null, "closed_at": null, "target_branch": "master", "source_branch": "ipsum-consequatur-et-in-et", "user_notes_count": 19, "upvotes": 0, "downvotes": 0, "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "assignees": [], "assignee": null, "reviewers": [], "source_project_id": 25156633, "target_project_id": 25156633, "labels": ["nisi-et", "omnis-assumenda", "ut-incidunt"], "draft": false, "work_in_progress": false, "milestone": null, "merge_when_pipeline_succeeds": false, "merge_status": "can_be_merged", "detailed_merge_status": "mergeable", "sha": "5b8695fe02d2856fa9e3249d757aea89832b8d2e", "merge_commit_sha": null, "squash_commit_sha": null, "discussion_locked": null, "should_remove_source_branch": null, "force_remove_source_branch": null, "prepared_at": "2021-02-15T15:55:31.164Z", "reference": "!28", "references": {"short": "!28", "relative": "!28", "full": "airbyte.io/ci-test-project!28"}, "web_url": "https://gitlab.com/airbyte.io/ci-test-project/-/merge_requests/28", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "squash": false, "squash_on_merge": false, "task_completion_status": {"count": 0, "completed_count": 0}, "has_conflicts": false, "blocking_discussions_resolved": true, "approvals_before_merge": null, "author_id": 8375961, "assignee_id": null, "closed_by_id": null, "milestone_id": null, "merged_by_id": null}, "emitted_at": 1686568137439} -{"stream":"groups","data":{"id":68657749,"web_url":"https://gitlab.com/groups/empty-group4","name":"Empty Group","path":"empty-group4","description":"","visibility":"private","share_with_group_lock":false,"require_two_factor_authentication":false,"two_factor_grace_period":48,"project_creation_level":"developer","auto_devops_enabled":null,"subgroup_creation_level":"maintainer","emails_disabled":null,"mentions_disabled":null,"lfs_enabled":true,"default_branch_protection":2,"avatar_url":null,"request_access_enabled":true,"full_name":"Empty Group","full_path":"empty-group4","created_at":"2023-06-09T13:47:19.446Z","parent_id":null,"shared_runners_setting":"enabled","ldap_cn":null,"ldap_access":null,"wiki_access_level":"enabled","shared_with_groups":[],"runners_token":"GR1348941-x4xtBM6_zdFj-ED8QF8","prevent_sharing_groups_outside_hierarchy":false,"shared_projects":[],"shared_runners_minutes_limit":null,"extra_shared_runners_minutes_limit":null,"prevent_forking_outside_group":null,"membership_lock":false,"projects":[]},"emitted_at":1688127739135} -{"stream":"groups","data":{"id":11329647,"web_url":"https://gitlab.com/groups/new-group-airbute","name":"New Group Airbute","path":"new-group-airbute","description":"","visibility":"public","share_with_group_lock":false,"require_two_factor_authentication":false,"two_factor_grace_period":48,"project_creation_level":"developer","auto_devops_enabled":null,"subgroup_creation_level":"maintainer","emails_disabled":null,"mentions_disabled":null,"lfs_enabled":true,"default_branch_protection":2,"avatar_url":null,"request_access_enabled":true,"full_name":"New Group Airbute","full_path":"new-group-airbute","created_at":"2021-03-15T15:55:53.613Z","parent_id":null,"shared_runners_setting":"enabled","ldap_cn":null,"ldap_access":null,"wiki_access_level":"enabled","shared_with_groups":[],"runners_token":"GR1348941-PhosPap-Sf1UxL1g6m4","prevent_sharing_groups_outside_hierarchy":false,"shared_projects":[],"shared_runners_minutes_limit":null,"extra_shared_runners_minutes_limit":null,"prevent_forking_outside_group":null,"membership_lock":false,"projects":[{"id":25157276,"path_with_namespace":"new-group-airbute/new-ci-test-project"}]},"emitted_at":1688127739529} -{"stream":"groups","data":{"id":61014882,"web_url":"https://gitlab.com/groups/new-group-airbute/test-subgroup-airbyte/test-private-sg","name":"Test Private SG","path":"test-private-sg","description":"","visibility":"private","share_with_group_lock":false,"require_two_factor_authentication":false,"two_factor_grace_period":48,"project_creation_level":"developer","auto_devops_enabled":null,"subgroup_creation_level":"maintainer","emails_disabled":null,"mentions_disabled":null,"lfs_enabled":true,"default_branch_protection":2,"avatar_url":null,"request_access_enabled":true,"full_name":"New Group Airbute / Test Subgroup Airbyte / Test Private SG","full_path":"new-group-airbute/test-subgroup-airbyte/test-private-sg","created_at":"2022-12-02T08:46:22.648Z","parent_id":61014863,"shared_runners_setting":"enabled","ldap_cn":null,"ldap_access":null,"wiki_access_level":"enabled","shared_with_groups":[],"runners_token":"GR1348941bjUaJQy2zzar-JmNBjfq","shared_projects":[],"shared_runners_minutes_limit":null,"extra_shared_runners_minutes_limit":null,"prevent_forking_outside_group":null,"membership_lock":false,"projects":[]},"emitted_at":1688127739793} -{"stream": "epic_issues", "data": {"id": 120214448, "iid": 31, "project_id": 25156633, "title": "Unit tests", "description": null, "state": "opened", "created_at": "2022-12-11T10:50:25.940Z", "updated_at": "2022-12-11T10:50:25.940Z", "closed_at": null, "closed_by": null, "labels": [], "milestone": null, "assignees": [], "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "type": "ISSUE", "assignee": null, "user_notes_count": 0, "merge_requests_count": 0, "upvotes": 0, "downvotes": 0, "due_date": null, "confidential": false, "discussion_locked": null, "issue_type": "issue", "web_url": "https://gitlab.com/airbyte.io/ci-test-project/-/issues/31", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "task_completion_status": {"count": 0, "completed_count": 0}, "weight": null, "blocking_issues_count": 0, "has_tasks": true, "task_status": "", "_links": {"self": "https://gitlab.com/api/v4/projects/25156633/issues/31", "notes": "https://gitlab.com/api/v4/projects/25156633/issues/31/notes", "award_emoji": "https://gitlab.com/api/v4/projects/25156633/issues/31/award_emoji", "project": "https://gitlab.com/api/v4/projects/25156633", "closed_as_duplicate_of": null}, "references": {"short": "#31", "relative": "#31", "full": "airbyte.io/ci-test-project#31"}, "severity": "UNKNOWN", "moved_to_id": null, "service_desk_reply_to": null, "epic_iid": 1, "epic": {"id": 678569, "iid": 1, "title": "Source Gitlab: certify to Beta", "url": "/groups/airbyte.io/-/epics/1", "group_id": 11266951, "human_readable_end_date": "Dec 30, 2022", "human_readable_timestamp": "Past due"}, "iteration": null, "epic_issue_id": 1899479, "relative_position": 0, "milestone_id": null, "assignee_id": null, "author_id": 8375961}, "emitted_at": 1686568231753} -{"stream": "issues", "data": {"id": 80940833, "iid": 30, "project_id": 25156633, "title": "Nulla tempore voluptatibus error.", "description": "### Voluptate\nQui quaerat praesentium. Voluptates temporibus quae. Libero aliquid quod. Nihil rerum earum. Inventore et illum.\n`Quod.`", "state": "opened", "created_at": "2021-02-15T15:56:04.924Z", "updated_at": "2021-02-15T15:56:04.924Z", "closed_at": null, "closed_by": null, "labels": ["et-facere", "nisi-et", "suscipit-consectetur"], "milestone": null, "assignees": [], "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "type": "ISSUE", "assignee": null, "user_notes_count": 20, "merge_requests_count": 0, "upvotes": 0, "downvotes": 0, "due_date": null, "confidential": false, "discussion_locked": null, "issue_type": "issue", "web_url": "https://gitlab.com/airbyte.io/ci-test-project/-/issues/30", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "task_completion_status": {"count": 0, "completed_count": 0}, "weight": null, "blocking_issues_count": 0, "has_tasks": true, "task_status": "0 of 0 checklist items completed", "_links": {"self": "https://gitlab.com/api/v4/projects/25156633/issues/30", "notes": "https://gitlab.com/api/v4/projects/25156633/issues/30/notes", "award_emoji": "https://gitlab.com/api/v4/projects/25156633/issues/30/award_emoji", "project": "https://gitlab.com/api/v4/projects/25156633", "closed_as_duplicate_of": null}, "references": {"short": "#30", "relative": "#30", "full": "airbyte.io/ci-test-project#30"}, "severity": "UNKNOWN", "moved_to_id": null, "service_desk_reply_to": null, "epic_iid": null, "epic": null, "iteration": null, "author_id": 8375961, "assignee_id": null, "closed_by_id": null, "milestone_id": null}, "emitted_at": 1686568070306} -{"stream": "issues", "data": {"id": 80940829, "iid": 29, "project_id": 25156633, "title": "Dolores tempora deserunt perspiciatis.", "description": "#### Magnam\nTempora optio eos. Quos quam ut. Accusamus aperiam consequatur. Saepe sit nam. Eaque tenetur qui.\n0. Aut. \n1. Ratione.", "state": "opened", "created_at": "2021-02-15T15:56:04.790Z", "updated_at": "2021-02-15T15:56:04.790Z", "closed_at": null, "closed_by": null, "labels": ["in-qui", "iste-est", "odio-ut"], "milestone": null, "assignees": [], "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "type": "ISSUE", "assignee": null, "user_notes_count": 18, "merge_requests_count": 0, "upvotes": 0, "downvotes": 0, "due_date": null, "confidential": false, "discussion_locked": null, "issue_type": "issue", "web_url": "https://gitlab.com/airbyte.io/ci-test-project/-/issues/29", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "task_completion_status": {"count": 0, "completed_count": 0}, "weight": null, "blocking_issues_count": 0, "has_tasks": true, "task_status": "0 of 0 checklist items completed", "_links": {"self": "https://gitlab.com/api/v4/projects/25156633/issues/29", "notes": "https://gitlab.com/api/v4/projects/25156633/issues/29/notes", "award_emoji": "https://gitlab.com/api/v4/projects/25156633/issues/29/award_emoji", "project": "https://gitlab.com/api/v4/projects/25156633", "closed_as_duplicate_of": null}, "references": {"short": "#29", "relative": "#29", "full": "airbyte.io/ci-test-project#29"}, "severity": "UNKNOWN", "moved_to_id": null, "service_desk_reply_to": null, "epic_iid": null, "epic": null, "iteration": null, "author_id": 8375961, "assignee_id": null, "closed_by_id": null, "milestone_id": null}, "emitted_at": 1686568070307} -{"stream": "issues", "data": {"id": 80940824, "iid": 28, "project_id": 25156633, "title": "Ut quae nesciunt facere.", "description": "##### Error\nIpsum doloremque beatae. Non incidunt ut. Quia esse atque. Quo dolores repudiandae. Sint aliquid et.\n## A", "state": "opened", "created_at": "2021-02-15T15:56:04.658Z", "updated_at": "2021-02-15T15:56:04.658Z", "closed_at": null, "closed_by": null, "labels": ["officia-laborum", "sit-neque", "voluptas-officiis"], "milestone": null, "assignees": [], "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "type": "ISSUE", "assignee": null, "user_notes_count": 13, "merge_requests_count": 0, "upvotes": 0, "downvotes": 0, "due_date": null, "confidential": false, "discussion_locked": null, "issue_type": "issue", "web_url": "https://gitlab.com/airbyte.io/ci-test-project/-/issues/28", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "task_completion_status": {"count": 0, "completed_count": 0}, "weight": null, "blocking_issues_count": 0, "has_tasks": true, "task_status": "0 of 0 checklist items completed", "_links": {"self": "https://gitlab.com/api/v4/projects/25156633/issues/28", "notes": "https://gitlab.com/api/v4/projects/25156633/issues/28/notes", "award_emoji": "https://gitlab.com/api/v4/projects/25156633/issues/28/award_emoji", "project": "https://gitlab.com/api/v4/projects/25156633", "closed_as_duplicate_of": null}, "references": {"short": "#28", "relative": "#28", "full": "airbyte.io/ci-test-project#28"}, "severity": "UNKNOWN", "moved_to_id": null, "service_desk_reply_to": null, "epic_iid": null, "epic": null, "iteration": null, "author_id": 8375961, "assignee_id": null, "closed_by_id": null, "milestone_id": null}, "emitted_at": 1686568070307} -{"stream": "project_members", "data": {"access_level": 40, "created_at": "2022-12-02T08:50:10.348Z", "expires_at": null, "id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte", "membership_state": "active", "project_id": 41541858}, "emitted_at": 1686568108823} -{"stream": "project_members", "data": {"access_level": 40, "created_at": "2021-03-15T14:46:31.550Z", "expires_at": null, "id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte", "membership_state": "active", "project_id": 25156633}, "emitted_at": 1686568109879} -{"stream": "project_members", "data": {"access_level": 40, "created_at": "2021-03-10T17:16:54.405Z", "expires_at": null, "id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte", "membership_state": "active", "project_id": 25032440}, "emitted_at": 1686568110194} -{"stream": "epics", "data": {"id": 678569, "iid": 1, "color": "#1068bf", "text_color": "#FFFFFF", "group_id": 11266951, "parent_id": null, "parent_iid": null, "title": "Source Gitlab: certify to Beta", "description": "Lorem ipsum", "confidential": false, "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "start_date": "2022-12-11", "start_date_is_fixed": true, "start_date_fixed": "2022-12-11", "start_date_from_inherited_source": null, "start_date_from_milestones": null, "end_date": "2022-12-30", "due_date": "2022-12-30", "due_date_is_fixed": true, "due_date_fixed": "2022-12-30", "due_date_from_inherited_source": null, "due_date_from_milestones": null, "state": "opened", "web_edit_url": "/groups/airbyte.io/-/epics/1", "web_url": "https://gitlab.com/groups/airbyte.io/-/epics/1", "references": {"short": "&1", "relative": "&1", "full": "airbyte.io&1"}, "created_at": "2022-12-11T10:50:04.280Z", "updated_at": "2022-12-11T10:50:26.276Z", "closed_at": null, "labels": [], "upvotes": 1, "downvotes": 0, "_links": {"self": "https://gitlab.com/api/v4/groups/11266951/epics/1", "epic_issues": "https://gitlab.com/api/v4/groups/11266951/epics/1/issues", "group": "https://gitlab.com/api/v4/groups/11266951", "parent": null}, "author_id": 8375961}, "emitted_at": 1686568224925} -{"stream": "commits", "data": {"id": "fb24e6736b3a959a59e49b56d2d83a28ea3ae15b", "short_id": "fb24e673", "created_at": "2022-12-02T14:26:55.000+00:00", "parent_ids": [], "title": "Initial commit", "message": "Initial commit", "author_name": "Alexander Arhipenko", "author_email": "integration-test@airbyte.io", "authored_date": "2022-12-02T14:26:55.000+00:00", "committer_name": "Alexander Arhipenko", "committer_email": "integration-test@airbyte.io", "committed_date": "2022-12-02T14:26:55.000+00:00", "trailers": {}, "web_url": "https://gitlab.com/new-group-airbute/test-public-sg/test-sg-public-2/test-private-subsubg-1/test_project_in_nested_subgroup/-/commit/fb24e6736b3a959a59e49b56d2d83a28ea3ae15b", "stats": {"additions": 92, "deletions": 0, "total": 92}, "project_id": 41551658}, "emitted_at": 1686568045674} -{"stream": "commits", "data": {"id": "27329d3afac51fbf2762428e12f2635d1137c549", "short_id": "27329d3a", "created_at": "2021-02-15T15:52:52.000+00:00", "parent_ids": ["b362ea7aa65515dc35ff3a93423478b2143e771d"], "title": "Update README.md", "message": "Update README.md", "author_name": "Administrator", "author_email": "admin@example.com", "authored_date": "2021-02-15T15:52:52.000+00:00", "committer_name": "Administrator", "committer_email": "admin@example.com", "committed_date": "2021-02-15T15:52:52.000+00:00", "trailers": {}, "web_url": "https://gitlab.com/airbyte.io/ci-test-project/-/commit/27329d3afac51fbf2762428e12f2635d1137c549", "stats": {"additions": 6, "deletions": 0, "total": 6}, "project_id": 25156633}, "emitted_at": 1686568048416} -{"stream": "commits", "data": {"id": "b362ea7aa65515dc35ff3a93423478b2143e771d", "short_id": "b362ea7a", "created_at": "2021-02-15T15:52:03.000+00:00", "parent_ids": [], "title": "Initial commit", "message": "Initial commit", "author_name": "Administrator", "author_email": "admin@example.com", "authored_date": "2021-02-15T15:52:03.000+00:00", "committer_name": "Administrator", "committer_email": "admin@example.com", "committed_date": "2021-02-15T15:52:03.000+00:00", "trailers": {}, "web_url": "https://gitlab.com/airbyte.io/ci-test-project/-/commit/b362ea7aa65515dc35ff3a93423478b2143e771d", "stats": {"additions": 2, "deletions": 0, "total": 2}, "project_id": 25156633}, "emitted_at": 1686568048417} +{"stream": "merge_requests", "data": {"id": 92594931, "iid": 3, "project_id": 25157276, "title": "add fake CI config", "description": "", "state": "merged", "created_at": "2021-03-18T12:49:13.091Z", "updated_at": "2021-03-18T12:51:06.319Z", "merged_by": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "merge_user": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "merged_at": "2021-03-18T12:51:06.470Z", "closed_by": null, "closed_at": null, "target_branch": "master", "source_branch": "ykurochkin/add-fake-CI-config", "user_notes_count": 0, "upvotes": 0, "downvotes": 0, "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "assignees": [], "assignee": null, "reviewers": [], "source_project_id": 25157276, "target_project_id": 25157276, "labels": [], "draft": false, "work_in_progress": false, "milestone": null, "merge_when_pipeline_succeeds": false, "merge_status": "can_be_merged", "detailed_merge_status": "not_open", "sha": "028c02d96f40afe9b4d1173c1d0f712dd6d07302", "merge_commit_sha": "6ad3dd49539391774db738c9e7b7d69f2d872c98", "squash_commit_sha": null, "discussion_locked": null, "should_remove_source_branch": null, "force_remove_source_branch": true, "prepared_at": "2021-03-18T12:49:13.091Z", "reference": "!3", "references": {"short": "!3", "relative": "!3", "full": "new-group-airbute/new-ci-test-project!3"}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/merge_requests/3", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "squash": false, "squash_on_merge": false, "task_completion_status": {"count": 0, "completed_count": 0}, "has_conflicts": false, "blocking_discussions_resolved": true, "approvals_before_merge": null, "author_id": 8375961, "assignee_id": null, "closed_by_id": null, "milestone_id": null, "merged_by_id": 8375961}, "emitted_at": 1696948541619} +{"stream": "merge_requests", "data": {"id": 92593913, "iid": 2, "project_id": 25157276, "title": "update readme.md", "description": "", "state": "opened", "created_at": "2021-03-18T12:42:30.200Z", "updated_at": "2021-03-18T12:42:30.200Z", "merged_by": null, "merge_user": null, "merged_at": null, "closed_by": null, "closed_at": null, "target_branch": "master", "source_branch": "ykurochkin/test-branch", "user_notes_count": 0, "upvotes": 0, "downvotes": 0, "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "assignees": [], "assignee": null, "reviewers": [], "source_project_id": 25157276, "target_project_id": 25157276, "labels": [], "draft": false, "work_in_progress": false, "milestone": null, "merge_when_pipeline_succeeds": false, "merge_status": "can_be_merged", "detailed_merge_status": "mergeable", "sha": "9b0c5cf345f0ca1a3fb3ae253e74e0616abf8129", "merge_commit_sha": null, "squash_commit_sha": null, "discussion_locked": null, "should_remove_source_branch": null, "force_remove_source_branch": true, "prepared_at": "2021-03-18T12:42:30.200Z", "reference": "!2", "references": {"short": "!2", "relative": "!2", "full": "new-group-airbute/new-ci-test-project!2"}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/merge_requests/2", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "squash": false, "squash_on_merge": false, "task_completion_status": {"count": 0, "completed_count": 0}, "has_conflicts": false, "blocking_discussions_resolved": true, "approvals_before_merge": null, "author_id": 8375961, "assignee_id": null, "closed_by_id": null, "milestone_id": null, "merged_by_id": null}, "emitted_at": 1696948541622} +{"stream": "merge_requests", "data": {"id": 92111504, "iid": 1, "project_id": 25157276, "title": "Draft: Resolve \"Fake Issue 30\"", "description": "Closes #31", "state": "opened", "created_at": "2021-03-15T16:08:05.071Z", "updated_at": "2021-03-15T16:08:05.071Z", "merged_by": null, "merge_user": null, "merged_at": null, "closed_by": null, "closed_at": null, "target_branch": "master", "source_branch": "31-fake-issue-30", "user_notes_count": 0, "upvotes": 0, "downvotes": 0, "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "assignees": [8375961], "assignee": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "reviewers": [], "source_project_id": 25157276, "target_project_id": 25157276, "labels": ["bug"], "draft": true, "work_in_progress": true, "milestone": null, "merge_when_pipeline_succeeds": false, "merge_status": "cannot_be_merged", "detailed_merge_status": "draft_status", "sha": "2831d897ba0214f8d3168647e8ad4232b83987ef", "merge_commit_sha": null, "squash_commit_sha": null, "discussion_locked": null, "should_remove_source_branch": null, "force_remove_source_branch": true, "prepared_at": "2021-03-15T16:08:05.071Z", "reference": "!1", "references": {"short": "!1", "relative": "!1", "full": "new-group-airbute/new-ci-test-project!1"}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/merge_requests/1", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "squash": false, "squash_on_merge": false, "task_completion_status": {"count": 0, "completed_count": 0}, "has_conflicts": true, "blocking_discussions_resolved": true, "approvals_before_merge": null, "author_id": 8375961, "assignee_id": 8375961, "closed_by_id": null, "milestone_id": null, "merged_by_id": null}, "emitted_at": 1696948541624} +{"stream": "groups", "data": {"id": 11329647, "web_url": "https://gitlab.com/groups/new-group-airbute", "name": "New Group Airbute", "path": "new-group-airbute", "description": "", "visibility": "public", "share_with_group_lock": false, "require_two_factor_authentication": false, "two_factor_grace_period": 48, "project_creation_level": "developer", "auto_devops_enabled": null, "subgroup_creation_level": "maintainer", "emails_disabled": null, "mentions_disabled": null, "lfs_enabled": true, "default_branch_protection": 2, "default_branch_protection_defaults": {"allowed_to_push": [{"access_level": 30}], "allow_force_push": true, "allowed_to_merge": [{"access_level": 30}]}, "avatar_url": null, "request_access_enabled": true, "full_name": "New Group Airbute", "full_path": "new-group-airbute", "created_at": "2021-03-15T15:55:53.613Z", "parent_id": null, "shared_runners_setting": "enabled", "ldap_cn": null, "ldap_access": null, "wiki_access_level": "enabled", "shared_with_groups": [], "runners_token": "GR1348941-PhosPap-Sf1UxL1g6m4", "prevent_sharing_groups_outside_hierarchy": false, "shared_projects": [], "shared_runners_minutes_limit": null, "extra_shared_runners_minutes_limit": null, "prevent_forking_outside_group": null, "membership_lock": false, "projects": [{"id": 25157276, "path_with_namespace": "new-group-airbute/new-ci-test-project"}]}, "emitted_at": 1696948783668} +{"stream": "groups", "data": {"id": 61014882, "web_url": "https://gitlab.com/groups/new-group-airbute/test-subgroup-airbyte/test-private-sg", "name": "Test Private SG", "path": "test-private-sg", "description": "", "visibility": "private", "share_with_group_lock": false, "require_two_factor_authentication": false, "two_factor_grace_period": 48, "project_creation_level": "developer", "auto_devops_enabled": null, "subgroup_creation_level": "maintainer", "emails_disabled": null, "mentions_disabled": null, "lfs_enabled": true, "default_branch_protection": 2, "default_branch_protection_defaults": {"allowed_to_push": [{"access_level": 30}], "allow_force_push": true, "allowed_to_merge": [{"access_level": 30}]}, "avatar_url": null, "request_access_enabled": true, "full_name": "New Group Airbute / Test Subgroup Airbyte / Test Private SG", "full_path": "new-group-airbute/test-subgroup-airbyte/test-private-sg", "created_at": "2022-12-02T08:46:22.648Z", "parent_id": 61014863, "shared_runners_setting": "enabled", "ldap_cn": null, "ldap_access": null, "wiki_access_level": "enabled", "shared_with_groups": [], "runners_token": "GR1348941bjUaJQy2zzar-JmNBjfq", "shared_projects": [], "shared_runners_minutes_limit": null, "extra_shared_runners_minutes_limit": null, "prevent_forking_outside_group": null, "membership_lock": false, "projects": []}, "emitted_at": 1696948783989} +{"stream": "groups", "data": {"id": 61015181, "web_url": "https://gitlab.com/groups/new-group-airbute/test-public-sg/test-sg-public-2/test-private-subsubg-1", "name": "Test Private SubSubG 1", "path": "test-private-subsubg-1", "description": "", "visibility": "private", "share_with_group_lock": false, "require_two_factor_authentication": false, "two_factor_grace_period": 48, "project_creation_level": "developer", "auto_devops_enabled": null, "subgroup_creation_level": "maintainer", "emails_disabled": null, "mentions_disabled": null, "lfs_enabled": true, "default_branch_protection": 2, "default_branch_protection_defaults": {"allowed_to_push": [{"access_level": 30}], "allow_force_push": true, "allowed_to_merge": [{"access_level": 30}]}, "avatar_url": null, "request_access_enabled": true, "full_name": "New Group Airbute / Test Public SG / Test SG Public 2 / Test Private SubSubG 1", "full_path": "new-group-airbute/test-public-sg/test-sg-public-2/test-private-subsubg-1", "created_at": "2022-12-02T08:54:42.252Z", "parent_id": 61014943, "shared_runners_setting": "enabled", "ldap_cn": null, "ldap_access": null, "wiki_access_level": "enabled", "shared_with_groups": [], "runners_token": "GR1348941x8xQf6K-UvnnyJ-bcut4", "shared_projects": [], "shared_runners_minutes_limit": null, "extra_shared_runners_minutes_limit": null, "prevent_forking_outside_group": null, "membership_lock": false, "projects": [{"id": 41551658, "path_with_namespace": "new-group-airbute/test-public-sg/test-sg-public-2/test-private-subsubg-1/test_project_in_nested_subgroup"}]}, "emitted_at": 1696948784394} +{"stream": "epic_issues", "data": {"id": 120214448, "iid": 31, "project_id": 25156633, "title": "Unit tests", "description": null, "state": "opened", "created_at": "2022-12-11T10:50:25.940Z", "updated_at": "2022-12-11T10:50:25.940Z", "closed_at": null, "closed_by": null, "labels": [], "milestone": null, "assignees": [], "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "type": "ISSUE", "assignee": null, "user_notes_count": 0, "merge_requests_count": 0, "upvotes": 0, "downvotes": 0, "due_date": null, "confidential": false, "discussion_locked": null, "issue_type": "issue", "web_url": "https://gitlab.com/airbyte.io/ci-test-project/-/issues/31", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "task_completion_status": {"count": 0, "completed_count": 0}, "weight": null, "blocking_issues_count": 0, "has_tasks": true, "task_status": "", "_links": {"self": "https://gitlab.com/api/v4/projects/25156633/issues/31", "notes": "https://gitlab.com/api/v4/projects/25156633/issues/31/notes", "award_emoji": "https://gitlab.com/api/v4/projects/25156633/issues/31/award_emoji", "project": "https://gitlab.com/api/v4/projects/25156633", "closed_as_duplicate_of": null}, "references": {"short": "#31", "relative": "#31", "full": "airbyte.io/ci-test-project#31"}, "severity": "UNKNOWN", "moved_to_id": null, "service_desk_reply_to": null, "epic_iid": 1, "epic": {"id": 678569, "iid": 1, "title": "Source Gitlab: certify to Beta", "url": "/groups/airbyte.io/-/epics/1", "group_id": 11266951, "human_readable_end_date": "Dec 30, 2022", "human_readable_timestamp": "Past due"}, "iteration": null, "epic_issue_id": 1899479, "relative_position": 0, "milestone_id": null, "assignee_id": null, "author_id": 8375961}, "emitted_at": 1696949059273} +{"stream": "epic_issues", "data": {"id": 80659730, "iid": 13, "project_id": 25032440, "title": "Start a free trial of GitLab Gold - no credit card required :rocket:", "description": "At any point while using the free version of GitLab you can start a trial of GitLab Gold for free for 30 days. With a GitLab Gold trial, you'll get access to all of the most popular features across all of the paid tiers within GitLab. \n \n:white_check_mark: Reduce risk by requiring team leaders to approve merge requests.\n \n:white_check_mark: Ensure code quality with Multiple code reviews.\n \n:white_check_mark: Run your CI pipelines for up to 50,000 minutes (~9,500 CI builds).\n \n:white_check_mark: Plan and organize parallel development with multiple issue boards.\n \n:white_check_mark: Report on the productivity of each team in your organization by using issue analytics. \n \n:white_check_mark: Dynamically scan Docker images for vulnerabilities before production pushes. \n \n:white_check_mark: Scan security vulnerabilities, license compliance and dependencies in your CI pipelines. \n \n:white_check_mark: Get alerted when your application performance degrades. \n \n:white_check_mark: And so much more, [you can view all the features here](https://about.gitlab.com/pricing/gitlab-com/feature-comparison/). \n \n## Next steps\n* [ ] [Click here to start a trial of GitLab Gold.](https://gitlab.com/-/trial_registrations/new?glm_content=user_onboarding_whats_in_paid_tiers&glm_source=gitlab.com)", "state": "opened", "created_at": "2021-03-10T17:16:56.091Z", "updated_at": "2023-10-10T11:44:39.796Z", "closed_at": null, "closed_by": null, "labels": ["Novice"], "milestone": null, "assignees": [8375961], "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "type": "ISSUE", "assignee": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "user_notes_count": 0, "merge_requests_count": 0, "upvotes": 0, "downvotes": 0, "due_date": null, "confidential": false, "discussion_locked": null, "issue_type": "issue", "web_url": "https://gitlab.com/airbyte.io/learn-gitlab/-/issues/13", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "task_completion_status": {"count": 1, "completed_count": 0}, "weight": null, "blocking_issues_count": 0, "has_tasks": false, "_links": {"self": "https://gitlab.com/api/v4/projects/25032440/issues/13", "notes": "https://gitlab.com/api/v4/projects/25032440/issues/13/notes", "award_emoji": "https://gitlab.com/api/v4/projects/25032440/issues/13/award_emoji", "project": "https://gitlab.com/api/v4/projects/25032440", "closed_as_duplicate_of": null}, "references": {"short": "#13", "relative": "#13", "full": "airbyte.io/learn-gitlab#13"}, "severity": "UNKNOWN", "moved_to_id": null, "service_desk_reply_to": null, "epic_iid": 1, "epic": {"id": 678569, "iid": 1, "title": "Source Gitlab: certify to Beta", "url": "/groups/airbyte.io/-/epics/1", "group_id": 11266951, "human_readable_end_date": "Dec 30, 2022", "human_readable_timestamp": "Past due"}, "iteration": null, "epic_issue_id": 3762298, "relative_position": -513, "milestone_id": null, "assignee_id": 8375961, "author_id": 8375961}, "emitted_at": 1696949059274} +{"stream": "issues", "data": {"id": 80943819, "iid": 32, "project_id": 25157276, "title": "Fake Issue 31", "description": null, "state": "opened", "created_at": "2021-03-15T15:22:42.206Z", "updated_at": "2021-03-15T15:22:42.206Z", "closed_at": null, "closed_by": null, "labels": ["bug"], "milestone": null, "assignees": [], "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "type": "ISSUE", "assignee": null, "user_notes_count": 0, "merge_requests_count": 0, "upvotes": 0, "downvotes": 0, "due_date": null, "confidential": false, "discussion_locked": null, "issue_type": "issue", "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/issues/32", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "task_completion_status": {"count": 0, "completed_count": 0}, "blocking_issues_count": 0, "has_tasks": true, "task_status": "", "_links": {"self": "https://gitlab.com/api/v4/projects/25157276/issues/32", "notes": "https://gitlab.com/api/v4/projects/25157276/issues/32/notes", "award_emoji": "https://gitlab.com/api/v4/projects/25157276/issues/32/award_emoji", "project": "https://gitlab.com/api/v4/projects/25157276", "closed_as_duplicate_of": null}, "references": {"short": "#32", "relative": "#32", "full": "new-group-airbute/new-ci-test-project#32"}, "severity": "UNKNOWN", "moved_to_id": null, "service_desk_reply_to": null, "author_id": 8375961, "assignee_id": null, "closed_by_id": null, "milestone_id": null}, "emitted_at": 1696949354572} +{"stream": "issues", "data": {"id": 80943818, "iid": 31, "project_id": 25157276, "title": "Fake Issue 30", "description": null, "state": "opened", "created_at": "2021-03-15T15:22:41.337Z", "updated_at": "2021-03-15T16:08:06.041Z", "closed_at": null, "closed_by": null, "labels": ["bug"], "milestone": null, "assignees": [], "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "type": "ISSUE", "assignee": null, "user_notes_count": 0, "merge_requests_count": 1, "upvotes": 0, "downvotes": 0, "due_date": null, "confidential": false, "discussion_locked": null, "issue_type": "issue", "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/issues/31", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "task_completion_status": {"count": 0, "completed_count": 0}, "blocking_issues_count": 0, "has_tasks": true, "task_status": "", "_links": {"self": "https://gitlab.com/api/v4/projects/25157276/issues/31", "notes": "https://gitlab.com/api/v4/projects/25157276/issues/31/notes", "award_emoji": "https://gitlab.com/api/v4/projects/25157276/issues/31/award_emoji", "project": "https://gitlab.com/api/v4/projects/25157276", "closed_as_duplicate_of": null}, "references": {"short": "#31", "relative": "#31", "full": "new-group-airbute/new-ci-test-project#31"}, "severity": "UNKNOWN", "moved_to_id": null, "service_desk_reply_to": null, "author_id": 8375961, "assignee_id": null, "closed_by_id": null, "milestone_id": null}, "emitted_at": 1696949354574} +{"stream": "issues", "data": {"id": 80943817, "iid": 30, "project_id": 25157276, "title": "Fake Issue 29", "description": null, "state": "opened", "created_at": "2021-03-15T15:22:40.529Z", "updated_at": "2021-03-15T15:22:40.529Z", "closed_at": null, "closed_by": null, "labels": ["bug"], "milestone": null, "assignees": [], "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "type": "ISSUE", "assignee": null, "user_notes_count": 0, "merge_requests_count": 0, "upvotes": 0, "downvotes": 0, "due_date": null, "confidential": false, "discussion_locked": null, "issue_type": "issue", "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/issues/30", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "task_completion_status": {"count": 0, "completed_count": 0}, "blocking_issues_count": 0, "has_tasks": true, "task_status": "", "_links": {"self": "https://gitlab.com/api/v4/projects/25157276/issues/30", "notes": "https://gitlab.com/api/v4/projects/25157276/issues/30/notes", "award_emoji": "https://gitlab.com/api/v4/projects/25157276/issues/30/award_emoji", "project": "https://gitlab.com/api/v4/projects/25157276", "closed_as_duplicate_of": null}, "references": {"short": "#30", "relative": "#30", "full": "new-group-airbute/new-ci-test-project#30"}, "severity": "UNKNOWN", "moved_to_id": null, "service_desk_reply_to": null, "author_id": 8375961, "assignee_id": null, "closed_by_id": null, "milestone_id": null}, "emitted_at": 1696949354576} +{"stream": "project_members", "data": {"access_level": 40, "created_at": "2021-03-15T15:08:36.746Z", "created_by": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "expires_at": null, "id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte", "membership_state": "active", "project_id": 25157276}, "emitted_at": 1696949674671} +{"stream": "epics", "data": {"id": 1977226, "iid": 2, "color": "#1068bf", "text_color": "#FFFFFF", "group_id": 11266951, "parent_id": null, "parent_iid": null, "title": "Test epic", "description": null, "confidential": false, "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "start_date": null, "start_date_is_fixed": false, "start_date_fixed": null, "start_date_from_inherited_source": null, "start_date_from_milestones": null, "end_date": null, "due_date": null, "due_date_is_fixed": false, "due_date_fixed": null, "due_date_from_inherited_source": null, "due_date_from_milestones": null, "state": "opened", "web_edit_url": "/groups/airbyte.io/-/epics/2", "web_url": "https://gitlab.com/groups/airbyte.io/-/epics/2", "references": {"short": "&2", "relative": "&2", "full": "airbyte.io&2"}, "created_at": "2023-10-10T10:37:36.529Z", "updated_at": "2023-10-10T11:44:50.107Z", "closed_at": null, "labels": [], "upvotes": 0, "downvotes": 0, "_links": {"self": "https://gitlab.com/api/v4/groups/11266951/epics/2", "epic_issues": "https://gitlab.com/api/v4/groups/11266951/epics/2/issues", "group": "https://gitlab.com/api/v4/groups/11266951", "parent": null}, "author_id": 8375961}, "emitted_at": 1696949906098} +{"stream": "epics", "data": {"id": 678569, "iid": 1, "color": "#1068bf", "text_color": "#FFFFFF", "group_id": 11266951, "parent_id": null, "parent_iid": null, "title": "Source Gitlab: certify to Beta", "description": "Lorem ipsum", "confidential": false, "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "start_date": "2022-12-11", "start_date_is_fixed": true, "start_date_fixed": "2022-12-11", "start_date_from_inherited_source": null, "start_date_from_milestones": null, "end_date": "2022-12-30", "due_date": "2022-12-30", "due_date_is_fixed": true, "due_date_fixed": "2022-12-30", "due_date_from_inherited_source": null, "due_date_from_milestones": null, "state": "opened", "web_edit_url": "/groups/airbyte.io/-/epics/1", "web_url": "https://gitlab.com/groups/airbyte.io/-/epics/1", "references": {"short": "&1", "relative": "&1", "full": "airbyte.io&1"}, "created_at": "2022-12-11T10:50:04.280Z", "updated_at": "2023-10-10T11:44:49.999Z", "closed_at": null, "labels": [], "upvotes": 1, "downvotes": 0, "_links": {"self": "https://gitlab.com/api/v4/groups/11266951/epics/1", "epic_issues": "https://gitlab.com/api/v4/groups/11266951/epics/1/issues", "group": "https://gitlab.com/api/v4/groups/11266951", "parent": null}, "author_id": 8375961}, "emitted_at": 1696949906100} +{"stream": "commits", "data": {"id": "6ad3dd49539391774db738c9e7b7d69f2d872c98", "short_id": "6ad3dd49", "created_at": "2021-03-18T12:51:05.000+00:00", "parent_ids": ["2831d897ba0214f8d3168647e8ad4232b83987ef", "028c02d96f40afe9b4d1173c1d0f712dd6d07302"], "title": "Merge branch 'ykurochkin/add-fake-CI-config' into 'master'", "message": "Merge branch 'ykurochkin/add-fake-CI-config' into 'master'\n\nadd fake CI config\n\nSee merge request new-group-airbute/new-ci-test-project!3", "author_name": "Alexander Arhipenko", "author_email": "integration-test@airbyte.io", "authored_date": "2021-03-18T12:51:05.000+00:00", "committer_name": "Alexander Arhipenko", "committer_email": "integration-test@airbyte.io", "committed_date": "2021-03-18T12:51:05.000+00:00", "trailers": {}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/commit/6ad3dd49539391774db738c9e7b7d69f2d872c98", "stats": {"additions": 14, "deletions": 0, "total": 14}, "project_id": 25157276}, "emitted_at": 1696950309747} +{"stream": "commits", "data": {"id": "028c02d96f40afe9b4d1173c1d0f712dd6d07302", "short_id": "028c02d9", "created_at": "2021-03-18T14:48:41.000+02:00", "parent_ids": ["2831d897ba0214f8d3168647e8ad4232b83987ef"], "title": "add fake CI config", "message": "add fake CI config\n", "author_name": "ykurochkin", "author_email": "zhenia.kurochkin@gmail.com", "authored_date": "2021-03-18T14:48:41.000+02:00", "committer_name": "ykurochkin", "committer_email": "zhenia.kurochkin@gmail.com", "committed_date": "2021-03-18T14:48:41.000+02:00", "trailers": {}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/commit/028c02d96f40afe9b4d1173c1d0f712dd6d07302", "stats": {"additions": 14, "deletions": 0, "total": 14}, "project_id": 25157276}, "emitted_at": 1696950309749} +{"stream": "commits", "data": {"id": "2831d897ba0214f8d3168647e8ad4232b83987ef", "short_id": "2831d897", "created_at": "2021-03-15T15:08:36.000+00:00", "parent_ids": [], "title": "Initial commit", "message": "Initial commit", "author_name": "Alexander Arhipenko", "author_email": "integration-test@airbyte.io", "authored_date": "2021-03-15T15:08:36.000+00:00", "committer_name": "Alexander Arhipenko", "committer_email": "integration-test@airbyte.io", "committed_date": "2021-03-15T15:08:36.000+00:00", "trailers": {}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/commit/2831d897ba0214f8d3168647e8ad4232b83987ef", "stats": {"additions": 2, "deletions": 0, "total": 2}, "project_id": 25157276}, "emitted_at": 1696950309750} {"stream": "jobs", "data": {"id": 1108959782, "status": "failed", "stage": "test", "name": "test-code-job2", "ref": "master", "tag": false, "coverage": null, "allow_failure": false, "created_at": "2021-03-18T12:51:06.294Z", "started_at": "2021-03-18T12:51:07.646Z", "finished_at": "2021-03-18T12:51:51.309Z", "erased_at": null, "duration": 43.662407, "queued_duration": 1.180926, "user": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte", "created_at": "2021-03-10T17:13:46.589Z", "bio": "", "location": "", "public_email": "", "skype": "", "linkedin": "", "twitter": "", "discord": "", "website_url": "", "organization": "", "job_title": "", "pronouns": "", "bot": false, "work_information": null, "followers": 0, "following": 0, "local_time": "11:08 AM"}, "commit": {"id": "6ad3dd49539391774db738c9e7b7d69f2d872c98", "short_id": "6ad3dd49", "created_at": "2021-03-18T12:51:05.000+00:00", "parent_ids": ["2831d897ba0214f8d3168647e8ad4232b83987ef", "028c02d96f40afe9b4d1173c1d0f712dd6d07302"], "title": "Merge branch 'ykurochkin/add-fake-CI-config' into 'master'", "message": "Merge branch 'ykurochkin/add-fake-CI-config' into 'master'\n\nadd fake CI config\n\nSee merge request new-group-airbute/new-ci-test-project!3", "author_name": "Alexander Arhipenko", "author_email": "integration-test@airbyte.io", "authored_date": "2021-03-18T12:51:05.000+00:00", "committer_name": "Alexander Arhipenko", "committer_email": "integration-test@airbyte.io", "committed_date": "2021-03-18T12:51:05.000+00:00", "trailers": {}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/commit/6ad3dd49539391774db738c9e7b7d69f2d872c98"}, "pipeline": {"id": 272632767, "iid": 2, "project_id": 25157276, "sha": "6ad3dd49539391774db738c9e7b7d69f2d872c98", "ref": "master", "status": "failed", "source": "push", "created_at": "2021-03-18T12:51:06.262Z", "updated_at": "2021-03-18T12:51:52.007Z", "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/pipelines/272632767"}, "failure_reason": "script_failure", "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/jobs/1108959782", "project": {"ci_job_token_scope_enabled": false}, "artifacts": [{"file_type": "trace", "size": 2200, "filename": "job.log", "file_format": null}], "runner": null, "artifacts_expire_at": null, "tag_list": [], "user_id": 8375961, "pipeline_id": 272632767, "runner_id": null, "commit_id": "6ad3dd49539391774db738c9e7b7d69f2d872c98", "project_id": 25157276}, "emitted_at": 1686568098000} {"stream": "jobs", "data": {"id": 1108959779, "status": "failed", "stage": "test", "name": "test-code-job1", "ref": "master", "tag": false, "coverage": null, "allow_failure": false, "created_at": "2021-03-18T12:51:06.279Z", "started_at": "2021-03-18T12:51:07.943Z", "finished_at": "2021-03-18T12:51:50.943Z", "erased_at": null, "duration": 42.999853, "queued_duration": 1.349274, "user": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte", "created_at": "2021-03-10T17:13:46.589Z", "bio": "", "location": "", "public_email": "", "skype": "", "linkedin": "", "twitter": "", "discord": "", "website_url": "", "organization": "", "job_title": "", "pronouns": "", "bot": false, "work_information": null, "followers": 0, "following": 0, "local_time": "11:08 AM"}, "commit": {"id": "6ad3dd49539391774db738c9e7b7d69f2d872c98", "short_id": "6ad3dd49", "created_at": "2021-03-18T12:51:05.000+00:00", "parent_ids": ["2831d897ba0214f8d3168647e8ad4232b83987ef", "028c02d96f40afe9b4d1173c1d0f712dd6d07302"], "title": "Merge branch 'ykurochkin/add-fake-CI-config' into 'master'", "message": "Merge branch 'ykurochkin/add-fake-CI-config' into 'master'\n\nadd fake CI config\n\nSee merge request new-group-airbute/new-ci-test-project!3", "author_name": "Alexander Arhipenko", "author_email": "integration-test@airbyte.io", "authored_date": "2021-03-18T12:51:05.000+00:00", "committer_name": "Alexander Arhipenko", "committer_email": "integration-test@airbyte.io", "committed_date": "2021-03-18T12:51:05.000+00:00", "trailers": {}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/commit/6ad3dd49539391774db738c9e7b7d69f2d872c98"}, "pipeline": {"id": 272632767, "iid": 2, "project_id": 25157276, "sha": "6ad3dd49539391774db738c9e7b7d69f2d872c98", "ref": "master", "status": "failed", "source": "push", "created_at": "2021-03-18T12:51:06.262Z", "updated_at": "2021-03-18T12:51:52.007Z", "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/pipelines/272632767"}, "failure_reason": "script_failure", "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/jobs/1108959779", "project": {"ci_job_token_scope_enabled": false}, "artifacts": [{"file_type": "trace", "size": 2182, "filename": "job.log", "file_format": null}], "runner": null, "artifacts_expire_at": null, "tag_list": [], "user_id": 8375961, "pipeline_id": 272632767, "runner_id": null, "commit_id": "6ad3dd49539391774db738c9e7b7d69f2d872c98", "project_id": 25157276}, "emitted_at": 1686568098001} {"stream": "jobs", "data": {"id": 1108952832, "status": "failed", "stage": "test", "name": "test-code-job2", "ref": "ykurochkin/add-fake-CI-config", "tag": false, "coverage": null, "allow_failure": false, "created_at": "2021-03-18T12:48:49.222Z", "started_at": "2021-03-18T12:48:50.732Z", "finished_at": "2021-03-18T12:49:37.961Z", "erased_at": null, "duration": 47.229034, "queued_duration": 1.422541, "user": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte", "created_at": "2021-03-10T17:13:46.589Z", "bio": "", "location": "", "public_email": "", "skype": "", "linkedin": "", "twitter": "", "discord": "", "website_url": "", "organization": "", "job_title": "", "pronouns": "", "bot": false, "work_information": null, "followers": 0, "following": 0, "local_time": "11:08 AM"}, "commit": {"id": "028c02d96f40afe9b4d1173c1d0f712dd6d07302", "short_id": "028c02d9", "created_at": "2021-03-18T14:48:41.000+02:00", "parent_ids": ["2831d897ba0214f8d3168647e8ad4232b83987ef"], "title": "add fake CI config", "message": "add fake CI config\n", "author_name": "ykurochkin", "author_email": "zhenia.kurochkin@gmail.com", "authored_date": "2021-03-18T14:48:41.000+02:00", "committer_name": "ykurochkin", "committer_email": "zhenia.kurochkin@gmail.com", "committed_date": "2021-03-18T14:48:41.000+02:00", "trailers": {}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/commit/028c02d96f40afe9b4d1173c1d0f712dd6d07302"}, "pipeline": {"id": 272631271, "iid": 1, "project_id": 25157276, "sha": "028c02d96f40afe9b4d1173c1d0f712dd6d07302", "ref": "ykurochkin/add-fake-CI-config", "status": "failed", "source": "push", "created_at": "2021-03-18T12:48:49.174Z", "updated_at": "2021-03-18T12:49:38.092Z", "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/pipelines/272631271"}, "failure_reason": "script_failure", "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/jobs/1108952832", "project": {"ci_job_token_scope_enabled": false}, "artifacts": [{"file_type": "trace", "size": 2223, "filename": "job.log", "file_format": null}], "runner": null, "artifacts_expire_at": null, "tag_list": [], "user_id": 8375961, "pipeline_id": 272631271, "runner_id": null, "commit_id": "028c02d96f40afe9b4d1173c1d0f712dd6d07302", "project_id": 25157276}, "emitted_at": 1686568098411} -{"stream": "project_labels", "data": {"id": 19117004, "name": "Label 1", "description": null, "description_html": "", "text_color": "#FFFFFF", "color": "#008000", "subscribed": false, "priority": null, "is_project_label": false, "project_id": 41541858}, "emitted_at": 1686568116129} -{"stream": "project_labels", "data": {"id": 19117017, "name": "Label 10", "description": null, "description_html": "", "text_color": "#FFFFFF", "color": "#000080", "subscribed": false, "priority": null, "is_project_label": false, "project_id": 41541858}, "emitted_at": 1686568116131} -{"stream": "project_labels", "data": {"id": 19117018, "name": "Label 11", "description": null, "description_html": "", "text_color": "#FFFFFF", "color": "#808080", "subscribed": false, "priority": null, "is_project_label": false, "project_id": 41541858}, "emitted_at": 1686568116131} -{"stream": "releases", "data": {"name": "First release", "tag_name": "fake-tag-6", "description": "Test Release", "created_at": "2021-03-18T12:44:12.497Z", "released_at": "2021-03-18T12:44:12.497Z", "upcoming_release": false, "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "commit": {"id": "2831d897ba0214f8d3168647e8ad4232b83987ef", "short_id": "2831d897", "created_at": "2021-03-15T15:08:36.000+00:00", "parent_ids": [], "title": "Initial commit", "message": "Initial commit", "author_name": "Alexander Arhipenko", "author_email": "integration-test@airbyte.io", "authored_date": "2021-03-15T15:08:36.000+00:00", "committer_name": "Alexander Arhipenko", "committer_email": "integration-test@airbyte.io", "committed_date": "2021-03-15T15:08:36.000+00:00", "trailers": {}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/commit/2831d897ba0214f8d3168647e8ad4232b83987ef"}, "milestones": [1943704], "commit_path": "/new-group-airbute/new-ci-test-project/-/commit/2831d897ba0214f8d3168647e8ad4232b83987ef", "tag_path": "/new-group-airbute/new-ci-test-project/-/tags/fake-tag-6", "assets": {"count": 4, "sources": [{"format": "zip", "url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/archive/fake-tag-6/new-ci-test-project-fake-tag-6.zip"}, {"format": "tar.gz", "url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/archive/fake-tag-6/new-ci-test-project-fake-tag-6.tar.gz"}, {"format": "tar.bz2", "url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/archive/fake-tag-6/new-ci-test-project-fake-tag-6.tar.bz2"}, {"format": "tar", "url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/archive/fake-tag-6/new-ci-test-project-fake-tag-6.tar"}], "links": []}, "evidences": [{"sha": "a616fdca9312ca5aa451bc1060ce91a672fd24cc0f4d", "filepath": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/releases/fake-tag-6/evidences/855895.json", "collected_at": "2021-03-18T12:44:12.650Z"}], "_links": {"closed_issues_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/issues?release_tag=fake-tag-6&scope=all&state=closed", "closed_merge_requests_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/merge_requests?release_tag=fake-tag-6&scope=all&state=closed", "edit_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/releases/fake-tag-6/edit", "merged_merge_requests_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/merge_requests?release_tag=fake-tag-6&scope=all&state=merged", "opened_issues_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/issues?release_tag=fake-tag-6&scope=all&state=opened", "opened_merge_requests_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/merge_requests?release_tag=fake-tag-6&scope=all&state=opened", "self": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/releases/fake-tag-6"}, "author_id": 8375961, "commit_id": "2831d897ba0214f8d3168647e8ad4232b83987ef", "project_id": 25157276}, "emitted_at": 1686568182190} -{"stream": "projects", "data": {"id": 41541858, "description": "Project description", "name": "Test Project 1", "name_with_namespace": "New Group Airbute / Test Public SG / Test SG Public 2 / Test Project 1", "path": "test-project-1", "path_with_namespace": "new-group-airbute/test-public-sg/test-sg-public-2/test-project-1", "created_at": "2022-12-02T08:50:08.842Z", "default_branch": "master", "tag_list": [], "topics": [], "ssh_url_to_repo": "git@gitlab.com:new-group-airbute/test-public-sg/test-sg-public-2/test-project-1.git", "http_url_to_repo": "https://gitlab.com/new-group-airbute/test-public-sg/test-sg-public-2/test-project-1.git", "web_url": "https://gitlab.com/new-group-airbute/test-public-sg/test-sg-public-2/test-project-1", "readme_url": "https://gitlab.com/new-group-airbute/test-public-sg/test-sg-public-2/test-project-1/-/blob/master/README.md", "forks_count": 0, "avatar_url": null, "star_count": 0, "last_activity_at": "2022-12-02T08:50:08.842Z", "namespace": {"id": 61014943, "name": "Test SG Public 2", "path": "test-sg-public-2", "kind": "group", "full_path": "new-group-airbute/test-public-sg/test-sg-public-2", "parent_id": 61014902, "avatar_url": null, "web_url": "https://gitlab.com/groups/new-group-airbute/test-public-sg/test-sg-public-2"}, "container_registry_image_prefix": "registry.gitlab.com/new-group-airbute/test-public-sg/test-sg-public-2/test-project-1", "_links": {"self": "https://gitlab.com/api/v4/projects/41541858", "issues": "https://gitlab.com/api/v4/projects/41541858/issues", "merge_requests": "https://gitlab.com/api/v4/projects/41541858/merge_requests", "repo_branches": "https://gitlab.com/api/v4/projects/41541858/repository/branches", "labels": "https://gitlab.com/api/v4/projects/41541858/labels", "events": "https://gitlab.com/api/v4/projects/41541858/events", "members": "https://gitlab.com/api/v4/projects/41541858/members", "cluster_agents": "https://gitlab.com/api/v4/projects/41541858/cluster_agents"}, "packages_enabled": true, "empty_repo": false, "archived": false, "visibility": "private", "resolve_outdated_diff_discussions": false, "container_expiration_policy": {"cadence": "1d", "enabled": false, "keep_n": 10, "older_than": "90d", "name_regex": ".*", "name_regex_keep": null, "next_run_at": "2022-12-03T08:50:08.883Z"}, "issues_enabled": true, "merge_requests_enabled": true, "wiki_enabled": true, "jobs_enabled": true, "snippets_enabled": true, "container_registry_enabled": true, "service_desk_enabled": true, "service_desk_address": "contact-project+new-group-airbute-test-public-sg-test-sg-public-2-test-project-41541858-issue-@incoming.gitlab.com", "can_create_merge_request_in": true, "issues_access_level": "enabled", "repository_access_level": "enabled", "merge_requests_access_level": "enabled", "forking_access_level": "enabled", "wiki_access_level": "enabled", "builds_access_level": "enabled", "snippets_access_level": "enabled", "pages_access_level": "private", "analytics_access_level": "enabled", "container_registry_access_level": "enabled", "security_and_compliance_access_level": "private", "releases_access_level": "enabled", "environments_access_level": "enabled", "feature_flags_access_level": "enabled", "infrastructure_access_level": "enabled", "monitor_access_level": "enabled", "emails_disabled": false, "emails_enabled": true, "shared_runners_enabled": true, "lfs_enabled": true, "creator_id": 8375961, "import_url": null, "import_type": "gitlab_project", "import_status": "finished", "import_error": null, "open_issues_count": 0, "description_html": "

Project description

", "updated_at": "2022-12-02T08:50:11.170Z", "ci_default_git_depth": 20, "ci_forward_deployment_enabled": true, "ci_forward_deployment_rollback_allowed": true, "ci_job_token_scope_enabled": false, "ci_separated_caches": true, "ci_allow_fork_pipelines_to_run_in_parent_project": true, "build_git_strategy": "fetch", "keep_latest_artifact": true, "restrict_user_defined_variables": false, "runners_token": "GR1348941JLqwDRN64-__uzBXcgc5", "runner_token_expiration_interval": null, "group_runners_enabled": true, "auto_cancel_pending_pipelines": "enabled", "build_timeout": 3600, "auto_devops_enabled": false, "auto_devops_deploy_strategy": "continuous", "ci_config_path": "", "public_jobs": true, "shared_with_groups": [], "only_allow_merge_if_pipeline_succeeds": false, "allow_merge_on_skipped_pipeline": null, "request_access_enabled": false, "only_allow_merge_if_all_discussions_are_resolved": false, "remove_source_branch_after_merge": true, "printing_merge_request_link_enabled": true, "merge_method": "merge", "squash_option": "default_off", "enforce_auth_checks_on_uploads": true, "suggestion_commit_message": null, "merge_commit_template": null, "squash_commit_template": null, "issue_branch_template": null, "statistics": {"commit_count": 1, "storage_size": 125829, "repository_size": 125829, "wiki_size": 0, "lfs_objects_size": 0, "job_artifacts_size": 0, "pipeline_artifacts_size": 0, "packages_size": 0, "snippets_size": 0, "uploads_size": 0}, "autoclose_referenced_issues": true, "external_authorization_classification_label": "", "requirements_enabled": false, "requirements_access_level": "enabled", "security_and_compliance_enabled": true, "compliance_frameworks": [], "permissions": {"project_access": {"access_level": 40, "notification_level": 3}, "group_access": {"access_level": 50, "notification_level": 3}}}, "emitted_at": 1690448723961} -{"stream": "projects", "data": {"id": 41551658, "description": null, "name": "Test_project_in_nested_subgroup", "name_with_namespace": "New Group Airbute / Test Public SG / Test SG Public 2 / Test Private SubSubG 1 / Test_project_in_nested_subgroup", "path": "test_project_in_nested_subgroup", "path_with_namespace": "new-group-airbute/test-public-sg/test-sg-public-2/test-private-subsubg-1/test_project_in_nested_subgroup", "created_at": "2022-12-02T14:26:55.282Z", "default_branch": "main", "tag_list": [], "topics": [], "ssh_url_to_repo": "git@gitlab.com:new-group-airbute/test-public-sg/test-sg-public-2/test-private-subsubg-1/test_project_in_nested_subgroup.git", "http_url_to_repo": "https://gitlab.com/new-group-airbute/test-public-sg/test-sg-public-2/test-private-subsubg-1/test_project_in_nested_subgroup.git", "web_url": "https://gitlab.com/new-group-airbute/test-public-sg/test-sg-public-2/test-private-subsubg-1/test_project_in_nested_subgroup", "readme_url": "https://gitlab.com/new-group-airbute/test-public-sg/test-sg-public-2/test-private-subsubg-1/test_project_in_nested_subgroup/-/blob/main/README.md", "forks_count": 0, "avatar_url": null, "star_count": 0, "last_activity_at": "2022-12-02T14:26:55.282Z", "namespace": {"id": 61015181, "name": "Test Private SubSubG 1", "path": "test-private-subsubg-1", "kind": "group", "full_path": "new-group-airbute/test-public-sg/test-sg-public-2/test-private-subsubg-1", "parent_id": 61014943, "avatar_url": null, "web_url": "https://gitlab.com/groups/new-group-airbute/test-public-sg/test-sg-public-2/test-private-subsubg-1"}, "container_registry_image_prefix": "registry.gitlab.com/new-group-airbute/test-public-sg/test-sg-public-2/test-private-subsubg-1/test_project_in_nested_subgroup", "_links": {"self": "https://gitlab.com/api/v4/projects/41551658", "issues": "https://gitlab.com/api/v4/projects/41551658/issues", "merge_requests": "https://gitlab.com/api/v4/projects/41551658/merge_requests", "repo_branches": "https://gitlab.com/api/v4/projects/41551658/repository/branches", "labels": "https://gitlab.com/api/v4/projects/41551658/labels", "events": "https://gitlab.com/api/v4/projects/41551658/events", "members": "https://gitlab.com/api/v4/projects/41551658/members", "cluster_agents": "https://gitlab.com/api/v4/projects/41551658/cluster_agents"}, "packages_enabled": true, "empty_repo": false, "archived": false, "visibility": "private", "resolve_outdated_diff_discussions": false, "container_expiration_policy": {"cadence": "1d", "enabled": false, "keep_n": 10, "older_than": "90d", "name_regex": ".*", "name_regex_keep": null, "next_run_at": "2022-12-03T14:26:55.314Z"}, "issues_enabled": true, "merge_requests_enabled": true, "wiki_enabled": true, "jobs_enabled": true, "snippets_enabled": true, "container_registry_enabled": true, "service_desk_enabled": true, "service_desk_address": "contact-project+new-group-airbute-test-public-sg-test-sg-public-2-test-private-41551658-issue-@incoming.gitlab.com", "can_create_merge_request_in": true, "issues_access_level": "enabled", "repository_access_level": "enabled", "merge_requests_access_level": "enabled", "forking_access_level": "enabled", "wiki_access_level": "enabled", "builds_access_level": "enabled", "snippets_access_level": "enabled", "pages_access_level": "private", "analytics_access_level": "enabled", "container_registry_access_level": "enabled", "security_and_compliance_access_level": "private", "releases_access_level": "enabled", "environments_access_level": "enabled", "feature_flags_access_level": "enabled", "infrastructure_access_level": "enabled", "monitor_access_level": "enabled", "emails_disabled": false, "emails_enabled": true, "shared_runners_enabled": true, "lfs_enabled": true, "creator_id": 8375961, "import_url": null, "import_type": null, "import_status": "none", "import_error": null, "open_issues_count": 0, "description_html": "", "updated_at": "2022-12-02T14:26:56.266Z", "ci_default_git_depth": 20, "ci_forward_deployment_enabled": true, "ci_forward_deployment_rollback_allowed": true, "ci_job_token_scope_enabled": false, "ci_separated_caches": true, "ci_allow_fork_pipelines_to_run_in_parent_project": true, "build_git_strategy": "fetch", "keep_latest_artifact": true, "restrict_user_defined_variables": false, "runners_token": "GR1348941hyrJGkPgfF9b5KARxqHr", "runner_token_expiration_interval": null, "group_runners_enabled": true, "auto_cancel_pending_pipelines": "enabled", "build_timeout": 3600, "auto_devops_enabled": false, "auto_devops_deploy_strategy": "continuous", "ci_config_path": "", "public_jobs": true, "shared_with_groups": [], "only_allow_merge_if_pipeline_succeeds": false, "allow_merge_on_skipped_pipeline": null, "request_access_enabled": true, "only_allow_merge_if_all_discussions_are_resolved": false, "remove_source_branch_after_merge": true, "printing_merge_request_link_enabled": true, "merge_method": "merge", "squash_option": "default_off", "enforce_auth_checks_on_uploads": true, "suggestion_commit_message": null, "merge_commit_template": null, "squash_commit_template": null, "issue_branch_template": null, "statistics": {"commit_count": 1, "storage_size": 73400, "repository_size": 73400, "wiki_size": 0, "lfs_objects_size": 0, "job_artifacts_size": 0, "pipeline_artifacts_size": 0, "packages_size": 0, "snippets_size": 0, "uploads_size": 0}, "autoclose_referenced_issues": true, "external_authorization_classification_label": "", "requirements_enabled": false, "requirements_access_level": "enabled", "security_and_compliance_enabled": true, "compliance_frameworks": [], "permissions": {"project_access": null, "group_access": {"access_level": 50, "notification_level": 3}}}, "emitted_at": 1690448724778} -{"stream": "projects", "data": {"id": 25032439, "description": null, "name": "documentation", "name_with_namespace": "airbyte.io / documentation", "path": "documentation", "path_with_namespace": "airbyte.io/documentation", "created_at": "2021-03-10T17:16:53.200Z", "default_branch": "main", "tag_list": [], "topics": [], "ssh_url_to_repo": "git@gitlab.com:airbyte.io/documentation.git", "http_url_to_repo": "https://gitlab.com/airbyte.io/documentation.git", "web_url": "https://gitlab.com/airbyte.io/documentation", "readme_url": null, "forks_count": 0, "avatar_url": null, "star_count": 0, "last_activity_at": "2021-03-10T17:16:53.200Z", "namespace": {"id": 11266951, "name": "airbyte.io", "path": "airbyte.io", "kind": "group", "full_path": "airbyte.io", "parent_id": null, "avatar_url": null, "web_url": "https://gitlab.com/groups/airbyte.io"}, "container_registry_image_prefix": "registry.gitlab.com/airbyte.io/documentation", "_links": {"self": "https://gitlab.com/api/v4/projects/25032439", "issues": "https://gitlab.com/api/v4/projects/25032439/issues", "merge_requests": "https://gitlab.com/api/v4/projects/25032439/merge_requests", "repo_branches": "https://gitlab.com/api/v4/projects/25032439/repository/branches", "labels": "https://gitlab.com/api/v4/projects/25032439/labels", "events": "https://gitlab.com/api/v4/projects/25032439/events", "members": "https://gitlab.com/api/v4/projects/25032439/members", "cluster_agents": "https://gitlab.com/api/v4/projects/25032439/cluster_agents"}, "packages_enabled": true, "empty_repo": true, "archived": false, "visibility": "private", "resolve_outdated_diff_discussions": false, "container_expiration_policy": {"cadence": "1d", "enabled": false, "keep_n": 10, "older_than": "90d", "name_regex": ".*", "name_regex_keep": null, "next_run_at": "2021-03-11T17:16:53.215Z"}, "issues_enabled": true, "merge_requests_enabled": true, "wiki_enabled": true, "jobs_enabled": true, "snippets_enabled": true, "container_registry_enabled": true, "service_desk_enabled": true, "service_desk_address": "contact-project+airbyte-io-documentation-25032439-issue-@incoming.gitlab.com", "can_create_merge_request_in": true, "issues_access_level": "enabled", "repository_access_level": "enabled", "merge_requests_access_level": "enabled", "forking_access_level": "enabled", "wiki_access_level": "enabled", "builds_access_level": "enabled", "snippets_access_level": "enabled", "pages_access_level": "private", "analytics_access_level": "enabled", "container_registry_access_level": "enabled", "security_and_compliance_access_level": "private", "releases_access_level": "enabled", "environments_access_level": "enabled", "feature_flags_access_level": "enabled", "infrastructure_access_level": "enabled", "monitor_access_level": "enabled", "emails_disabled": false, "emails_enabled": true, "shared_runners_enabled": true, "lfs_enabled": true, "creator_id": 8375961, "import_url": null, "import_type": null, "import_status": "none", "import_error": null, "open_issues_count": 0, "description_html": "", "updated_at": "2022-03-23T13:23:04.923Z", "ci_default_git_depth": 50, "ci_forward_deployment_enabled": true, "ci_forward_deployment_rollback_allowed": true, "ci_job_token_scope_enabled": false, "ci_separated_caches": true, "ci_allow_fork_pipelines_to_run_in_parent_project": true, "build_git_strategy": "fetch", "keep_latest_artifact": true, "restrict_user_defined_variables": false, "runners_token": "GR1348941iwELAs9x3hqVbY3Bo_q4", "runner_token_expiration_interval": null, "group_runners_enabled": true, "auto_cancel_pending_pipelines": "enabled", "build_timeout": 3600, "auto_devops_enabled": false, "auto_devops_deploy_strategy": "continuous", "ci_config_path": "", "public_jobs": true, "shared_with_groups": [], "only_allow_merge_if_pipeline_succeeds": false, "allow_merge_on_skipped_pipeline": null, "request_access_enabled": true, "only_allow_merge_if_all_discussions_are_resolved": false, "remove_source_branch_after_merge": true, "printing_merge_request_link_enabled": true, "merge_method": "merge", "squash_option": "default_off", "enforce_auth_checks_on_uploads": true, "suggestion_commit_message": null, "merge_commit_template": null, "squash_commit_template": null, "issue_branch_template": null, "statistics": {"commit_count": 0, "storage_size": 0, "repository_size": 0, "wiki_size": 0, "lfs_objects_size": 0, "job_artifacts_size": 0, "pipeline_artifacts_size": 0, "packages_size": 0, "snippets_size": 0, "uploads_size": 0}, "autoclose_referenced_issues": true, "approvals_before_merge": 0, "mirror": false, "external_authorization_classification_label": "", "marked_for_deletion_at": null, "marked_for_deletion_on": null, "requirements_enabled": false, "requirements_access_level": "enabled", "security_and_compliance_enabled": true, "compliance_frameworks": [], "issues_template": null, "merge_requests_template": null, "merge_pipelines_enabled": false, "merge_trains_enabled": false, "allow_pipeline_trigger_approve_deployment": false, "permissions": {"project_access": null, "group_access": {"access_level": 50, "notification_level": 3}}}, "emitted_at": 1690448725290} -{"stream": "branches", "data": {"name": "master", "commit": {"id": "bcdfbfd57c8f3cd6cd65998464bb71a562d49948", "short_id": "bcdfbfd5", "created_at": "2019-03-06T09:52:24.000+01:00", "parent_ids": [], "title": "Initial template creation", "message": "Initial template creation\n", "author_name": "GitLab", "author_email": "root@localhost", "authored_date": "2019-03-06T09:52:24.000+01:00", "committer_name": "Jason Lenny", "committer_email": "jlenny@gitlab.com", "committed_date": "2019-03-06T09:52:24.000+01:00", "trailers": {}, "web_url": "https://gitlab.com/new-group-airbute/test-public-sg/test-sg-public-2/test-project-1/-/commit/bcdfbfd57c8f3cd6cd65998464bb71a562d49948"}, "merged": false, "protected": true, "developers_can_push": false, "developers_can_merge": false, "can_push": true, "default": true, "web_url": "https://gitlab.com/new-group-airbute/test-public-sg/test-sg-public-2/test-project-1/-/tree/master", "commit_id": "bcdfbfd57c8f3cd6cd65998464bb71a562d49948", "project_id": 41541858}, "emitted_at": 1686568039222} -{"stream": "branches", "data": {"name": "main", "commit": {"id": "fb24e6736b3a959a59e49b56d2d83a28ea3ae15b", "short_id": "fb24e673", "created_at": "2022-12-02T14:26:55.000+00:00", "parent_ids": [], "title": "Initial commit", "message": "Initial commit", "author_name": "Alexander Arhipenko", "author_email": "integration-test@airbyte.io", "authored_date": "2022-12-02T14:26:55.000+00:00", "committer_name": "Alexander Arhipenko", "committer_email": "integration-test@airbyte.io", "committed_date": "2022-12-02T14:26:55.000+00:00", "trailers": {}, "web_url": "https://gitlab.com/new-group-airbute/test-public-sg/test-sg-public-2/test-private-subsubg-1/test_project_in_nested_subgroup/-/commit/fb24e6736b3a959a59e49b56d2d83a28ea3ae15b"}, "merged": false, "protected": true, "developers_can_push": false, "developers_can_merge": false, "can_push": true, "default": true, "web_url": "https://gitlab.com/new-group-airbute/test-public-sg/test-sg-public-2/test-private-subsubg-1/test_project_in_nested_subgroup/-/tree/main", "commit_id": "fb24e6736b3a959a59e49b56d2d83a28ea3ae15b", "project_id": 41551658}, "emitted_at": 1686568039632} -{"stream": "branches", "data": {"name": "at-adipisci-ducimus-qui-nihil", "commit": {"id": "e10493c095260599a73a32def40249a4c389e354", "short_id": "e10493c0", "created_at": "2021-02-15T15:55:06.000+00:00", "parent_ids": ["763258bc3b5803074eb2c23eb069275f9716a2c1"], "title": "Nisi ipsam rem repudiandae.", "message": "Nisi ipsam rem repudiandae.", "author_name": "Administrator", "author_email": "admin@example.com", "authored_date": "2021-02-15T15:55:06.000+00:00", "committer_name": "Administrator", "committer_email": "admin@example.com", "committed_date": "2021-02-15T15:55:06.000+00:00", "trailers": {}, "web_url": "https://gitlab.com/airbyte.io/ci-test-project/-/commit/e10493c095260599a73a32def40249a4c389e354"}, "merged": false, "protected": false, "developers_can_push": false, "developers_can_merge": false, "can_push": true, "default": false, "web_url": "https://gitlab.com/airbyte.io/ci-test-project/-/tree/at-adipisci-ducimus-qui-nihil", "commit_id": "e10493c095260599a73a32def40249a4c389e354", "project_id": 25156633}, "emitted_at": 1686568040451} -{"stream": "merge_request_commits", "data": {"id": 92098762, "iid": 30, "project_id": 25156633, "title": "Id blanditiis consequatur ut.", "description": "##### Voluptatum\nPorro et quo. Laborum molestias ducimus. Labore dolorum adipisci. Quisquam est quis. Sint accusamus maxime.\n* Veritatis. \n* Eos. \n* Adipisci. \n* Quibusdam. \n* Sint. \n* Consequuntur. \n* Hic. \n* Voluptate. \n* Velit.", "state": "opened", "created_at": "2021-02-15T15:55:38.117Z", "updated_at": "2021-02-15T15:55:38.117Z", "merged_by": null, "merge_user": null, "merged_at": null, "closed_by": null, "closed_at": null, "target_branch": "master", "source_branch": "laudantium-unde-et-iste-et", "user_notes_count": 15, "upvotes": 0, "downvotes": 0, "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "assignees": [], "assignee": null, "reviewers": [], "source_project_id": 25156633, "target_project_id": 25156633, "labels": ["asperiores-ex", "quidem-labore", "sed-consequuntur"], "draft": false, "work_in_progress": false, "milestone": null, "merge_when_pipeline_succeeds": false, "merge_status": "can_be_merged", "detailed_merge_status": "mergeable", "sha": "d49703b85913ee7a8c85e1893057ef4cdb06ff85", "merge_commit_sha": null, "squash_commit_sha": null, "discussion_locked": null, "should_remove_source_branch": null, "force_remove_source_branch": null, "prepared_at": "2021-02-15T15:55:38.117Z", "reference": "!30", "references": {"short": "!30", "relative": "!30", "full": "airbyte.io/ci-test-project!30"}, "web_url": "https://gitlab.com/airbyte.io/ci-test-project/-/merge_requests/30", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "squash": false, "squash_on_merge": false, "task_completion_status": {"count": 0, "completed_count": 0}, "has_conflicts": false, "blocking_discussions_resolved": true, "approvals_before_merge": null, "subscribed": true, "changes_count": "18", "latest_build_started_at": null, "latest_build_finished_at": null, "first_deployed_to_production_at": null, "pipeline": null, "head_pipeline": null, "diff_refs": {"base_sha": "27329d3afac51fbf2762428e12f2635d1137c549", "head_sha": "d49703b85913ee7a8c85e1893057ef4cdb06ff85", "start_sha": "27329d3afac51fbf2762428e12f2635d1137c549"}, "merge_error": null, "first_contribution": true, "user": {"can_merge": true}, "merge_request_iid": 30}, "emitted_at": 1686568154022} -{"stream": "merge_request_commits", "data": {"id": 92098761, "iid": 29, "project_id": 25156633, "title": "Fugiat aut voluptatem voluptas.", "description": "###### Unde\nEligendi nemo quam. Veritatis delectus iure. Placeat ut odit. Officiis accusantium sit. Eos sequi cupiditate.\n# Eum", "state": "opened", "created_at": "2021-02-15T15:55:34.534Z", "updated_at": "2021-02-15T15:55:34.534Z", "merged_by": null, "merge_user": null, "merged_at": null, "closed_by": null, "closed_at": null, "target_branch": "master", "source_branch": "ea-dolor-quia-et-sint", "user_notes_count": 4, "upvotes": 0, "downvotes": 0, "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "assignees": [], "assignee": null, "reviewers": [], "source_project_id": 25156633, "target_project_id": 25156633, "labels": ["earum-eaque", "nisi-et", "sed-voluptatem"], "draft": false, "work_in_progress": false, "milestone": null, "merge_when_pipeline_succeeds": false, "merge_status": "can_be_merged", "detailed_merge_status": "mergeable", "sha": "45afadfbf4eb1a9d6468950b23e8557bf72445fa", "merge_commit_sha": null, "squash_commit_sha": null, "discussion_locked": null, "should_remove_source_branch": null, "force_remove_source_branch": null, "prepared_at": "2021-02-15T15:55:34.534Z", "reference": "!29", "references": {"short": "!29", "relative": "!29", "full": "airbyte.io/ci-test-project!29"}, "web_url": "https://gitlab.com/airbyte.io/ci-test-project/-/merge_requests/29", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "squash": false, "squash_on_merge": false, "task_completion_status": {"count": 0, "completed_count": 0}, "has_conflicts": false, "blocking_discussions_resolved": true, "approvals_before_merge": null, "subscribed": true, "changes_count": "17", "latest_build_started_at": null, "latest_build_finished_at": null, "first_deployed_to_production_at": null, "pipeline": null, "head_pipeline": null, "diff_refs": {"base_sha": "27329d3afac51fbf2762428e12f2635d1137c549", "head_sha": "45afadfbf4eb1a9d6468950b23e8557bf72445fa", "start_sha": "27329d3afac51fbf2762428e12f2635d1137c549"}, "merge_error": null, "first_contribution": true, "user": {"can_merge": true}, "merge_request_iid": 29}, "emitted_at": 1686568154423} -{"stream": "merge_request_commits", "data": {"id": 92098758, "iid": 28, "project_id": 25156633, "title": "Delectus sit quod repellendus.", "description": "###### Corporis\nMolestias eius corrupti. Est maiores ut. Deleniti itaque deserunt. Perspiciatis quis et. Non et quia.\n### Dolorum\nNihil at et. Eligendi recusandae omnis. Eaque ratione dolorem.\n### Quam\nRem ad vel. Officiis sint voluptatem. Asperiores odit non.\n0. Hic. \n1. Labore. \n2. Voluptates. \n3. Dolores. \n4. Laborum. \n5. Non. \n6. Odit.", "state": "opened", "created_at": "2021-02-15T15:55:31.164Z", "updated_at": "2021-02-15T15:55:31.164Z", "merged_by": null, "merge_user": null, "merged_at": null, "closed_by": null, "closed_at": null, "target_branch": "master", "source_branch": "ipsum-consequatur-et-in-et", "user_notes_count": 19, "upvotes": 0, "downvotes": 0, "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "assignees": [], "assignee": null, "reviewers": [], "source_project_id": 25156633, "target_project_id": 25156633, "labels": ["nisi-et", "omnis-assumenda", "ut-incidunt"], "draft": false, "work_in_progress": false, "milestone": null, "merge_when_pipeline_succeeds": false, "merge_status": "can_be_merged", "detailed_merge_status": "mergeable", "sha": "5b8695fe02d2856fa9e3249d757aea89832b8d2e", "merge_commit_sha": null, "squash_commit_sha": null, "discussion_locked": null, "should_remove_source_branch": null, "force_remove_source_branch": null, "prepared_at": "2021-02-15T15:55:31.164Z", "reference": "!28", "references": {"short": "!28", "relative": "!28", "full": "airbyte.io/ci-test-project!28"}, "web_url": "https://gitlab.com/airbyte.io/ci-test-project/-/merge_requests/28", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "squash": false, "squash_on_merge": false, "task_completion_status": {"count": 0, "completed_count": 0}, "has_conflicts": false, "blocking_discussions_resolved": true, "approvals_before_merge": null, "subscribed": true, "changes_count": "15", "latest_build_started_at": null, "latest_build_finished_at": null, "first_deployed_to_production_at": null, "pipeline": null, "head_pipeline": null, "diff_refs": {"base_sha": "27329d3afac51fbf2762428e12f2635d1137c549", "head_sha": "5b8695fe02d2856fa9e3249d757aea89832b8d2e", "start_sha": "27329d3afac51fbf2762428e12f2635d1137c549"}, "merge_error": null, "first_contribution": true, "user": {"can_merge": true}, "merge_request_iid": 28}, "emitted_at": 1686568154935} +{"stream": "project_labels", "data": {"id": 19116944, "name": "Label 1", "description": null, "description_html": "", "text_color": "#1F1E24", "color": "#ffff00", "subscribed": false, "priority": null, "is_project_label": true, "project_id": 25157276}, "emitted_at": 1696950582334} +{"stream": "project_labels", "data": {"id": 19117004, "name": "Label 1", "description": null, "description_html": "", "text_color": "#FFFFFF", "color": "#008000", "subscribed": false, "priority": null, "is_project_label": false, "project_id": 25157276}, "emitted_at": 1696950582334} +{"stream": "project_labels", "data": {"id": 19116954, "name": "Label 10", "description": null, "description_html": "", "text_color": "#FFFFFF", "color": "#ff00ff", "subscribed": false, "priority": null, "is_project_label": true, "project_id": 25157276}, "emitted_at": 1696950582334} +{"stream": "releases", "data": {"name": "First release", "tag_name": "fake-tag-6", "description": "Test Release", "created_at": "2021-03-18T12:44:12.497Z", "released_at": "2021-03-18T12:44:12.497Z", "upcoming_release": false, "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "commit": {"id": "2831d897ba0214f8d3168647e8ad4232b83987ef", "short_id": "2831d897", "created_at": "2021-03-15T15:08:36.000+00:00", "parent_ids": [], "title": "Initial commit", "message": "Initial commit", "author_name": "Alexander Arhipenko", "author_email": "integration-test@airbyte.io", "authored_date": "2021-03-15T15:08:36.000+00:00", "committer_name": "Alexander Arhipenko", "committer_email": "integration-test@airbyte.io", "committed_date": "2021-03-15T15:08:36.000+00:00", "trailers": {}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/commit/2831d897ba0214f8d3168647e8ad4232b83987ef"}, "milestones": [1943704], "commit_path": "/new-group-airbute/new-ci-test-project/-/commit/2831d897ba0214f8d3168647e8ad4232b83987ef", "tag_path": "/new-group-airbute/new-ci-test-project/-/tags/fake-tag-6", "assets": {"count": 4, "sources": [{"format": "zip", "url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/archive/fake-tag-6/new-ci-test-project-fake-tag-6.zip"}, {"format": "tar.gz", "url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/archive/fake-tag-6/new-ci-test-project-fake-tag-6.tar.gz"}, {"format": "tar.bz2", "url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/archive/fake-tag-6/new-ci-test-project-fake-tag-6.tar.bz2"}, {"format": "tar", "url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/archive/fake-tag-6/new-ci-test-project-fake-tag-6.tar"}], "links": []}, "evidences": [{"sha": "a616fdca9312ca5aa451bc1060ce91a672fd24cc0f4d", "filepath": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/releases/fake-tag-6/evidences/855895.json", "collected_at": "2021-03-18T12:44:12.650Z"}], "_links": {"closed_issues_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/issues?release_tag=fake-tag-6&scope=all&state=closed", "closed_merge_requests_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/merge_requests?release_tag=fake-tag-6&scope=all&state=closed", "edit_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/releases/fake-tag-6/edit", "merged_merge_requests_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/merge_requests?release_tag=fake-tag-6&scope=all&state=merged", "opened_issues_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/issues?release_tag=fake-tag-6&scope=all&state=opened", "opened_merge_requests_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/merge_requests?release_tag=fake-tag-6&scope=all&state=opened", "self": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/releases/fake-tag-6"}, "author_id": 8375961, "commit_id": "2831d897ba0214f8d3168647e8ad4232b83987ef", "project_id": 25157276}, "emitted_at": 1696950910144} +{"stream": "projects", "data": {"id": 25157276, "description": "", "name": "New CI Test Project ", "name_with_namespace": "New Group Airbute / New CI Test Project ", "path": "new-ci-test-project", "path_with_namespace": "new-group-airbute/new-ci-test-project", "created_at": "2021-03-15T15:08:36.498Z", "default_branch": "master", "tag_list": [], "topics": [], "ssh_url_to_repo": "git@gitlab.com:new-group-airbute/new-ci-test-project.git", "http_url_to_repo": "https://gitlab.com/new-group-airbute/new-ci-test-project.git", "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project", "readme_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/blob/master/README.md", "forks_count": 0, "avatar_url": null, "star_count": 0, "last_activity_at": "2022-12-13T09:39:47.235Z", "namespace": {"id": 11329647, "name": "New Group Airbute", "path": "new-group-airbute", "kind": "group", "full_path": "new-group-airbute", "parent_id": null, "avatar_url": null, "web_url": "https://gitlab.com/groups/new-group-airbute"}, "container_registry_image_prefix": "registry.gitlab.com/new-group-airbute/new-ci-test-project", "_links": {"self": "https://gitlab.com/api/v4/projects/25157276", "issues": "https://gitlab.com/api/v4/projects/25157276/issues", "merge_requests": "https://gitlab.com/api/v4/projects/25157276/merge_requests", "repo_branches": "https://gitlab.com/api/v4/projects/25157276/repository/branches", "labels": "https://gitlab.com/api/v4/projects/25157276/labels", "events": "https://gitlab.com/api/v4/projects/25157276/events", "members": "https://gitlab.com/api/v4/projects/25157276/members", "cluster_agents": "https://gitlab.com/api/v4/projects/25157276/cluster_agents"}, "packages_enabled": true, "empty_repo": false, "archived": false, "visibility": "private", "resolve_outdated_diff_discussions": false, "container_expiration_policy": {"cadence": "1d", "enabled": false, "keep_n": 10, "older_than": "90d", "name_regex": ".*", "name_regex_keep": null, "next_run_at": "2021-03-16T15:08:36.518Z"}, "issues_enabled": true, "merge_requests_enabled": true, "wiki_enabled": true, "jobs_enabled": true, "snippets_enabled": true, "container_registry_enabled": true, "service_desk_enabled": true, "service_desk_address": "contact-project+new-group-airbute-new-ci-test-project-25157276-issue-@incoming.gitlab.com", "can_create_merge_request_in": true, "issues_access_level": "private", "repository_access_level": "private", "merge_requests_access_level": "private", "forking_access_level": "enabled", "wiki_access_level": "enabled", "builds_access_level": "private", "snippets_access_level": "enabled", "pages_access_level": "private", "analytics_access_level": "enabled", "container_registry_access_level": "enabled", "security_and_compliance_access_level": "private", "releases_access_level": "enabled", "environments_access_level": "enabled", "feature_flags_access_level": "enabled", "infrastructure_access_level": "enabled", "monitor_access_level": "enabled", "model_experiments_access_level": "enabled", "emails_disabled": false, "emails_enabled": true, "shared_runners_enabled": true, "lfs_enabled": true, "creator_id": 8375961, "import_url": null, "import_type": null, "import_status": "none", "import_error": null, "open_issues_count": 31, "description_html": "", "updated_at": "2023-05-23T12:12:18.623Z", "ci_default_git_depth": 50, "ci_forward_deployment_enabled": true, "ci_forward_deployment_rollback_allowed": true, "ci_job_token_scope_enabled": false, "ci_separated_caches": true, "ci_allow_fork_pipelines_to_run_in_parent_project": true, "build_git_strategy": "fetch", "keep_latest_artifact": true, "restrict_user_defined_variables": false, "runners_token": "GR1348941eMJgWDU69xyyshaNsaTZ", "runner_token_expiration_interval": null, "group_runners_enabled": true, "auto_cancel_pending_pipelines": "enabled", "build_timeout": 3600, "auto_devops_enabled": false, "auto_devops_deploy_strategy": "continuous", "ci_config_path": "", "public_jobs": true, "shared_with_groups": [], "only_allow_merge_if_pipeline_succeeds": false, "allow_merge_on_skipped_pipeline": null, "request_access_enabled": true, "only_allow_merge_if_all_discussions_are_resolved": false, "remove_source_branch_after_merge": true, "printing_merge_request_link_enabled": true, "merge_method": "merge", "squash_option": "default_off", "enforce_auth_checks_on_uploads": true, "suggestion_commit_message": null, "merge_commit_template": null, "squash_commit_template": null, "issue_branch_template": null, "statistics": {"commit_count": 3, "storage_size": 9061, "repository_size": 251, "wiki_size": 0, "lfs_objects_size": 0, "job_artifacts_size": 8810, "pipeline_artifacts_size": 0, "packages_size": 0, "snippets_size": 0, "uploads_size": 0}, "autoclose_referenced_issues": true, "external_authorization_classification_label": "", "requirements_enabled": false, "requirements_access_level": "enabled", "security_and_compliance_enabled": true, "compliance_frameworks": [], "permissions": {"project_access": {"access_level": 40, "notification_level": 3}, "group_access": {"access_level": 50, "notification_level": 3}}}, "emitted_at": 1696951654063} +{"stream": "branches", "data": {"name": "31-fake-issue-30", "commit": {"id": "2831d897ba0214f8d3168647e8ad4232b83987ef", "short_id": "2831d897", "created_at": "2021-03-15T15:08:36.000+00:00", "parent_ids": [], "title": "Initial commit", "message": "Initial commit", "author_name": "Alexander Arhipenko", "author_email": "integration-test@airbyte.io", "authored_date": "2021-03-15T15:08:36.000+00:00", "committer_name": "Alexander Arhipenko", "committer_email": "integration-test@airbyte.io", "committed_date": "2021-03-15T15:08:36.000+00:00", "trailers": {}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/commit/2831d897ba0214f8d3168647e8ad4232b83987ef"}, "merged": true, "protected": false, "developers_can_push": false, "developers_can_merge": false, "can_push": true, "default": false, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/tree/31-fake-issue-30", "commit_id": "2831d897ba0214f8d3168647e8ad4232b83987ef", "project_id": 25157276}, "emitted_at": 1696951865405} +{"stream": "branches", "data": {"name": "master", "commit": {"id": "6ad3dd49539391774db738c9e7b7d69f2d872c98", "short_id": "6ad3dd49", "created_at": "2021-03-18T12:51:05.000+00:00", "parent_ids": ["2831d897ba0214f8d3168647e8ad4232b83987ef", "028c02d96f40afe9b4d1173c1d0f712dd6d07302"], "title": "Merge branch 'ykurochkin/add-fake-CI-config' into 'master'", "message": "Merge branch 'ykurochkin/add-fake-CI-config' into 'master'\n\nadd fake CI config\n\nSee merge request new-group-airbute/new-ci-test-project!3", "author_name": "Alexander Arhipenko", "author_email": "integration-test@airbyte.io", "authored_date": "2021-03-18T12:51:05.000+00:00", "committer_name": "Alexander Arhipenko", "committer_email": "integration-test@airbyte.io", "committed_date": "2021-03-18T12:51:05.000+00:00", "trailers": {}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/commit/6ad3dd49539391774db738c9e7b7d69f2d872c98"}, "merged": false, "protected": true, "developers_can_push": false, "developers_can_merge": false, "can_push": true, "default": true, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/tree/master", "commit_id": "6ad3dd49539391774db738c9e7b7d69f2d872c98", "project_id": 25157276}, "emitted_at": 1696951865406} +{"stream": "branches", "data": {"name": "new-test-branch", "commit": {"id": "2831d897ba0214f8d3168647e8ad4232b83987ef", "short_id": "2831d897", "created_at": "2021-03-15T15:08:36.000+00:00", "parent_ids": [], "title": "Initial commit", "message": "Initial commit", "author_name": "Alexander Arhipenko", "author_email": "integration-test@airbyte.io", "authored_date": "2021-03-15T15:08:36.000+00:00", "committer_name": "Alexander Arhipenko", "committer_email": "integration-test@airbyte.io", "committed_date": "2021-03-15T15:08:36.000+00:00", "trailers": {}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/commit/2831d897ba0214f8d3168647e8ad4232b83987ef"}, "merged": true, "protected": false, "developers_can_push": false, "developers_can_merge": false, "can_push": true, "default": false, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/tree/new-test-branch", "commit_id": "2831d897ba0214f8d3168647e8ad4232b83987ef", "project_id": 25157276}, "emitted_at": 1696951865406} +{"stream": "merge_request_commits", "data": {"id": 92594931, "iid": 3, "project_id": 25157276, "title": "add fake CI config", "description": "", "state": "merged", "created_at": "2021-03-18T12:49:13.091Z", "updated_at": "2021-03-18T12:51:06.319Z", "merged_by": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "merge_user": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "merged_at": "2021-03-18T12:51:06.470Z", "closed_by": null, "closed_at": null, "target_branch": "master", "source_branch": "ykurochkin/add-fake-CI-config", "user_notes_count": 0, "upvotes": 0, "downvotes": 0, "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "assignees": [], "assignee": null, "reviewers": [], "source_project_id": 25157276, "target_project_id": 25157276, "labels": [], "draft": false, "work_in_progress": false, "milestone": null, "merge_when_pipeline_succeeds": false, "merge_status": "can_be_merged", "detailed_merge_status": "not_open", "sha": "028c02d96f40afe9b4d1173c1d0f712dd6d07302", "merge_commit_sha": "6ad3dd49539391774db738c9e7b7d69f2d872c98", "squash_commit_sha": null, "discussion_locked": null, "should_remove_source_branch": null, "force_remove_source_branch": true, "prepared_at": "2021-03-18T12:49:13.091Z", "reference": "!3", "references": {"short": "!3", "relative": "!3", "full": "new-group-airbute/new-ci-test-project!3"}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/merge_requests/3", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "squash": false, "squash_on_merge": false, "task_completion_status": {"count": 0, "completed_count": 0}, "has_conflicts": false, "blocking_discussions_resolved": true, "approvals_before_merge": null, "subscribed": true, "changes_count": "1", "latest_build_started_at": null, "latest_build_finished_at": null, "first_deployed_to_production_at": null, "pipeline": null, "head_pipeline": {"id": 272631271, "iid": 1, "project_id": 25157276, "sha": "028c02d96f40afe9b4d1173c1d0f712dd6d07302", "ref": "ykurochkin/add-fake-CI-config", "status": "failed", "source": "push", "created_at": "2021-03-18T12:48:49.174Z", "updated_at": "2021-03-18T12:49:38.092Z", "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/pipelines/272631271", "before_sha": "0000000000000000000000000000000000000000", "tag": false, "yaml_errors": null, "user": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "started_at": "2021-03-18T12:48:50.166Z", "finished_at": "2021-03-18T12:49:38.084Z", "committed_at": null, "duration": 47, "queued_duration": null, "coverage": null, "detailed_status": {"icon": "status_failed", "text": "Failed", "label": "failed", "group": "failed", "tooltip": "failed", "has_details": true, "details_path": "/new-group-airbute/new-ci-test-project/-/pipelines/272631271", "illustration": null, "favicon": "/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png"}}, "diff_refs": {"base_sha": "2831d897ba0214f8d3168647e8ad4232b83987ef", "head_sha": "028c02d96f40afe9b4d1173c1d0f712dd6d07302", "start_sha": "2831d897ba0214f8d3168647e8ad4232b83987ef"}, "merge_error": null, "first_contribution": false, "user": {"can_merge": true}, "merge_request_iid": 3}, "emitted_at": 1696952086155} +{"stream": "merge_request_commits", "data": {"id": 92593913, "iid": 2, "project_id": 25157276, "title": "update readme.md", "description": "", "state": "opened", "created_at": "2021-03-18T12:42:30.200Z", "updated_at": "2021-03-18T12:42:30.200Z", "merged_by": null, "merge_user": null, "merged_at": null, "closed_by": null, "closed_at": null, "target_branch": "master", "source_branch": "ykurochkin/test-branch", "user_notes_count": 0, "upvotes": 0, "downvotes": 0, "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "assignees": [], "assignee": null, "reviewers": [], "source_project_id": 25157276, "target_project_id": 25157276, "labels": [], "draft": false, "work_in_progress": false, "milestone": null, "merge_when_pipeline_succeeds": false, "merge_status": "can_be_merged", "detailed_merge_status": "mergeable", "sha": "9b0c5cf345f0ca1a3fb3ae253e74e0616abf8129", "merge_commit_sha": null, "squash_commit_sha": null, "discussion_locked": null, "should_remove_source_branch": null, "force_remove_source_branch": true, "prepared_at": "2021-03-18T12:42:30.200Z", "reference": "!2", "references": {"short": "!2", "relative": "!2", "full": "new-group-airbute/new-ci-test-project!2"}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/merge_requests/2", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "squash": false, "squash_on_merge": false, "task_completion_status": {"count": 0, "completed_count": 0}, "has_conflicts": false, "blocking_discussions_resolved": true, "approvals_before_merge": null, "subscribed": true, "changes_count": "1", "latest_build_started_at": null, "latest_build_finished_at": null, "first_deployed_to_production_at": null, "pipeline": null, "head_pipeline": null, "diff_refs": {"base_sha": "2831d897ba0214f8d3168647e8ad4232b83987ef", "head_sha": "9b0c5cf345f0ca1a3fb3ae253e74e0616abf8129", "start_sha": "2831d897ba0214f8d3168647e8ad4232b83987ef"}, "merge_error": null, "first_contribution": false, "user": {"can_merge": true}, "merge_request_iid": 2}, "emitted_at": 1696952086460} +{"stream": "merge_request_commits", "data": {"id": 92111504, "iid": 1, "project_id": 25157276, "title": "Draft: Resolve \"Fake Issue 30\"", "description": "Closes #31", "state": "opened", "created_at": "2021-03-15T16:08:05.071Z", "updated_at": "2021-03-15T16:08:05.071Z", "merged_by": null, "merge_user": null, "merged_at": null, "closed_by": null, "closed_at": null, "target_branch": "master", "source_branch": "31-fake-issue-30", "user_notes_count": 0, "upvotes": 0, "downvotes": 0, "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "assignees": [{"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}], "assignee": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "reviewers": [], "source_project_id": 25157276, "target_project_id": 25157276, "labels": ["bug"], "draft": true, "work_in_progress": true, "milestone": null, "merge_when_pipeline_succeeds": false, "merge_status": "cannot_be_merged", "detailed_merge_status": "draft_status", "sha": "2831d897ba0214f8d3168647e8ad4232b83987ef", "merge_commit_sha": null, "squash_commit_sha": null, "discussion_locked": null, "should_remove_source_branch": null, "force_remove_source_branch": true, "prepared_at": "2021-03-15T16:08:05.071Z", "reference": "!1", "references": {"short": "!1", "relative": "!1", "full": "new-group-airbute/new-ci-test-project!1"}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/merge_requests/1", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "squash": false, "squash_on_merge": false, "task_completion_status": {"count": 0, "completed_count": 0}, "has_conflicts": true, "blocking_discussions_resolved": true, "approvals_before_merge": null, "subscribed": true, "changes_count": null, "latest_build_started_at": null, "latest_build_finished_at": null, "first_deployed_to_production_at": null, "pipeline": null, "head_pipeline": null, "diff_refs": {"base_sha": "2831d897ba0214f8d3168647e8ad4232b83987ef", "head_sha": "2831d897ba0214f8d3168647e8ad4232b83987ef", "start_sha": "2831d897ba0214f8d3168647e8ad4232b83987ef"}, "merge_error": null, "first_contribution": false, "user": {"can_merge": true}, "merge_request_iid": 1}, "emitted_at": 1696952086890} {"stream": "group_milestones", "data": {"id": 1943775, "iid": 21, "group_id": 11329647, "title": "Group Milestone 21", "description": null, "state": "active", "created_at": "2021-03-15T16:01:02.125Z", "updated_at": "2021-03-15T16:01:02.125Z", "due_date": null, "start_date": null, "expired": false, "web_url": "https://gitlab.com/groups/new-group-airbute/-/milestones/21"}, "emitted_at": 1686568104768} {"stream": "group_milestones", "data": {"id": 1943774, "iid": 20, "group_id": 11329647, "title": "Group Milestone 20", "description": null, "state": "active", "created_at": "2021-03-15T16:01:01.682Z", "updated_at": "2021-03-15T16:01:01.682Z", "due_date": null, "start_date": null, "expired": false, "web_url": "https://gitlab.com/groups/new-group-airbute/-/milestones/20"}, "emitted_at": 1686568104771} {"stream": "group_milestones", "data": {"id": 1943773, "iid": 19, "group_id": 11329647, "title": "Group Milestone 19", "description": null, "state": "active", "created_at": "2021-03-15T16:01:01.067Z", "updated_at": "2021-03-15T16:01:01.067Z", "due_date": null, "start_date": null, "expired": false, "web_url": "https://gitlab.com/groups/new-group-airbute/-/milestones/19"}, "emitted_at": 1686568104771} @@ -45,12 +43,12 @@ {"stream": "group_labels", "data": {"id": 19117004, "name": "Label 1", "description": null, "description_html": "", "text_color": "#FFFFFF", "color": "#008000", "subscribed": false, "group_id": 11329647}, "emitted_at": 1686568123880} {"stream": "group_labels", "data": {"id": 19117017, "name": "Label 10", "description": null, "description_html": "", "text_color": "#FFFFFF", "color": "#000080", "subscribed": false, "group_id": 11329647}, "emitted_at": 1686568123881} {"stream": "group_labels", "data": {"id": 19117018, "name": "Label 11", "description": null, "description_html": "", "text_color": "#FFFFFF", "color": "#808080", "subscribed": false, "group_id": 11329647}, "emitted_at": 1686568123881} -{"stream": "users", "data": {"id": 7904355, "username": "y.kurochkin", "name": "Yevhenii Kurochkin", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/760fcac88680c724a6b19c6bfd5b6718?s=80&d=identicon", "web_url": "https://gitlab.com/y.kurochkin"}, "emitted_at": 1686568218271} -{"stream": "users", "data": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "emitted_at": 1686568218274} -{"stream": "users", "data": {"id": 7904355, "username": "y.kurochkin", "name": "Yevhenii Kurochkin", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/760fcac88680c724a6b19c6bfd5b6718?s=80&d=identicon", "web_url": "https://gitlab.com/y.kurochkin"}, "emitted_at": 1686568218612} -{"stream": "group_members", "data": {"access_level": 50, "created_at": "2023-06-09T13:47:19.592Z", "expires_at": null, "id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte", "membership_state": "active", "group_id": 68657749}, "emitted_at": 1686568111619} -{"stream": "group_members", "data": {"access_level": 50, "created_at": "2021-03-15T15:55:53.658Z", "expires_at": null, "id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte", "membership_state": "active", "group_id": 11329647}, "emitted_at": 1686568111909} -{"stream": "group_members", "data": {"access_level": 30, "created_at": "2021-03-15T15:55:53.998Z", "created_by": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "expires_at": null, "id": 7904355, "username": "y.kurochkin", "name": "Yevhenii Kurochkin", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/760fcac88680c724a6b19c6bfd5b6718?s=80&d=identicon", "web_url": "https://gitlab.com/y.kurochkin", "membership_state": "active", "group_id": 11329647}, "emitted_at": 1686568111910} +{"stream": "users", "data": {"id": 7904355, "username": "y.kurochkin", "name": "Yevhenii Kurochkin", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/760fcac88680c724a6b19c6bfd5b6718?s=80&d=identicon", "web_url": "https://gitlab.com/y.kurochkin"}, "emitted_at": 1696952237932} +{"stream": "users", "data": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "emitted_at": 1696952237934} +{"stream": "group_members", "data": {"access_level": 50, "created_at": "2021-03-15T15:55:53.658Z", "expires_at": null, "id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte", "membership_state": "active", "group_id": 11329647}, "emitted_at": 1696952386414} +{"stream": "group_members", "data": {"access_level": 30, "created_at": "2021-03-15T15:55:53.998Z", "created_by": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "expires_at": null, "id": 7904355, "username": "y.kurochkin", "name": "Yevhenii Kurochkin", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/760fcac88680c724a6b19c6bfd5b6718?s=80&d=identicon", "web_url": "https://gitlab.com/y.kurochkin", "membership_state": "active", "group_id": 11329647}, "emitted_at": 1696952386416} +{"stream": "group_members", "data": {"access_level": 50, "created_at": "2022-12-02T08:46:22.834Z", "expires_at": null, "id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte", "membership_state": "active", "group_id": 61014882}, "emitted_at": 1696952387022} {"stream": "tags", "data": {"name": "fake-tag-1", "message": "", "target": "2831d897ba0214f8d3168647e8ad4232b83987ef", "commit": {"id": "2831d897ba0214f8d3168647e8ad4232b83987ef", "short_id": "2831d897", "created_at": "2021-03-15T15:08:36.000+00:00", "parent_ids": [], "title": "Initial commit", "message": "Initial commit", "author_name": "Alexander Arhipenko", "author_email": "integration-test@airbyte.io", "authored_date": "2021-03-15T15:08:36.000+00:00", "committer_name": "Alexander Arhipenko", "committer_email": "integration-test@airbyte.io", "committed_date": "2021-03-15T15:08:36.000+00:00", "trailers": {}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/commit/2831d897ba0214f8d3168647e8ad4232b83987ef"}, "release": null, "protected": false, "commit_id": "2831d897ba0214f8d3168647e8ad4232b83987ef", "project_id": 25157276}, "emitted_at": 1686568185586} {"stream": "tags", "data": {"name": "fake-tag-10", "message": "", "target": "2831d897ba0214f8d3168647e8ad4232b83987ef", "commit": {"id": "2831d897ba0214f8d3168647e8ad4232b83987ef", "short_id": "2831d897", "created_at": "2021-03-15T15:08:36.000+00:00", "parent_ids": [], "title": "Initial commit", "message": "Initial commit", "author_name": "Alexander Arhipenko", "author_email": "integration-test@airbyte.io", "authored_date": "2021-03-15T15:08:36.000+00:00", "committer_name": "Alexander Arhipenko", "committer_email": "integration-test@airbyte.io", "committed_date": "2021-03-15T15:08:36.000+00:00", "trailers": {}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/commit/2831d897ba0214f8d3168647e8ad4232b83987ef"}, "release": null, "protected": false, "commit_id": "2831d897ba0214f8d3168647e8ad4232b83987ef", "project_id": 25157276}, "emitted_at": 1686568185588} {"stream": "tags", "data": {"name": "fake-tag-11", "message": "", "target": "2831d897ba0214f8d3168647e8ad4232b83987ef", "commit": {"id": "2831d897ba0214f8d3168647e8ad4232b83987ef", "short_id": "2831d897", "created_at": "2021-03-15T15:08:36.000+00:00", "parent_ids": [], "title": "Initial commit", "message": "Initial commit", "author_name": "Alexander Arhipenko", "author_email": "integration-test@airbyte.io", "authored_date": "2021-03-15T15:08:36.000+00:00", "committer_name": "Alexander Arhipenko", "committer_email": "integration-test@airbyte.io", "committed_date": "2021-03-15T15:08:36.000+00:00", "trailers": {}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/commit/2831d897ba0214f8d3168647e8ad4232b83987ef"}, "release": null, "protected": false, "commit_id": "2831d897ba0214f8d3168647e8ad4232b83987ef", "project_id": 25157276}, "emitted_at": 1686568185590} +{"stream": "deployments", "data": {"id": 568087366, "iid": 1, "ref": "master", "sha": "6ad3dd49539391774db738c9e7b7d69f2d872c98", "created_at": "2023-10-10T09:56:02.273Z", "updated_at": "2023-10-10T09:56:02.273Z", "user": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "environment": {"id": 17305239, "name": "dev", "slug": "dev", "external_url": null, "created_at": "2023-10-10T09:56:02.188Z", "updated_at": "2023-10-10T09:56:02.188Z"}, "deployable": null, "status": "failed", "user_id": 8375961, "environment_id": 17305239, "user_username": "airbyte", "user_full_name": "Airbyte Team", "environment_name": "dev", "project_id": 25157276}, "emitted_at": 1696931771902} diff --git a/airbyte-integrations/connectors/source-gitlab/integration_tests/expected_records_with_ids.jsonl b/airbyte-integrations/connectors/source-gitlab/integration_tests/expected_records_with_ids.jsonl index 280b0ec036fa..320db38aa3a1 100644 --- a/airbyte-integrations/connectors/source-gitlab/integration_tests/expected_records_with_ids.jsonl +++ b/airbyte-integrations/connectors/source-gitlab/integration_tests/expected_records_with_ids.jsonl @@ -1,28 +1,28 @@ {"stream": "pipelines", "data": {"id": 272632767, "iid": 2, "project_id": 25157276, "sha": "6ad3dd49539391774db738c9e7b7d69f2d872c98", "ref": "master", "status": "failed", "source": "push", "created_at": "2021-03-18T12:51:06.262Z", "updated_at": "2021-03-18T12:51:52.007Z", "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/pipelines/272632767", "name": null}, "emitted_at": 1686567225920} {"stream": "pipelines", "data": {"id": 272631271, "iid": 1, "project_id": 25157276, "sha": "028c02d96f40afe9b4d1173c1d0f712dd6d07302", "ref": "ykurochkin/add-fake-CI-config", "status": "failed", "source": "push", "created_at": "2021-03-18T12:48:49.174Z", "updated_at": "2021-03-18T12:49:38.092Z", "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/pipelines/272631271", "name": null}, "emitted_at": 1686567225922} -{"stream": "releases", "data": {"name": "First release", "tag_name": "fake-tag-6", "description": "Test Release", "created_at": "2021-03-18T12:44:12.497Z", "released_at": "2021-03-18T12:44:12.497Z", "upcoming_release": false, "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "commit": {"id": "2831d897ba0214f8d3168647e8ad4232b83987ef", "short_id": "2831d897", "created_at": "2021-03-15T15:08:36.000+00:00", "parent_ids": [], "title": "Initial commit", "message": "Initial commit", "author_name": "Alexander Arhipenko", "author_email": "integration-test@airbyte.io", "authored_date": "2021-03-15T15:08:36.000+00:00", "committer_name": "Alexander Arhipenko", "committer_email": "integration-test@airbyte.io", "committed_date": "2021-03-15T15:08:36.000+00:00", "trailers": {}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/commit/2831d897ba0214f8d3168647e8ad4232b83987ef"}, "milestones": [1943704], "commit_path": "/new-group-airbute/new-ci-test-project/-/commit/2831d897ba0214f8d3168647e8ad4232b83987ef", "tag_path": "/new-group-airbute/new-ci-test-project/-/tags/fake-tag-6", "assets": {"count": 4, "sources": [{"format": "zip", "url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/archive/fake-tag-6/new-ci-test-project-fake-tag-6.zip"}, {"format": "tar.gz", "url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/archive/fake-tag-6/new-ci-test-project-fake-tag-6.tar.gz"}, {"format": "tar.bz2", "url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/archive/fake-tag-6/new-ci-test-project-fake-tag-6.tar.bz2"}, {"format": "tar", "url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/archive/fake-tag-6/new-ci-test-project-fake-tag-6.tar"}], "links": []}, "evidences": [{"sha": "a616fdca9312ca5aa451bc1060ce91a672fd24cc0f4d", "filepath": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/releases/fake-tag-6/evidences/855895.json", "collected_at": "2021-03-18T12:44:12.650Z"}], "_links": {"closed_issues_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/issues?release_tag=fake-tag-6&scope=all&state=closed", "closed_merge_requests_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/merge_requests?release_tag=fake-tag-6&scope=all&state=closed", "edit_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/releases/fake-tag-6/edit", "merged_merge_requests_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/merge_requests?release_tag=fake-tag-6&scope=all&state=merged", "opened_issues_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/issues?release_tag=fake-tag-6&scope=all&state=opened", "opened_merge_requests_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/merge_requests?release_tag=fake-tag-6&scope=all&state=opened", "self": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/releases/fake-tag-6"}, "author_id": 8375961, "commit_id": "2831d897ba0214f8d3168647e8ad4232b83987ef", "project_id": 25157276}, "emitted_at": 1686567224796} +{"stream": "releases", "data": {"name": "First release", "tag_name": "fake-tag-6", "description": "Test Release", "created_at": "2021-03-18T12:44:12.497Z", "released_at": "2021-03-18T12:44:12.497Z", "upcoming_release": false, "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "commit": {"id": "2831d897ba0214f8d3168647e8ad4232b83987ef", "short_id": "2831d897", "created_at": "2021-03-15T15:08:36.000+00:00", "parent_ids": [], "title": "Initial commit", "message": "Initial commit", "author_name": "Alexander Arhipenko", "author_email": "integration-test@airbyte.io", "authored_date": "2021-03-15T15:08:36.000+00:00", "committer_name": "Alexander Arhipenko", "committer_email": "integration-test@airbyte.io", "committed_date": "2021-03-15T15:08:36.000+00:00", "trailers": {}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/commit/2831d897ba0214f8d3168647e8ad4232b83987ef"}, "milestones": [1943704], "commit_path": "/new-group-airbute/new-ci-test-project/-/commit/2831d897ba0214f8d3168647e8ad4232b83987ef", "tag_path": "/new-group-airbute/new-ci-test-project/-/tags/fake-tag-6", "assets": {"count": 4, "sources": [{"format": "zip", "url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/archive/fake-tag-6/new-ci-test-project-fake-tag-6.zip"}, {"format": "tar.gz", "url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/archive/fake-tag-6/new-ci-test-project-fake-tag-6.tar.gz"}, {"format": "tar.bz2", "url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/archive/fake-tag-6/new-ci-test-project-fake-tag-6.tar.bz2"}, {"format": "tar", "url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/archive/fake-tag-6/new-ci-test-project-fake-tag-6.tar"}], "links": []}, "evidences": [{"sha": "a616fdca9312ca5aa451bc1060ce91a672fd24cc0f4d", "filepath": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/releases/fake-tag-6/evidences/855895.json", "collected_at": "2021-03-18T12:44:12.650Z"}], "_links": {"closed_issues_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/issues?release_tag=fake-tag-6&scope=all&state=closed", "closed_merge_requests_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/merge_requests?release_tag=fake-tag-6&scope=all&state=closed", "edit_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/releases/fake-tag-6/edit", "merged_merge_requests_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/merge_requests?release_tag=fake-tag-6&scope=all&state=merged", "opened_issues_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/issues?release_tag=fake-tag-6&scope=all&state=opened", "opened_merge_requests_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/merge_requests?release_tag=fake-tag-6&scope=all&state=opened", "self": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/releases/fake-tag-6"}, "author_id": 8375961, "commit_id": "2831d897ba0214f8d3168647e8ad4232b83987ef", "project_id": 25157276}, "emitted_at": 1696947713101} {"stream": "jobs", "data": {"id": 1108959782, "status": "failed", "stage": "test", "name": "test-code-job2", "ref": "master", "tag": false, "coverage": null, "allow_failure": false, "created_at": "2021-03-18T12:51:06.294Z", "started_at": "2021-03-18T12:51:07.646Z", "finished_at": "2021-03-18T12:51:51.309Z", "erased_at": null, "duration": 43.662407, "queued_duration": 1.180926, "user": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte", "created_at": "2021-03-10T17:13:46.589Z", "bio": "", "location": "", "public_email": "", "skype": "", "linkedin": "", "twitter": "", "discord": "", "website_url": "", "organization": "", "job_title": "", "pronouns": "", "bot": false, "work_information": null, "followers": 0, "following": 0, "local_time": "10:53 AM"}, "commit": {"id": "6ad3dd49539391774db738c9e7b7d69f2d872c98", "short_id": "6ad3dd49", "created_at": "2021-03-18T12:51:05.000+00:00", "parent_ids": ["2831d897ba0214f8d3168647e8ad4232b83987ef", "028c02d96f40afe9b4d1173c1d0f712dd6d07302"], "title": "Merge branch 'ykurochkin/add-fake-CI-config' into 'master'", "message": "Merge branch 'ykurochkin/add-fake-CI-config' into 'master'\n\nadd fake CI config\n\nSee merge request new-group-airbute/new-ci-test-project!3", "author_name": "Alexander Arhipenko", "author_email": "integration-test@airbyte.io", "authored_date": "2021-03-18T12:51:05.000+00:00", "committer_name": "Alexander Arhipenko", "committer_email": "integration-test@airbyte.io", "committed_date": "2021-03-18T12:51:05.000+00:00", "trailers": {}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/commit/6ad3dd49539391774db738c9e7b7d69f2d872c98"}, "pipeline": {"id": 272632767, "iid": 2, "project_id": 25157276, "sha": "6ad3dd49539391774db738c9e7b7d69f2d872c98", "ref": "master", "status": "failed", "source": "push", "created_at": "2021-03-18T12:51:06.262Z", "updated_at": "2021-03-18T12:51:52.007Z", "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/pipelines/272632767"}, "failure_reason": "script_failure", "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/jobs/1108959782", "project": {"ci_job_token_scope_enabled": false}, "artifacts": [{"file_type": "trace", "size": 2200, "filename": "job.log", "file_format": null}], "runner": null, "artifacts_expire_at": null, "tag_list": [], "user_id": 8375961, "pipeline_id": 272632767, "runner_id": null, "commit_id": "6ad3dd49539391774db738c9e7b7d69f2d872c98", "project_id": 25157276}, "emitted_at": 1686567192490} {"stream": "jobs", "data": {"id": 1108959779, "status": "failed", "stage": "test", "name": "test-code-job1", "ref": "master", "tag": false, "coverage": null, "allow_failure": false, "created_at": "2021-03-18T12:51:06.279Z", "started_at": "2021-03-18T12:51:07.943Z", "finished_at": "2021-03-18T12:51:50.943Z", "erased_at": null, "duration": 42.999853, "queued_duration": 1.349274, "user": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte", "created_at": "2021-03-10T17:13:46.589Z", "bio": "", "location": "", "public_email": "", "skype": "", "linkedin": "", "twitter": "", "discord": "", "website_url": "", "organization": "", "job_title": "", "pronouns": "", "bot": false, "work_information": null, "followers": 0, "following": 0, "local_time": "10:53 AM"}, "commit": {"id": "6ad3dd49539391774db738c9e7b7d69f2d872c98", "short_id": "6ad3dd49", "created_at": "2021-03-18T12:51:05.000+00:00", "parent_ids": ["2831d897ba0214f8d3168647e8ad4232b83987ef", "028c02d96f40afe9b4d1173c1d0f712dd6d07302"], "title": "Merge branch 'ykurochkin/add-fake-CI-config' into 'master'", "message": "Merge branch 'ykurochkin/add-fake-CI-config' into 'master'\n\nadd fake CI config\n\nSee merge request new-group-airbute/new-ci-test-project!3", "author_name": "Alexander Arhipenko", "author_email": "integration-test@airbyte.io", "authored_date": "2021-03-18T12:51:05.000+00:00", "committer_name": "Alexander Arhipenko", "committer_email": "integration-test@airbyte.io", "committed_date": "2021-03-18T12:51:05.000+00:00", "trailers": {}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/commit/6ad3dd49539391774db738c9e7b7d69f2d872c98"}, "pipeline": {"id": 272632767, "iid": 2, "project_id": 25157276, "sha": "6ad3dd49539391774db738c9e7b7d69f2d872c98", "ref": "master", "status": "failed", "source": "push", "created_at": "2021-03-18T12:51:06.262Z", "updated_at": "2021-03-18T12:51:52.007Z", "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/pipelines/272632767"}, "failure_reason": "script_failure", "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/jobs/1108959779", "project": {"ci_job_token_scope_enabled": false}, "artifacts": [{"file_type": "trace", "size": 2182, "filename": "job.log", "file_format": null}], "runner": null, "artifacts_expire_at": null, "tag_list": [], "user_id": 8375961, "pipeline_id": 272632767, "runner_id": null, "commit_id": "6ad3dd49539391774db738c9e7b7d69f2d872c98", "project_id": 25157276}, "emitted_at": 1686567192491} {"stream": "jobs", "data": {"id": 1108952832, "status": "failed", "stage": "test", "name": "test-code-job2", "ref": "ykurochkin/add-fake-CI-config", "tag": false, "coverage": null, "allow_failure": false, "created_at": "2021-03-18T12:48:49.222Z", "started_at": "2021-03-18T12:48:50.732Z", "finished_at": "2021-03-18T12:49:37.961Z", "erased_at": null, "duration": 47.229034, "queued_duration": 1.422541, "user": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte", "created_at": "2021-03-10T17:13:46.589Z", "bio": "", "location": "", "public_email": "", "skype": "", "linkedin": "", "twitter": "", "discord": "", "website_url": "", "organization": "", "job_title": "", "pronouns": "", "bot": false, "work_information": null, "followers": 0, "following": 0, "local_time": "10:53 AM"}, "commit": {"id": "028c02d96f40afe9b4d1173c1d0f712dd6d07302", "short_id": "028c02d9", "created_at": "2021-03-18T14:48:41.000+02:00", "parent_ids": ["2831d897ba0214f8d3168647e8ad4232b83987ef"], "title": "add fake CI config", "message": "add fake CI config\n", "author_name": "ykurochkin", "author_email": "zhenia.kurochkin@gmail.com", "authored_date": "2021-03-18T14:48:41.000+02:00", "committer_name": "ykurochkin", "committer_email": "zhenia.kurochkin@gmail.com", "committed_date": "2021-03-18T14:48:41.000+02:00", "trailers": {}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/commit/028c02d96f40afe9b4d1173c1d0f712dd6d07302"}, "pipeline": {"id": 272631271, "iid": 1, "project_id": 25157276, "sha": "028c02d96f40afe9b4d1173c1d0f712dd6d07302", "ref": "ykurochkin/add-fake-CI-config", "status": "failed", "source": "push", "created_at": "2021-03-18T12:48:49.174Z", "updated_at": "2021-03-18T12:49:38.092Z", "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/pipelines/272631271"}, "failure_reason": "script_failure", "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/jobs/1108952832", "project": {"ci_job_token_scope_enabled": false}, "artifacts": [{"file_type": "trace", "size": 2223, "filename": "job.log", "file_format": null}], "runner": null, "artifacts_expire_at": null, "tag_list": [], "user_id": 8375961, "pipeline_id": 272631271, "runner_id": null, "commit_id": "028c02d96f40afe9b4d1173c1d0f712dd6d07302", "project_id": 25157276}, "emitted_at": 1686567192861} -{"stream": "merge_request_commits", "data": {"id": 92594931, "iid": 3, "project_id": 25157276, "title": "add fake CI config", "description": "", "state": "merged", "created_at": "2021-03-18T12:49:13.091Z", "updated_at": "2021-03-18T12:51:06.319Z", "merged_by": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "merge_user": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "merged_at": "2021-03-18T12:51:06.470Z", "closed_by": null, "closed_at": null, "target_branch": "master", "source_branch": "ykurochkin/add-fake-CI-config", "user_notes_count": 0, "upvotes": 0, "downvotes": 0, "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "assignees": [], "assignee": null, "reviewers": [], "source_project_id": 25157276, "target_project_id": 25157276, "labels": [], "draft": false, "work_in_progress": false, "milestone": null, "merge_when_pipeline_succeeds": false, "merge_status": "can_be_merged", "detailed_merge_status": "not_open", "sha": "028c02d96f40afe9b4d1173c1d0f712dd6d07302", "merge_commit_sha": "6ad3dd49539391774db738c9e7b7d69f2d872c98", "squash_commit_sha": null, "discussion_locked": null, "should_remove_source_branch": null, "force_remove_source_branch": true, "prepared_at": "2021-03-18T12:49:13.091Z", "reference": "!3", "references": {"short": "!3", "relative": "!3", "full": "new-group-airbute/new-ci-test-project!3"}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/merge_requests/3", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "squash": false, "squash_on_merge": false, "task_completion_status": {"count": 0, "completed_count": 0}, "has_conflicts": false, "blocking_discussions_resolved": true, "approvals_before_merge": null, "subscribed": true, "changes_count": "1", "latest_build_started_at": null, "latest_build_finished_at": null, "first_deployed_to_production_at": null, "pipeline": null, "head_pipeline": {"id": 272631271, "iid": 1, "project_id": 25157276, "sha": "028c02d96f40afe9b4d1173c1d0f712dd6d07302", "ref": "ykurochkin/add-fake-CI-config", "status": "failed", "source": "push", "created_at": "2021-03-18T12:48:49.174Z", "updated_at": "2021-03-18T12:49:38.092Z", "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/pipelines/272631271", "before_sha": "0000000000000000000000000000000000000000", "tag": false, "yaml_errors": null, "user": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "started_at": "2021-03-18T12:48:50.166Z", "finished_at": "2021-03-18T12:49:38.084Z", "committed_at": null, "duration": 47, "queued_duration": null, "coverage": null, "detailed_status": {"icon": "status_failed", "text": "failed", "label": "failed", "group": "failed", "tooltip": "failed", "has_details": true, "details_path": "/new-group-airbute/new-ci-test-project/-/pipelines/272631271", "illustration": null, "favicon": "/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png"}}, "diff_refs": {"base_sha": "2831d897ba0214f8d3168647e8ad4232b83987ef", "head_sha": "028c02d96f40afe9b4d1173c1d0f712dd6d07302", "start_sha": "2831d897ba0214f8d3168647e8ad4232b83987ef"}, "merge_error": null, "first_contribution": false, "user": {"can_merge": true}, "merge_request_iid": 3}, "emitted_at": 1686567221987} -{"stream": "merge_request_commits", "data": {"id": 92593913, "iid": 2, "project_id": 25157276, "title": "update readme.md", "description": "", "state": "opened", "created_at": "2021-03-18T12:42:30.200Z", "updated_at": "2021-03-18T12:42:30.200Z", "merged_by": null, "merge_user": null, "merged_at": null, "closed_by": null, "closed_at": null, "target_branch": "master", "source_branch": "ykurochkin/test-branch", "user_notes_count": 0, "upvotes": 0, "downvotes": 0, "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "assignees": [], "assignee": null, "reviewers": [], "source_project_id": 25157276, "target_project_id": 25157276, "labels": [], "draft": false, "work_in_progress": false, "milestone": null, "merge_when_pipeline_succeeds": false, "merge_status": "can_be_merged", "detailed_merge_status": "mergeable", "sha": "9b0c5cf345f0ca1a3fb3ae253e74e0616abf8129", "merge_commit_sha": null, "squash_commit_sha": null, "discussion_locked": null, "should_remove_source_branch": null, "force_remove_source_branch": true, "prepared_at": "2021-03-18T12:42:30.200Z", "reference": "!2", "references": {"short": "!2", "relative": "!2", "full": "new-group-airbute/new-ci-test-project!2"}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/merge_requests/2", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "squash": false, "squash_on_merge": false, "task_completion_status": {"count": 0, "completed_count": 0}, "has_conflicts": false, "blocking_discussions_resolved": true, "approvals_before_merge": null, "subscribed": true, "changes_count": "1", "latest_build_started_at": null, "latest_build_finished_at": null, "first_deployed_to_production_at": null, "pipeline": null, "head_pipeline": null, "diff_refs": {"base_sha": "2831d897ba0214f8d3168647e8ad4232b83987ef", "head_sha": "9b0c5cf345f0ca1a3fb3ae253e74e0616abf8129", "start_sha": "2831d897ba0214f8d3168647e8ad4232b83987ef"}, "merge_error": null, "first_contribution": false, "user": {"can_merge": true}, "merge_request_iid": 2}, "emitted_at": 1686567222383} -{"stream": "merge_request_commits", "data": {"id": 92111504, "iid": 1, "project_id": 25157276, "title": "Draft: Resolve \"Fake Issue 30\"", "description": "Closes #31", "state": "opened", "created_at": "2021-03-15T16:08:05.071Z", "updated_at": "2021-03-15T16:08:05.071Z", "merged_by": null, "merge_user": null, "merged_at": null, "closed_by": null, "closed_at": null, "target_branch": "master", "source_branch": "31-fake-issue-30", "user_notes_count": 0, "upvotes": 0, "downvotes": 0, "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "assignees": [{"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}], "assignee": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "reviewers": [], "source_project_id": 25157276, "target_project_id": 25157276, "labels": ["bug"], "draft": true, "work_in_progress": true, "milestone": null, "merge_when_pipeline_succeeds": false, "merge_status": "cannot_be_merged", "detailed_merge_status": "draft_status", "sha": "2831d897ba0214f8d3168647e8ad4232b83987ef", "merge_commit_sha": null, "squash_commit_sha": null, "discussion_locked": null, "should_remove_source_branch": null, "force_remove_source_branch": true, "prepared_at": "2021-03-15T16:08:05.071Z", "reference": "!1", "references": {"short": "!1", "relative": "!1", "full": "new-group-airbute/new-ci-test-project!1"}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/merge_requests/1", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "squash": false, "squash_on_merge": false, "task_completion_status": {"count": 0, "completed_count": 0}, "has_conflicts": true, "blocking_discussions_resolved": true, "approvals_before_merge": null, "subscribed": true, "changes_count": null, "latest_build_started_at": null, "latest_build_finished_at": null, "first_deployed_to_production_at": null, "pipeline": null, "head_pipeline": null, "diff_refs": {"base_sha": "2831d897ba0214f8d3168647e8ad4232b83987ef", "head_sha": "2831d897ba0214f8d3168647e8ad4232b83987ef", "start_sha": "2831d897ba0214f8d3168647e8ad4232b83987ef"}, "merge_error": null, "first_contribution": false, "user": {"can_merge": true}, "merge_request_iid": 1}, "emitted_at": 1686567223002} +{"stream": "merge_request_commits", "data": {"id": 92594931, "iid": 3, "project_id": 25157276, "title": "add fake CI config", "description": "", "state": "merged", "created_at": "2021-03-18T12:49:13.091Z", "updated_at": "2021-03-18T12:51:06.319Z", "merged_by": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "merge_user": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "merged_at": "2021-03-18T12:51:06.470Z", "closed_by": null, "closed_at": null, "target_branch": "master", "source_branch": "ykurochkin/add-fake-CI-config", "user_notes_count": 0, "upvotes": 0, "downvotes": 0, "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "assignees": [], "assignee": null, "reviewers": [], "source_project_id": 25157276, "target_project_id": 25157276, "labels": [], "draft": false, "work_in_progress": false, "milestone": null, "merge_when_pipeline_succeeds": false, "merge_status": "can_be_merged", "detailed_merge_status": "not_open", "sha": "028c02d96f40afe9b4d1173c1d0f712dd6d07302", "merge_commit_sha": "6ad3dd49539391774db738c9e7b7d69f2d872c98", "squash_commit_sha": null, "discussion_locked": null, "should_remove_source_branch": null, "force_remove_source_branch": true, "prepared_at": "2021-03-18T12:49:13.091Z", "reference": "!3", "references": {"short": "!3", "relative": "!3", "full": "new-group-airbute/new-ci-test-project!3"}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/merge_requests/3", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "squash": false, "squash_on_merge": false, "task_completion_status": {"count": 0, "completed_count": 0}, "has_conflicts": false, "blocking_discussions_resolved": true, "approvals_before_merge": null, "subscribed": true, "changes_count": "1", "latest_build_started_at": null, "latest_build_finished_at": null, "first_deployed_to_production_at": null, "pipeline": null, "head_pipeline": {"id": 272631271, "iid": 1, "project_id": 25157276, "sha": "028c02d96f40afe9b4d1173c1d0f712dd6d07302", "ref": "ykurochkin/add-fake-CI-config", "status": "failed", "source": "push", "created_at": "2021-03-18T12:48:49.174Z", "updated_at": "2021-03-18T12:49:38.092Z", "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/pipelines/272631271", "before_sha": "0000000000000000000000000000000000000000", "tag": false, "yaml_errors": null, "user": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "started_at": "2021-03-18T12:48:50.166Z", "finished_at": "2021-03-18T12:49:38.084Z", "committed_at": null, "duration": 47, "queued_duration": null, "coverage": null, "detailed_status": {"icon": "status_failed", "text": "Failed", "label": "failed", "group": "failed", "tooltip": "failed", "has_details": true, "details_path": "/new-group-airbute/new-ci-test-project/-/pipelines/272631271", "illustration": null, "favicon": "/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png"}}, "diff_refs": {"base_sha": "2831d897ba0214f8d3168647e8ad4232b83987ef", "head_sha": "028c02d96f40afe9b4d1173c1d0f712dd6d07302", "start_sha": "2831d897ba0214f8d3168647e8ad4232b83987ef"}, "merge_error": null, "first_contribution": false, "user": {"can_merge": true}, "merge_request_iid": 3}, "emitted_at": 1696948297499} +{"stream": "merge_request_commits", "data": {"id": 92593913, "iid": 2, "project_id": 25157276, "title": "update readme.md", "description": "", "state": "opened", "created_at": "2021-03-18T12:42:30.200Z", "updated_at": "2021-03-18T12:42:30.200Z", "merged_by": null, "merge_user": null, "merged_at": null, "closed_by": null, "closed_at": null, "target_branch": "master", "source_branch": "ykurochkin/test-branch", "user_notes_count": 0, "upvotes": 0, "downvotes": 0, "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "assignees": [], "assignee": null, "reviewers": [], "source_project_id": 25157276, "target_project_id": 25157276, "labels": [], "draft": false, "work_in_progress": false, "milestone": null, "merge_when_pipeline_succeeds": false, "merge_status": "can_be_merged", "detailed_merge_status": "mergeable", "sha": "9b0c5cf345f0ca1a3fb3ae253e74e0616abf8129", "merge_commit_sha": null, "squash_commit_sha": null, "discussion_locked": null, "should_remove_source_branch": null, "force_remove_source_branch": true, "prepared_at": "2021-03-18T12:42:30.200Z", "reference": "!2", "references": {"short": "!2", "relative": "!2", "full": "new-group-airbute/new-ci-test-project!2"}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/merge_requests/2", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "squash": false, "squash_on_merge": false, "task_completion_status": {"count": 0, "completed_count": 0}, "has_conflicts": false, "blocking_discussions_resolved": true, "approvals_before_merge": null, "subscribed": true, "changes_count": "1", "latest_build_started_at": null, "latest_build_finished_at": null, "first_deployed_to_production_at": null, "pipeline": null, "head_pipeline": null, "diff_refs": {"base_sha": "2831d897ba0214f8d3168647e8ad4232b83987ef", "head_sha": "9b0c5cf345f0ca1a3fb3ae253e74e0616abf8129", "start_sha": "2831d897ba0214f8d3168647e8ad4232b83987ef"}, "merge_error": null, "first_contribution": false, "user": {"can_merge": true}, "merge_request_iid": 2}, "emitted_at": 1696948297896} +{"stream": "merge_request_commits", "data": {"id": 92111504, "iid": 1, "project_id": 25157276, "title": "Draft: Resolve \"Fake Issue 30\"", "description": "Closes #31", "state": "opened", "created_at": "2021-03-15T16:08:05.071Z", "updated_at": "2021-03-15T16:08:05.071Z", "merged_by": null, "merge_user": null, "merged_at": null, "closed_by": null, "closed_at": null, "target_branch": "master", "source_branch": "31-fake-issue-30", "user_notes_count": 0, "upvotes": 0, "downvotes": 0, "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "assignees": [{"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}], "assignee": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "reviewers": [], "source_project_id": 25157276, "target_project_id": 25157276, "labels": ["bug"], "draft": true, "work_in_progress": true, "milestone": null, "merge_when_pipeline_succeeds": false, "merge_status": "cannot_be_merged", "detailed_merge_status": "draft_status", "sha": "2831d897ba0214f8d3168647e8ad4232b83987ef", "merge_commit_sha": null, "squash_commit_sha": null, "discussion_locked": null, "should_remove_source_branch": null, "force_remove_source_branch": true, "prepared_at": "2021-03-15T16:08:05.071Z", "reference": "!1", "references": {"short": "!1", "relative": "!1", "full": "new-group-airbute/new-ci-test-project!1"}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/merge_requests/1", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "squash": false, "squash_on_merge": false, "task_completion_status": {"count": 0, "completed_count": 0}, "has_conflicts": true, "blocking_discussions_resolved": true, "approvals_before_merge": null, "subscribed": true, "changes_count": null, "latest_build_started_at": null, "latest_build_finished_at": null, "first_deployed_to_production_at": null, "pipeline": null, "head_pipeline": null, "diff_refs": {"base_sha": "2831d897ba0214f8d3168647e8ad4232b83987ef", "head_sha": "2831d897ba0214f8d3168647e8ad4232b83987ef", "start_sha": "2831d897ba0214f8d3168647e8ad4232b83987ef"}, "merge_error": null, "first_contribution": false, "user": {"can_merge": true}, "merge_request_iid": 1}, "emitted_at": 1696948298305} {"stream": "group_milestones", "data": {"id": 1943775, "iid": 21, "group_id": 11329647, "title": "Group Milestone 21", "description": null, "state": "active", "created_at": "2021-03-15T16:01:02.125Z", "updated_at": "2021-03-15T16:01:02.125Z", "due_date": null, "start_date": null, "expired": false, "web_url": "https://gitlab.com/groups/new-group-airbute/-/milestones/21"}, "emitted_at": 1686567198876} {"stream": "group_milestones", "data": {"id": 1943774, "iid": 20, "group_id": 11329647, "title": "Group Milestone 20", "description": null, "state": "active", "created_at": "2021-03-15T16:01:01.682Z", "updated_at": "2021-03-15T16:01:01.682Z", "due_date": null, "start_date": null, "expired": false, "web_url": "https://gitlab.com/groups/new-group-airbute/-/milestones/20"}, "emitted_at": 1686567198878} {"stream": "group_milestones", "data": {"id": 1943773, "iid": 19, "group_id": 11329647, "title": "Group Milestone 19", "description": null, "state": "active", "created_at": "2021-03-15T16:01:01.067Z", "updated_at": "2021-03-15T16:01:01.067Z", "due_date": null, "start_date": null, "expired": false, "web_url": "https://gitlab.com/groups/new-group-airbute/-/milestones/19"}, "emitted_at": 1686567198878} -{"stream": "pipelines_extended", "data": {"id": 272632767, "iid": 2, "project_id": 25157276, "sha": "6ad3dd49539391774db738c9e7b7d69f2d872c98", "ref": "master", "status": "failed", "source": "push", "created_at": "2021-03-18T12:51:06.262Z", "updated_at": "2021-03-18T12:51:52.007Z", "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/pipelines/272632767", "before_sha": "2831d897ba0214f8d3168647e8ad4232b83987ef", "tag": false, "yaml_errors": null, "user": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "started_at": "2021-03-18T12:51:07.816Z", "finished_at": "2021-03-18T12:51:52.000Z", "committed_at": null, "duration": 43, "queued_duration": 1, "coverage": null, "detailed_status": {"icon": "status_failed", "text": "failed", "label": "failed", "group": "failed", "tooltip": "failed", "has_details": false, "details_path": "/new-group-airbute/new-ci-test-project/-/pipelines/272632767", "illustration": null, "favicon": "/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png"}, "name": null}, "emitted_at": 1686567228326} -{"stream": "pipelines_extended", "data": {"id": 272631271, "iid": 1, "project_id": 25157276, "sha": "028c02d96f40afe9b4d1173c1d0f712dd6d07302", "ref": "ykurochkin/add-fake-CI-config", "status": "failed", "source": "push", "created_at": "2021-03-18T12:48:49.174Z", "updated_at": "2021-03-18T12:49:38.092Z", "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/pipelines/272631271", "before_sha": "0000000000000000000000000000000000000000", "tag": false, "yaml_errors": null, "user": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "started_at": "2021-03-18T12:48:50.166Z", "finished_at": "2021-03-18T12:49:38.084Z", "committed_at": null, "duration": 47, "queued_duration": null, "coverage": null, "detailed_status": {"icon": "status_failed", "text": "failed", "label": "failed", "group": "failed", "tooltip": "failed", "has_details": false, "details_path": "/new-group-airbute/new-ci-test-project/-/pipelines/272631271", "illustration": null, "favicon": "/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png"}, "name": null}, "emitted_at": 1686567228728} -{"stream": "users", "data": {"id": 7904355, "username": "y.kurochkin", "name": "Yevhenii Kurochkin", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/760fcac88680c724a6b19c6bfd5b6718?s=80&d=identicon", "web_url": "https://gitlab.com/y.kurochkin"}, "emitted_at": 1686567230821} -{"stream": "users", "data": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "emitted_at": 1686567230823} -{"stream": "group_labels", "data": {"id": 19117004, "name": "Label 1", "description": null, "description_html": "", "text_color": "#FFFFFF", "color": "#008000", "subscribed": false, "group_id": 11329647}, "emitted_at": 1686567210102} -{"stream": "group_labels", "data": {"id": 19117017, "name": "Label 10", "description": null, "description_html": "", "text_color": "#FFFFFF", "color": "#000080", "subscribed": false, "group_id": 11329647}, "emitted_at": 1686567210104} -{"stream": "group_labels", "data": {"id": 19117018, "name": "Label 11", "description": null, "description_html": "", "text_color": "#FFFFFF", "color": "#808080", "subscribed": false, "group_id": 11329647}, "emitted_at": 1686567210104} -{"stream":"groups","data":{"id":11329647,"web_url":"https://gitlab.com/groups/new-group-airbute","name":"New Group Airbute","path":"new-group-airbute","description":"","visibility":"public","share_with_group_lock":false,"require_two_factor_authentication":false,"two_factor_grace_period":48,"project_creation_level":"developer","auto_devops_enabled":null,"subgroup_creation_level":"maintainer","emails_disabled":null,"mentions_disabled":null,"lfs_enabled":true,"default_branch_protection":2,"avatar_url":null,"request_access_enabled":true,"full_name":"New Group Airbute","full_path":"new-group-airbute","created_at":"2021-03-15T15:55:53.613Z","parent_id":null,"shared_runners_setting":"enabled","ldap_cn":null,"ldap_access":null,"wiki_access_level":"enabled","shared_with_groups":[],"runners_token":"GR1348941-PhosPap-Sf1UxL1g6m4","prevent_sharing_groups_outside_hierarchy":false,"shared_projects":[],"shared_runners_minutes_limit":null,"extra_shared_runners_minutes_limit":null,"prevent_forking_outside_group":null,"membership_lock":false,"projects":[{"id":25157276,"path_with_namespace":"new-group-airbute/new-ci-test-project"}]},"emitted_at":1688238188152} -{"stream":"groups","data":{"id":61014882,"web_url":"https://gitlab.com/groups/new-group-airbute/test-subgroup-airbyte/test-private-sg","name":"Test Private SG","path":"test-private-sg","description":"","visibility":"private","share_with_group_lock":false,"require_two_factor_authentication":false,"two_factor_grace_period":48,"project_creation_level":"developer","auto_devops_enabled":null,"subgroup_creation_level":"maintainer","emails_disabled":null,"mentions_disabled":null,"lfs_enabled":true,"default_branch_protection":2,"avatar_url":null,"request_access_enabled":true,"full_name":"New Group Airbute / Test Subgroup Airbyte / Test Private SG","full_path":"new-group-airbute/test-subgroup-airbyte/test-private-sg","created_at":"2022-12-02T08:46:22.648Z","parent_id":61014863,"shared_runners_setting":"enabled","ldap_cn":null,"ldap_access":null,"wiki_access_level":"enabled","shared_with_groups":[],"runners_token":"GR1348941bjUaJQy2zzar-JmNBjfq","shared_projects":[],"shared_runners_minutes_limit":null,"extra_shared_runners_minutes_limit":null,"prevent_forking_outside_group":null,"membership_lock":false,"projects":[]},"emitted_at":1688238188456} -{"stream":"groups","data":{"id":61015181,"web_url":"https://gitlab.com/groups/new-group-airbute/test-public-sg/test-sg-public-2/test-private-subsubg-1","name":"Test Private SubSubG 1","path":"test-private-subsubg-1","description":"","visibility":"private","share_with_group_lock":false,"require_two_factor_authentication":false,"two_factor_grace_period":48,"project_creation_level":"developer","auto_devops_enabled":null,"subgroup_creation_level":"maintainer","emails_disabled":null,"mentions_disabled":null,"lfs_enabled":true,"default_branch_protection":2,"avatar_url":null,"request_access_enabled":true,"full_name":"New Group Airbute / Test Public SG / Test SG Public 2 / Test Private SubSubG 1","full_path":"new-group-airbute/test-public-sg/test-sg-public-2/test-private-subsubg-1","created_at":"2022-12-02T08:54:42.252Z","parent_id":61014943,"shared_runners_setting":"enabled","ldap_cn":null,"ldap_access":null,"wiki_access_level":"enabled","shared_with_groups":[],"runners_token":"GR1348941x8xQf6K-UvnnyJ-bcut4","shared_projects":[],"shared_runners_minutes_limit":null,"extra_shared_runners_minutes_limit":null,"prevent_forking_outside_group":null,"membership_lock":false,"projects":[{"id":41551658,"path_with_namespace":"new-group-airbute/test-public-sg/test-sg-public-2/test-private-subsubg-1/test_project_in_nested_subgroup"}]},"emitted_at":1688238188865} -{"stream": "group_members", "data": {"access_level": 50, "created_at": "2021-03-15T15:55:53.658Z", "expires_at": null, "id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte", "membership_state": "active", "group_id": 11329647}, "emitted_at": 1686567203646} -{"stream": "group_members", "data": {"access_level": 30, "created_at": "2021-03-15T15:55:53.998Z", "created_by": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "expires_at": null, "id": 7904355, "username": "y.kurochkin", "name": "Yevhenii Kurochkin", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/760fcac88680c724a6b19c6bfd5b6718?s=80&d=identicon", "web_url": "https://gitlab.com/y.kurochkin", "membership_state": "active", "group_id": 11329647}, "emitted_at": 1686567203646} -{"stream": "group_members", "data": {"access_level": 50, "created_at": "2022-12-02T08:46:22.834Z", "expires_at": null, "id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte", "membership_state": "active", "group_id": 61014882}, "emitted_at": 1686567204049} +{"stream": "pipelines_extended", "data": {"id": 272632767, "iid": 2, "project_id": 25157276, "sha": "6ad3dd49539391774db738c9e7b7d69f2d872c98", "ref": "master", "status": "failed", "source": "push", "created_at": "2021-03-18T12:51:06.262Z", "updated_at": "2021-03-18T12:51:52.007Z", "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/pipelines/272632767", "before_sha": "2831d897ba0214f8d3168647e8ad4232b83987ef", "tag": false, "yaml_errors": null, "user": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "started_at": "2021-03-18T12:51:07.816Z", "finished_at": "2021-03-18T12:51:52.000Z", "committed_at": null, "duration": 43, "queued_duration": 1, "coverage": null, "detailed_status": {"icon": "status_failed", "text": "Failed", "label": "failed", "group": "failed", "tooltip": "failed", "has_details": false, "details_path": "/new-group-airbute/new-ci-test-project/-/pipelines/272632767", "illustration": null, "favicon": "/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png"}, "name": null}, "emitted_at": 1696948628546} +{"stream": "pipelines_extended", "data": {"id": 272631271, "iid": 1, "project_id": 25157276, "sha": "028c02d96f40afe9b4d1173c1d0f712dd6d07302", "ref": "ykurochkin/add-fake-CI-config", "status": "failed", "source": "push", "created_at": "2021-03-18T12:48:49.174Z", "updated_at": "2021-03-18T12:49:38.092Z", "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/pipelines/272631271", "before_sha": "0000000000000000000000000000000000000000", "tag": false, "yaml_errors": null, "user": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "started_at": "2021-03-18T12:48:50.166Z", "finished_at": "2021-03-18T12:49:38.084Z", "committed_at": null, "duration": 47, "queued_duration": null, "coverage": null, "detailed_status": {"icon": "status_failed", "text": "Failed", "label": "failed", "group": "failed", "tooltip": "failed", "has_details": false, "details_path": "/new-group-airbute/new-ci-test-project/-/pipelines/272631271", "illustration": null, "favicon": "/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png"}, "name": null}, "emitted_at": 1696948628851} +{"stream": "users", "data": {"id": 7904355, "username": "y.kurochkin", "name": "Yevhenii Kurochkin", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/760fcac88680c724a6b19c6bfd5b6718?s=80&d=identicon", "web_url": "https://gitlab.com/y.kurochkin"}, "emitted_at": 1696948873593} +{"stream": "users", "data": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "emitted_at": 1696948873594} +{"stream": "groups", "data": {"id": 11329647, "web_url": "https://gitlab.com/groups/new-group-airbute", "name": "New Group Airbute", "path": "new-group-airbute", "description": "", "visibility": "public", "share_with_group_lock": false, "require_two_factor_authentication": false, "two_factor_grace_period": 48, "project_creation_level": "developer", "auto_devops_enabled": null, "subgroup_creation_level": "maintainer", "emails_disabled": null, "mentions_disabled": null, "lfs_enabled": true, "default_branch_protection": 2, "default_branch_protection_defaults": {"allowed_to_push": [{"access_level": 30}], "allow_force_push": true, "allowed_to_merge": [{"access_level": 30}]}, "avatar_url": null, "request_access_enabled": true, "full_name": "New Group Airbute", "full_path": "new-group-airbute", "created_at": "2021-03-15T15:55:53.613Z", "parent_id": null, "shared_runners_setting": "enabled", "ldap_cn": null, "ldap_access": null, "wiki_access_level": "enabled", "shared_with_groups": [], "runners_token": "GR1348941-PhosPap-Sf1UxL1g6m4", "prevent_sharing_groups_outside_hierarchy": false, "shared_projects": [], "shared_runners_minutes_limit": null, "extra_shared_runners_minutes_limit": null, "prevent_forking_outside_group": null, "membership_lock": false, "projects": [{"id": 25157276, "path_with_namespace": "new-group-airbute/new-ci-test-project"}]}, "emitted_at": 1696949138497} +{"stream": "groups", "data": {"id": 61014882, "web_url": "https://gitlab.com/groups/new-group-airbute/test-subgroup-airbyte/test-private-sg", "name": "Test Private SG", "path": "test-private-sg", "description": "", "visibility": "private", "share_with_group_lock": false, "require_two_factor_authentication": false, "two_factor_grace_period": 48, "project_creation_level": "developer", "auto_devops_enabled": null, "subgroup_creation_level": "maintainer", "emails_disabled": null, "mentions_disabled": null, "lfs_enabled": true, "default_branch_protection": 2, "default_branch_protection_defaults": {"allowed_to_push": [{"access_level": 30}], "allow_force_push": true, "allowed_to_merge": [{"access_level": 30}]}, "avatar_url": null, "request_access_enabled": true, "full_name": "New Group Airbute / Test Subgroup Airbyte / Test Private SG", "full_path": "new-group-airbute/test-subgroup-airbyte/test-private-sg", "created_at": "2022-12-02T08:46:22.648Z", "parent_id": 61014863, "shared_runners_setting": "enabled", "ldap_cn": null, "ldap_access": null, "wiki_access_level": "enabled", "shared_with_groups": [], "runners_token": "GR1348941bjUaJQy2zzar-JmNBjfq", "shared_projects": [], "shared_runners_minutes_limit": null, "extra_shared_runners_minutes_limit": null, "prevent_forking_outside_group": null, "membership_lock": false, "projects": []}, "emitted_at": 1696949138806} +{"stream": "groups", "data": {"id": 61015181, "web_url": "https://gitlab.com/groups/new-group-airbute/test-public-sg/test-sg-public-2/test-private-subsubg-1", "name": "Test Private SubSubG 1", "path": "test-private-subsubg-1", "description": "", "visibility": "private", "share_with_group_lock": false, "require_two_factor_authentication": false, "two_factor_grace_period": 48, "project_creation_level": "developer", "auto_devops_enabled": null, "subgroup_creation_level": "maintainer", "emails_disabled": null, "mentions_disabled": null, "lfs_enabled": true, "default_branch_protection": 2, "default_branch_protection_defaults": {"allowed_to_push": [{"access_level": 30}], "allow_force_push": true, "allowed_to_merge": [{"access_level": 30}]}, "avatar_url": null, "request_access_enabled": true, "full_name": "New Group Airbute / Test Public SG / Test SG Public 2 / Test Private SubSubG 1", "full_path": "new-group-airbute/test-public-sg/test-sg-public-2/test-private-subsubg-1", "created_at": "2022-12-02T08:54:42.252Z", "parent_id": 61014943, "shared_runners_setting": "enabled", "ldap_cn": null, "ldap_access": null, "wiki_access_level": "enabled", "shared_with_groups": [], "runners_token": "GR1348941x8xQf6K-UvnnyJ-bcut4", "shared_projects": [], "shared_runners_minutes_limit": null, "extra_shared_runners_minutes_limit": null, "prevent_forking_outside_group": null, "membership_lock": false, "projects": [{"id": 41551658, "path_with_namespace": "new-group-airbute/test-public-sg/test-sg-public-2/test-private-subsubg-1/test_project_in_nested_subgroup"}]}, "emitted_at": 1696949139214} +{"stream": "group_labels", "data": {"id": 19117004, "name": "Label 1", "description": null, "description_html": "", "text_color": "#FFFFFF", "color": "#008000", "subscribed": false, "group_id": 11329647}, "emitted_at": 1696949435261} +{"stream": "group_labels", "data": {"id": 19117017, "name": "Label 10", "description": null, "description_html": "", "text_color": "#FFFFFF", "color": "#000080", "subscribed": false, "group_id": 11329647}, "emitted_at": 1696949435263} +{"stream": "group_labels", "data": {"id": 19117018, "name": "Label 11", "description": null, "description_html": "", "text_color": "#FFFFFF", "color": "#808080", "subscribed": false, "group_id": 11329647}, "emitted_at": 1696949435264} +{"stream": "group_members", "data": {"access_level": 50, "created_at": "2021-03-15T15:55:53.658Z", "expires_at": null, "id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte", "membership_state": "active", "group_id": 11329647}, "emitted_at": 1696949993328} +{"stream": "group_members", "data": {"access_level": 30, "created_at": "2021-03-15T15:55:53.998Z", "created_by": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "expires_at": null, "id": 7904355, "username": "y.kurochkin", "name": "Yevhenii Kurochkin", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/760fcac88680c724a6b19c6bfd5b6718?s=80&d=identicon", "web_url": "https://gitlab.com/y.kurochkin", "membership_state": "active", "group_id": 11329647}, "emitted_at": 1696949993329} +{"stream": "group_members", "data": {"access_level": 50, "created_at": "2022-12-02T08:46:22.834Z", "expires_at": null, "id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte", "membership_state": "active", "group_id": 61014882}, "emitted_at": 1696949993941} {"stream": "branches", "data": {"name": "31-fake-issue-30", "commit": {"id": "2831d897ba0214f8d3168647e8ad4232b83987ef", "short_id": "2831d897", "created_at": "2021-03-15T15:08:36.000+00:00", "parent_ids": [], "title": "Initial commit", "message": "Initial commit", "author_name": "Alexander Arhipenko", "author_email": "integration-test@airbyte.io", "authored_date": "2021-03-15T15:08:36.000+00:00", "committer_name": "Alexander Arhipenko", "committer_email": "integration-test@airbyte.io", "committed_date": "2021-03-15T15:08:36.000+00:00", "trailers": {}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/commit/2831d897ba0214f8d3168647e8ad4232b83987ef"}, "merged": true, "protected": false, "developers_can_push": false, "developers_can_merge": false, "can_push": true, "default": false, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/tree/31-fake-issue-30", "commit_id": "2831d897ba0214f8d3168647e8ad4232b83987ef", "project_id": 25157276}, "emitted_at": 1686567183576} {"stream": "branches", "data": {"name": "master", "commit": {"id": "6ad3dd49539391774db738c9e7b7d69f2d872c98", "short_id": "6ad3dd49", "created_at": "2021-03-18T12:51:05.000+00:00", "parent_ids": ["2831d897ba0214f8d3168647e8ad4232b83987ef", "028c02d96f40afe9b4d1173c1d0f712dd6d07302"], "title": "Merge branch 'ykurochkin/add-fake-CI-config' into 'master'", "message": "Merge branch 'ykurochkin/add-fake-CI-config' into 'master'\n\nadd fake CI config\n\nSee merge request new-group-airbute/new-ci-test-project!3", "author_name": "Alexander Arhipenko", "author_email": "integration-test@airbyte.io", "authored_date": "2021-03-18T12:51:05.000+00:00", "committer_name": "Alexander Arhipenko", "committer_email": "integration-test@airbyte.io", "committed_date": "2021-03-18T12:51:05.000+00:00", "trailers": {}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/commit/6ad3dd49539391774db738c9e7b7d69f2d872c98"}, "merged": false, "protected": true, "developers_can_push": false, "developers_can_merge": false, "can_push": true, "default": true, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/tree/master", "commit_id": "6ad3dd49539391774db738c9e7b7d69f2d872c98", "project_id": 25157276}, "emitted_at": 1686567183576} {"stream": "branches", "data": {"name": "new-test-branch", "commit": {"id": "2831d897ba0214f8d3168647e8ad4232b83987ef", "short_id": "2831d897", "created_at": "2021-03-15T15:08:36.000+00:00", "parent_ids": [], "title": "Initial commit", "message": "Initial commit", "author_name": "Alexander Arhipenko", "author_email": "integration-test@airbyte.io", "authored_date": "2021-03-15T15:08:36.000+00:00", "committer_name": "Alexander Arhipenko", "committer_email": "integration-test@airbyte.io", "committed_date": "2021-03-15T15:08:36.000+00:00", "trailers": {}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/commit/2831d897ba0214f8d3168647e8ad4232b83987ef"}, "merged": true, "protected": false, "developers_can_push": false, "developers_can_merge": false, "can_push": true, "default": false, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/tree/new-test-branch", "commit_id": "2831d897ba0214f8d3168647e8ad4232b83987ef", "project_id": 25157276}, "emitted_at": 1686567183577} @@ -30,20 +30,21 @@ {"stream": "commits", "data": {"id": "028c02d96f40afe9b4d1173c1d0f712dd6d07302", "short_id": "028c02d9", "created_at": "2021-03-18T14:48:41.000+02:00", "parent_ids": ["2831d897ba0214f8d3168647e8ad4232b83987ef"], "title": "add fake CI config", "message": "add fake CI config\n", "author_name": "ykurochkin", "author_email": "zhenia.kurochkin@gmail.com", "authored_date": "2021-03-18T14:48:41.000+02:00", "committer_name": "ykurochkin", "committer_email": "zhenia.kurochkin@gmail.com", "committed_date": "2021-03-18T14:48:41.000+02:00", "trailers": {}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/commit/028c02d96f40afe9b4d1173c1d0f712dd6d07302", "stats": {"additions": 14, "deletions": 0, "total": 14}, "project_id": 25157276}, "emitted_at": 1686567184541} {"stream": "commits", "data": {"id": "2831d897ba0214f8d3168647e8ad4232b83987ef", "short_id": "2831d897", "created_at": "2021-03-15T15:08:36.000+00:00", "parent_ids": [], "title": "Initial commit", "message": "Initial commit", "author_name": "Alexander Arhipenko", "author_email": "integration-test@airbyte.io", "authored_date": "2021-03-15T15:08:36.000+00:00", "committer_name": "Alexander Arhipenko", "committer_email": "integration-test@airbyte.io", "committed_date": "2021-03-15T15:08:36.000+00:00", "trailers": {}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/commit/2831d897ba0214f8d3168647e8ad4232b83987ef", "stats": {"additions": 2, "deletions": 0, "total": 2}, "project_id": 25157276}, "emitted_at": 1686567184541} {"stream": "group_issue_boards", "data": {"id": 5099065, "name": "Development", "hide_backlog_list": false, "hide_closed_list": false, "project": null, "lists": [], "group": {"id": 11329647, "web_url": "https://gitlab.com/groups/new-group-airbute", "name": "New Group Airbute"}, "group_id": 11329647}, "emitted_at": 1686567186609} -{"stream": "projects", "data": {"id": 25157276, "description": "", "name": "New CI Test Project ", "name_with_namespace": "New Group Airbute / New CI Test Project ", "path": "new-ci-test-project", "path_with_namespace": "new-group-airbute/new-ci-test-project", "created_at": "2021-03-15T15:08:36.498Z", "default_branch": "master", "tag_list": [], "topics": [], "ssh_url_to_repo": "git@gitlab.com:new-group-airbute/new-ci-test-project.git", "http_url_to_repo": "https://gitlab.com/new-group-airbute/new-ci-test-project.git", "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project", "readme_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/blob/master/README.md", "forks_count": 0, "avatar_url": null, "star_count": 0, "last_activity_at": "2022-12-13T09:39:47.235Z", "namespace": {"id": 11329647, "name": "New Group Airbute", "path": "new-group-airbute", "kind": "group", "full_path": "new-group-airbute", "parent_id": null, "avatar_url": null, "web_url": "https://gitlab.com/groups/new-group-airbute"}, "container_registry_image_prefix": "registry.gitlab.com/new-group-airbute/new-ci-test-project", "_links": {"self": "https://gitlab.com/api/v4/projects/25157276", "issues": "https://gitlab.com/api/v4/projects/25157276/issues", "merge_requests": "https://gitlab.com/api/v4/projects/25157276/merge_requests", "repo_branches": "https://gitlab.com/api/v4/projects/25157276/repository/branches", "labels": "https://gitlab.com/api/v4/projects/25157276/labels", "events": "https://gitlab.com/api/v4/projects/25157276/events", "members": "https://gitlab.com/api/v4/projects/25157276/members", "cluster_agents": "https://gitlab.com/api/v4/projects/25157276/cluster_agents"}, "packages_enabled": true, "empty_repo": false, "archived": false, "visibility": "private", "resolve_outdated_diff_discussions": false, "container_expiration_policy": {"cadence": "1d", "enabled": false, "keep_n": 10, "older_than": "90d", "name_regex": ".*", "name_regex_keep": null, "next_run_at": "2021-03-16T15:08:36.518Z"}, "issues_enabled": true, "merge_requests_enabled": true, "wiki_enabled": true, "jobs_enabled": true, "snippets_enabled": true, "container_registry_enabled": true, "service_desk_enabled": true, "service_desk_address": "contact-project+new-group-airbute-new-ci-test-project-25157276-issue-@incoming.gitlab.com", "can_create_merge_request_in": true, "issues_access_level": "private", "repository_access_level": "private", "merge_requests_access_level": "private", "forking_access_level": "enabled", "wiki_access_level": "enabled", "builds_access_level": "private", "snippets_access_level": "enabled", "pages_access_level": "private", "analytics_access_level": "enabled", "container_registry_access_level": "enabled", "security_and_compliance_access_level": "private", "releases_access_level": "enabled", "environments_access_level": "enabled", "feature_flags_access_level": "enabled", "infrastructure_access_level": "enabled", "monitor_access_level": "enabled", "emails_disabled": false, "emails_enabled": true, "shared_runners_enabled": true, "lfs_enabled": true, "creator_id": 8375961, "import_url": null, "import_type": null, "import_status": "none", "import_error": null, "open_issues_count": 31, "description_html": "", "updated_at": "2023-05-23T12:12:18.623Z", "ci_default_git_depth": 50, "ci_forward_deployment_enabled": true, "ci_forward_deployment_rollback_allowed": true, "ci_job_token_scope_enabled": false, "ci_separated_caches": true, "ci_allow_fork_pipelines_to_run_in_parent_project": true, "build_git_strategy": "fetch", "keep_latest_artifact": true, "restrict_user_defined_variables": false, "runners_token": "GR1348941eMJgWDU69xyyshaNsaTZ", "runner_token_expiration_interval": null, "group_runners_enabled": true, "auto_cancel_pending_pipelines": "enabled", "build_timeout": 3600, "auto_devops_enabled": false, "auto_devops_deploy_strategy": "continuous", "ci_config_path": "", "public_jobs": true, "shared_with_groups": [], "only_allow_merge_if_pipeline_succeeds": false, "allow_merge_on_skipped_pipeline": null, "request_access_enabled": true, "only_allow_merge_if_all_discussions_are_resolved": false, "remove_source_branch_after_merge": true, "printing_merge_request_link_enabled": true, "merge_method": "merge", "squash_option": "default_off", "enforce_auth_checks_on_uploads": true, "suggestion_commit_message": null, "merge_commit_template": null, "squash_commit_template": null, "issue_branch_template": null, "statistics": {"commit_count": 3, "storage_size": 291925, "repository_size": 283115, "wiki_size": 0, "lfs_objects_size": 0, "job_artifacts_size": 8810, "pipeline_artifacts_size": 0, "packages_size": 0, "snippets_size": 0, "uploads_size": 0}, "autoclose_referenced_issues": true, "external_authorization_classification_label": "", "requirements_enabled": false, "requirements_access_level": "enabled", "security_and_compliance_enabled": true, "compliance_frameworks": [], "permissions": {"project_access": {"access_level": 40, "notification_level": 3}, "group_access": {"access_level": 50, "notification_level": 3}}}, "emitted_at": 1690448724369} +{"stream": "projects", "data": {"id": 25157276, "description": "", "name": "New CI Test Project ", "name_with_namespace": "New Group Airbute / New CI Test Project ", "path": "new-ci-test-project", "path_with_namespace": "new-group-airbute/new-ci-test-project", "created_at": "2021-03-15T15:08:36.498Z", "default_branch": "master", "tag_list": [], "topics": [], "ssh_url_to_repo": "git@gitlab.com:new-group-airbute/new-ci-test-project.git", "http_url_to_repo": "https://gitlab.com/new-group-airbute/new-ci-test-project.git", "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project", "readme_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/blob/master/README.md", "forks_count": 0, "avatar_url": null, "star_count": 0, "last_activity_at": "2022-12-13T09:39:47.235Z", "namespace": {"id": 11329647, "name": "New Group Airbute", "path": "new-group-airbute", "kind": "group", "full_path": "new-group-airbute", "parent_id": null, "avatar_url": null, "web_url": "https://gitlab.com/groups/new-group-airbute"}, "container_registry_image_prefix": "registry.gitlab.com/new-group-airbute/new-ci-test-project", "_links": {"self": "https://gitlab.com/api/v4/projects/25157276", "issues": "https://gitlab.com/api/v4/projects/25157276/issues", "merge_requests": "https://gitlab.com/api/v4/projects/25157276/merge_requests", "repo_branches": "https://gitlab.com/api/v4/projects/25157276/repository/branches", "labels": "https://gitlab.com/api/v4/projects/25157276/labels", "events": "https://gitlab.com/api/v4/projects/25157276/events", "members": "https://gitlab.com/api/v4/projects/25157276/members", "cluster_agents": "https://gitlab.com/api/v4/projects/25157276/cluster_agents"}, "packages_enabled": true, "empty_repo": false, "archived": false, "visibility": "private", "resolve_outdated_diff_discussions": false, "container_expiration_policy": {"cadence": "1d", "enabled": false, "keep_n": 10, "older_than": "90d", "name_regex": ".*", "name_regex_keep": null, "next_run_at": "2021-03-16T15:08:36.518Z"}, "issues_enabled": true, "merge_requests_enabled": true, "wiki_enabled": true, "jobs_enabled": true, "snippets_enabled": true, "container_registry_enabled": true, "service_desk_enabled": true, "service_desk_address": "contact-project+new-group-airbute-new-ci-test-project-25157276-issue-@incoming.gitlab.com", "can_create_merge_request_in": true, "issues_access_level": "private", "repository_access_level": "private", "merge_requests_access_level": "private", "forking_access_level": "enabled", "wiki_access_level": "enabled", "builds_access_level": "private", "snippets_access_level": "enabled", "pages_access_level": "private", "analytics_access_level": "enabled", "container_registry_access_level": "enabled", "security_and_compliance_access_level": "private", "releases_access_level": "enabled", "environments_access_level": "enabled", "feature_flags_access_level": "enabled", "infrastructure_access_level": "enabled", "monitor_access_level": "enabled", "model_experiments_access_level": "enabled", "emails_disabled": false, "emails_enabled": true, "shared_runners_enabled": true, "lfs_enabled": true, "creator_id": 8375961, "import_url": null, "import_type": null, "import_status": "none", "import_error": null, "open_issues_count": 31, "description_html": "", "updated_at": "2023-05-23T12:12:18.623Z", "ci_default_git_depth": 50, "ci_forward_deployment_enabled": true, "ci_forward_deployment_rollback_allowed": true, "ci_job_token_scope_enabled": false, "ci_separated_caches": true, "ci_allow_fork_pipelines_to_run_in_parent_project": true, "build_git_strategy": "fetch", "keep_latest_artifact": true, "restrict_user_defined_variables": false, "runners_token": "GR1348941eMJgWDU69xyyshaNsaTZ", "runner_token_expiration_interval": null, "group_runners_enabled": true, "auto_cancel_pending_pipelines": "enabled", "build_timeout": 3600, "auto_devops_enabled": false, "auto_devops_deploy_strategy": "continuous", "ci_config_path": "", "public_jobs": true, "shared_with_groups": [], "only_allow_merge_if_pipeline_succeeds": false, "allow_merge_on_skipped_pipeline": null, "request_access_enabled": true, "only_allow_merge_if_all_discussions_are_resolved": false, "remove_source_branch_after_merge": true, "printing_merge_request_link_enabled": true, "merge_method": "merge", "squash_option": "default_off", "enforce_auth_checks_on_uploads": true, "suggestion_commit_message": null, "merge_commit_template": null, "squash_commit_template": null, "issue_branch_template": null, "statistics": {"commit_count": 3, "storage_size": 9061, "repository_size": 251, "wiki_size": 0, "lfs_objects_size": 0, "job_artifacts_size": 8810, "pipeline_artifacts_size": 0, "packages_size": 0, "snippets_size": 0, "uploads_size": 0}, "autoclose_referenced_issues": true, "external_authorization_classification_label": "", "requirements_enabled": false, "requirements_access_level": "enabled", "security_and_compliance_enabled": true, "compliance_frameworks": [], "permissions": {"project_access": {"access_level": 40, "notification_level": 3}, "group_access": {"access_level": 50, "notification_level": 3}}}, "emitted_at": 1696950432789} {"stream": "tags", "data": {"name": "fake-tag-1", "message": "", "target": "2831d897ba0214f8d3168647e8ad4232b83987ef", "commit": {"id": "2831d897ba0214f8d3168647e8ad4232b83987ef", "short_id": "2831d897", "created_at": "2021-03-15T15:08:36.000+00:00", "parent_ids": [], "title": "Initial commit", "message": "Initial commit", "author_name": "Alexander Arhipenko", "author_email": "integration-test@airbyte.io", "authored_date": "2021-03-15T15:08:36.000+00:00", "committer_name": "Alexander Arhipenko", "committer_email": "integration-test@airbyte.io", "committed_date": "2021-03-15T15:08:36.000+00:00", "trailers": {}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/commit/2831d897ba0214f8d3168647e8ad4232b83987ef"}, "release": null, "protected": false, "commit_id": "2831d897ba0214f8d3168647e8ad4232b83987ef", "project_id": 25157276}, "emitted_at": 1686567225240} {"stream": "tags", "data": {"name": "fake-tag-10", "message": "", "target": "2831d897ba0214f8d3168647e8ad4232b83987ef", "commit": {"id": "2831d897ba0214f8d3168647e8ad4232b83987ef", "short_id": "2831d897", "created_at": "2021-03-15T15:08:36.000+00:00", "parent_ids": [], "title": "Initial commit", "message": "Initial commit", "author_name": "Alexander Arhipenko", "author_email": "integration-test@airbyte.io", "authored_date": "2021-03-15T15:08:36.000+00:00", "committer_name": "Alexander Arhipenko", "committer_email": "integration-test@airbyte.io", "committed_date": "2021-03-15T15:08:36.000+00:00", "trailers": {}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/commit/2831d897ba0214f8d3168647e8ad4232b83987ef"}, "release": null, "protected": false, "commit_id": "2831d897ba0214f8d3168647e8ad4232b83987ef", "project_id": 25157276}, "emitted_at": 1686567225242} {"stream": "tags", "data": {"name": "fake-tag-11", "message": "", "target": "2831d897ba0214f8d3168647e8ad4232b83987ef", "commit": {"id": "2831d897ba0214f8d3168647e8ad4232b83987ef", "short_id": "2831d897", "created_at": "2021-03-15T15:08:36.000+00:00", "parent_ids": [], "title": "Initial commit", "message": "Initial commit", "author_name": "Alexander Arhipenko", "author_email": "integration-test@airbyte.io", "authored_date": "2021-03-15T15:08:36.000+00:00", "committer_name": "Alexander Arhipenko", "committer_email": "integration-test@airbyte.io", "committed_date": "2021-03-15T15:08:36.000+00:00", "trailers": {}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/commit/2831d897ba0214f8d3168647e8ad4232b83987ef"}, "release": null, "protected": false, "commit_id": "2831d897ba0214f8d3168647e8ad4232b83987ef", "project_id": 25157276}, "emitted_at": 1686567225243} -{"stream": "merge_requests", "data": {"id": 92594931, "iid": 3, "project_id": 25157276, "title": "add fake CI config", "description": "", "state": "merged", "created_at": "2021-03-18T12:49:13.091Z", "updated_at": "2021-03-18T12:51:06.319Z", "merged_by": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "merge_user": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "merged_at": "2021-03-18T12:51:06.470Z", "closed_by": null, "closed_at": null, "target_branch": "master", "source_branch": "ykurochkin/add-fake-CI-config", "user_notes_count": 0, "upvotes": 0, "downvotes": 0, "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "assignees": [], "assignee": null, "reviewers": [], "source_project_id": 25157276, "target_project_id": 25157276, "labels": [], "draft": false, "work_in_progress": false, "milestone": null, "merge_when_pipeline_succeeds": false, "merge_status": "can_be_merged", "detailed_merge_status": "not_open", "sha": "028c02d96f40afe9b4d1173c1d0f712dd6d07302", "merge_commit_sha": "6ad3dd49539391774db738c9e7b7d69f2d872c98", "squash_commit_sha": null, "discussion_locked": null, "should_remove_source_branch": null, "force_remove_source_branch": true, "prepared_at": "2021-03-18T12:49:13.091Z", "reference": "!3", "references": {"short": "!3", "relative": "!3", "full": "new-group-airbute/new-ci-test-project!3"}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/merge_requests/3", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "squash": false, "squash_on_merge": false, "task_completion_status": {"count": 0, "completed_count": 0}, "has_conflicts": false, "blocking_discussions_resolved": true, "approvals_before_merge": null, "author_id": 8375961, "assignee_id": null, "closed_by_id": null, "milestone_id": null, "merged_by_id": 8375961}, "emitted_at": 1686567219461} -{"stream": "merge_requests", "data": {"id": 92593913, "iid": 2, "project_id": 25157276, "title": "update readme.md", "description": "", "state": "opened", "created_at": "2021-03-18T12:42:30.200Z", "updated_at": "2021-03-18T12:42:30.200Z", "merged_by": null, "merge_user": null, "merged_at": null, "closed_by": null, "closed_at": null, "target_branch": "master", "source_branch": "ykurochkin/test-branch", "user_notes_count": 0, "upvotes": 0, "downvotes": 0, "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "assignees": [], "assignee": null, "reviewers": [], "source_project_id": 25157276, "target_project_id": 25157276, "labels": [], "draft": false, "work_in_progress": false, "milestone": null, "merge_when_pipeline_succeeds": false, "merge_status": "can_be_merged", "detailed_merge_status": "mergeable", "sha": "9b0c5cf345f0ca1a3fb3ae253e74e0616abf8129", "merge_commit_sha": null, "squash_commit_sha": null, "discussion_locked": null, "should_remove_source_branch": null, "force_remove_source_branch": true, "prepared_at": "2021-03-18T12:42:30.200Z", "reference": "!2", "references": {"short": "!2", "relative": "!2", "full": "new-group-airbute/new-ci-test-project!2"}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/merge_requests/2", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "squash": false, "squash_on_merge": false, "task_completion_status": {"count": 0, "completed_count": 0}, "has_conflicts": false, "blocking_discussions_resolved": true, "approvals_before_merge": null, "author_id": 8375961, "assignee_id": null, "closed_by_id": null, "milestone_id": null, "merged_by_id": null}, "emitted_at": 1686567219464} -{"stream": "merge_requests", "data": {"id": 92111504, "iid": 1, "project_id": 25157276, "title": "Draft: Resolve \"Fake Issue 30\"", "description": "Closes #31", "state": "opened", "created_at": "2021-03-15T16:08:05.071Z", "updated_at": "2021-03-15T16:08:05.071Z", "merged_by": null, "merge_user": null, "merged_at": null, "closed_by": null, "closed_at": null, "target_branch": "master", "source_branch": "31-fake-issue-30", "user_notes_count": 0, "upvotes": 0, "downvotes": 0, "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "assignees": [8375961], "assignee": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "reviewers": [], "source_project_id": 25157276, "target_project_id": 25157276, "labels": ["bug"], "draft": true, "work_in_progress": true, "milestone": null, "merge_when_pipeline_succeeds": false, "merge_status": "cannot_be_merged", "detailed_merge_status": "draft_status", "sha": "2831d897ba0214f8d3168647e8ad4232b83987ef", "merge_commit_sha": null, "squash_commit_sha": null, "discussion_locked": null, "should_remove_source_branch": null, "force_remove_source_branch": true, "prepared_at": "2021-03-15T16:08:05.071Z", "reference": "!1", "references": {"short": "!1", "relative": "!1", "full": "new-group-airbute/new-ci-test-project!1"}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/merge_requests/1", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "squash": false, "squash_on_merge": false, "task_completion_status": {"count": 0, "completed_count": 0}, "has_conflicts": true, "blocking_discussions_resolved": true, "approvals_before_merge": null, "author_id": 8375961, "assignee_id": 8375961, "closed_by_id": null, "milestone_id": null, "merged_by_id": null}, "emitted_at": 1686567219466} -{"stream": "issues", "data": {"id": 80943819, "iid": 32, "project_id": 25157276, "title": "Fake Issue 31", "description": null, "state": "opened", "created_at": "2021-03-15T15:22:42.206Z", "updated_at": "2021-03-15T15:22:42.206Z", "closed_at": null, "closed_by": null, "labels": ["bug"], "milestone": null, "assignees": [], "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "type": "ISSUE", "assignee": null, "user_notes_count": 0, "merge_requests_count": 0, "upvotes": 0, "downvotes": 0, "due_date": null, "confidential": false, "discussion_locked": null, "issue_type": "issue", "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/issues/32", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "task_completion_status": {"count": 0, "completed_count": 0}, "blocking_issues_count": 0, "has_tasks": true, "task_status": "", "_links": {"self": "https://gitlab.com/api/v4/projects/25157276/issues/32", "notes": "https://gitlab.com/api/v4/projects/25157276/issues/32/notes", "award_emoji": "https://gitlab.com/api/v4/projects/25157276/issues/32/award_emoji", "project": "https://gitlab.com/api/v4/projects/25157276", "closed_as_duplicate_of": null}, "references": {"short": "#32", "relative": "#32", "full": "new-group-airbute/new-ci-test-project#32"}, "severity": "UNKNOWN", "moved_to_id": null, "service_desk_reply_to": null, "author_id": 8375961, "assignee_id": null, "closed_by_id": null, "milestone_id": null}, "emitted_at": 1686567189959} -{"stream": "issues", "data": {"id": 80943818, "iid": 31, "project_id": 25157276, "title": "Fake Issue 30", "description": null, "state": "opened", "created_at": "2021-03-15T15:22:41.337Z", "updated_at": "2021-03-15T16:08:06.041Z", "closed_at": null, "closed_by": null, "labels": ["bug"], "milestone": null, "assignees": [], "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "type": "ISSUE", "assignee": null, "user_notes_count": 0, "merge_requests_count": 1, "upvotes": 0, "downvotes": 0, "due_date": null, "confidential": false, "discussion_locked": null, "issue_type": "issue", "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/issues/31", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "task_completion_status": {"count": 0, "completed_count": 0}, "blocking_issues_count": 0, "has_tasks": true, "task_status": "", "_links": {"self": "https://gitlab.com/api/v4/projects/25157276/issues/31", "notes": "https://gitlab.com/api/v4/projects/25157276/issues/31/notes", "award_emoji": "https://gitlab.com/api/v4/projects/25157276/issues/31/award_emoji", "project": "https://gitlab.com/api/v4/projects/25157276", "closed_as_duplicate_of": null}, "references": {"short": "#31", "relative": "#31", "full": "new-group-airbute/new-ci-test-project#31"}, "severity": "UNKNOWN", "moved_to_id": null, "service_desk_reply_to": null, "author_id": 8375961, "assignee_id": null, "closed_by_id": null, "milestone_id": null}, "emitted_at": 1686567189960} -{"stream": "issues", "data": {"id": 80943817, "iid": 30, "project_id": 25157276, "title": "Fake Issue 29", "description": null, "state": "opened", "created_at": "2021-03-15T15:22:40.529Z", "updated_at": "2021-03-15T15:22:40.529Z", "closed_at": null, "closed_by": null, "labels": ["bug"], "milestone": null, "assignees": [], "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "type": "ISSUE", "assignee": null, "user_notes_count": 0, "merge_requests_count": 0, "upvotes": 0, "downvotes": 0, "due_date": null, "confidential": false, "discussion_locked": null, "issue_type": "issue", "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/issues/30", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "task_completion_status": {"count": 0, "completed_count": 0}, "blocking_issues_count": 0, "has_tasks": true, "task_status": "", "_links": {"self": "https://gitlab.com/api/v4/projects/25157276/issues/30", "notes": "https://gitlab.com/api/v4/projects/25157276/issues/30/notes", "award_emoji": "https://gitlab.com/api/v4/projects/25157276/issues/30/award_emoji", "project": "https://gitlab.com/api/v4/projects/25157276", "closed_as_duplicate_of": null}, "references": {"short": "#30", "relative": "#30", "full": "new-group-airbute/new-ci-test-project#30"}, "severity": "UNKNOWN", "moved_to_id": null, "service_desk_reply_to": null, "author_id": 8375961, "assignee_id": null, "closed_by_id": null, "milestone_id": null}, "emitted_at": 1686567189960} -{"stream": "project_members", "data": {"access_level": 40, "created_at": "2021-03-15T15:08:36.746Z", "created_by": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "expires_at": null, "id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte", "membership_state": "active", "project_id": 25157276}, "emitted_at": 1686567202944} +{"stream": "merge_requests", "data": {"id": 92594931, "iid": 3, "project_id": 25157276, "title": "add fake CI config", "description": "", "state": "merged", "created_at": "2021-03-18T12:49:13.091Z", "updated_at": "2021-03-18T12:51:06.319Z", "merged_by": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "merge_user": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "merged_at": "2021-03-18T12:51:06.470Z", "closed_by": null, "closed_at": null, "target_branch": "master", "source_branch": "ykurochkin/add-fake-CI-config", "user_notes_count": 0, "upvotes": 0, "downvotes": 0, "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "assignees": [], "assignee": null, "reviewers": [], "source_project_id": 25157276, "target_project_id": 25157276, "labels": [], "draft": false, "work_in_progress": false, "milestone": null, "merge_when_pipeline_succeeds": false, "merge_status": "can_be_merged", "detailed_merge_status": "not_open", "sha": "028c02d96f40afe9b4d1173c1d0f712dd6d07302", "merge_commit_sha": "6ad3dd49539391774db738c9e7b7d69f2d872c98", "squash_commit_sha": null, "discussion_locked": null, "should_remove_source_branch": null, "force_remove_source_branch": true, "prepared_at": "2021-03-18T12:49:13.091Z", "reference": "!3", "references": {"short": "!3", "relative": "!3", "full": "new-group-airbute/new-ci-test-project!3"}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/merge_requests/3", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "squash": false, "squash_on_merge": false, "task_completion_status": {"count": 0, "completed_count": 0}, "has_conflicts": false, "blocking_discussions_resolved": true, "approvals_before_merge": null, "author_id": 8375961, "assignee_id": null, "closed_by_id": null, "milestone_id": null, "merged_by_id": 8375961}, "emitted_at": 1696950689861} +{"stream": "merge_requests", "data": {"id": 92593913, "iid": 2, "project_id": 25157276, "title": "update readme.md", "description": "", "state": "opened", "created_at": "2021-03-18T12:42:30.200Z", "updated_at": "2021-03-18T12:42:30.200Z", "merged_by": null, "merge_user": null, "merged_at": null, "closed_by": null, "closed_at": null, "target_branch": "master", "source_branch": "ykurochkin/test-branch", "user_notes_count": 0, "upvotes": 0, "downvotes": 0, "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "assignees": [], "assignee": null, "reviewers": [], "source_project_id": 25157276, "target_project_id": 25157276, "labels": [], "draft": false, "work_in_progress": false, "milestone": null, "merge_when_pipeline_succeeds": false, "merge_status": "can_be_merged", "detailed_merge_status": "mergeable", "sha": "9b0c5cf345f0ca1a3fb3ae253e74e0616abf8129", "merge_commit_sha": null, "squash_commit_sha": null, "discussion_locked": null, "should_remove_source_branch": null, "force_remove_source_branch": true, "prepared_at": "2021-03-18T12:42:30.200Z", "reference": "!2", "references": {"short": "!2", "relative": "!2", "full": "new-group-airbute/new-ci-test-project!2"}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/merge_requests/2", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "squash": false, "squash_on_merge": false, "task_completion_status": {"count": 0, "completed_count": 0}, "has_conflicts": false, "blocking_discussions_resolved": true, "approvals_before_merge": null, "author_id": 8375961, "assignee_id": null, "closed_by_id": null, "milestone_id": null, "merged_by_id": null}, "emitted_at": 1696950689864} +{"stream": "merge_requests", "data": {"id": 92111504, "iid": 1, "project_id": 25157276, "title": "Draft: Resolve \"Fake Issue 30\"", "description": "Closes #31", "state": "opened", "created_at": "2021-03-15T16:08:05.071Z", "updated_at": "2021-03-15T16:08:05.071Z", "merged_by": null, "merge_user": null, "merged_at": null, "closed_by": null, "closed_at": null, "target_branch": "master", "source_branch": "31-fake-issue-30", "user_notes_count": 0, "upvotes": 0, "downvotes": 0, "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "assignees": [8375961], "assignee": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "reviewers": [], "source_project_id": 25157276, "target_project_id": 25157276, "labels": ["bug"], "draft": true, "work_in_progress": true, "milestone": null, "merge_when_pipeline_succeeds": false, "merge_status": "cannot_be_merged", "detailed_merge_status": "draft_status", "sha": "2831d897ba0214f8d3168647e8ad4232b83987ef", "merge_commit_sha": null, "squash_commit_sha": null, "discussion_locked": null, "should_remove_source_branch": null, "force_remove_source_branch": true, "prepared_at": "2021-03-15T16:08:05.071Z", "reference": "!1", "references": {"short": "!1", "relative": "!1", "full": "new-group-airbute/new-ci-test-project!1"}, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/merge_requests/1", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "squash": false, "squash_on_merge": false, "task_completion_status": {"count": 0, "completed_count": 0}, "has_conflicts": true, "blocking_discussions_resolved": true, "approvals_before_merge": null, "author_id": 8375961, "assignee_id": 8375961, "closed_by_id": null, "milestone_id": null, "merged_by_id": null}, "emitted_at": 1696950689866} +{"stream": "issues", "data": {"id": 80943819, "iid": 32, "project_id": 25157276, "title": "Fake Issue 31", "description": null, "state": "opened", "created_at": "2021-03-15T15:22:42.206Z", "updated_at": "2021-03-15T15:22:42.206Z", "closed_at": null, "closed_by": null, "labels": ["bug"], "milestone": null, "assignees": [], "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "type": "ISSUE", "assignee": null, "user_notes_count": 0, "merge_requests_count": 0, "upvotes": 0, "downvotes": 0, "due_date": null, "confidential": false, "discussion_locked": null, "issue_type": "issue", "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/issues/32", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "task_completion_status": {"count": 0, "completed_count": 0}, "blocking_issues_count": 0, "has_tasks": true, "task_status": "", "_links": {"self": "https://gitlab.com/api/v4/projects/25157276/issues/32", "notes": "https://gitlab.com/api/v4/projects/25157276/issues/32/notes", "award_emoji": "https://gitlab.com/api/v4/projects/25157276/issues/32/award_emoji", "project": "https://gitlab.com/api/v4/projects/25157276", "closed_as_duplicate_of": null}, "references": {"short": "#32", "relative": "#32", "full": "new-group-airbute/new-ci-test-project#32"}, "severity": "UNKNOWN", "moved_to_id": null, "service_desk_reply_to": null, "author_id": 8375961, "assignee_id": null, "closed_by_id": null, "milestone_id": null}, "emitted_at": 1696950969206} +{"stream": "issues", "data": {"id": 80943818, "iid": 31, "project_id": 25157276, "title": "Fake Issue 30", "description": null, "state": "opened", "created_at": "2021-03-15T15:22:41.337Z", "updated_at": "2021-03-15T16:08:06.041Z", "closed_at": null, "closed_by": null, "labels": ["bug"], "milestone": null, "assignees": [], "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "type": "ISSUE", "assignee": null, "user_notes_count": 0, "merge_requests_count": 1, "upvotes": 0, "downvotes": 0, "due_date": null, "confidential": false, "discussion_locked": null, "issue_type": "issue", "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/issues/31", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "task_completion_status": {"count": 0, "completed_count": 0}, "blocking_issues_count": 0, "has_tasks": true, "task_status": "", "_links": {"self": "https://gitlab.com/api/v4/projects/25157276/issues/31", "notes": "https://gitlab.com/api/v4/projects/25157276/issues/31/notes", "award_emoji": "https://gitlab.com/api/v4/projects/25157276/issues/31/award_emoji", "project": "https://gitlab.com/api/v4/projects/25157276", "closed_as_duplicate_of": null}, "references": {"short": "#31", "relative": "#31", "full": "new-group-airbute/new-ci-test-project#31"}, "severity": "UNKNOWN", "moved_to_id": null, "service_desk_reply_to": null, "author_id": 8375961, "assignee_id": null, "closed_by_id": null, "milestone_id": null}, "emitted_at": 1696950969209} +{"stream": "issues", "data": {"id": 80943817, "iid": 30, "project_id": 25157276, "title": "Fake Issue 29", "description": null, "state": "opened", "created_at": "2021-03-15T15:22:40.529Z", "updated_at": "2021-03-15T15:22:40.529Z", "closed_at": null, "closed_by": null, "labels": ["bug"], "milestone": null, "assignees": [], "author": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "type": "ISSUE", "assignee": null, "user_notes_count": 0, "merge_requests_count": 0, "upvotes": 0, "downvotes": 0, "due_date": null, "confidential": false, "discussion_locked": null, "issue_type": "issue", "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/issues/30", "time_stats": {"time_estimate": 0, "total_time_spent": 0, "human_time_estimate": null, "human_total_time_spent": null}, "task_completion_status": {"count": 0, "completed_count": 0}, "blocking_issues_count": 0, "has_tasks": true, "task_status": "", "_links": {"self": "https://gitlab.com/api/v4/projects/25157276/issues/30", "notes": "https://gitlab.com/api/v4/projects/25157276/issues/30/notes", "award_emoji": "https://gitlab.com/api/v4/projects/25157276/issues/30/award_emoji", "project": "https://gitlab.com/api/v4/projects/25157276", "closed_as_duplicate_of": null}, "references": {"short": "#30", "relative": "#30", "full": "new-group-airbute/new-ci-test-project#30"}, "severity": "UNKNOWN", "moved_to_id": null, "service_desk_reply_to": null, "author_id": 8375961, "assignee_id": null, "closed_by_id": null, "milestone_id": null}, "emitted_at": 1696950969210} +{"stream": "project_members", "data": {"access_level": 40, "created_at": "2021-03-15T15:08:36.746Z", "created_by": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "expires_at": null, "id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte", "membership_state": "active", "project_id": 25157276}, "emitted_at": 1696951717050} {"stream": "project_labels", "data": {"id": 19116944, "name": "Label 1", "description": null, "description_html": "", "text_color": "#1F1E24", "color": "#ffff00", "subscribed": false, "priority": null, "is_project_label": true, "project_id": 25157276}, "emitted_at": 1686567207747} {"stream": "project_labels", "data": {"id": 19117004, "name": "Label 1", "description": null, "description_html": "", "text_color": "#FFFFFF", "color": "#008000", "subscribed": false, "priority": null, "is_project_label": false, "project_id": 25157276}, "emitted_at": 1686567207748} {"stream": "project_labels", "data": {"id": 19116954, "name": "Label 10", "description": null, "description_html": "", "text_color": "#FFFFFF", "color": "#ff00ff", "subscribed": false, "priority": null, "is_project_label": true, "project_id": 25157276}, "emitted_at": 1686567207748} {"stream": "project_milestones", "data": {"id": 1943705, "iid": 51, "project_id": 25157276, "title": "Project Milestone 51", "description": null, "state": "active", "created_at": "2021-03-15T15:33:16.915Z", "updated_at": "2021-03-15T15:33:16.915Z", "due_date": null, "start_date": null, "expired": false, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/milestones/51"}, "emitted_at": 1686567197935} {"stream": "project_milestones", "data": {"id": 1943704, "iid": 50, "project_id": 25157276, "title": "Project Milestone 50", "description": null, "state": "active", "created_at": "2021-03-15T15:33:16.329Z", "updated_at": "2021-03-15T15:33:16.329Z", "due_date": null, "start_date": null, "expired": false, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/milestones/50"}, "emitted_at": 1686567197937} {"stream": "project_milestones", "data": {"id": 1943703, "iid": 49, "project_id": 25157276, "title": "Project Milestone 49", "description": null, "state": "active", "created_at": "2021-03-15T15:33:15.960Z", "updated_at": "2021-03-15T15:33:15.960Z", "due_date": null, "start_date": null, "expired": false, "web_url": "https://gitlab.com/new-group-airbute/new-ci-test-project/-/milestones/49"}, "emitted_at": 1686567197937} +{"stream": "deployments", "data": {"id": 568087366, "iid": 1, "ref": "master", "sha": "6ad3dd49539391774db738c9e7b7d69f2d872c98", "created_at": "2023-10-10T09:56:02.273Z", "updated_at": "2023-10-10T09:56:02.273Z", "user": {"id": 8375961, "username": "airbyte", "name": "Airbyte Team", "state": "active", "locked": false, "avatar_url": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?s=80&d=identicon", "web_url": "https://gitlab.com/airbyte"}, "environment": {"id": 17305239, "name": "dev", "slug": "dev", "external_url": null, "created_at": "2023-10-10T09:56:02.188Z", "updated_at": "2023-10-10T09:56:02.188Z"}, "deployable": null, "status": "failed", "user_id": 8375961, "environment_id": 17305239, "user_username": "airbyte", "user_full_name": "Airbyte Team", "environment_name": "dev", "project_id": 25157276}, "emitted_at": 1696931771902} diff --git a/airbyte-integrations/connectors/source-gitlab/metadata.yaml b/airbyte-integrations/connectors/source-gitlab/metadata.yaml index 10304aeaebbc..1fcd2ce79950 100644 --- a/airbyte-integrations/connectors/source-gitlab/metadata.yaml +++ b/airbyte-integrations/connectors/source-gitlab/metadata.yaml @@ -5,7 +5,7 @@ data: connectorSubtype: api connectorType: source definitionId: 5e6175e5-68e1-4c17-bff9-56103bbb0d80 - dockerImageTag: 1.6.0 + dockerImageTag: 1.7.0 dockerRepository: airbyte/source-gitlab githubIssueLabel: source-gitlab icon: gitlab.svg diff --git a/airbyte-integrations/connectors/source-gitlab/source_gitlab/schemas/deployments.json b/airbyte-integrations/connectors/source-gitlab/source_gitlab/schemas/deployments.json new file mode 100644 index 000000000000..93d29eacccb9 --- /dev/null +++ b/airbyte-integrations/connectors/source-gitlab/source_gitlab/schemas/deployments.json @@ -0,0 +1,52 @@ +{ + "$schema": "https://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "id": { + "type": ["null", "integer"] + }, + "status": { + "type": ["null", "string"] + }, + "ref": { + "type": ["null", "string"] + }, + "sha": { + "type": ["null", "string"] + }, + "environment_name": { + "type": ["null", "string"] + }, + "created_at": { + "type": ["null", "string"], + "format": "date-time" + }, + "updated_at": { + "type": ["null", "string"], + "format": "date-time" + }, + "user": { + "type": ["null", "object"], + "additionalProperties": true + }, + "user_full_name": { + "type": ["null", "string"] + }, + "user_username": { + "type": ["null", "string"] + }, + "user_id": { + "type": ["null", "integer"] + }, + "environment": { + "type": ["null", "object"], + "additionalProperties": true + }, + "environment_id": { + "type": ["null", "integer"] + }, + "project_id": { + "type": ["null", "integer"] + } + } +} diff --git a/airbyte-integrations/connectors/source-gitlab/source_gitlab/source.py b/airbyte-integrations/connectors/source-gitlab/source_gitlab/source.py index de3545dc89c8..dc40c03387c1 100644 --- a/airbyte-integrations/connectors/source-gitlab/source_gitlab/source.py +++ b/airbyte-integrations/connectors/source-gitlab/source_gitlab/source.py @@ -18,6 +18,7 @@ from .streams import ( Branches, Commits, + Deployments, EpicIssues, Epics, GitlabStream, @@ -171,6 +172,7 @@ def streams(self, config: MutableMapping[str, Any]) -> List[Stream]: Branches(parent_stream=projects, repository_part=True, **auth_params), Commits(parent_stream=projects, repository_part=True, start_date=config["start_date"], **auth_params), epics, + Deployments(parent_stream=projects, **auth_params), EpicIssues(parent_stream=epics, **auth_params), GroupIssueBoards(parent_stream=groups, **auth_params), Issues(parent_stream=projects, start_date=config["start_date"], **auth_params), diff --git a/airbyte-integrations/connectors/source-gitlab/source_gitlab/streams.py b/airbyte-integrations/connectors/source-gitlab/source_gitlab/streams.py index de655d03e974..0c947f05cf87 100644 --- a/airbyte-integrations/connectors/source-gitlab/source_gitlab/streams.py +++ b/airbyte-integrations/connectors/source-gitlab/source_gitlab/streams.py @@ -404,3 +404,17 @@ class EpicIssues(GitlabChildStream): flatten_id_keys = ["milestone", "assignee", "author"] flatten_list_keys = ["assignees"] path_template = "groups/{group_id}/epics/{iid}/issues" + + +class Deployments(GitlabChildStream): + primary_key = "id" + flatten_id_keys = ["user", "environment"] + path_template = "projects/{id}/deployments" + + def transform(self, record, stream_slice: Mapping[str, Any] = None, **kwargs): + super().transform(record, stream_slice, **kwargs) + record["user_username"] = record["user"]["username"] + record["user_full_name"] = record["user"]["name"] + record["environment_name"] = record["environment"]["name"] + record["project_id"] = stream_slice["id"] + return record diff --git a/airbyte-integrations/connectors/source-gitlab/unit_tests/test_source.py b/airbyte-integrations/connectors/source-gitlab/unit_tests/test_source.py index 4b3d5b5c21b2..f61cd412e30e 100644 --- a/airbyte-integrations/connectors/source-gitlab/unit_tests/test_source.py +++ b/airbyte-integrations/connectors/source-gitlab/unit_tests/test_source.py @@ -13,7 +13,7 @@ def test_streams(config, requests_mock): requests_mock.get("/api/v4/groups", json=[{"id": "g1"}, {"id": "g256"}]) source = SourceGitlab() streams = source.streams(config) - assert len(streams) == 22 + assert len(streams) == 23 assert all([isinstance(stream, GitlabStream) for stream in streams]) groups, projects, *_ = streams assert groups.group_ids == ["g1", "g256"] diff --git a/airbyte-integrations/connectors/source-gitlab/unit_tests/test_streams.py b/airbyte-integrations/connectors/source-gitlab/unit_tests/test_streams.py index 839d3ab6e50f..7fd342f45c47 100644 --- a/airbyte-integrations/connectors/source-gitlab/unit_tests/test_streams.py +++ b/airbyte-integrations/connectors/source-gitlab/unit_tests/test_streams.py @@ -6,7 +6,18 @@ import pytest from airbyte_cdk.sources.streams.http.auth import NoAuth -from source_gitlab.streams import Branches, Commits, Jobs, MergeRequestCommits, MergeRequests, Pipelines, Projects, Releases, Tags +from source_gitlab.streams import ( + Branches, + Commits, + Deployments, + Jobs, + MergeRequestCommits, + MergeRequests, + Pipelines, + Projects, + Releases, + Tags, +) auth_params = {"authenticator": NoAuth(), "api_url": "gitlab.com"} start_date = datetime.datetime.now(datetime.timezone.utc) - datetime.timedelta(days=14) @@ -42,6 +53,11 @@ def jobs(pipelines): return Jobs(parent_stream=pipelines, **auth_params) +@pytest.fixture() +def deployments(projects): + return Deployments(parent_stream=projects, **auth_params) + + @pytest.fixture() def merge_request_commits(merge_requests): return MergeRequestCommits(parent_stream=merge_requests, **auth_params) @@ -151,6 +167,36 @@ def test_should_retry(mocker, requests_mock, stream, extra_mocks, expected_call_ } ], ), + ( + "deployments", + ( + ( + "/api/v4/projects/p_1/deployments", + [ + { + "id": "r_1", + "user": {"name": "John", "id": "666", "username": "john"}, + "environment": {"name": "dev"}, + "commit": {"id": "abcd689"}, + } + ], + ), + ), + [ + { + "id": "r_1", + "user": {"name": "John", "id": "666", "username": "john"}, + "environment": {"name": "dev"}, + "commit": {"id": "abcd689"}, + "user_id": "666", + "environment_id": None, + "user_username": "john", + "user_full_name": "John", + "environment_name": "dev", + "project_id": "p_1", + } + ], + ), ( "merge_request_commits", ( diff --git a/airbyte-integrations/connectors/source-google-ads/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-google-ads/integration_tests/expected_records.jsonl index 0bee9111d743..4bac0ae95168 100644 --- a/airbyte-integrations/connectors/source-google-ads/integration_tests/expected_records.jsonl +++ b/airbyte-integrations/connectors/source-google-ads/integration_tests/expected_records.jsonl @@ -1,71 +1,71 @@ -{"stream": "account_performance_report", "data": {"customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "metrics.active_view_cpm": 0.0, "metrics.active_view_ctr": 0.0, "metrics.active_view_impressions": 0, "metrics.active_view_measurability": 0.0, "metrics.active_view_measurable_cost_micros": 0, "metrics.active_view_measurable_impressions": 0, "metrics.active_view_viewability": 0.0, "segments.ad_network_type": "SEARCH", "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.all_conversions": 0.0, "metrics.average_cost": 253333.33333333334, "metrics.average_cpc": 253333.33333333334, "metrics.average_cpe": 0.0, "metrics.average_cpm": 27142857.14285714, "metrics.average_cpv": 0.0, "customer.manager": false, "metrics.clicks": 3, "metrics.content_budget_lost_impression_share": 0.0, "metrics.content_impression_share": 0.0, "metrics.content_rank_lost_impression_share": 0.0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.conversions": 0.0, "metrics.cost_micros": 760000, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.10714285714285714, "segments.date": "2022-05-18", "segments.day_of_week": "WEDNESDAY", "segments.device": "DESKTOP", "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "customer.id": 4651612872, "metrics.impressions": 28, "metrics.interaction_rate": 0.10714285714285714, "metrics.interaction_event_types": ["InteractionEventType.CLICK"], "metrics.interactions": 3, "customer.auto_tagging_enabled": true, "customer.test_account": false, "segments.month": "2022-05-01", "segments.quarter": "2022-04-01", "metrics.search_budget_lost_impression_share": 0.6935849056603773, "metrics.search_exact_match_impression_share": 0.0999, "metrics.search_impression_share": 0.0999, "metrics.search_rank_lost_impression_share": 0.2852830188679245, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0, "segments.week": "2022-05-16", "segments.year": 2022}, "emitted_at": 1695379432939} -{"stream": "account_performance_report", "data": {"customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "metrics.active_view_cpm": 0.0, "metrics.active_view_ctr": 0.0, "metrics.active_view_impressions": 0, "metrics.active_view_measurability": 0.0, "metrics.active_view_measurable_cost_micros": 0, "metrics.active_view_measurable_impressions": 0, "metrics.active_view_viewability": 0.0, "segments.ad_network_type": "SEARCH", "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.all_conversions": 0.0, "metrics.average_cost": 30000.0, "metrics.average_cpc": 30000.0, "metrics.average_cpe": 0.0, "metrics.average_cpm": 2500000.0, "metrics.average_cpv": 0.0, "customer.manager": false, "metrics.clicks": 1, "metrics.content_budget_lost_impression_share": 0.0, "metrics.content_impression_share": 0.0, "metrics.content_rank_lost_impression_share": 0.0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.conversions": 0.0, "metrics.cost_micros": 30000, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.08333333333333333, "segments.date": "2022-05-18", "segments.day_of_week": "WEDNESDAY", "segments.device": "MOBILE", "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "customer.id": 4651612872, "metrics.impressions": 12, "metrics.interaction_rate": 0.08333333333333333, "metrics.interaction_event_types": ["InteractionEventType.CLICK"], "metrics.interactions": 1, "customer.auto_tagging_enabled": true, "customer.test_account": false, "segments.month": "2022-05-01", "segments.quarter": "2022-04-01", "metrics.search_budget_lost_impression_share": 0.7254437869822485, "metrics.search_exact_match_impression_share": 0.0999, "metrics.search_impression_share": 0.0999, "metrics.search_rank_lost_impression_share": 0.2603550295857988, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0, "segments.week": "2022-05-16", "segments.year": 2022}, "emitted_at": 1695379432940} -{"stream": "account_performance_report", "data": {"customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "metrics.active_view_cpm": 0.0, "metrics.active_view_ctr": 0.0, "metrics.active_view_impressions": 0, "metrics.active_view_measurability": 0.0, "metrics.active_view_measurable_cost_micros": 0, "metrics.active_view_measurable_impressions": 0, "metrics.active_view_viewability": 0.0, "segments.ad_network_type": "SEARCH", "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.all_conversions": 0.0, "metrics.average_cost": 0.0, "metrics.average_cpc": 0.0, "metrics.average_cpe": 0.0, "metrics.average_cpm": 0.0, "metrics.average_cpv": 0.0, "customer.manager": false, "metrics.clicks": 0, "metrics.content_budget_lost_impression_share": 0.0, "metrics.content_impression_share": 0.0, "metrics.content_rank_lost_impression_share": 0.0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.conversions": 0.0, "metrics.cost_micros": 0, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.0, "segments.date": "2022-05-18", "segments.day_of_week": "WEDNESDAY", "segments.device": "TABLET", "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "customer.id": 4651612872, "metrics.impressions": 0, "metrics.interaction_rate": 0.0, "metrics.interaction_event_types": [], "metrics.interactions": 0, "customer.auto_tagging_enabled": true, "customer.test_account": false, "segments.month": "2022-05-01", "segments.quarter": "2022-04-01", "metrics.search_budget_lost_impression_share": 0.9001, "metrics.search_exact_match_impression_share": 0.0999, "metrics.search_impression_share": 0.0999, "metrics.search_rank_lost_impression_share": 0.0, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0, "segments.week": "2022-05-16", "segments.year": 2022}, "emitted_at": 1695379432941} -{"stream": "accounts", "data": {"customer.auto_tagging_enabled": true, "customer.call_reporting_setting.call_conversion_action": "customers/4651612872/conversionActions/179", "customer.call_reporting_setting.call_conversion_reporting_enabled": true, "customer.call_reporting_setting.call_reporting_enabled": true, "customer.conversion_tracking_setting.conversion_tracking_id": 657981234, "customer.conversion_tracking_setting.cross_account_conversion_tracking_id": 0, "customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.final_url_suffix": "", "customer.has_partners_badge": false, "customer.id": 4651612872, "customer.manager": false, "customer.optimization_score": 0.7503356999999999, "customer.optimization_score_weight": 93.689633, "customer.pay_per_conversion_eligibility_failure_reasons": ["CustomerPayPerConversionEligibilityFailureReason.NOT_ENOUGH_CONVERSIONS"], "customer.remarketing_setting.google_global_site_tag": "\n\n\n", "customer.resource_name": "customers/4651612872", "customer.test_account": false, "customer.time_zone": "America/Los_Angeles", "customer.tracking_url_template": "", "segments.date": "2022-05-18"}, "emitted_at": 1695379445771} -{"stream": "accounts", "data": {"customer.auto_tagging_enabled": true, "customer.call_reporting_setting.call_conversion_action": "customers/4651612872/conversionActions/179", "customer.call_reporting_setting.call_conversion_reporting_enabled": true, "customer.call_reporting_setting.call_reporting_enabled": true, "customer.conversion_tracking_setting.conversion_tracking_id": 657981234, "customer.conversion_tracking_setting.cross_account_conversion_tracking_id": 0, "customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.final_url_suffix": "", "customer.has_partners_badge": false, "customer.id": 4651612872, "customer.manager": false, "customer.optimization_score": 0.7503356999999999, "customer.optimization_score_weight": 93.689633, "customer.pay_per_conversion_eligibility_failure_reasons": ["CustomerPayPerConversionEligibilityFailureReason.NOT_ENOUGH_CONVERSIONS"], "customer.remarketing_setting.google_global_site_tag": "\n\n\n", "customer.resource_name": "customers/4651612872", "customer.test_account": false, "customer.time_zone": "America/Los_Angeles", "customer.tracking_url_template": "", "segments.date": "2022-05-19"}, "emitted_at": 1695379445774} -{"stream": "accounts", "data": {"customer.auto_tagging_enabled": true, "customer.call_reporting_setting.call_conversion_action": "customers/4651612872/conversionActions/179", "customer.call_reporting_setting.call_conversion_reporting_enabled": true, "customer.call_reporting_setting.call_reporting_enabled": true, "customer.conversion_tracking_setting.conversion_tracking_id": 657981234, "customer.conversion_tracking_setting.cross_account_conversion_tracking_id": 0, "customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.final_url_suffix": "", "customer.has_partners_badge": false, "customer.id": 4651612872, "customer.manager": false, "customer.optimization_score": 0.7503356999999999, "customer.optimization_score_weight": 93.689633, "customer.pay_per_conversion_eligibility_failure_reasons": ["CustomerPayPerConversionEligibilityFailureReason.NOT_ENOUGH_CONVERSIONS"], "customer.remarketing_setting.google_global_site_tag": "\n\n\n", "customer.resource_name": "customers/4651612872", "customer.test_account": false, "customer.time_zone": "America/Los_Angeles", "customer.tracking_url_template": "", "segments.date": "2022-05-20"}, "emitted_at": 1695379445776} -{"stream": "ad_group_ad_labels", "data": {"ad_group.id": 123273719655, "ad_group_ad.ad.id": 524518584182, "ad_group_ad.ad.resource_name": "customers/4651612872/ads/524518584182", "ad_group_ad_label.resource_name": "customers/4651612872/adGroupAdLabels/123273719655~524518584182~21585034471", "label.name": "edgao-example-label", "label.resource_name": "customers/4651612872/labels/21585034471", "label.id": 21585034471}, "emitted_at": 1695379449866} -{"stream": "ad_group_ad_labels", "data": {"ad_group.id": 137020701042, "ad_group_ad.ad.id": 592078631218, "ad_group_ad.ad.resource_name": "customers/4651612872/ads/592078631218", "ad_group_ad_label.resource_name": "customers/4651612872/adGroupAdLabels/137020701042~592078631218~21906377810", "label.name": "Test Delete label customer", "label.resource_name": "customers/4651612872/labels/21906377810", "label.id": 21906377810}, "emitted_at": 1695379449868} -{"stream": "ad_group_ad_report", "data": {"ad_group_ad.ad.legacy_responsive_display_ad.accent_color": "", "ad_group.id": 137020701042, "customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "metrics.active_view_cpm": 0.0, "metrics.active_view_ctr": 0.0, "metrics.active_view_impressions": 0, "metrics.active_view_measurability": 0.0, "metrics.active_view_measurable_cost_micros": 0, "metrics.active_view_measurable_impressions": 0, "metrics.active_view_viewability": 0.0, "ad_group_ad.ad_group": "customers/4651612872/adGroups/137020701042", "ad_group.name": "\u0413\u0440\u0443\u043f\u043f\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0439\u00a02", "ad_group.status": "ENABLED", "segments.ad_network_type": "SEARCH", "ad_group_ad.ad_strength": "POOR", "ad_group_ad.ad.type": "RESPONSIVE_SEARCH_AD", "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.all_conversions": 0.0, "ad_group_ad.ad.legacy_responsive_display_ad.allow_flexible_color": false, "ad_group_ad.ad.added_by_google_ads": false, "metrics.average_cost": 197500.0, "metrics.average_cpc": 197500.0, "metrics.average_cpe": 0.0, "metrics.average_cpm": 19750000.0, "metrics.average_cpv": 0.0, "metrics.average_page_views": 0.0, "metrics.average_time_on_site": 0.0, "ad_group.base_ad_group": "customers/4651612872/adGroups/137020701042", "campaign.base_campaign": "customers/4651612872/campaigns/16820250687", "metrics.bounce_rate": 0.0, "ad_group_ad.ad.legacy_responsive_display_ad.business_name": "", "ad_group_ad.ad.legacy_responsive_display_ad.call_to_action_text": "", "campaign.id": 16820250687, "campaign.name": "Website traffic-Search-15", "campaign.status": "PAUSED", "metrics.clicks": 4, "ad_group_ad.policy_summary.approval_status": "APPROVED", "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.conversions": 0.0, "metrics.cost_micros": 790000, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cost_per_current_model_attributed_conversion": 0.0, "ad_group_ad.ad.final_mobile_urls": [], "ad_group_ad.ad.final_urls": ["https://airbyte.com"], "ad_group_ad.ad.tracking_url_template": "", "ad_group_ad.ad.url_custom_parameters": [], "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.1, "metrics.current_model_attributed_conversions_value": 0.0, "metrics.current_model_attributed_conversions": 0.0, "segments.date": "2022-05-18", "segments.day_of_week": "WEDNESDAY", "ad_group_ad.ad.expanded_text_ad.description": "", "ad_group_ad.ad.text_ad.description1": "", "ad_group_ad.ad.text_ad.description2": "", "ad_group_ad.ad.device_preference": "UNSPECIFIED", "ad_group_ad.ad.display_url": "", "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "ad_group_ad.ad.legacy_responsive_display_ad.logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.marketing_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_marketing_image": "", "ad_group_ad.ad.expanded_dynamic_search_ad.description": "", "ad_group_ad.ad.expanded_text_ad.description2": "", "ad_group_ad.ad.expanded_text_ad.headline_part3": "", "customer.id": 4651612872, "ad_group_ad.ad.legacy_responsive_display_ad.format_setting": "UNSPECIFIED", "metrics.gmail_forwards": 0, "metrics.gmail_saves": 0, "metrics.gmail_secondary_clicks": 0, "ad_group_ad.ad.text_ad.headline": "", "ad_group_ad.ad.expanded_text_ad.headline_part1": "", "ad_group_ad.ad.expanded_text_ad.headline_part2": "", "ad_group_ad.ad.id": 592078631218, "ad_group_ad.ad.image_ad.image_url": "", "ad_group_ad.ad.image_ad.pixel_height": 0, "ad_group_ad.ad.image_ad.pixel_width": 0, "ad_group_ad.ad.image_ad.mime_type": "UNSPECIFIED", "ad_group_ad.ad.image_ad.name": "", "metrics.impressions": 40, "metrics.interaction_rate": 0.1, "metrics.interaction_event_types": ["InteractionEventType.CLICK"], "metrics.interactions": 4, "ad_group_ad.ad.legacy_responsive_display_ad.long_headline": "", "ad_group_ad.ad.legacy_responsive_display_ad.main_color": "", "segments.month": "2022-05-01", "ad_group_ad.ad.responsive_display_ad.accent_color": "", "ad_group_ad.ad.responsive_display_ad.allow_flexible_color": false, "ad_group_ad.ad.responsive_display_ad.business_name": "", "ad_group_ad.ad.responsive_display_ad.call_to_action_text": "", "ad_group_ad.ad.responsive_display_ad.descriptions": [], "ad_group_ad.ad.responsive_display_ad.price_prefix": "", "ad_group_ad.ad.responsive_display_ad.promo_text": "", "ad_group_ad.ad.responsive_display_ad.format_setting": "UNSPECIFIED", "ad_group_ad.ad.responsive_display_ad.headlines": [], "ad_group_ad.ad.responsive_display_ad.logo_images": [], "ad_group_ad.ad.responsive_display_ad.square_logo_images": [], "ad_group_ad.ad.responsive_display_ad.long_headline": "", "ad_group_ad.ad.responsive_display_ad.main_color": "", "ad_group_ad.ad.responsive_display_ad.marketing_images": [], "ad_group_ad.ad.responsive_display_ad.square_marketing_images": [], "ad_group_ad.ad.responsive_display_ad.youtube_videos": [], "ad_group_ad.ad.expanded_text_ad.path1": "", "ad_group_ad.ad.expanded_text_ad.path2": "", "metrics.percent_new_visitors": 0.0, "ad_group_ad.ad.legacy_responsive_display_ad.price_prefix": "", "ad_group_ad.ad.legacy_responsive_display_ad.promo_text": "", "segments.quarter": "2022-04-01", "ad_group_ad.ad.responsive_search_ad.descriptions": ["text: \"Behind The Scenes: Testing The Airbyte Maintainer Program\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Airbyte | Open-Source Data Integration Platform | ELT tool\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Upgrading Our Discourse And Slack To Support Our Community Growth\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Consolidate your data in your data warehouses, lakes and databases\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n"], "ad_group_ad.ad.responsive_search_ad.headlines": ["text: \"Airbyte\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"ELT tool\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Open-source Data Integration\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n"], "ad_group_ad.ad.responsive_search_ad.path1": "", "ad_group_ad.ad.responsive_search_ad.path2": "", "ad_group_ad.ad.legacy_responsive_display_ad.short_headline": "", "ad_group_ad.status": "ENABLED", "ad_group_ad.ad.system_managed_resource_source": "UNSPECIFIED", "metrics.top_impression_percentage": 0.75, "ad_group_ad.ad.app_ad.descriptions": [], "ad_group_ad.ad.app_ad.headlines": [], "ad_group_ad.ad.app_ad.html5_media_bundles": [], "ad_group_ad.ad.app_ad.images": [], "ad_group_ad.ad.app_ad.mandatory_ad_text": "", "ad_group_ad.ad.app_ad.youtube_videos": [], "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.value_per_current_model_attributed_conversion": 0.0, "metrics.video_quartile_p100_rate": 0.0, "metrics.video_quartile_p25_rate": 0.0, "metrics.video_quartile_p50_rate": 0.0, "metrics.video_quartile_p75_rate": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0, "segments.week": "2022-05-16", "segments.year": 2022}, "emitted_at": 1695815212036} -{"stream": "ad_group_ad_report", "data": {"ad_group_ad.ad.legacy_responsive_display_ad.accent_color": "", "ad_group.id": 137020701042, "customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "metrics.active_view_cpm": 0.0, "metrics.active_view_ctr": 0.0, "metrics.active_view_impressions": 0, "metrics.active_view_measurability": 0.0, "metrics.active_view_measurable_cost_micros": 0, "metrics.active_view_measurable_impressions": 0, "metrics.active_view_viewability": 0.0, "ad_group_ad.ad_group": "customers/4651612872/adGroups/137020701042", "ad_group.name": "\u0413\u0440\u0443\u043f\u043f\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0439\u00a02", "ad_group.status": "ENABLED", "segments.ad_network_type": "SEARCH_PARTNERS", "ad_group_ad.ad_strength": "POOR", "ad_group_ad.ad.type": "RESPONSIVE_SEARCH_AD", "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.all_conversions": 0.0, "ad_group_ad.ad.legacy_responsive_display_ad.allow_flexible_color": false, "ad_group_ad.ad.added_by_google_ads": false, "metrics.average_cost": 0.0, "metrics.average_cpc": 0.0, "metrics.average_cpe": 0.0, "metrics.average_cpm": 0.0, "metrics.average_cpv": 0.0, "metrics.average_page_views": 0.0, "metrics.average_time_on_site": 0.0, "ad_group.base_ad_group": "customers/4651612872/adGroups/137020701042", "campaign.base_campaign": "customers/4651612872/campaigns/16820250687", "metrics.bounce_rate": 0.0, "ad_group_ad.ad.legacy_responsive_display_ad.business_name": "", "ad_group_ad.ad.legacy_responsive_display_ad.call_to_action_text": "", "campaign.id": 16820250687, "campaign.name": "Website traffic-Search-15", "campaign.status": "PAUSED", "metrics.clicks": 0, "ad_group_ad.policy_summary.approval_status": "APPROVED", "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.conversions": 0.0, "metrics.cost_micros": 0, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cost_per_current_model_attributed_conversion": 0.0, "ad_group_ad.ad.final_mobile_urls": [], "ad_group_ad.ad.final_urls": ["https://airbyte.com"], "ad_group_ad.ad.tracking_url_template": "", "ad_group_ad.ad.url_custom_parameters": [], "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.0, "metrics.current_model_attributed_conversions_value": 0.0, "metrics.current_model_attributed_conversions": 0.0, "segments.date": "2022-05-18", "segments.day_of_week": "WEDNESDAY", "ad_group_ad.ad.expanded_text_ad.description": "", "ad_group_ad.ad.text_ad.description1": "", "ad_group_ad.ad.text_ad.description2": "", "ad_group_ad.ad.device_preference": "UNSPECIFIED", "ad_group_ad.ad.display_url": "", "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "ad_group_ad.ad.legacy_responsive_display_ad.logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.marketing_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_marketing_image": "", "ad_group_ad.ad.expanded_dynamic_search_ad.description": "", "ad_group_ad.ad.expanded_text_ad.description2": "", "ad_group_ad.ad.expanded_text_ad.headline_part3": "", "customer.id": 4651612872, "ad_group_ad.ad.legacy_responsive_display_ad.format_setting": "UNSPECIFIED", "metrics.gmail_forwards": 0, "metrics.gmail_saves": 0, "metrics.gmail_secondary_clicks": 0, "ad_group_ad.ad.text_ad.headline": "", "ad_group_ad.ad.expanded_text_ad.headline_part1": "", "ad_group_ad.ad.expanded_text_ad.headline_part2": "", "ad_group_ad.ad.id": 592078631218, "ad_group_ad.ad.image_ad.image_url": "", "ad_group_ad.ad.image_ad.pixel_height": 0, "ad_group_ad.ad.image_ad.pixel_width": 0, "ad_group_ad.ad.image_ad.mime_type": "UNSPECIFIED", "ad_group_ad.ad.image_ad.name": "", "metrics.impressions": 11, "metrics.interaction_rate": 0.0, "metrics.interaction_event_types": [], "metrics.interactions": 0, "ad_group_ad.ad.legacy_responsive_display_ad.long_headline": "", "ad_group_ad.ad.legacy_responsive_display_ad.main_color": "", "segments.month": "2022-05-01", "ad_group_ad.ad.responsive_display_ad.accent_color": "", "ad_group_ad.ad.responsive_display_ad.allow_flexible_color": false, "ad_group_ad.ad.responsive_display_ad.business_name": "", "ad_group_ad.ad.responsive_display_ad.call_to_action_text": "", "ad_group_ad.ad.responsive_display_ad.descriptions": [], "ad_group_ad.ad.responsive_display_ad.price_prefix": "", "ad_group_ad.ad.responsive_display_ad.promo_text": "", "ad_group_ad.ad.responsive_display_ad.format_setting": "UNSPECIFIED", "ad_group_ad.ad.responsive_display_ad.headlines": [], "ad_group_ad.ad.responsive_display_ad.logo_images": [], "ad_group_ad.ad.responsive_display_ad.square_logo_images": [], "ad_group_ad.ad.responsive_display_ad.long_headline": "", "ad_group_ad.ad.responsive_display_ad.main_color": "", "ad_group_ad.ad.responsive_display_ad.marketing_images": [], "ad_group_ad.ad.responsive_display_ad.square_marketing_images": [], "ad_group_ad.ad.responsive_display_ad.youtube_videos": [], "ad_group_ad.ad.expanded_text_ad.path1": "", "ad_group_ad.ad.expanded_text_ad.path2": "", "metrics.percent_new_visitors": 0.0, "ad_group_ad.ad.legacy_responsive_display_ad.price_prefix": "", "ad_group_ad.ad.legacy_responsive_display_ad.promo_text": "", "segments.quarter": "2022-04-01", "ad_group_ad.ad.responsive_search_ad.descriptions": ["text: \"Behind The Scenes: Testing The Airbyte Maintainer Program\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Airbyte | Open-Source Data Integration Platform | ELT tool\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Upgrading Our Discourse And Slack To Support Our Community Growth\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Consolidate your data in your data warehouses, lakes and databases\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n"], "ad_group_ad.ad.responsive_search_ad.headlines": ["text: \"Airbyte\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"ELT tool\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Open-source Data Integration\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n"], "ad_group_ad.ad.responsive_search_ad.path1": "", "ad_group_ad.ad.responsive_search_ad.path2": "", "ad_group_ad.ad.legacy_responsive_display_ad.short_headline": "", "ad_group_ad.status": "ENABLED", "ad_group_ad.ad.system_managed_resource_source": "UNSPECIFIED", "metrics.top_impression_percentage": 0.0, "ad_group_ad.ad.app_ad.descriptions": [], "ad_group_ad.ad.app_ad.headlines": [], "ad_group_ad.ad.app_ad.html5_media_bundles": [], "ad_group_ad.ad.app_ad.images": [], "ad_group_ad.ad.app_ad.mandatory_ad_text": "", "ad_group_ad.ad.app_ad.youtube_videos": [], "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.value_per_current_model_attributed_conversion": 0.0, "metrics.video_quartile_p100_rate": 0.0, "metrics.video_quartile_p25_rate": 0.0, "metrics.video_quartile_p50_rate": 0.0, "metrics.video_quartile_p75_rate": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0, "segments.week": "2022-05-16", "segments.year": 2022}, "emitted_at": 1695815212039} -{"stream": "ad_group_ad_report", "data": {"ad_group_ad.ad.legacy_responsive_display_ad.accent_color": "", "ad_group.id": 137020701042, "customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "metrics.active_view_cpm": 0.0, "metrics.active_view_ctr": 0.0, "metrics.active_view_impressions": 0, "metrics.active_view_measurability": 0.0, "metrics.active_view_measurable_cost_micros": 0, "metrics.active_view_measurable_impressions": 0, "metrics.active_view_viewability": 0.0, "ad_group_ad.ad_group": "customers/4651612872/adGroups/137020701042", "ad_group.name": "\u0413\u0440\u0443\u043f\u043f\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0439\u00a02", "ad_group.status": "ENABLED", "segments.ad_network_type": "SEARCH", "ad_group_ad.ad_strength": "POOR", "ad_group_ad.ad.type": "RESPONSIVE_SEARCH_AD", "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.all_conversions": 0.0, "ad_group_ad.ad.legacy_responsive_display_ad.allow_flexible_color": false, "ad_group_ad.ad.added_by_google_ads": false, "metrics.average_cost": 143333.33333333334, "metrics.average_cpc": 143333.33333333334, "metrics.average_cpe": 0.0, "metrics.average_cpm": 37391304.347826086, "metrics.average_cpv": 0.0, "metrics.average_page_views": 0.0, "metrics.average_time_on_site": 0.0, "ad_group.base_ad_group": "customers/4651612872/adGroups/137020701042", "campaign.base_campaign": "customers/4651612872/campaigns/16820250687", "metrics.bounce_rate": 0.0, "ad_group_ad.ad.legacy_responsive_display_ad.business_name": "", "ad_group_ad.ad.legacy_responsive_display_ad.call_to_action_text": "", "campaign.id": 16820250687, "campaign.name": "Website traffic-Search-15", "campaign.status": "PAUSED", "metrics.clicks": 6, "ad_group_ad.policy_summary.approval_status": "APPROVED", "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.conversions": 0.0, "metrics.cost_micros": 860000, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cost_per_current_model_attributed_conversion": 0.0, "ad_group_ad.ad.final_mobile_urls": [], "ad_group_ad.ad.final_urls": ["https://airbyte.com"], "ad_group_ad.ad.tracking_url_template": "", "ad_group_ad.ad.url_custom_parameters": [], "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.2608695652173913, "metrics.current_model_attributed_conversions_value": 0.0, "metrics.current_model_attributed_conversions": 0.0, "segments.date": "2022-05-19", "segments.day_of_week": "THURSDAY", "ad_group_ad.ad.expanded_text_ad.description": "", "ad_group_ad.ad.text_ad.description1": "", "ad_group_ad.ad.text_ad.description2": "", "ad_group_ad.ad.device_preference": "UNSPECIFIED", "ad_group_ad.ad.display_url": "", "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "ad_group_ad.ad.legacy_responsive_display_ad.logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.marketing_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_marketing_image": "", "ad_group_ad.ad.expanded_dynamic_search_ad.description": "", "ad_group_ad.ad.expanded_text_ad.description2": "", "ad_group_ad.ad.expanded_text_ad.headline_part3": "", "customer.id": 4651612872, "ad_group_ad.ad.legacy_responsive_display_ad.format_setting": "UNSPECIFIED", "metrics.gmail_forwards": 0, "metrics.gmail_saves": 0, "metrics.gmail_secondary_clicks": 0, "ad_group_ad.ad.text_ad.headline": "", "ad_group_ad.ad.expanded_text_ad.headline_part1": "", "ad_group_ad.ad.expanded_text_ad.headline_part2": "", "ad_group_ad.ad.id": 592078631218, "ad_group_ad.ad.image_ad.image_url": "", "ad_group_ad.ad.image_ad.pixel_height": 0, "ad_group_ad.ad.image_ad.pixel_width": 0, "ad_group_ad.ad.image_ad.mime_type": "UNSPECIFIED", "ad_group_ad.ad.image_ad.name": "", "metrics.impressions": 23, "metrics.interaction_rate": 0.2608695652173913, "metrics.interaction_event_types": ["InteractionEventType.CLICK"], "metrics.interactions": 6, "ad_group_ad.ad.legacy_responsive_display_ad.long_headline": "", "ad_group_ad.ad.legacy_responsive_display_ad.main_color": "", "segments.month": "2022-05-01", "ad_group_ad.ad.responsive_display_ad.accent_color": "", "ad_group_ad.ad.responsive_display_ad.allow_flexible_color": false, "ad_group_ad.ad.responsive_display_ad.business_name": "", "ad_group_ad.ad.responsive_display_ad.call_to_action_text": "", "ad_group_ad.ad.responsive_display_ad.descriptions": [], "ad_group_ad.ad.responsive_display_ad.price_prefix": "", "ad_group_ad.ad.responsive_display_ad.promo_text": "", "ad_group_ad.ad.responsive_display_ad.format_setting": "UNSPECIFIED", "ad_group_ad.ad.responsive_display_ad.headlines": [], "ad_group_ad.ad.responsive_display_ad.logo_images": [], "ad_group_ad.ad.responsive_display_ad.square_logo_images": [], "ad_group_ad.ad.responsive_display_ad.long_headline": "", "ad_group_ad.ad.responsive_display_ad.main_color": "", "ad_group_ad.ad.responsive_display_ad.marketing_images": [], "ad_group_ad.ad.responsive_display_ad.square_marketing_images": [], "ad_group_ad.ad.responsive_display_ad.youtube_videos": [], "ad_group_ad.ad.expanded_text_ad.path1": "", "ad_group_ad.ad.expanded_text_ad.path2": "", "metrics.percent_new_visitors": 0.0, "ad_group_ad.ad.legacy_responsive_display_ad.price_prefix": "", "ad_group_ad.ad.legacy_responsive_display_ad.promo_text": "", "segments.quarter": "2022-04-01", "ad_group_ad.ad.responsive_search_ad.descriptions": ["text: \"Behind The Scenes: Testing The Airbyte Maintainer Program\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Airbyte | Open-Source Data Integration Platform | ELT tool\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Upgrading Our Discourse And Slack To Support Our Community Growth\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Consolidate your data in your data warehouses, lakes and databases\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n"], "ad_group_ad.ad.responsive_search_ad.headlines": ["text: \"Airbyte\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"ELT tool\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Open-source Data Integration\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n"], "ad_group_ad.ad.responsive_search_ad.path1": "", "ad_group_ad.ad.responsive_search_ad.path2": "", "ad_group_ad.ad.legacy_responsive_display_ad.short_headline": "", "ad_group_ad.status": "ENABLED", "ad_group_ad.ad.system_managed_resource_source": "UNSPECIFIED", "metrics.top_impression_percentage": 0.7391304347826086, "ad_group_ad.ad.app_ad.descriptions": [], "ad_group_ad.ad.app_ad.headlines": [], "ad_group_ad.ad.app_ad.html5_media_bundles": [], "ad_group_ad.ad.app_ad.images": [], "ad_group_ad.ad.app_ad.mandatory_ad_text": "", "ad_group_ad.ad.app_ad.youtube_videos": [], "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.value_per_current_model_attributed_conversion": 0.0, "metrics.video_quartile_p100_rate": 0.0, "metrics.video_quartile_p25_rate": 0.0, "metrics.video_quartile_p50_rate": 0.0, "metrics.video_quartile_p75_rate": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0, "segments.week": "2022-05-16", "segments.year": 2022}, "emitted_at": 1695815212043} -{"stream": "ad_group_ads", "data": {"ad_group.id": 137020701042, "ad_group_ad.ad.added_by_google_ads": false, "ad_group_ad.ad.app_ad.descriptions": [], "ad_group_ad.ad.app_ad.headlines": [], "ad_group_ad.ad.app_ad.html5_media_bundles": [], "ad_group_ad.ad.app_ad.images": [], "ad_group_ad.ad.app_ad.mandatory_ad_text": "", "ad_group_ad.ad.app_ad.youtube_videos": [], "ad_group_ad.ad.app_engagement_ad.descriptions": [], "ad_group_ad.ad.app_engagement_ad.headlines": [], "ad_group_ad.ad.app_engagement_ad.images": [], "ad_group_ad.ad.app_engagement_ad.videos": [], "ad_group_ad.ad.call_ad.business_name": "", "ad_group_ad.ad.call_ad.call_tracked": false, "ad_group_ad.ad.call_ad.conversion_action": "", "ad_group_ad.ad.call_ad.conversion_reporting_state": "UNSPECIFIED", "ad_group_ad.ad.call_ad.country_code": "", "ad_group_ad.ad.call_ad.description1": "", "ad_group_ad.ad.call_ad.description2": "", "ad_group_ad.ad.call_ad.disable_call_conversion": false, "ad_group_ad.ad.call_ad.headline1": "", "ad_group_ad.ad.call_ad.headline2": "", "ad_group_ad.ad.call_ad.path1": "", "ad_group_ad.ad.call_ad.path2": "", "ad_group_ad.ad.call_ad.phone_number": "", "ad_group_ad.ad.call_ad.phone_number_verification_url": "", "ad_group_ad.ad.device_preference": "UNSPECIFIED", "ad_group_ad.ad.display_upload_ad.display_upload_product_type": "UNSPECIFIED", "ad_group_ad.ad.display_upload_ad.media_bundle": "", "ad_group_ad.ad.display_url": "", "ad_group_ad.ad.expanded_dynamic_search_ad.description": "", "ad_group_ad.ad.expanded_dynamic_search_ad.description2": "", "ad_group_ad.ad.expanded_text_ad.description": "", "ad_group_ad.ad.expanded_text_ad.description2": "", "ad_group_ad.ad.expanded_text_ad.headline_part1": "", "ad_group_ad.ad.expanded_text_ad.headline_part2": "", "ad_group_ad.ad.expanded_text_ad.headline_part3": "", "ad_group_ad.ad.expanded_text_ad.path1": "", "ad_group_ad.ad.expanded_text_ad.path2": "", "ad_group_ad.ad.final_app_urls": [], "ad_group_ad.ad.final_mobile_urls": [], "ad_group_ad.ad.final_url_suffix": "", "ad_group_ad.ad.final_urls": ["https://airbyte.com"], "ad_group_ad.ad.hotel_ad": "", "ad_group_ad.ad.id": 592078631218, "ad_group_ad.ad.image_ad.image_url": "", "ad_group_ad.ad.image_ad.mime_type": "UNSPECIFIED", "ad_group_ad.ad.image_ad.name": "", "ad_group_ad.ad.image_ad.pixel_height": 0, "ad_group_ad.ad.image_ad.pixel_width": 0, "ad_group_ad.ad.image_ad.preview_image_url": "", "ad_group_ad.ad.image_ad.preview_pixel_height": 0, "ad_group_ad.ad.image_ad.preview_pixel_width": 0, "ad_group_ad.ad.legacy_app_install_ad": "", "ad_group_ad.ad.legacy_responsive_display_ad.accent_color": "", "ad_group_ad.ad.legacy_responsive_display_ad.allow_flexible_color": false, "ad_group_ad.ad.legacy_responsive_display_ad.business_name": "", "ad_group_ad.ad.legacy_responsive_display_ad.call_to_action_text": "", "ad_group_ad.ad.legacy_responsive_display_ad.description": "", "ad_group_ad.ad.legacy_responsive_display_ad.format_setting": "UNSPECIFIED", "ad_group_ad.ad.legacy_responsive_display_ad.logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.long_headline": "", "ad_group_ad.ad.legacy_responsive_display_ad.main_color": "", "ad_group_ad.ad.legacy_responsive_display_ad.marketing_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.price_prefix": "", "ad_group_ad.ad.legacy_responsive_display_ad.promo_text": "", "ad_group_ad.ad.legacy_responsive_display_ad.short_headline": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_marketing_image": "", "ad_group_ad.ad.local_ad.call_to_actions": [], "ad_group_ad.ad.local_ad.descriptions": [], "ad_group_ad.ad.local_ad.headlines": [], "ad_group_ad.ad.local_ad.logo_images": [], "ad_group_ad.ad.local_ad.marketing_images": [], "ad_group_ad.ad.local_ad.path1": "", "ad_group_ad.ad.local_ad.path2": "", "ad_group_ad.ad.local_ad.videos": [], "ad_group_ad.ad.name": "", "ad_group_ad.ad.resource_name": "customers/4651612872/ads/592078631218", "ad_group_ad.ad.responsive_display_ad.accent_color": "", "ad_group_ad.ad.responsive_display_ad.allow_flexible_color": false, "ad_group_ad.ad.responsive_display_ad.business_name": "", "ad_group_ad.ad.responsive_display_ad.call_to_action_text": "", "ad_group_ad.ad.responsive_display_ad.control_spec.enable_asset_enhancements": false, "ad_group_ad.ad.responsive_display_ad.control_spec.enable_autogen_video": false, "ad_group_ad.ad.responsive_display_ad.descriptions": [], "ad_group_ad.ad.responsive_display_ad.format_setting": "UNSPECIFIED", "ad_group_ad.ad.responsive_display_ad.headlines": [], "ad_group_ad.ad.responsive_display_ad.logo_images": [], "ad_group_ad.ad.responsive_display_ad.long_headline": "", "ad_group_ad.ad.responsive_display_ad.main_color": "", "ad_group_ad.ad.responsive_display_ad.marketing_images": [], "ad_group_ad.ad.responsive_display_ad.price_prefix": "", "ad_group_ad.ad.responsive_display_ad.promo_text": "", "ad_group_ad.ad.responsive_display_ad.square_logo_images": [], "ad_group_ad.ad.responsive_display_ad.square_marketing_images": [], "ad_group_ad.ad.responsive_display_ad.youtube_videos": [], "ad_group_ad.ad.responsive_search_ad.descriptions": ["text: \"Behind The Scenes: Testing The Airbyte Maintainer Program\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Airbyte | Open-Source Data Integration Platform | ELT tool\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Upgrading Our Discourse And Slack To Support Our Community Growth\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Consolidate your data in your data warehouses, lakes and databases\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n"], "ad_group_ad.ad.responsive_search_ad.headlines": ["text: \"Airbyte\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"ELT tool\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Open-source Data Integration\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n"], "ad_group_ad.ad.responsive_search_ad.path1": "", "ad_group_ad.ad.responsive_search_ad.path2": "", "ad_group_ad.ad.shopping_comparison_listing_ad.headline": "", "ad_group_ad.ad.shopping_product_ad": "", "ad_group_ad.ad.shopping_smart_ad": "", "ad_group_ad.ad.smart_campaign_ad.descriptions": [], "ad_group_ad.ad.smart_campaign_ad.headlines": [], "ad_group_ad.ad.system_managed_resource_source": "UNSPECIFIED", "ad_group_ad.ad.text_ad.description1": "", "ad_group_ad.ad.text_ad.description2": "", "ad_group_ad.ad.text_ad.headline": "", "ad_group_ad.ad.tracking_url_template": "", "ad_group_ad.ad.type": "RESPONSIVE_SEARCH_AD", "ad_group_ad.ad.url_collections": [], "ad_group_ad.ad.url_custom_parameters": [], "ad_group_ad.ad.video_ad.in_feed.description1": "", "ad_group_ad.ad.video_ad.in_feed.description2": "", "ad_group_ad.ad.video_ad.in_feed.headline": "", "ad_group_ad.ad.video_ad.in_stream.action_button_label": "", "ad_group_ad.ad.video_ad.in_stream.action_headline": "", "ad_group_ad.ad.video_ad.out_stream.description": "", "ad_group_ad.ad.video_ad.out_stream.headline": "", "ad_group_ad.ad.video_responsive_ad.call_to_actions": [], "ad_group_ad.ad.video_responsive_ad.companion_banners": [], "ad_group_ad.ad.video_responsive_ad.descriptions": [], "ad_group_ad.ad.video_responsive_ad.headlines": [], "ad_group_ad.ad.video_responsive_ad.long_headlines": [], "ad_group_ad.ad.video_responsive_ad.videos": [], "ad_group_ad.ad_group": "customers/4651612872/adGroups/137020701042", "ad_group_ad.ad_strength": "POOR", "ad_group_ad.labels": ["customers/4651612872/labels/21906377810"], "ad_group_ad.policy_summary.approval_status": "APPROVED", "ad_group_ad.policy_summary.policy_topic_entries": [], "ad_group_ad.policy_summary.review_status": "REVIEWED", "ad_group_ad.resource_name": "customers/4651612872/adGroupAds/137020701042~592078631218", "ad_group_ad.status": "ENABLED", "segments.date": "2022-05-18"}, "emitted_at": 1695815231343} -{"stream": "ad_group_ads", "data": {"ad_group.id": 137020701042, "ad_group_ad.ad.added_by_google_ads": false, "ad_group_ad.ad.app_ad.descriptions": [], "ad_group_ad.ad.app_ad.headlines": [], "ad_group_ad.ad.app_ad.html5_media_bundles": [], "ad_group_ad.ad.app_ad.images": [], "ad_group_ad.ad.app_ad.mandatory_ad_text": "", "ad_group_ad.ad.app_ad.youtube_videos": [], "ad_group_ad.ad.app_engagement_ad.descriptions": [], "ad_group_ad.ad.app_engagement_ad.headlines": [], "ad_group_ad.ad.app_engagement_ad.images": [], "ad_group_ad.ad.app_engagement_ad.videos": [], "ad_group_ad.ad.call_ad.business_name": "", "ad_group_ad.ad.call_ad.call_tracked": false, "ad_group_ad.ad.call_ad.conversion_action": "", "ad_group_ad.ad.call_ad.conversion_reporting_state": "UNSPECIFIED", "ad_group_ad.ad.call_ad.country_code": "", "ad_group_ad.ad.call_ad.description1": "", "ad_group_ad.ad.call_ad.description2": "", "ad_group_ad.ad.call_ad.disable_call_conversion": false, "ad_group_ad.ad.call_ad.headline1": "", "ad_group_ad.ad.call_ad.headline2": "", "ad_group_ad.ad.call_ad.path1": "", "ad_group_ad.ad.call_ad.path2": "", "ad_group_ad.ad.call_ad.phone_number": "", "ad_group_ad.ad.call_ad.phone_number_verification_url": "", "ad_group_ad.ad.device_preference": "UNSPECIFIED", "ad_group_ad.ad.display_upload_ad.display_upload_product_type": "UNSPECIFIED", "ad_group_ad.ad.display_upload_ad.media_bundle": "", "ad_group_ad.ad.display_url": "", "ad_group_ad.ad.expanded_dynamic_search_ad.description": "", "ad_group_ad.ad.expanded_dynamic_search_ad.description2": "", "ad_group_ad.ad.expanded_text_ad.description": "", "ad_group_ad.ad.expanded_text_ad.description2": "", "ad_group_ad.ad.expanded_text_ad.headline_part1": "", "ad_group_ad.ad.expanded_text_ad.headline_part2": "", "ad_group_ad.ad.expanded_text_ad.headline_part3": "", "ad_group_ad.ad.expanded_text_ad.path1": "", "ad_group_ad.ad.expanded_text_ad.path2": "", "ad_group_ad.ad.final_app_urls": [], "ad_group_ad.ad.final_mobile_urls": [], "ad_group_ad.ad.final_url_suffix": "", "ad_group_ad.ad.final_urls": ["https://airbyte.com"], "ad_group_ad.ad.hotel_ad": "", "ad_group_ad.ad.id": 592078631218, "ad_group_ad.ad.image_ad.image_url": "", "ad_group_ad.ad.image_ad.mime_type": "UNSPECIFIED", "ad_group_ad.ad.image_ad.name": "", "ad_group_ad.ad.image_ad.pixel_height": 0, "ad_group_ad.ad.image_ad.pixel_width": 0, "ad_group_ad.ad.image_ad.preview_image_url": "", "ad_group_ad.ad.image_ad.preview_pixel_height": 0, "ad_group_ad.ad.image_ad.preview_pixel_width": 0, "ad_group_ad.ad.legacy_app_install_ad": "", "ad_group_ad.ad.legacy_responsive_display_ad.accent_color": "", "ad_group_ad.ad.legacy_responsive_display_ad.allow_flexible_color": false, "ad_group_ad.ad.legacy_responsive_display_ad.business_name": "", "ad_group_ad.ad.legacy_responsive_display_ad.call_to_action_text": "", "ad_group_ad.ad.legacy_responsive_display_ad.description": "", "ad_group_ad.ad.legacy_responsive_display_ad.format_setting": "UNSPECIFIED", "ad_group_ad.ad.legacy_responsive_display_ad.logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.long_headline": "", "ad_group_ad.ad.legacy_responsive_display_ad.main_color": "", "ad_group_ad.ad.legacy_responsive_display_ad.marketing_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.price_prefix": "", "ad_group_ad.ad.legacy_responsive_display_ad.promo_text": "", "ad_group_ad.ad.legacy_responsive_display_ad.short_headline": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_marketing_image": "", "ad_group_ad.ad.local_ad.call_to_actions": [], "ad_group_ad.ad.local_ad.descriptions": [], "ad_group_ad.ad.local_ad.headlines": [], "ad_group_ad.ad.local_ad.logo_images": [], "ad_group_ad.ad.local_ad.marketing_images": [], "ad_group_ad.ad.local_ad.path1": "", "ad_group_ad.ad.local_ad.path2": "", "ad_group_ad.ad.local_ad.videos": [], "ad_group_ad.ad.name": "", "ad_group_ad.ad.resource_name": "customers/4651612872/ads/592078631218", "ad_group_ad.ad.responsive_display_ad.accent_color": "", "ad_group_ad.ad.responsive_display_ad.allow_flexible_color": false, "ad_group_ad.ad.responsive_display_ad.business_name": "", "ad_group_ad.ad.responsive_display_ad.call_to_action_text": "", "ad_group_ad.ad.responsive_display_ad.control_spec.enable_asset_enhancements": false, "ad_group_ad.ad.responsive_display_ad.control_spec.enable_autogen_video": false, "ad_group_ad.ad.responsive_display_ad.descriptions": [], "ad_group_ad.ad.responsive_display_ad.format_setting": "UNSPECIFIED", "ad_group_ad.ad.responsive_display_ad.headlines": [], "ad_group_ad.ad.responsive_display_ad.logo_images": [], "ad_group_ad.ad.responsive_display_ad.long_headline": "", "ad_group_ad.ad.responsive_display_ad.main_color": "", "ad_group_ad.ad.responsive_display_ad.marketing_images": [], "ad_group_ad.ad.responsive_display_ad.price_prefix": "", "ad_group_ad.ad.responsive_display_ad.promo_text": "", "ad_group_ad.ad.responsive_display_ad.square_logo_images": [], "ad_group_ad.ad.responsive_display_ad.square_marketing_images": [], "ad_group_ad.ad.responsive_display_ad.youtube_videos": [], "ad_group_ad.ad.responsive_search_ad.descriptions": ["text: \"Behind The Scenes: Testing The Airbyte Maintainer Program\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Airbyte | Open-Source Data Integration Platform | ELT tool\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Upgrading Our Discourse And Slack To Support Our Community Growth\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Consolidate your data in your data warehouses, lakes and databases\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n"], "ad_group_ad.ad.responsive_search_ad.headlines": ["text: \"Airbyte\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"ELT tool\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Open-source Data Integration\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n"], "ad_group_ad.ad.responsive_search_ad.path1": "", "ad_group_ad.ad.responsive_search_ad.path2": "", "ad_group_ad.ad.shopping_comparison_listing_ad.headline": "", "ad_group_ad.ad.shopping_product_ad": "", "ad_group_ad.ad.shopping_smart_ad": "", "ad_group_ad.ad.smart_campaign_ad.descriptions": [], "ad_group_ad.ad.smart_campaign_ad.headlines": [], "ad_group_ad.ad.system_managed_resource_source": "UNSPECIFIED", "ad_group_ad.ad.text_ad.description1": "", "ad_group_ad.ad.text_ad.description2": "", "ad_group_ad.ad.text_ad.headline": "", "ad_group_ad.ad.tracking_url_template": "", "ad_group_ad.ad.type": "RESPONSIVE_SEARCH_AD", "ad_group_ad.ad.url_collections": [], "ad_group_ad.ad.url_custom_parameters": [], "ad_group_ad.ad.video_ad.in_feed.description1": "", "ad_group_ad.ad.video_ad.in_feed.description2": "", "ad_group_ad.ad.video_ad.in_feed.headline": "", "ad_group_ad.ad.video_ad.in_stream.action_button_label": "", "ad_group_ad.ad.video_ad.in_stream.action_headline": "", "ad_group_ad.ad.video_ad.out_stream.description": "", "ad_group_ad.ad.video_ad.out_stream.headline": "", "ad_group_ad.ad.video_responsive_ad.call_to_actions": [], "ad_group_ad.ad.video_responsive_ad.companion_banners": [], "ad_group_ad.ad.video_responsive_ad.descriptions": [], "ad_group_ad.ad.video_responsive_ad.headlines": [], "ad_group_ad.ad.video_responsive_ad.long_headlines": [], "ad_group_ad.ad.video_responsive_ad.videos": [], "ad_group_ad.ad_group": "customers/4651612872/adGroups/137020701042", "ad_group_ad.ad_strength": "POOR", "ad_group_ad.labels": ["customers/4651612872/labels/21906377810"], "ad_group_ad.policy_summary.approval_status": "APPROVED", "ad_group_ad.policy_summary.policy_topic_entries": [], "ad_group_ad.policy_summary.review_status": "REVIEWED", "ad_group_ad.resource_name": "customers/4651612872/adGroupAds/137020701042~592078631218", "ad_group_ad.status": "ENABLED", "segments.date": "2022-05-19"}, "emitted_at": 1695815231348} -{"stream": "ad_group_ads", "data": {"ad_group.id": 137020701042, "ad_group_ad.ad.added_by_google_ads": false, "ad_group_ad.ad.app_ad.descriptions": [], "ad_group_ad.ad.app_ad.headlines": [], "ad_group_ad.ad.app_ad.html5_media_bundles": [], "ad_group_ad.ad.app_ad.images": [], "ad_group_ad.ad.app_ad.mandatory_ad_text": "", "ad_group_ad.ad.app_ad.youtube_videos": [], "ad_group_ad.ad.app_engagement_ad.descriptions": [], "ad_group_ad.ad.app_engagement_ad.headlines": [], "ad_group_ad.ad.app_engagement_ad.images": [], "ad_group_ad.ad.app_engagement_ad.videos": [], "ad_group_ad.ad.call_ad.business_name": "", "ad_group_ad.ad.call_ad.call_tracked": false, "ad_group_ad.ad.call_ad.conversion_action": "", "ad_group_ad.ad.call_ad.conversion_reporting_state": "UNSPECIFIED", "ad_group_ad.ad.call_ad.country_code": "", "ad_group_ad.ad.call_ad.description1": "", "ad_group_ad.ad.call_ad.description2": "", "ad_group_ad.ad.call_ad.disable_call_conversion": false, "ad_group_ad.ad.call_ad.headline1": "", "ad_group_ad.ad.call_ad.headline2": "", "ad_group_ad.ad.call_ad.path1": "", "ad_group_ad.ad.call_ad.path2": "", "ad_group_ad.ad.call_ad.phone_number": "", "ad_group_ad.ad.call_ad.phone_number_verification_url": "", "ad_group_ad.ad.device_preference": "UNSPECIFIED", "ad_group_ad.ad.display_upload_ad.display_upload_product_type": "UNSPECIFIED", "ad_group_ad.ad.display_upload_ad.media_bundle": "", "ad_group_ad.ad.display_url": "", "ad_group_ad.ad.expanded_dynamic_search_ad.description": "", "ad_group_ad.ad.expanded_dynamic_search_ad.description2": "", "ad_group_ad.ad.expanded_text_ad.description": "", "ad_group_ad.ad.expanded_text_ad.description2": "", "ad_group_ad.ad.expanded_text_ad.headline_part1": "", "ad_group_ad.ad.expanded_text_ad.headline_part2": "", "ad_group_ad.ad.expanded_text_ad.headline_part3": "", "ad_group_ad.ad.expanded_text_ad.path1": "", "ad_group_ad.ad.expanded_text_ad.path2": "", "ad_group_ad.ad.final_app_urls": [], "ad_group_ad.ad.final_mobile_urls": [], "ad_group_ad.ad.final_url_suffix": "", "ad_group_ad.ad.final_urls": ["https://airbyte.com"], "ad_group_ad.ad.hotel_ad": "", "ad_group_ad.ad.id": 592078631218, "ad_group_ad.ad.image_ad.image_url": "", "ad_group_ad.ad.image_ad.mime_type": "UNSPECIFIED", "ad_group_ad.ad.image_ad.name": "", "ad_group_ad.ad.image_ad.pixel_height": 0, "ad_group_ad.ad.image_ad.pixel_width": 0, "ad_group_ad.ad.image_ad.preview_image_url": "", "ad_group_ad.ad.image_ad.preview_pixel_height": 0, "ad_group_ad.ad.image_ad.preview_pixel_width": 0, "ad_group_ad.ad.legacy_app_install_ad": "", "ad_group_ad.ad.legacy_responsive_display_ad.accent_color": "", "ad_group_ad.ad.legacy_responsive_display_ad.allow_flexible_color": false, "ad_group_ad.ad.legacy_responsive_display_ad.business_name": "", "ad_group_ad.ad.legacy_responsive_display_ad.call_to_action_text": "", "ad_group_ad.ad.legacy_responsive_display_ad.description": "", "ad_group_ad.ad.legacy_responsive_display_ad.format_setting": "UNSPECIFIED", "ad_group_ad.ad.legacy_responsive_display_ad.logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.long_headline": "", "ad_group_ad.ad.legacy_responsive_display_ad.main_color": "", "ad_group_ad.ad.legacy_responsive_display_ad.marketing_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.price_prefix": "", "ad_group_ad.ad.legacy_responsive_display_ad.promo_text": "", "ad_group_ad.ad.legacy_responsive_display_ad.short_headline": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_marketing_image": "", "ad_group_ad.ad.local_ad.call_to_actions": [], "ad_group_ad.ad.local_ad.descriptions": [], "ad_group_ad.ad.local_ad.headlines": [], "ad_group_ad.ad.local_ad.logo_images": [], "ad_group_ad.ad.local_ad.marketing_images": [], "ad_group_ad.ad.local_ad.path1": "", "ad_group_ad.ad.local_ad.path2": "", "ad_group_ad.ad.local_ad.videos": [], "ad_group_ad.ad.name": "", "ad_group_ad.ad.resource_name": "customers/4651612872/ads/592078631218", "ad_group_ad.ad.responsive_display_ad.accent_color": "", "ad_group_ad.ad.responsive_display_ad.allow_flexible_color": false, "ad_group_ad.ad.responsive_display_ad.business_name": "", "ad_group_ad.ad.responsive_display_ad.call_to_action_text": "", "ad_group_ad.ad.responsive_display_ad.control_spec.enable_asset_enhancements": false, "ad_group_ad.ad.responsive_display_ad.control_spec.enable_autogen_video": false, "ad_group_ad.ad.responsive_display_ad.descriptions": [], "ad_group_ad.ad.responsive_display_ad.format_setting": "UNSPECIFIED", "ad_group_ad.ad.responsive_display_ad.headlines": [], "ad_group_ad.ad.responsive_display_ad.logo_images": [], "ad_group_ad.ad.responsive_display_ad.long_headline": "", "ad_group_ad.ad.responsive_display_ad.main_color": "", "ad_group_ad.ad.responsive_display_ad.marketing_images": [], "ad_group_ad.ad.responsive_display_ad.price_prefix": "", "ad_group_ad.ad.responsive_display_ad.promo_text": "", "ad_group_ad.ad.responsive_display_ad.square_logo_images": [], "ad_group_ad.ad.responsive_display_ad.square_marketing_images": [], "ad_group_ad.ad.responsive_display_ad.youtube_videos": [], "ad_group_ad.ad.responsive_search_ad.descriptions": ["text: \"Behind The Scenes: Testing The Airbyte Maintainer Program\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Airbyte | Open-Source Data Integration Platform | ELT tool\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Upgrading Our Discourse And Slack To Support Our Community Growth\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Consolidate your data in your data warehouses, lakes and databases\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n"], "ad_group_ad.ad.responsive_search_ad.headlines": ["text: \"Airbyte\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"ELT tool\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Open-source Data Integration\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n"], "ad_group_ad.ad.responsive_search_ad.path1": "", "ad_group_ad.ad.responsive_search_ad.path2": "", "ad_group_ad.ad.shopping_comparison_listing_ad.headline": "", "ad_group_ad.ad.shopping_product_ad": "", "ad_group_ad.ad.shopping_smart_ad": "", "ad_group_ad.ad.smart_campaign_ad.descriptions": [], "ad_group_ad.ad.smart_campaign_ad.headlines": [], "ad_group_ad.ad.system_managed_resource_source": "UNSPECIFIED", "ad_group_ad.ad.text_ad.description1": "", "ad_group_ad.ad.text_ad.description2": "", "ad_group_ad.ad.text_ad.headline": "", "ad_group_ad.ad.tracking_url_template": "", "ad_group_ad.ad.type": "RESPONSIVE_SEARCH_AD", "ad_group_ad.ad.url_collections": [], "ad_group_ad.ad.url_custom_parameters": [], "ad_group_ad.ad.video_ad.in_feed.description1": "", "ad_group_ad.ad.video_ad.in_feed.description2": "", "ad_group_ad.ad.video_ad.in_feed.headline": "", "ad_group_ad.ad.video_ad.in_stream.action_button_label": "", "ad_group_ad.ad.video_ad.in_stream.action_headline": "", "ad_group_ad.ad.video_ad.out_stream.description": "", "ad_group_ad.ad.video_ad.out_stream.headline": "", "ad_group_ad.ad.video_responsive_ad.call_to_actions": [], "ad_group_ad.ad.video_responsive_ad.companion_banners": [], "ad_group_ad.ad.video_responsive_ad.descriptions": [], "ad_group_ad.ad.video_responsive_ad.headlines": [], "ad_group_ad.ad.video_responsive_ad.long_headlines": [], "ad_group_ad.ad.video_responsive_ad.videos": [], "ad_group_ad.ad_group": "customers/4651612872/adGroups/137020701042", "ad_group_ad.ad_strength": "POOR", "ad_group_ad.labels": ["customers/4651612872/labels/21906377810"], "ad_group_ad.policy_summary.approval_status": "APPROVED", "ad_group_ad.policy_summary.policy_topic_entries": [], "ad_group_ad.policy_summary.review_status": "REVIEWED", "ad_group_ad.resource_name": "customers/4651612872/adGroupAds/137020701042~592078631218", "ad_group_ad.status": "ENABLED", "segments.date": "2022-05-20"}, "emitted_at": 1695815231352} -{"stream": "ad_group_bidding_strategies", "data": {"ad_group.id": 137020701042, "bidding_strategy.aligned_campaign_budget_id": 0, "bidding_strategy.campaign_count": 0, "bidding_strategy.currency_code": "", "bidding_strategy.effective_currency_code": "", "bidding_strategy.enhanced_cpc": "", "bidding_strategy.id": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversion_value.target_roas": 0.0, "bidding_strategy.maximize_conversions.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversions.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversions.target_cpa_micros": 0, "bidding_strategy.name": "", "bidding_strategy.non_removed_campaign_count": 0, "bidding_strategy.resource_name": "", "bidding_strategy.status": "UNSPECIFIED", "bidding_strategy.target_cpa.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_cpa.cpc_bid_floor_micros": 0, "bidding_strategy.target_cpa.target_cpa_micros": 0, "bidding_strategy.target_impression_share.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_impression_share.location": "UNSPECIFIED", "bidding_strategy.target_impression_share.location_fraction_micros": 0, "bidding_strategy.target_roas.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_roas.cpc_bid_floor_micros": 0, "bidding_strategy.target_roas.target_roas": 0.0, "bidding_strategy.target_spend.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_spend.target_spend_micros": 0, "bidding_strategy.type": "UNSPECIFIED", "segments.date": "2022-05-18"}, "emitted_at": 1695379460834} -{"stream": "ad_group_bidding_strategies", "data": {"ad_group.id": 137020701042, "bidding_strategy.aligned_campaign_budget_id": 0, "bidding_strategy.campaign_count": 0, "bidding_strategy.currency_code": "", "bidding_strategy.effective_currency_code": "", "bidding_strategy.enhanced_cpc": "", "bidding_strategy.id": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversion_value.target_roas": 0.0, "bidding_strategy.maximize_conversions.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversions.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversions.target_cpa_micros": 0, "bidding_strategy.name": "", "bidding_strategy.non_removed_campaign_count": 0, "bidding_strategy.resource_name": "", "bidding_strategy.status": "UNSPECIFIED", "bidding_strategy.target_cpa.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_cpa.cpc_bid_floor_micros": 0, "bidding_strategy.target_cpa.target_cpa_micros": 0, "bidding_strategy.target_impression_share.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_impression_share.location": "UNSPECIFIED", "bidding_strategy.target_impression_share.location_fraction_micros": 0, "bidding_strategy.target_roas.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_roas.cpc_bid_floor_micros": 0, "bidding_strategy.target_roas.target_roas": 0.0, "bidding_strategy.target_spend.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_spend.target_spend_micros": 0, "bidding_strategy.type": "UNSPECIFIED", "segments.date": "2022-05-19"}, "emitted_at": 1695379460839} -{"stream": "ad_group_bidding_strategies", "data": {"ad_group.id": 137020701042, "bidding_strategy.aligned_campaign_budget_id": 0, "bidding_strategy.campaign_count": 0, "bidding_strategy.currency_code": "", "bidding_strategy.effective_currency_code": "", "bidding_strategy.enhanced_cpc": "", "bidding_strategy.id": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversion_value.target_roas": 0.0, "bidding_strategy.maximize_conversions.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversions.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversions.target_cpa_micros": 0, "bidding_strategy.name": "", "bidding_strategy.non_removed_campaign_count": 0, "bidding_strategy.resource_name": "", "bidding_strategy.status": "UNSPECIFIED", "bidding_strategy.target_cpa.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_cpa.cpc_bid_floor_micros": 0, "bidding_strategy.target_cpa.target_cpa_micros": 0, "bidding_strategy.target_impression_share.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_impression_share.location": "UNSPECIFIED", "bidding_strategy.target_impression_share.location_fraction_micros": 0, "bidding_strategy.target_roas.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_roas.cpc_bid_floor_micros": 0, "bidding_strategy.target_roas.target_roas": 0.0, "bidding_strategy.target_spend.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_spend.target_spend_micros": 0, "bidding_strategy.type": "UNSPECIFIED", "segments.date": "2022-05-20"}, "emitted_at": 1695379460842} -{"stream": "ad_group_criterion_labels", "data": {"ad_group.id": 137051662444, "label.id": 21902092838, "ad_group_criterion_label.ad_group_criterion": "customers/4651612872/adGroupCriteria/137051662444~10766861", "ad_group_criterion_label.label": "customers/4651612872/labels/21902092838", "ad_group_criterion_label.resource_name": "customers/4651612872/adGroupCriterionLabels/137051662444~10766861~21902092838", "ad_group_criterion.criterion_id": 10766861}, "emitted_at": 1695379463692} -{"stream": "ad_group_criterion_labels", "data": {"ad_group.id": 137051662444, "label.id": 21906377810, "ad_group_criterion_label.ad_group_criterion": "customers/4651612872/adGroupCriteria/137051662444~528912986", "ad_group_criterion_label.label": "customers/4651612872/labels/21906377810", "ad_group_criterion_label.resource_name": "customers/4651612872/adGroupCriterionLabels/137051662444~528912986~21906377810", "ad_group_criterion.criterion_id": 528912986}, "emitted_at": 1695379463695} -{"stream": "ad_group_criterions", "data": {"deleted_at": null, "change_status.last_change_date_time": null, "ad_group.id": 123273719655, "ad_group_criterion.ad_group": "customers/4651612872/adGroups/123273719655", "ad_group_criterion.age_range.type": "UNSPECIFIED", "ad_group_criterion.app_payment_model.type": "UNSPECIFIED", "ad_group_criterion.approval_status": "APPROVED", "ad_group_criterion.audience.audience": "", "ad_group_criterion.bid_modifier": 0.0, "ad_group_criterion.combined_audience.combined_audience": "", "ad_group_criterion.cpc_bid_micros": 0, "ad_group_criterion.cpm_bid_micros": 0, "ad_group_criterion.cpv_bid_micros": 0, "ad_group_criterion.criterion_id": 10515001, "ad_group_criterion.custom_affinity.custom_affinity": "", "ad_group_criterion.custom_audience.custom_audience": "", "ad_group_criterion.custom_intent.custom_intent": "", "ad_group_criterion.disapproval_reasons": [], "ad_group_criterion.display_name": "data warehouses", "ad_group_criterion.effective_cpc_bid_micros": 10000, "ad_group_criterion.effective_cpc_bid_source": "AD_GROUP", "ad_group_criterion.effective_cpm_bid_micros": 10000, "ad_group_criterion.effective_cpm_bid_source": "AD_GROUP", "ad_group_criterion.effective_cpv_bid_micros": 0, "ad_group_criterion.effective_cpv_bid_source": "UNSPECIFIED", "ad_group_criterion.effective_percent_cpc_bid_micros": 0, "ad_group_criterion.effective_percent_cpc_bid_source": "UNSPECIFIED", "ad_group_criterion.final_mobile_urls": [], "ad_group_criterion.final_url_suffix": "", "ad_group_criterion.final_urls": [], "ad_group_criterion.gender.type": "UNSPECIFIED", "ad_group_criterion.income_range.type": "UNSPECIFIED", "ad_group_criterion.keyword.match_type": "BROAD", "ad_group_criterion.keyword.text": "data warehouses", "ad_group_criterion.labels": [], "ad_group_criterion.mobile_app_category.mobile_app_category_constant": "", "ad_group_criterion.mobile_application.app_id": "", "ad_group_criterion.mobile_application.name": "", "ad_group_criterion.negative": false, "ad_group_criterion.parental_status.type": "UNSPECIFIED", "ad_group_criterion.percent_cpc_bid_micros": 0, "ad_group_criterion.placement.url": "", "ad_group_criterion.position_estimates.estimated_add_clicks_at_first_position_cpc": 0, "ad_group_criterion.position_estimates.estimated_add_cost_at_first_position_cpc": 0, "ad_group_criterion.position_estimates.first_page_cpc_micros": 0, "ad_group_criterion.position_estimates.first_position_cpc_micros": 0, "ad_group_criterion.position_estimates.top_of_page_cpc_micros": 0, "ad_group_criterion.quality_info.creative_quality_score": "UNSPECIFIED", "ad_group_criterion.quality_info.post_click_quality_score": "UNSPECIFIED", "ad_group_criterion.quality_info.quality_score": 0, "ad_group_criterion.quality_info.search_predicted_ctr": "UNSPECIFIED", "ad_group_criterion.resource_name": "customers/4651612872/adGroupCriteria/123273719655~10515001", "ad_group_criterion.status": "ENABLED", "ad_group_criterion.system_serving_status": "ELIGIBLE", "ad_group_criterion.topic.path": [], "ad_group_criterion.topic.topic_constant": "", "ad_group_criterion.tracking_url_template": "", "ad_group_criterion.type": "KEYWORD", "ad_group_criterion.url_custom_parameters": [], "ad_group_criterion.user_interest.user_interest_category": "", "ad_group_criterion.user_list.user_list": "", "ad_group_criterion.webpage.conditions": [], "ad_group_criterion.webpage.coverage_percentage": 0.0, "ad_group_criterion.webpage.criterion_name": "", "ad_group_criterion.webpage.sample.sample_urls": [], "ad_group_criterion.youtube_channel.channel_id": "", "ad_group_criterion.youtube_video.video_id": ""}, "emitted_at": 1695379462188} -{"stream": "ad_group_criterions", "data": {"deleted_at": null, "change_status.last_change_date_time": null, "ad_group.id": 123273719655, "ad_group_criterion.ad_group": "customers/4651612872/adGroups/123273719655", "ad_group_criterion.age_range.type": "UNSPECIFIED", "ad_group_criterion.app_payment_model.type": "UNSPECIFIED", "ad_group_criterion.approval_status": "UNSPECIFIED", "ad_group_criterion.audience.audience": "", "ad_group_criterion.bid_modifier": 0.0, "ad_group_criterion.combined_audience.combined_audience": "", "ad_group_criterion.cpc_bid_micros": 0, "ad_group_criterion.cpm_bid_micros": 0, "ad_group_criterion.cpv_bid_micros": 0, "ad_group_criterion.criterion_id": 10683521, "ad_group_criterion.custom_affinity.custom_affinity": "", "ad_group_criterion.custom_audience.custom_audience": "", "ad_group_criterion.custom_intent.custom_intent": "", "ad_group_criterion.disapproval_reasons": [], "ad_group_criterion.display_name": "database software", "ad_group_criterion.effective_cpc_bid_micros": 0, "ad_group_criterion.effective_cpc_bid_source": "UNSPECIFIED", "ad_group_criterion.effective_cpm_bid_micros": 0, "ad_group_criterion.effective_cpm_bid_source": "UNSPECIFIED", "ad_group_criterion.effective_cpv_bid_micros": 0, "ad_group_criterion.effective_cpv_bid_source": "UNSPECIFIED", "ad_group_criterion.effective_percent_cpc_bid_micros": 0, "ad_group_criterion.effective_percent_cpc_bid_source": "UNSPECIFIED", "ad_group_criterion.final_mobile_urls": [], "ad_group_criterion.final_url_suffix": "", "ad_group_criterion.final_urls": [], "ad_group_criterion.gender.type": "UNSPECIFIED", "ad_group_criterion.income_range.type": "UNSPECIFIED", "ad_group_criterion.keyword.match_type": "BROAD", "ad_group_criterion.keyword.text": "database software", "ad_group_criterion.labels": [], "ad_group_criterion.mobile_app_category.mobile_app_category_constant": "", "ad_group_criterion.mobile_application.app_id": "", "ad_group_criterion.mobile_application.name": "", "ad_group_criterion.negative": false, "ad_group_criterion.parental_status.type": "UNSPECIFIED", "ad_group_criterion.percent_cpc_bid_micros": 0, "ad_group_criterion.placement.url": "", "ad_group_criterion.position_estimates.estimated_add_clicks_at_first_position_cpc": 0, "ad_group_criterion.position_estimates.estimated_add_cost_at_first_position_cpc": 0, "ad_group_criterion.position_estimates.first_page_cpc_micros": 0, "ad_group_criterion.position_estimates.first_position_cpc_micros": 0, "ad_group_criterion.position_estimates.top_of_page_cpc_micros": 0, "ad_group_criterion.quality_info.creative_quality_score": "UNSPECIFIED", "ad_group_criterion.quality_info.post_click_quality_score": "UNSPECIFIED", "ad_group_criterion.quality_info.quality_score": 0, "ad_group_criterion.quality_info.search_predicted_ctr": "UNSPECIFIED", "ad_group_criterion.resource_name": "customers/4651612872/adGroupCriteria/123273719655~10683521", "ad_group_criterion.status": "REMOVED", "ad_group_criterion.system_serving_status": "UNSPECIFIED", "ad_group_criterion.topic.path": [], "ad_group_criterion.topic.topic_constant": "", "ad_group_criterion.tracking_url_template": "", "ad_group_criterion.type": "KEYWORD", "ad_group_criterion.url_custom_parameters": [], "ad_group_criterion.user_interest.user_interest_category": "", "ad_group_criterion.user_list.user_list": "", "ad_group_criterion.webpage.conditions": [], "ad_group_criterion.webpage.coverage_percentage": 0.0, "ad_group_criterion.webpage.criterion_name": "", "ad_group_criterion.webpage.sample.sample_urls": [], "ad_group_criterion.youtube_channel.channel_id": "", "ad_group_criterion.youtube_video.video_id": ""}, "emitted_at": 1695379462196} -{"stream": "ad_group_criterions", "data": {"deleted_at": null, "change_status.last_change_date_time": null, "ad_group.id": 123273719655, "ad_group_criterion.ad_group": "customers/4651612872/adGroups/123273719655", "ad_group_criterion.age_range.type": "UNSPECIFIED", "ad_group_criterion.app_payment_model.type": "UNSPECIFIED", "ad_group_criterion.approval_status": "APPROVED", "ad_group_criterion.audience.audience": "", "ad_group_criterion.bid_modifier": 0.0, "ad_group_criterion.combined_audience.combined_audience": "", "ad_group_criterion.cpc_bid_micros": 0, "ad_group_criterion.cpm_bid_micros": 0, "ad_group_criterion.cpv_bid_micros": 0, "ad_group_criterion.criterion_id": 11100571, "ad_group_criterion.custom_affinity.custom_affinity": "", "ad_group_criterion.custom_audience.custom_audience": "", "ad_group_criterion.custom_intent.custom_intent": "", "ad_group_criterion.disapproval_reasons": [], "ad_group_criterion.display_name": "integration software", "ad_group_criterion.effective_cpc_bid_micros": 10000, "ad_group_criterion.effective_cpc_bid_source": "AD_GROUP", "ad_group_criterion.effective_cpm_bid_micros": 10000, "ad_group_criterion.effective_cpm_bid_source": "AD_GROUP", "ad_group_criterion.effective_cpv_bid_micros": 0, "ad_group_criterion.effective_cpv_bid_source": "UNSPECIFIED", "ad_group_criterion.effective_percent_cpc_bid_micros": 0, "ad_group_criterion.effective_percent_cpc_bid_source": "UNSPECIFIED", "ad_group_criterion.final_mobile_urls": [], "ad_group_criterion.final_url_suffix": "", "ad_group_criterion.final_urls": [], "ad_group_criterion.gender.type": "UNSPECIFIED", "ad_group_criterion.income_range.type": "UNSPECIFIED", "ad_group_criterion.keyword.match_type": "BROAD", "ad_group_criterion.keyword.text": "integration software", "ad_group_criterion.labels": [], "ad_group_criterion.mobile_app_category.mobile_app_category_constant": "", "ad_group_criterion.mobile_application.app_id": "", "ad_group_criterion.mobile_application.name": "", "ad_group_criterion.negative": false, "ad_group_criterion.parental_status.type": "UNSPECIFIED", "ad_group_criterion.percent_cpc_bid_micros": 0, "ad_group_criterion.placement.url": "", "ad_group_criterion.position_estimates.estimated_add_clicks_at_first_position_cpc": 0, "ad_group_criterion.position_estimates.estimated_add_cost_at_first_position_cpc": 0, "ad_group_criterion.position_estimates.first_page_cpc_micros": 0, "ad_group_criterion.position_estimates.first_position_cpc_micros": 0, "ad_group_criterion.position_estimates.top_of_page_cpc_micros": 0, "ad_group_criterion.quality_info.creative_quality_score": "UNSPECIFIED", "ad_group_criterion.quality_info.post_click_quality_score": "UNSPECIFIED", "ad_group_criterion.quality_info.quality_score": 0, "ad_group_criterion.quality_info.search_predicted_ctr": "UNSPECIFIED", "ad_group_criterion.resource_name": "customers/4651612872/adGroupCriteria/123273719655~11100571", "ad_group_criterion.status": "ENABLED", "ad_group_criterion.system_serving_status": "ELIGIBLE", "ad_group_criterion.topic.path": [], "ad_group_criterion.topic.topic_constant": "", "ad_group_criterion.tracking_url_template": "", "ad_group_criterion.type": "KEYWORD", "ad_group_criterion.url_custom_parameters": [], "ad_group_criterion.user_interest.user_interest_category": "", "ad_group_criterion.user_list.user_list": "", "ad_group_criterion.webpage.conditions": [], "ad_group_criterion.webpage.coverage_percentage": 0.0, "ad_group_criterion.webpage.criterion_name": "", "ad_group_criterion.webpage.sample.sample_urls": [], "ad_group_criterion.youtube_channel.channel_id": "", "ad_group_criterion.youtube_video.video_id": ""}, "emitted_at": 1695379462201} -{"stream": "ad_group_custom", "data": {"ad_group.targeting_setting.target_restrictions": ["targeting_dimension: AUDIENCE\nbid_only: true\n", "targeting_dimension: AGE_RANGE\nbid_only: true\n", "targeting_dimension: GENDER\nbid_only: true\n", "targeting_dimension: PARENTAL_STATUS\nbid_only: true\n", "targeting_dimension: INCOME_RANGE\nbid_only: true\n"], "segments.date": "2022-05-18"}, "emitted_at": 1695379431724} -{"stream": "ad_group_custom", "data": {"ad_group.targeting_setting.target_restrictions": ["targeting_dimension: AUDIENCE\nbid_only: true\n", "targeting_dimension: AGE_RANGE\nbid_only: true\n", "targeting_dimension: GENDER\nbid_only: true\n", "targeting_dimension: PARENTAL_STATUS\nbid_only: true\n", "targeting_dimension: INCOME_RANGE\nbid_only: true\n"], "segments.date": "2022-05-19"}, "emitted_at": 1695379431726} -{"stream": "ad_group_custom", "data": {"ad_group.targeting_setting.target_restrictions": ["targeting_dimension: AUDIENCE\nbid_only: true\n", "targeting_dimension: AGE_RANGE\nbid_only: true\n", "targeting_dimension: GENDER\nbid_only: true\n", "targeting_dimension: PARENTAL_STATUS\nbid_only: true\n", "targeting_dimension: INCOME_RANGE\nbid_only: true\n"], "segments.date": "2022-05-20"}, "emitted_at": 1695379431727} -{"stream": "ad_group_labels", "data": {"ad_group.id": 123273719655, "label.id": 21585034471, "ad_group.resource_name": "customers/4651612872/adGroups/123273719655", "ad_group_label.resource_name": "customers/4651612872/adGroupLabels/123273719655~21585034471", "label.name": "edgao-example-label", "label.resource_name": "customers/4651612872/labels/21585034471"}, "emitted_at": 1695379449414} -{"stream": "ad_group_labels", "data": {"ad_group.id": 138643385242, "label.id": 21585034471, "ad_group.resource_name": "customers/4651612872/adGroups/138643385242", "ad_group_label.resource_name": "customers/4651612872/adGroupLabels/138643385242~21585034471", "label.name": "edgao-example-label", "label.resource_name": "customers/4651612872/labels/21585034471"}, "emitted_at": 1695379449416} -{"stream": "ad_group_labels", "data": {"ad_group.id": 137020701042, "label.id": 21906377810, "ad_group.resource_name": "customers/4651612872/adGroups/137020701042", "ad_group_label.resource_name": "customers/4651612872/adGroupLabels/137020701042~21906377810", "label.name": "Test Delete label customer", "label.resource_name": "customers/4651612872/labels/21906377810"}, "emitted_at": 1695379449417} -{"stream": "ad_groups", "data": {"campaign.id": 16820250687, "ad_group.ad_rotation_mode": "UNSPECIFIED", "ad_group.base_ad_group": "customers/4651612872/adGroups/137020701042", "ad_group.campaign": "customers/4651612872/campaigns/16820250687", "ad_group.cpc_bid_micros": 10000, "ad_group.cpm_bid_micros": 10000, "ad_group.cpv_bid_micros": 0, "ad_group.display_custom_bid_dimension": "UNSPECIFIED", "ad_group.effective_target_cpa_micros": 0, "ad_group.effective_target_cpa_source": "UNSPECIFIED", "ad_group.effective_target_roas": 0.0, "ad_group.effective_target_roas_source": "UNSPECIFIED", "ad_group.excluded_parent_asset_field_types": [], "ad_group.optimized_targeting_enabled": false, "ad_group.final_url_suffix": "", "ad_group.id": 137020701042, "ad_group.labels": ["customers/4651612872/labels/21906377810"], "ad_group.name": "\u0413\u0440\u0443\u043f\u043f\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0439\u00a02", "ad_group.percent_cpc_bid_micros": 0, "ad_group.resource_name": "customers/4651612872/adGroups/137020701042", "ad_group.status": "ENABLED", "ad_group.target_cpa_micros": 0, "ad_group.target_cpm_micros": 10000, "ad_group.target_roas": 0.0, "ad_group.targeting_setting.target_restrictions": ["targeting_dimension: AUDIENCE\nbid_only: true\n", "targeting_dimension: AGE_RANGE\nbid_only: true\n", "targeting_dimension: GENDER\nbid_only: true\n", "targeting_dimension: PARENTAL_STATUS\nbid_only: true\n", "targeting_dimension: INCOME_RANGE\nbid_only: true\n"], "ad_group.tracking_url_template": "", "ad_group.type": "SEARCH_STANDARD", "ad_group.url_custom_parameters": [], "segments.date": "2022-05-18"}, "emitted_at": 1695379444814} -{"stream": "ad_groups", "data": {"campaign.id": 16820250687, "ad_group.ad_rotation_mode": "UNSPECIFIED", "ad_group.base_ad_group": "customers/4651612872/adGroups/137020701042", "ad_group.campaign": "customers/4651612872/campaigns/16820250687", "ad_group.cpc_bid_micros": 10000, "ad_group.cpm_bid_micros": 10000, "ad_group.cpv_bid_micros": 0, "ad_group.display_custom_bid_dimension": "UNSPECIFIED", "ad_group.effective_target_cpa_micros": 0, "ad_group.effective_target_cpa_source": "UNSPECIFIED", "ad_group.effective_target_roas": 0.0, "ad_group.effective_target_roas_source": "UNSPECIFIED", "ad_group.excluded_parent_asset_field_types": [], "ad_group.optimized_targeting_enabled": false, "ad_group.final_url_suffix": "", "ad_group.id": 137020701042, "ad_group.labels": ["customers/4651612872/labels/21906377810"], "ad_group.name": "\u0413\u0440\u0443\u043f\u043f\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0439\u00a02", "ad_group.percent_cpc_bid_micros": 0, "ad_group.resource_name": "customers/4651612872/adGroups/137020701042", "ad_group.status": "ENABLED", "ad_group.target_cpa_micros": 0, "ad_group.target_cpm_micros": 10000, "ad_group.target_roas": 0.0, "ad_group.targeting_setting.target_restrictions": ["targeting_dimension: AUDIENCE\nbid_only: true\n", "targeting_dimension: AGE_RANGE\nbid_only: true\n", "targeting_dimension: GENDER\nbid_only: true\n", "targeting_dimension: PARENTAL_STATUS\nbid_only: true\n", "targeting_dimension: INCOME_RANGE\nbid_only: true\n"], "ad_group.tracking_url_template": "", "ad_group.type": "SEARCH_STANDARD", "ad_group.url_custom_parameters": [], "segments.date": "2022-05-19"}, "emitted_at": 1695379444816} -{"stream": "ad_groups", "data": {"campaign.id": 16820250687, "ad_group.ad_rotation_mode": "UNSPECIFIED", "ad_group.base_ad_group": "customers/4651612872/adGroups/137020701042", "ad_group.campaign": "customers/4651612872/campaigns/16820250687", "ad_group.cpc_bid_micros": 10000, "ad_group.cpm_bid_micros": 10000, "ad_group.cpv_bid_micros": 0, "ad_group.display_custom_bid_dimension": "UNSPECIFIED", "ad_group.effective_target_cpa_micros": 0, "ad_group.effective_target_cpa_source": "UNSPECIFIED", "ad_group.effective_target_roas": 0.0, "ad_group.effective_target_roas_source": "UNSPECIFIED", "ad_group.excluded_parent_asset_field_types": [], "ad_group.optimized_targeting_enabled": false, "ad_group.final_url_suffix": "", "ad_group.id": 137020701042, "ad_group.labels": ["customers/4651612872/labels/21906377810"], "ad_group.name": "\u0413\u0440\u0443\u043f\u043f\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0439\u00a02", "ad_group.percent_cpc_bid_micros": 0, "ad_group.resource_name": "customers/4651612872/adGroups/137020701042", "ad_group.status": "ENABLED", "ad_group.target_cpa_micros": 0, "ad_group.target_cpm_micros": 10000, "ad_group.target_roas": 0.0, "ad_group.targeting_setting.target_restrictions": ["targeting_dimension: AUDIENCE\nbid_only: true\n", "targeting_dimension: AGE_RANGE\nbid_only: true\n", "targeting_dimension: GENDER\nbid_only: true\n", "targeting_dimension: PARENTAL_STATUS\nbid_only: true\n", "targeting_dimension: INCOME_RANGE\nbid_only: true\n"], "ad_group.tracking_url_template": "", "ad_group.type": "SEARCH_STANDARD", "ad_group.url_custom_parameters": [], "segments.date": "2022-05-20"}, "emitted_at": 1695379444817} -{"stream": "ad_listing_group_criterions", "data": {"deleted_at": null, "change_status.last_change_date_time": null, "ad_group_criterion.resource_name": "customers/4651612872/adGroupCriteria/123273719655~10515001", "ad_group.id": 123273719655, "ad_group_criterion.criterion_id": 10515001, "ad_group_criterion.listing_group.case_value.activity_country.value": "", "ad_group_criterion.listing_group.case_value.activity_id.value": "", "ad_group_criterion.listing_group.case_value.activity_rating.value": 0, "ad_group_criterion.listing_group.case_value.hotel_city.city_criterion": "", "ad_group_criterion.listing_group.case_value.hotel_class.value": 0, "ad_group_criterion.listing_group.case_value.hotel_country_region.country_region_criterion": "", "ad_group_criterion.listing_group.case_value.hotel_id.value": "", "ad_group_criterion.listing_group.case_value.hotel_state.state_criterion": "", "ad_group_criterion.listing_group.case_value.product_bidding_category.id": 0, "ad_group_criterion.listing_group.case_value.product_bidding_category.level": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_brand.value": "", "ad_group_criterion.listing_group.case_value.product_channel.channel": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_channel_exclusivity.channel_exclusivity": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_condition.condition": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_custom_attribute.index": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_custom_attribute.value": "", "ad_group_criterion.listing_group.case_value.product_item_id.value": "", "ad_group_criterion.listing_group.case_value.product_type.level": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_type.value": "", "ad_group_criterion.listing_group.parent_ad_group_criterion": "", "ad_group_criterion.listing_group.type": "UNSPECIFIED"}, "emitted_at": 1695379463079} -{"stream": "ad_listing_group_criterions", "data": {"deleted_at": null, "change_status.last_change_date_time": null, "ad_group_criterion.resource_name": "customers/4651612872/adGroupCriteria/123273719655~10683521", "ad_group.id": 123273719655, "ad_group_criterion.criterion_id": 10683521, "ad_group_criterion.listing_group.case_value.activity_country.value": "", "ad_group_criterion.listing_group.case_value.activity_id.value": "", "ad_group_criterion.listing_group.case_value.activity_rating.value": 0, "ad_group_criterion.listing_group.case_value.hotel_city.city_criterion": "", "ad_group_criterion.listing_group.case_value.hotel_class.value": 0, "ad_group_criterion.listing_group.case_value.hotel_country_region.country_region_criterion": "", "ad_group_criterion.listing_group.case_value.hotel_id.value": "", "ad_group_criterion.listing_group.case_value.hotel_state.state_criterion": "", "ad_group_criterion.listing_group.case_value.product_bidding_category.id": 0, "ad_group_criterion.listing_group.case_value.product_bidding_category.level": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_brand.value": "", "ad_group_criterion.listing_group.case_value.product_channel.channel": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_channel_exclusivity.channel_exclusivity": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_condition.condition": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_custom_attribute.index": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_custom_attribute.value": "", "ad_group_criterion.listing_group.case_value.product_item_id.value": "", "ad_group_criterion.listing_group.case_value.product_type.level": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_type.value": "", "ad_group_criterion.listing_group.parent_ad_group_criterion": "", "ad_group_criterion.listing_group.type": "UNSPECIFIED"}, "emitted_at": 1695379463081} -{"stream": "ad_listing_group_criterions", "data": {"deleted_at": null, "change_status.last_change_date_time": null, "ad_group_criterion.resource_name": "customers/4651612872/adGroupCriteria/123273719655~11100571", "ad_group.id": 123273719655, "ad_group_criterion.criterion_id": 11100571, "ad_group_criterion.listing_group.case_value.activity_country.value": "", "ad_group_criterion.listing_group.case_value.activity_id.value": "", "ad_group_criterion.listing_group.case_value.activity_rating.value": 0, "ad_group_criterion.listing_group.case_value.hotel_city.city_criterion": "", "ad_group_criterion.listing_group.case_value.hotel_class.value": 0, "ad_group_criterion.listing_group.case_value.hotel_country_region.country_region_criterion": "", "ad_group_criterion.listing_group.case_value.hotel_id.value": "", "ad_group_criterion.listing_group.case_value.hotel_state.state_criterion": "", "ad_group_criterion.listing_group.case_value.product_bidding_category.id": 0, "ad_group_criterion.listing_group.case_value.product_bidding_category.level": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_brand.value": "", "ad_group_criterion.listing_group.case_value.product_channel.channel": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_channel_exclusivity.channel_exclusivity": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_condition.condition": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_custom_attribute.index": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_custom_attribute.value": "", "ad_group_criterion.listing_group.case_value.product_item_id.value": "", "ad_group_criterion.listing_group.case_value.product_type.level": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_type.value": "", "ad_group_criterion.listing_group.parent_ad_group_criterion": "", "ad_group_criterion.listing_group.type": "UNSPECIFIED"}, "emitted_at": 1695379463082} -{"stream": "audience", "data": {"customer.id": 4651612872, "audience.description": "", "audience.dimensions": ["audience_segments {\n segments {\n custom_audience {\n custom_audience: \"customers/4651612872/customAudiences/523469909\"\n }\n }\n}\n"], "audience.exclusion_dimension": "", "audience.id": 47792633, "audience.name": "Audience name 1", "audience.resource_name": "customers/4651612872/audiences/47792633", "audience.status": "ENABLED"}, "emitted_at": 1695379453862} -{"stream": "audience", "data": {"customer.id": 4651612872, "audience.description": "", "audience.dimensions": ["audience_segments {\n segments {\n user_interest {\n user_interest_category: \"customers/4651612872/userInterests/80276\"\n }\n }\n segments {\n user_interest {\n user_interest_category: \"customers/4651612872/userInterests/80279\"\n }\n }\n segments {\n user_interest {\n user_interest_category: \"customers/4651612872/userInterests/80520\"\n }\n }\n segments {\n user_interest {\n user_interest_category: \"customers/4651612872/userInterests/80530\"\n }\n }\n segments {\n user_interest {\n user_interest_category: \"customers/4651612872/userInterests/92931\"\n }\n }\n}\n"], "audience.exclusion_dimension": "", "audience.id": 97300129, "audience.name": "Upgraded Audience 1", "audience.resource_name": "customers/4651612872/audiences/97300129", "audience.status": "ENABLED"}, "emitted_at": 1695379453864} -{"stream": "campaign_bidding_strategies", "data": {"customer.id": 4651612872, "campaign.id": 16820250687, "bidding_strategy.aligned_campaign_budget_id": 0, "bidding_strategy.campaign_count": 0, "bidding_strategy.currency_code": "", "bidding_strategy.effective_currency_code": "", "bidding_strategy.enhanced_cpc": "", "bidding_strategy.id": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversion_value.target_roas": 0.0, "bidding_strategy.maximize_conversions.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversions.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversions.target_cpa_micros": 0, "bidding_strategy.name": "", "bidding_strategy.non_removed_campaign_count": 0, "bidding_strategy.resource_name": "", "bidding_strategy.status": "UNSPECIFIED", "bidding_strategy.target_cpa.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_cpa.cpc_bid_floor_micros": 0, "bidding_strategy.target_cpa.target_cpa_micros": 0, "bidding_strategy.target_impression_share.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_impression_share.location": "UNSPECIFIED", "bidding_strategy.target_impression_share.location_fraction_micros": 0, "bidding_strategy.target_roas.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_roas.cpc_bid_floor_micros": 0, "bidding_strategy.target_roas.target_roas": 0.0, "bidding_strategy.target_spend.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_spend.target_spend_micros": 0, "bidding_strategy.type": "UNSPECIFIED", "segments.date": "2022-05-18"}, "emitted_at": 1695379459903} -{"stream": "campaign_bidding_strategies", "data": {"customer.id": 4651612872, "campaign.id": 16820250687, "bidding_strategy.aligned_campaign_budget_id": 0, "bidding_strategy.campaign_count": 0, "bidding_strategy.currency_code": "", "bidding_strategy.effective_currency_code": "", "bidding_strategy.enhanced_cpc": "", "bidding_strategy.id": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversion_value.target_roas": 0.0, "bidding_strategy.maximize_conversions.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversions.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversions.target_cpa_micros": 0, "bidding_strategy.name": "", "bidding_strategy.non_removed_campaign_count": 0, "bidding_strategy.resource_name": "", "bidding_strategy.status": "UNSPECIFIED", "bidding_strategy.target_cpa.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_cpa.cpc_bid_floor_micros": 0, "bidding_strategy.target_cpa.target_cpa_micros": 0, "bidding_strategy.target_impression_share.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_impression_share.location": "UNSPECIFIED", "bidding_strategy.target_impression_share.location_fraction_micros": 0, "bidding_strategy.target_roas.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_roas.cpc_bid_floor_micros": 0, "bidding_strategy.target_roas.target_roas": 0.0, "bidding_strategy.target_spend.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_spend.target_spend_micros": 0, "bidding_strategy.type": "UNSPECIFIED", "segments.date": "2022-05-19"}, "emitted_at": 1695379459908} -{"stream": "campaign_bidding_strategies", "data": {"customer.id": 4651612872, "campaign.id": 16820250687, "bidding_strategy.aligned_campaign_budget_id": 0, "bidding_strategy.campaign_count": 0, "bidding_strategy.currency_code": "", "bidding_strategy.effective_currency_code": "", "bidding_strategy.enhanced_cpc": "", "bidding_strategy.id": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversion_value.target_roas": 0.0, "bidding_strategy.maximize_conversions.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversions.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversions.target_cpa_micros": 0, "bidding_strategy.name": "", "bidding_strategy.non_removed_campaign_count": 0, "bidding_strategy.resource_name": "", "bidding_strategy.status": "UNSPECIFIED", "bidding_strategy.target_cpa.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_cpa.cpc_bid_floor_micros": 0, "bidding_strategy.target_cpa.target_cpa_micros": 0, "bidding_strategy.target_impression_share.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_impression_share.location": "UNSPECIFIED", "bidding_strategy.target_impression_share.location_fraction_micros": 0, "bidding_strategy.target_roas.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_roas.cpc_bid_floor_micros": 0, "bidding_strategy.target_roas.target_roas": 0.0, "bidding_strategy.target_spend.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_spend.target_spend_micros": 0, "bidding_strategy.type": "UNSPECIFIED", "segments.date": "2022-05-20"}, "emitted_at": 1695379459909} -{"stream": "campaign_budget", "data": {"customer.id": 4651612872, "campaign.id": 16820250687, "campaign_budget.aligned_bidding_strategy_id": 0, "campaign_budget.amount_micros": 750000, "campaign_budget.delivery_method": ["STANDARD"], "campaign_budget.explicitly_shared": false, "campaign_budget.has_recommended_budget": false, "campaign_budget.id": 10695604507, "campaign_budget.name": "Website traffic-Search-15", "campaign_budget.period": ["DAILY"], "campaign_budget.recommended_budget_amount_micros": 0, "campaign_budget.recommended_budget_estimated_change_weekly_clicks": 0, "campaign_budget.recommended_budget_estimated_change_weekly_cost_micros": 0, "campaign_budget.recommended_budget_estimated_change_weekly_interactions": 0, "campaign_budget.recommended_budget_estimated_change_weekly_views": 0, "campaign_budget.reference_count": 0, "campaign_budget.resource_name": "customers/4651612872/campaignBudgets/10695604507", "campaign_budget.status": ["REMOVED"], "campaign_budget.total_amount_micros": 0, "campaign_budget.type": ["STANDARD"], "segments.date": "2022-05-18", "segments.budget_campaign_association_status.campaign": "customers/4651612872/campaigns/16820250687", "segments.budget_campaign_association_status.status": ["REMOVED"], "metrics.all_conversions": 0.0, "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.average_cost": 197500.0, "metrics.average_cpc": 197500.0, "metrics.average_cpe": 0.0, "metrics.average_cpm": 15490196.078431372, "metrics.average_cpv": 0.0, "metrics.clicks": 4, "metrics.conversions": 0.0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 790000, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.0784313725490196, "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "metrics.impressions": 51, "metrics.interaction_event_types": ["InteractionEventType.CLICK"], "metrics.interaction_rate": 0.0784313725490196, "metrics.interactions": 4, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0}, "emitted_at": 1695379430000} -{"stream": "campaign_budget", "data": {"customer.id": 4651612872, "campaign.id": 16820250687, "campaign_budget.aligned_bidding_strategy_id": 0, "campaign_budget.amount_micros": 750000, "campaign_budget.delivery_method": ["STANDARD"], "campaign_budget.explicitly_shared": false, "campaign_budget.has_recommended_budget": false, "campaign_budget.id": 10695604507, "campaign_budget.name": "Website traffic-Search-15", "campaign_budget.period": ["DAILY"], "campaign_budget.recommended_budget_amount_micros": 0, "campaign_budget.recommended_budget_estimated_change_weekly_clicks": 0, "campaign_budget.recommended_budget_estimated_change_weekly_cost_micros": 0, "campaign_budget.recommended_budget_estimated_change_weekly_interactions": 0, "campaign_budget.recommended_budget_estimated_change_weekly_views": 0, "campaign_budget.reference_count": 0, "campaign_budget.resource_name": "customers/4651612872/campaignBudgets/10695604507", "campaign_budget.status": ["REMOVED"], "campaign_budget.total_amount_micros": 0, "campaign_budget.type": ["STANDARD"], "segments.date": "2022-05-19", "segments.budget_campaign_association_status.campaign": "customers/4651612872/campaigns/16820250687", "segments.budget_campaign_association_status.status": ["REMOVED"], "metrics.all_conversions": 0.0, "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.average_cost": 143333.33333333334, "metrics.average_cpc": 143333.33333333334, "metrics.average_cpe": 0.0, "metrics.average_cpm": 31851851.85185185, "metrics.average_cpv": 0.0, "metrics.clicks": 6, "metrics.conversions": 0.0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 860000, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.2222222222222222, "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "metrics.impressions": 27, "metrics.interaction_event_types": ["InteractionEventType.CLICK"], "metrics.interaction_rate": 0.2222222222222222, "metrics.interactions": 6, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0}, "emitted_at": 1695379430002} -{"stream": "campaign_budget", "data": {"customer.id": 4651612872, "campaign.id": 16820250687, "campaign_budget.aligned_bidding_strategy_id": 0, "campaign_budget.amount_micros": 750000, "campaign_budget.delivery_method": ["STANDARD"], "campaign_budget.explicitly_shared": false, "campaign_budget.has_recommended_budget": false, "campaign_budget.id": 10695604507, "campaign_budget.name": "Website traffic-Search-15", "campaign_budget.period": ["DAILY"], "campaign_budget.recommended_budget_amount_micros": 0, "campaign_budget.recommended_budget_estimated_change_weekly_clicks": 0, "campaign_budget.recommended_budget_estimated_change_weekly_cost_micros": 0, "campaign_budget.recommended_budget_estimated_change_weekly_interactions": 0, "campaign_budget.recommended_budget_estimated_change_weekly_views": 0, "campaign_budget.reference_count": 0, "campaign_budget.resource_name": "customers/4651612872/campaignBudgets/10695604507", "campaign_budget.status": ["REMOVED"], "campaign_budget.total_amount_micros": 0, "campaign_budget.type": ["STANDARD"], "segments.date": "2022-05-20", "segments.budget_campaign_association_status.campaign": "customers/4651612872/campaigns/16820250687", "segments.budget_campaign_association_status.status": ["REMOVED"], "metrics.all_conversions": 0.0, "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.average_cost": 215000.0, "metrics.average_cpc": 215000.0, "metrics.average_cpe": 0.0, "metrics.average_cpm": 16538461.53846154, "metrics.average_cpv": 0.0, "metrics.clicks": 2, "metrics.conversions": 0.0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 430000, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.07692307692307693, "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "metrics.impressions": 26, "metrics.interaction_event_types": ["InteractionEventType.CLICK"], "metrics.interaction_rate": 0.07692307692307693, "metrics.interactions": 2, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0}, "emitted_at": 1695379430003} -{"stream": "campaign_criterion", "data": {"deleted_at": null, "change_status.last_change_date_time": null, "campaign.id": 9660123292, "campaign_criterion.resource_name": "customers/4651612872/campaignCriteria/9660123292~2124", "campaign_criterion.campaign": "customers/4651612872/campaigns/9660123292", "campaign_criterion.age_range.type": "UNSPECIFIED", "campaign_criterion.mobile_application.name": "", "campaign_criterion.negative": false, "campaign_criterion.youtube_channel.channel_id": "", "campaign_criterion.youtube_video.video_id": ""}, "emitted_at": 1695379464190} -{"stream": "campaign_criterion", "data": {"deleted_at": null, "change_status.last_change_date_time": null, "campaign.id": 9660123292, "campaign_criterion.resource_name": "customers/4651612872/campaignCriteria/9660123292~2250", "campaign_criterion.campaign": "customers/4651612872/campaigns/9660123292", "campaign_criterion.age_range.type": "UNSPECIFIED", "campaign_criterion.mobile_application.name": "", "campaign_criterion.negative": false, "campaign_criterion.youtube_channel.channel_id": "", "campaign_criterion.youtube_video.video_id": ""}, "emitted_at": 1695379464193} -{"stream": "campaign_criterion", "data": {"deleted_at": null, "change_status.last_change_date_time": null, "campaign.id": 9660123292, "campaign_criterion.resource_name": "customers/4651612872/campaignCriteria/9660123292~2276", "campaign_criterion.campaign": "customers/4651612872/campaigns/9660123292", "campaign_criterion.age_range.type": "UNSPECIFIED", "campaign_criterion.mobile_application.name": "", "campaign_criterion.negative": false, "campaign_criterion.youtube_channel.channel_id": "", "campaign_criterion.youtube_video.video_id": ""}, "emitted_at": 1695379464195} -{"stream": "campaign_labels", "data": {"campaign.id": 12124071339, "label.id": 21585034471, "campaign.resource_name": "customers/4651612872/campaigns/12124071339", "campaign_label.resource_name": "customers/4651612872/campaignLabels/12124071339~21585034471", "label.name": "edgao-example-label", "label.resource_name": "customers/4651612872/labels/21585034471"}, "emitted_at": 1695379449047} -{"stream": "campaign_labels", "data": {"campaign.id": 13284356762, "label.id": 21585034471, "campaign.resource_name": "customers/4651612872/campaigns/13284356762", "campaign_label.resource_name": "customers/4651612872/campaignLabels/13284356762~21585034471", "label.name": "edgao-example-label", "label.resource_name": "customers/4651612872/labels/21585034471"}, "emitted_at": 1695379449049} -{"stream": "campaign_labels", "data": {"campaign.id": 16820250687, "label.id": 21906377810, "campaign.resource_name": "customers/4651612872/campaigns/16820250687", "campaign_label.resource_name": "customers/4651612872/campaignLabels/16820250687~21906377810", "label.name": "Test Delete label customer", "label.resource_name": "customers/4651612872/labels/21906377810"}, "emitted_at": 1695379449050} -{"stream": "campaigns", "data": {"campaign.accessible_bidding_strategy": "", "campaign.ad_serving_optimization_status": "OPTIMIZE", "campaign.advertising_channel_sub_type": "UNSPECIFIED", "campaign.advertising_channel_type": "SEARCH", "campaign.app_campaign_setting.app_id": "", "campaign.app_campaign_setting.app_store": "UNSPECIFIED", "campaign.app_campaign_setting.bidding_strategy_goal_type": "UNSPECIFIED", "campaign.base_campaign": "customers/4651612872/campaigns/16820250687", "campaign.bidding_strategy": "", "campaign.bidding_strategy_type": "MAXIMIZE_CONVERSIONS", "campaign.campaign_budget": "customers/4651612872/campaignBudgets/12862729190", "campaign_budget.amount_micros": 1000000, "campaign.commission.commission_rate_micros": 0, "campaign.dynamic_search_ads_setting.domain_name": "", "campaign.dynamic_search_ads_setting.feeds": [], "campaign.dynamic_search_ads_setting.language_code": "", "campaign.dynamic_search_ads_setting.use_supplied_urls_only": false, "campaign.end_date": "2037-12-30", "campaign.excluded_parent_asset_field_types": [], "campaign.experiment_type": "BASE", "campaign.final_url_suffix": "", "campaign.frequency_caps": [], "campaign.geo_target_type_setting.negative_geo_target_type": "PRESENCE", "campaign.geo_target_type_setting.positive_geo_target_type": "PRESENCE_OR_INTEREST", "campaign.hotel_setting.hotel_center_id": 0, "campaign.id": 16820250687, "campaign.labels": ["customers/4651612872/labels/21906377810"], "campaign.local_campaign_setting.location_source_type": "UNSPECIFIED", "campaign.manual_cpc.enhanced_cpc_enabled": false, "campaign.manual_cpm": "", "campaign.manual_cpv": "", "campaign.maximize_conversion_value.target_roas": 0.0, "campaign.maximize_conversions.target_cpa_micros": 0, "campaign.name": "Website traffic-Search-15", "campaign.network_settings.target_content_network": true, "campaign.network_settings.target_google_search": true, "campaign.network_settings.target_partner_search_network": false, "campaign.network_settings.target_search_network": true, "campaign.optimization_goal_setting.optimization_goal_types": [], "campaign.optimization_score": 0.0, "campaign.payment_mode": "CLICKS", "campaign.percent_cpc.cpc_bid_ceiling_micros": 0, "campaign.percent_cpc.enhanced_cpc_enabled": false, "campaign.real_time_bidding_setting.opt_in": false, "campaign.resource_name": "customers/4651612872/campaigns/16820250687", "campaign.selective_optimization.conversion_actions": [], "campaign.serving_status": "SERVING", "campaign.shopping_setting.campaign_priority": 0, "campaign.shopping_setting.enable_local": false, "campaign.shopping_setting.merchant_id": 0, "campaign.shopping_setting.sales_country": "", "campaign.start_date": "2022-04-08", "campaign.status": "PAUSED", "campaign.target_cpa.cpc_bid_ceiling_micros": 0, "campaign.target_cpa.cpc_bid_floor_micros": 0, "campaign.target_cpa.target_cpa_micros": 0, "campaign.target_cpm.target_frequency_goal.target_count": 0, "campaign.target_cpm.target_frequency_goal.time_unit": "UNSPECIFIED", "campaign.target_impression_share.cpc_bid_ceiling_micros": 0, "campaign.target_impression_share.location": "UNSPECIFIED", "campaign.target_impression_share.location_fraction_micros": 0, "campaign.target_roas.cpc_bid_ceiling_micros": 0, "campaign.target_roas.cpc_bid_floor_micros": 0, "campaign.target_roas.target_roas": 0.0, "campaign.target_spend.cpc_bid_ceiling_micros": 0, "campaign.target_spend.target_spend_micros": 0, "campaign.targeting_setting.target_restrictions": ["targeting_dimension: AUDIENCE\nbid_only: true\n"], "campaign.tracking_setting.tracking_url": "", "campaign.tracking_url_template": "", "campaign.url_custom_parameters": [], "campaign.vanity_pharma.vanity_pharma_display_url_mode": "UNSPECIFIED", "campaign.vanity_pharma.vanity_pharma_text": "UNSPECIFIED", "campaign.video_brand_safety_suitability": "UNSPECIFIED", "metrics.clicks": 0, "metrics.ctr": 0.0, "metrics.conversions": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 0, "metrics.impressions": 1.0, "metrics.video_views": 0.0, "metrics.video_quartile_p100_rate": 0.0, "metrics.active_view_cpm": 0.0, "metrics.active_view_ctr": 0.0, "metrics.active_view_impressions": 0, "metrics.active_view_measurability": 0.0, "metrics.active_view_measurable_cost_micros": 0, "metrics.active_view_measurable_impressions": 0, "metrics.active_view_viewability": 0.0, "metrics.average_cost": 0.0, "metrics.average_cpc": 0.0, "metrics.average_cpm": 0.0, "metrics.interactions": 0, "metrics.interaction_event_types": "[]", "metrics.value_per_conversion": 0.0, "metrics.cost_per_conversion": 0.0, "segments.date": "2022-05-18", "segments.hour": 1.0, "segments.ad_network_type": "SEARCH"}, "emitted_at": 1695379447019} -{"stream": "campaigns", "data": {"campaign.accessible_bidding_strategy": "", "campaign.ad_serving_optimization_status": "OPTIMIZE", "campaign.advertising_channel_sub_type": "UNSPECIFIED", "campaign.advertising_channel_type": "SEARCH", "campaign.app_campaign_setting.app_id": "", "campaign.app_campaign_setting.app_store": "UNSPECIFIED", "campaign.app_campaign_setting.bidding_strategy_goal_type": "UNSPECIFIED", "campaign.base_campaign": "customers/4651612872/campaigns/16820250687", "campaign.bidding_strategy": "", "campaign.bidding_strategy_type": "MAXIMIZE_CONVERSIONS", "campaign.campaign_budget": "customers/4651612872/campaignBudgets/12862729190", "campaign_budget.amount_micros": 1000000, "campaign.commission.commission_rate_micros": 0, "campaign.dynamic_search_ads_setting.domain_name": "", "campaign.dynamic_search_ads_setting.feeds": [], "campaign.dynamic_search_ads_setting.language_code": "", "campaign.dynamic_search_ads_setting.use_supplied_urls_only": false, "campaign.end_date": "2037-12-30", "campaign.excluded_parent_asset_field_types": [], "campaign.experiment_type": "BASE", "campaign.final_url_suffix": "", "campaign.frequency_caps": [], "campaign.geo_target_type_setting.negative_geo_target_type": "PRESENCE", "campaign.geo_target_type_setting.positive_geo_target_type": "PRESENCE_OR_INTEREST", "campaign.hotel_setting.hotel_center_id": 0, "campaign.id": 16820250687, "campaign.labels": ["customers/4651612872/labels/21906377810"], "campaign.local_campaign_setting.location_source_type": "UNSPECIFIED", "campaign.manual_cpc.enhanced_cpc_enabled": false, "campaign.manual_cpm": "", "campaign.manual_cpv": "", "campaign.maximize_conversion_value.target_roas": 0.0, "campaign.maximize_conversions.target_cpa_micros": 0, "campaign.name": "Website traffic-Search-15", "campaign.network_settings.target_content_network": true, "campaign.network_settings.target_google_search": true, "campaign.network_settings.target_partner_search_network": false, "campaign.network_settings.target_search_network": true, "campaign.optimization_goal_setting.optimization_goal_types": [], "campaign.optimization_score": 0.0, "campaign.payment_mode": "CLICKS", "campaign.percent_cpc.cpc_bid_ceiling_micros": 0, "campaign.percent_cpc.enhanced_cpc_enabled": false, "campaign.real_time_bidding_setting.opt_in": false, "campaign.resource_name": "customers/4651612872/campaigns/16820250687", "campaign.selective_optimization.conversion_actions": [], "campaign.serving_status": "SERVING", "campaign.shopping_setting.campaign_priority": 0, "campaign.shopping_setting.enable_local": false, "campaign.shopping_setting.merchant_id": 0, "campaign.shopping_setting.sales_country": "", "campaign.start_date": "2022-04-08", "campaign.status": "PAUSED", "campaign.target_cpa.cpc_bid_ceiling_micros": 0, "campaign.target_cpa.cpc_bid_floor_micros": 0, "campaign.target_cpa.target_cpa_micros": 0, "campaign.target_cpm.target_frequency_goal.target_count": 0, "campaign.target_cpm.target_frequency_goal.time_unit": "UNSPECIFIED", "campaign.target_impression_share.cpc_bid_ceiling_micros": 0, "campaign.target_impression_share.location": "UNSPECIFIED", "campaign.target_impression_share.location_fraction_micros": 0, "campaign.target_roas.cpc_bid_ceiling_micros": 0, "campaign.target_roas.cpc_bid_floor_micros": 0, "campaign.target_roas.target_roas": 0.0, "campaign.target_spend.cpc_bid_ceiling_micros": 0, "campaign.target_spend.target_spend_micros": 0, "campaign.targeting_setting.target_restrictions": ["targeting_dimension: AUDIENCE\nbid_only: true\n"], "campaign.tracking_setting.tracking_url": "", "campaign.tracking_url_template": "", "campaign.url_custom_parameters": [], "campaign.vanity_pharma.vanity_pharma_display_url_mode": "UNSPECIFIED", "campaign.vanity_pharma.vanity_pharma_text": "UNSPECIFIED", "campaign.video_brand_safety_suitability": "UNSPECIFIED", "metrics.clicks": 0, "metrics.ctr": 0.0, "metrics.conversions": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 0, "metrics.impressions": 2.0, "metrics.video_views": 0.0, "metrics.video_quartile_p100_rate": 0.0, "metrics.active_view_cpm": 0.0, "metrics.active_view_ctr": 0.0, "metrics.active_view_impressions": 0, "metrics.active_view_measurability": 0.0, "metrics.active_view_measurable_cost_micros": 0, "metrics.active_view_measurable_impressions": 0, "metrics.active_view_viewability": 0.0, "metrics.average_cost": 0.0, "metrics.average_cpc": 0.0, "metrics.average_cpm": 0.0, "metrics.interactions": 0, "metrics.interaction_event_types": "[]", "metrics.value_per_conversion": 0.0, "metrics.cost_per_conversion": 0.0, "segments.date": "2022-05-18", "segments.hour": 2.0, "segments.ad_network_type": "SEARCH"}, "emitted_at": 1695379447029} -{"stream": "campaigns", "data": {"campaign.accessible_bidding_strategy": "", "campaign.ad_serving_optimization_status": "OPTIMIZE", "campaign.advertising_channel_sub_type": "UNSPECIFIED", "campaign.advertising_channel_type": "SEARCH", "campaign.app_campaign_setting.app_id": "", "campaign.app_campaign_setting.app_store": "UNSPECIFIED", "campaign.app_campaign_setting.bidding_strategy_goal_type": "UNSPECIFIED", "campaign.base_campaign": "customers/4651612872/campaigns/16820250687", "campaign.bidding_strategy": "", "campaign.bidding_strategy_type": "MAXIMIZE_CONVERSIONS", "campaign.campaign_budget": "customers/4651612872/campaignBudgets/12862729190", "campaign_budget.amount_micros": 1000000, "campaign.commission.commission_rate_micros": 0, "campaign.dynamic_search_ads_setting.domain_name": "", "campaign.dynamic_search_ads_setting.feeds": [], "campaign.dynamic_search_ads_setting.language_code": "", "campaign.dynamic_search_ads_setting.use_supplied_urls_only": false, "campaign.end_date": "2037-12-30", "campaign.excluded_parent_asset_field_types": [], "campaign.experiment_type": "BASE", "campaign.final_url_suffix": "", "campaign.frequency_caps": [], "campaign.geo_target_type_setting.negative_geo_target_type": "PRESENCE", "campaign.geo_target_type_setting.positive_geo_target_type": "PRESENCE_OR_INTEREST", "campaign.hotel_setting.hotel_center_id": 0, "campaign.id": 16820250687, "campaign.labels": ["customers/4651612872/labels/21906377810"], "campaign.local_campaign_setting.location_source_type": "UNSPECIFIED", "campaign.manual_cpc.enhanced_cpc_enabled": false, "campaign.manual_cpm": "", "campaign.manual_cpv": "", "campaign.maximize_conversion_value.target_roas": 0.0, "campaign.maximize_conversions.target_cpa_micros": 0, "campaign.name": "Website traffic-Search-15", "campaign.network_settings.target_content_network": true, "campaign.network_settings.target_google_search": true, "campaign.network_settings.target_partner_search_network": false, "campaign.network_settings.target_search_network": true, "campaign.optimization_goal_setting.optimization_goal_types": [], "campaign.optimization_score": 0.0, "campaign.payment_mode": "CLICKS", "campaign.percent_cpc.cpc_bid_ceiling_micros": 0, "campaign.percent_cpc.enhanced_cpc_enabled": false, "campaign.real_time_bidding_setting.opt_in": false, "campaign.resource_name": "customers/4651612872/campaigns/16820250687", "campaign.selective_optimization.conversion_actions": [], "campaign.serving_status": "SERVING", "campaign.shopping_setting.campaign_priority": 0, "campaign.shopping_setting.enable_local": false, "campaign.shopping_setting.merchant_id": 0, "campaign.shopping_setting.sales_country": "", "campaign.start_date": "2022-04-08", "campaign.status": "PAUSED", "campaign.target_cpa.cpc_bid_ceiling_micros": 0, "campaign.target_cpa.cpc_bid_floor_micros": 0, "campaign.target_cpa.target_cpa_micros": 0, "campaign.target_cpm.target_frequency_goal.target_count": 0, "campaign.target_cpm.target_frequency_goal.time_unit": "UNSPECIFIED", "campaign.target_impression_share.cpc_bid_ceiling_micros": 0, "campaign.target_impression_share.location": "UNSPECIFIED", "campaign.target_impression_share.location_fraction_micros": 0, "campaign.target_roas.cpc_bid_ceiling_micros": 0, "campaign.target_roas.cpc_bid_floor_micros": 0, "campaign.target_roas.target_roas": 0.0, "campaign.target_spend.cpc_bid_ceiling_micros": 0, "campaign.target_spend.target_spend_micros": 0, "campaign.targeting_setting.target_restrictions": ["targeting_dimension: AUDIENCE\nbid_only: true\n"], "campaign.tracking_setting.tracking_url": "", "campaign.tracking_url_template": "", "campaign.url_custom_parameters": [], "campaign.vanity_pharma.vanity_pharma_display_url_mode": "UNSPECIFIED", "campaign.vanity_pharma.vanity_pharma_text": "UNSPECIFIED", "campaign.video_brand_safety_suitability": "UNSPECIFIED", "metrics.clicks": 0, "metrics.ctr": 0.0, "metrics.conversions": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 0, "metrics.impressions": 2.0, "metrics.video_views": 0.0, "metrics.video_quartile_p100_rate": 0.0, "metrics.active_view_cpm": 0.0, "metrics.active_view_ctr": 0.0, "metrics.active_view_impressions": 0, "metrics.active_view_measurability": 0.0, "metrics.active_view_measurable_cost_micros": 0, "metrics.active_view_measurable_impressions": 0, "metrics.active_view_viewability": 0.0, "metrics.average_cost": 0.0, "metrics.average_cpc": 0.0, "metrics.average_cpm": 0.0, "metrics.interactions": 0, "metrics.interaction_event_types": "[]", "metrics.value_per_conversion": 0.0, "metrics.cost_per_conversion": 0.0, "segments.date": "2022-05-18", "segments.hour": 3.0, "segments.ad_network_type": "SEARCH"}, "emitted_at": 1695379447033} -{"stream": "custom_audience", "data": {"custom_audience.description": "", "custom_audience.name": "Airbyet", "custom_audience.id": 523469909, "custom_audience.members": ["member_type: KEYWORD\nkeyword: \"etl elt\"\n", "member_type: KEYWORD\nkeyword: \"cloud data management and analytics\"\n", "member_type: KEYWORD\nkeyword: \"data integration\"\n", "member_type: KEYWORD\nkeyword: \"big data analytics database\"\n", "member_type: KEYWORD\nkeyword: \"data\"\n", "member_type: KEYWORD\nkeyword: \"data sherid nada\"\n", "member_type: KEYWORD\nkeyword: \"airbyteforeveryone\"\n", "member_type: KEYWORD\nkeyword: \"Airbyte\"\n"], "custom_audience.resource_name": "customers/4651612872/customAudiences/523469909", "custom_audience.status": "ENABLED", "custom_audience.type": "AUTO"}, "emitted_at": 1695379453471} -{"stream": "display_keyword_performance_report", "data": {"customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "metrics.active_view_cpm": 10012000.0, "metrics.active_view_ctr": 0.0, "metrics.active_view_impressions": 1, "metrics.active_view_measurability": 1.0, "metrics.active_view_measurable_cost_micros": 10012, "metrics.active_view_measurable_impressions": 1, "metrics.active_view_viewability": 1.0, "ad_group.id": 143992182864, "ad_group.name": "Video Non-skippable - 2022-05-30", "ad_group.status": "ENABLED", "segments.ad_network_type": "YOUTUBE_WATCH", "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.all_conversions": 0.0, "metrics.average_cost": 0.0, "metrics.average_cpc": 0.0, "metrics.average_cpe": 0.0, "metrics.average_cpm": 10012000.0, "metrics.average_cpv": 0.0, "ad_group.base_ad_group": "customers/4651612872/adGroups/143992182864", "campaign.base_campaign": "customers/4651612872/campaigns/17354032686", "campaign.bidding_strategy": "", "campaign.bidding_strategy_type": "TARGET_CPM", "campaign.id": 17354032686, "campaign.name": "Video Non-skippable - 2022-05-30", "campaign.status": "ENABLED", "metrics.clicks": 0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.conversions": 0.0, "metrics.cost_micros": 10012, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "ad_group_criterion.effective_cpc_bid_micros": 10000, "ad_group_criterion.effective_cpc_bid_source": "AD_GROUP", "ad_group_criterion.effective_cpm_bid_micros": 10000, "ad_group_criterion.effective_cpm_bid_source": "AD_GROUP", "ad_group_criterion.effective_cpv_bid_micros": 10000, "ad_group_criterion.effective_cpv_bid_source": "AD_GROUP", "ad_group_criterion.keyword.text": "big data software", "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.0, "segments.day_of_week": "TUESDAY", "segments.device": "MOBILE", "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "customer.id": 4651612872, "ad_group_criterion.final_mobile_urls": [], "ad_group_criterion.final_urls": [], "metrics.gmail_forwards": 0, "metrics.gmail_saves": 0, "metrics.gmail_secondary_clicks": 0, "ad_group_criterion.criterion_id": 26160872903, "metrics.impressions": 1, "metrics.interaction_rate": 0.0, "metrics.interaction_event_types": [], "metrics.interactions": 0, "ad_group_criterion.negative": false, "ad_group.targeting_setting.target_restrictions": ["targeting_dimension: AGE_RANGE\nbid_only: true\n", "targeting_dimension: GENDER\nbid_only: true\n", "targeting_dimension: PARENTAL_STATUS\nbid_only: true\n", "targeting_dimension: INCOME_RANGE\nbid_only: true\n", "targeting_dimension: TOPIC\nbid_only: false\n"], "segments.month": "2022-05-01", "segments.quarter": "2022-04-01", "ad_group_criterion.status": "ENABLED", "ad_group_criterion.tracking_url_template": "", "ad_group_criterion.keyword.match_type": "BROAD", "ad_group_criterion.url_custom_parameters": [], "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_quartile_p100_rate": 0.0, "metrics.video_quartile_p25_rate": 0.0, "metrics.video_quartile_p50_rate": 0.0, "metrics.video_quartile_p75_rate": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0, "segments.week": "2022-05-30", "segments.year": 2022, "segments.date": "2022-05-31"}, "emitted_at": 1695379437529} -{"stream": "geographic_report", "data": {"customer.id": 4651612872, "customer.descriptive_name": "Airbyte", "geographic_view.country_criterion_id": 2840, "geographic_view.location_type": "AREA_OF_INTEREST", "ad_group.id": 137020701042, "segments.date": "2022-05-18"}, "emitted_at": 1695379434298} -{"stream": "geographic_report", "data": {"customer.id": 4651612872, "customer.descriptive_name": "Airbyte", "geographic_view.country_criterion_id": 2124, "geographic_view.location_type": "LOCATION_OF_PRESENCE", "ad_group.id": 137020701042, "segments.date": "2022-05-18"}, "emitted_at": 1695379434299} -{"stream": "geographic_report", "data": {"customer.id": 4651612872, "customer.descriptive_name": "Airbyte", "geographic_view.country_criterion_id": 2840, "geographic_view.location_type": "LOCATION_OF_PRESENCE", "ad_group.id": 137020701042, "segments.date": "2022-05-18"}, "emitted_at": 1695379434299} -{"stream": "happytable", "data": {"campaign.accessible_bidding_strategy": "", "segments.ad_destination_type": "NOT_APPLICABLE", "campaign.start_date": "2022-04-08", "campaign.end_date": "2037-12-30", "segments.date": "2022-05-18"}, "emitted_at": 1695379452375} -{"stream": "happytable", "data": {"campaign.accessible_bidding_strategy": "", "segments.ad_destination_type": "NOT_APPLICABLE", "campaign.start_date": "2022-04-08", "campaign.end_date": "2037-12-30", "segments.date": "2022-05-19"}, "emitted_at": 1695379452377} -{"stream": "happytable", "data": {"campaign.accessible_bidding_strategy": "", "segments.ad_destination_type": "NOT_APPLICABLE", "campaign.start_date": "2022-04-08", "campaign.end_date": "2037-12-30", "segments.date": "2022-05-20"}, "emitted_at": 1695379452378} -{"stream": "keyword_report", "data": {"customer.id": 4651612872, "customer.descriptive_name": "Airbyte", "campaign.id": 16820250687, "ad_group.id": 137020701042, "ad_group_criterion.type": "KEYWORD", "ad_group_criterion.keyword.text": "data integration software", "ad_group_criterion.negative": false, "ad_group_criterion.keyword.match_type": "BROAD", "metrics.historical_quality_score": 0, "metrics.ctr": 0.0, "segments.date": "2022-05-18", "campaign.bidding_strategy_type": "MAXIMIZE_CONVERSIONS", "metrics.clicks": 0, "metrics.cost_micros": 0, "metrics.impressions": 2, "metrics.active_view_impressions": 0, "metrics.active_view_measurability": 0.0, "metrics.active_view_measurable_cost_micros": 0, "metrics.active_view_measurable_impressions": 0, "metrics.active_view_viewability": 0.0, "metrics.conversions": 0.0, "metrics.conversions_value": 0.0, "metrics.interactions": 0, "metrics.interaction_event_types": [], "metrics.view_through_conversions": 0, "ad_group_criterion.criterion_id": 18697003}, "emitted_at": 1695379435658} -{"stream": "keyword_report", "data": {"customer.id": 4651612872, "customer.descriptive_name": "Airbyte", "campaign.id": 16820250687, "ad_group.id": 137020701042, "ad_group_criterion.type": "KEYWORD", "ad_group_criterion.keyword.text": "informatica software", "ad_group_criterion.negative": false, "ad_group_criterion.keyword.match_type": "BROAD", "metrics.historical_quality_score": 0, "metrics.ctr": 0.0, "segments.date": "2022-05-18", "campaign.bidding_strategy_type": "MAXIMIZE_CONVERSIONS", "metrics.clicks": 0, "metrics.cost_micros": 0, "metrics.impressions": 3, "metrics.active_view_impressions": 0, "metrics.active_view_measurability": 0.0, "metrics.active_view_measurable_cost_micros": 0, "metrics.active_view_measurable_impressions": 0, "metrics.active_view_viewability": 0.0, "metrics.conversions": 0.0, "metrics.conversions_value": 0.0, "metrics.interactions": 0, "metrics.interaction_event_types": [], "metrics.view_through_conversions": 0, "ad_group_criterion.criterion_id": 27723800}, "emitted_at": 1695379435661} -{"stream": "keyword_report", "data": {"customer.id": 4651612872, "customer.descriptive_name": "Airbyte", "campaign.id": 16820250687, "ad_group.id": 137020701042, "ad_group_criterion.type": "KEYWORD", "ad_group_criterion.keyword.text": "etl extract transform load", "ad_group_criterion.negative": false, "ad_group_criterion.keyword.match_type": "BROAD", "metrics.historical_quality_score": 0, "metrics.ctr": 0.0, "segments.date": "2022-05-18", "campaign.bidding_strategy_type": "MAXIMIZE_CONVERSIONS", "metrics.clicks": 0, "metrics.cost_micros": 0, "metrics.impressions": 4, "metrics.active_view_impressions": 0, "metrics.active_view_measurability": 0.0, "metrics.active_view_measurable_cost_micros": 0, "metrics.active_view_measurable_impressions": 0, "metrics.active_view_viewability": 0.0, "metrics.conversions": 0.0, "metrics.conversions_value": 0.0, "metrics.interactions": 0, "metrics.interaction_event_types": [], "metrics.view_through_conversions": 0, "ad_group_criterion.criterion_id": 439152736}, "emitted_at": 1695379435663} -{"stream": "labels", "data": {"customer.id": 4651612872, "label.id": 21585034471, "label.name": "edgao-example-label", "label.resource_name": "customers/4651612872/labels/21585034471", "label.status": "ENABLED", "label.text_label.background_color": "#E993EB", "label.text_label.description": "example label for edgao"}, "emitted_at": 1695379458979} -{"stream": "labels", "data": {"customer.id": 4651612872, "label.id": 21902092838, "label.name": "Test Label", "label.resource_name": "customers/4651612872/labels/21902092838", "label.status": "ENABLED", "label.text_label.background_color": "#8BCBD2", "label.text_label.description": "Description to test label"}, "emitted_at": 1695379458981} -{"stream": "labels", "data": {"customer.id": 4651612872, "label.id": 21906377810, "label.name": "Test Delete label customer", "label.resource_name": "customers/4651612872/labels/21906377810", "label.status": "ENABLED", "label.text_label.background_color": "#8266C9", "label.text_label.description": ""}, "emitted_at": 1695379458982} -{"stream": "user_interest", "data": {"user_interest.availabilities": [], "user_interest.launched_to_all": true, "user_interest.name": "Arts & Entertainment", "user_interest.resource_name": "customers/4651612872/userInterests/3", "user_interest.taxonomy_type": "VERTICAL_GEO", "user_interest.user_interest_id": 3, "user_interest.user_interest_parent": ""}, "emitted_at": 1695379455931} -{"stream": "user_interest", "data": {"user_interest.availabilities": [], "user_interest.launched_to_all": true, "user_interest.name": "Computers & Electronics", "user_interest.resource_name": "customers/4651612872/userInterests/5", "user_interest.taxonomy_type": "VERTICAL_GEO", "user_interest.user_interest_id": 5, "user_interest.user_interest_parent": ""}, "emitted_at": 1695379455932} -{"stream": "user_interest", "data": {"user_interest.availabilities": [], "user_interest.launched_to_all": true, "user_interest.name": "Finance", "user_interest.resource_name": "customers/4651612872/userInterests/7", "user_interest.taxonomy_type": "VERTICAL_GEO", "user_interest.user_interest_id": 7, "user_interest.user_interest_parent": ""}, "emitted_at": 1695379455933} -{"stream": "user_location_report", "data": {"segments.date": "2022-05-18", "segments.day_of_week": "WEDNESDAY", "segments.month": "2022-05-01", "segments.week": "2022-05-16", "segments.quarter": "2022-04-01", "segments.year": 2022, "segments.ad_network_type": "SEARCH", "customer.currency_code": "USD", "customer.id": 4651612872, "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "user_location_view.country_criterion_id": 2356, "user_location_view.targeting_location": false, "user_location_view.resource_name": "customers/4651612872/userLocationViews/2356~false", "campaign.base_campaign": "customers/4651612872/campaigns/16820250687", "campaign.id": 16820250687, "campaign.name": "Website traffic-Search-15", "campaign.status": "PAUSED", "ad_group.name": "\u0413\u0440\u0443\u043f\u043f\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0439\u00a02", "ad_group.status": "ENABLED", "ad_group.base_ad_group": "customers/4651612872/adGroups/137020701042", "metrics.all_conversions": 0.0, "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.average_cost": 0.0, "metrics.average_cpc": 0.0, "metrics.average_cpm": 0.0, "metrics.average_cpv": 0.0, "metrics.clicks": 0, "metrics.conversions": 0.0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 0, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.0, "metrics.impressions": 3, "metrics.interaction_event_types": [], "metrics.interaction_rate": 0.0, "metrics.interactions": 0, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0}, "emitted_at": 1695379450675} -{"stream": "user_location_report", "data": {"segments.date": "2022-05-18", "segments.day_of_week": "WEDNESDAY", "segments.month": "2022-05-01", "segments.week": "2022-05-16", "segments.quarter": "2022-04-01", "segments.year": 2022, "segments.ad_network_type": "SEARCH", "customer.currency_code": "USD", "customer.id": 4651612872, "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "user_location_view.country_criterion_id": 2484, "user_location_view.targeting_location": false, "user_location_view.resource_name": "customers/4651612872/userLocationViews/2484~false", "campaign.base_campaign": "customers/4651612872/campaigns/16820250687", "campaign.id": 16820250687, "campaign.name": "Website traffic-Search-15", "campaign.status": "PAUSED", "ad_group.name": "\u0413\u0440\u0443\u043f\u043f\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0439\u00a02", "ad_group.status": "ENABLED", "ad_group.base_ad_group": "customers/4651612872/adGroups/137020701042", "metrics.all_conversions": 0.0, "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.average_cost": 0.0, "metrics.average_cpc": 0.0, "metrics.average_cpm": 0.0, "metrics.average_cpv": 0.0, "metrics.clicks": 0, "metrics.conversions": 0.0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 0, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.0, "metrics.impressions": 1, "metrics.interaction_event_types": [], "metrics.interaction_rate": 0.0, "metrics.interactions": 0, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0}, "emitted_at": 1695379450677} -{"stream": "user_location_report", "data": {"segments.date": "2022-05-18", "segments.day_of_week": "WEDNESDAY", "segments.month": "2022-05-01", "segments.week": "2022-05-16", "segments.quarter": "2022-04-01", "segments.year": 2022, "segments.ad_network_type": "SEARCH", "customer.currency_code": "USD", "customer.id": 4651612872, "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "user_location_view.country_criterion_id": 2124, "user_location_view.targeting_location": true, "user_location_view.resource_name": "customers/4651612872/userLocationViews/2124~true", "campaign.base_campaign": "customers/4651612872/campaigns/16820250687", "campaign.id": 16820250687, "campaign.name": "Website traffic-Search-15", "campaign.status": "PAUSED", "ad_group.name": "\u0413\u0440\u0443\u043f\u043f\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0439\u00a02", "ad_group.status": "ENABLED", "ad_group.base_ad_group": "customers/4651612872/adGroups/137020701042", "metrics.all_conversions": 0.0, "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.average_cost": 253333.33333333334, "metrics.average_cpc": 253333.33333333334, "metrics.average_cpm": 36190476.190476194, "metrics.average_cpv": 0.0, "metrics.clicks": 3, "metrics.conversions": 0.0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 760000, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.14285714285714285, "metrics.impressions": 21, "metrics.interaction_event_types": ["InteractionEventType.CLICK"], "metrics.interaction_rate": 0.14285714285714285, "metrics.interactions": 3, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0}, "emitted_at": 1695379450678} +{"stream": "ad_group_ads", "data": {"ad_group.id": 137020701042, "ad_group_ad.ad.added_by_google_ads": false, "ad_group_ad.ad.app_ad.descriptions": [], "ad_group_ad.ad.app_ad.headlines": [], "ad_group_ad.ad.app_ad.html5_media_bundles": [], "ad_group_ad.ad.app_ad.images": [], "ad_group_ad.ad.app_ad.mandatory_ad_text": "", "ad_group_ad.ad.app_ad.youtube_videos": [], "ad_group_ad.ad.app_engagement_ad.descriptions": [], "ad_group_ad.ad.app_engagement_ad.headlines": [], "ad_group_ad.ad.app_engagement_ad.images": [], "ad_group_ad.ad.app_engagement_ad.videos": [], "ad_group_ad.ad.call_ad.business_name": "", "ad_group_ad.ad.call_ad.call_tracked": false, "ad_group_ad.ad.call_ad.conversion_action": "", "ad_group_ad.ad.call_ad.conversion_reporting_state": "UNSPECIFIED", "ad_group_ad.ad.call_ad.country_code": "", "ad_group_ad.ad.call_ad.description1": "", "ad_group_ad.ad.call_ad.description2": "", "ad_group_ad.ad.call_ad.disable_call_conversion": false, "ad_group_ad.ad.call_ad.headline1": "", "ad_group_ad.ad.call_ad.headline2": "", "ad_group_ad.ad.call_ad.path1": "", "ad_group_ad.ad.call_ad.path2": "", "ad_group_ad.ad.call_ad.phone_number": "", "ad_group_ad.ad.call_ad.phone_number_verification_url": "", "ad_group_ad.ad.device_preference": "UNSPECIFIED", "ad_group_ad.ad.display_upload_ad.display_upload_product_type": "UNSPECIFIED", "ad_group_ad.ad.display_upload_ad.media_bundle": "", "ad_group_ad.ad.display_url": "", "ad_group_ad.ad.expanded_dynamic_search_ad.description": "", "ad_group_ad.ad.expanded_dynamic_search_ad.description2": "", "ad_group_ad.ad.expanded_text_ad.description": "", "ad_group_ad.ad.expanded_text_ad.description2": "", "ad_group_ad.ad.expanded_text_ad.headline_part1": "", "ad_group_ad.ad.expanded_text_ad.headline_part2": "", "ad_group_ad.ad.expanded_text_ad.headline_part3": "", "ad_group_ad.ad.expanded_text_ad.path1": "", "ad_group_ad.ad.expanded_text_ad.path2": "", "ad_group_ad.ad.final_app_urls": [], "ad_group_ad.ad.final_mobile_urls": [], "ad_group_ad.ad.final_url_suffix": "", "ad_group_ad.ad.final_urls": ["https://airbyte.com"], "ad_group_ad.ad.hotel_ad": "", "ad_group_ad.ad.id": 592078631218, "ad_group_ad.ad.image_ad.image_url": "", "ad_group_ad.ad.image_ad.mime_type": "UNSPECIFIED", "ad_group_ad.ad.image_ad.name": "", "ad_group_ad.ad.image_ad.pixel_height": 0, "ad_group_ad.ad.image_ad.pixel_width": 0, "ad_group_ad.ad.image_ad.preview_image_url": "", "ad_group_ad.ad.image_ad.preview_pixel_height": 0, "ad_group_ad.ad.image_ad.preview_pixel_width": 0, "ad_group_ad.ad.legacy_app_install_ad": "", "ad_group_ad.ad.legacy_responsive_display_ad.accent_color": "", "ad_group_ad.ad.legacy_responsive_display_ad.allow_flexible_color": false, "ad_group_ad.ad.legacy_responsive_display_ad.business_name": "", "ad_group_ad.ad.legacy_responsive_display_ad.call_to_action_text": "", "ad_group_ad.ad.legacy_responsive_display_ad.description": "", "ad_group_ad.ad.legacy_responsive_display_ad.format_setting": "UNSPECIFIED", "ad_group_ad.ad.legacy_responsive_display_ad.logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.long_headline": "", "ad_group_ad.ad.legacy_responsive_display_ad.main_color": "", "ad_group_ad.ad.legacy_responsive_display_ad.marketing_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.price_prefix": "", "ad_group_ad.ad.legacy_responsive_display_ad.promo_text": "", "ad_group_ad.ad.legacy_responsive_display_ad.short_headline": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_marketing_image": "", "ad_group_ad.ad.local_ad.call_to_actions": [], "ad_group_ad.ad.local_ad.descriptions": [], "ad_group_ad.ad.local_ad.headlines": [], "ad_group_ad.ad.local_ad.logo_images": [], "ad_group_ad.ad.local_ad.marketing_images": [], "ad_group_ad.ad.local_ad.path1": "", "ad_group_ad.ad.local_ad.path2": "", "ad_group_ad.ad.local_ad.videos": [], "ad_group_ad.ad.name": "", "ad_group_ad.ad.resource_name": "customers/4651612872/ads/592078631218", "ad_group_ad.ad.responsive_display_ad.accent_color": "", "ad_group_ad.ad.responsive_display_ad.allow_flexible_color": false, "ad_group_ad.ad.responsive_display_ad.business_name": "", "ad_group_ad.ad.responsive_display_ad.call_to_action_text": "", "ad_group_ad.ad.responsive_display_ad.control_spec.enable_asset_enhancements": false, "ad_group_ad.ad.responsive_display_ad.control_spec.enable_autogen_video": false, "ad_group_ad.ad.responsive_display_ad.descriptions": [], "ad_group_ad.ad.responsive_display_ad.format_setting": "UNSPECIFIED", "ad_group_ad.ad.responsive_display_ad.headlines": [], "ad_group_ad.ad.responsive_display_ad.logo_images": [], "ad_group_ad.ad.responsive_display_ad.long_headline": "", "ad_group_ad.ad.responsive_display_ad.main_color": "", "ad_group_ad.ad.responsive_display_ad.marketing_images": [], "ad_group_ad.ad.responsive_display_ad.price_prefix": "", "ad_group_ad.ad.responsive_display_ad.promo_text": "", "ad_group_ad.ad.responsive_display_ad.square_logo_images": [], "ad_group_ad.ad.responsive_display_ad.square_marketing_images": [], "ad_group_ad.ad.responsive_display_ad.youtube_videos": [], "ad_group_ad.ad.responsive_search_ad.descriptions": ["text: \"Behind The Scenes: Testing The Airbyte Maintainer Program\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Airbyte | Open-Source Data Integration Platform | ELT tool\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Upgrading Our Discourse And Slack To Support Our Community Growth\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Consolidate your data in your data warehouses, lakes and databases\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n"], "ad_group_ad.ad.responsive_search_ad.headlines": ["text: \"Airbyte\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"ELT tool\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Open-source Data Integration\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n"], "ad_group_ad.ad.responsive_search_ad.path1": "", "ad_group_ad.ad.responsive_search_ad.path2": "", "ad_group_ad.ad.shopping_comparison_listing_ad.headline": "", "ad_group_ad.ad.shopping_product_ad": "", "ad_group_ad.ad.shopping_smart_ad": "", "ad_group_ad.ad.smart_campaign_ad.descriptions": [], "ad_group_ad.ad.smart_campaign_ad.headlines": [], "ad_group_ad.ad.system_managed_resource_source": "UNSPECIFIED", "ad_group_ad.ad.text_ad.description1": "", "ad_group_ad.ad.text_ad.description2": "", "ad_group_ad.ad.text_ad.headline": "", "ad_group_ad.ad.tracking_url_template": "", "ad_group_ad.ad.type": "RESPONSIVE_SEARCH_AD", "ad_group_ad.ad.url_collections": [], "ad_group_ad.ad.url_custom_parameters": [], "ad_group_ad.ad.video_ad.in_feed.description1": "", "ad_group_ad.ad.video_ad.in_feed.description2": "", "ad_group_ad.ad.video_ad.in_feed.headline": "", "ad_group_ad.ad.video_ad.in_stream.action_button_label": "", "ad_group_ad.ad.video_ad.in_stream.action_headline": "", "ad_group_ad.ad.video_ad.out_stream.description": "", "ad_group_ad.ad.video_ad.out_stream.headline": "", "ad_group_ad.ad.video_responsive_ad.call_to_actions": [], "ad_group_ad.ad.video_responsive_ad.companion_banners": [], "ad_group_ad.ad.video_responsive_ad.descriptions": [], "ad_group_ad.ad.video_responsive_ad.headlines": [], "ad_group_ad.ad.video_responsive_ad.long_headlines": [], "ad_group_ad.ad.video_responsive_ad.videos": [], "ad_group_ad.ad_group": "customers/4651612872/adGroups/137020701042", "ad_group_ad.ad_strength": "POOR", "ad_group_ad.labels": ["customers/4651612872/labels/21906377810"], "ad_group_ad.policy_summary.approval_status": "APPROVED", "ad_group_ad.policy_summary.policy_topic_entries": [], "ad_group_ad.policy_summary.review_status": "REVIEWED", "ad_group_ad.resource_name": "customers/4651612872/adGroupAds/137020701042~592078631218", "ad_group_ad.status": "ENABLED", "segments.date": "2022-05-18"}, "emitted_at": 1697021382696} +{"stream": "ad_group_ads", "data": {"ad_group.id": 137020701042, "ad_group_ad.ad.added_by_google_ads": false, "ad_group_ad.ad.app_ad.descriptions": [], "ad_group_ad.ad.app_ad.headlines": [], "ad_group_ad.ad.app_ad.html5_media_bundles": [], "ad_group_ad.ad.app_ad.images": [], "ad_group_ad.ad.app_ad.mandatory_ad_text": "", "ad_group_ad.ad.app_ad.youtube_videos": [], "ad_group_ad.ad.app_engagement_ad.descriptions": [], "ad_group_ad.ad.app_engagement_ad.headlines": [], "ad_group_ad.ad.app_engagement_ad.images": [], "ad_group_ad.ad.app_engagement_ad.videos": [], "ad_group_ad.ad.call_ad.business_name": "", "ad_group_ad.ad.call_ad.call_tracked": false, "ad_group_ad.ad.call_ad.conversion_action": "", "ad_group_ad.ad.call_ad.conversion_reporting_state": "UNSPECIFIED", "ad_group_ad.ad.call_ad.country_code": "", "ad_group_ad.ad.call_ad.description1": "", "ad_group_ad.ad.call_ad.description2": "", "ad_group_ad.ad.call_ad.disable_call_conversion": false, "ad_group_ad.ad.call_ad.headline1": "", "ad_group_ad.ad.call_ad.headline2": "", "ad_group_ad.ad.call_ad.path1": "", "ad_group_ad.ad.call_ad.path2": "", "ad_group_ad.ad.call_ad.phone_number": "", "ad_group_ad.ad.call_ad.phone_number_verification_url": "", "ad_group_ad.ad.device_preference": "UNSPECIFIED", "ad_group_ad.ad.display_upload_ad.display_upload_product_type": "UNSPECIFIED", "ad_group_ad.ad.display_upload_ad.media_bundle": "", "ad_group_ad.ad.display_url": "", "ad_group_ad.ad.expanded_dynamic_search_ad.description": "", "ad_group_ad.ad.expanded_dynamic_search_ad.description2": "", "ad_group_ad.ad.expanded_text_ad.description": "", "ad_group_ad.ad.expanded_text_ad.description2": "", "ad_group_ad.ad.expanded_text_ad.headline_part1": "", "ad_group_ad.ad.expanded_text_ad.headline_part2": "", "ad_group_ad.ad.expanded_text_ad.headline_part3": "", "ad_group_ad.ad.expanded_text_ad.path1": "", "ad_group_ad.ad.expanded_text_ad.path2": "", "ad_group_ad.ad.final_app_urls": [], "ad_group_ad.ad.final_mobile_urls": [], "ad_group_ad.ad.final_url_suffix": "", "ad_group_ad.ad.final_urls": ["https://airbyte.com"], "ad_group_ad.ad.hotel_ad": "", "ad_group_ad.ad.id": 592078631218, "ad_group_ad.ad.image_ad.image_url": "", "ad_group_ad.ad.image_ad.mime_type": "UNSPECIFIED", "ad_group_ad.ad.image_ad.name": "", "ad_group_ad.ad.image_ad.pixel_height": 0, "ad_group_ad.ad.image_ad.pixel_width": 0, "ad_group_ad.ad.image_ad.preview_image_url": "", "ad_group_ad.ad.image_ad.preview_pixel_height": 0, "ad_group_ad.ad.image_ad.preview_pixel_width": 0, "ad_group_ad.ad.legacy_app_install_ad": "", "ad_group_ad.ad.legacy_responsive_display_ad.accent_color": "", "ad_group_ad.ad.legacy_responsive_display_ad.allow_flexible_color": false, "ad_group_ad.ad.legacy_responsive_display_ad.business_name": "", "ad_group_ad.ad.legacy_responsive_display_ad.call_to_action_text": "", "ad_group_ad.ad.legacy_responsive_display_ad.description": "", "ad_group_ad.ad.legacy_responsive_display_ad.format_setting": "UNSPECIFIED", "ad_group_ad.ad.legacy_responsive_display_ad.logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.long_headline": "", "ad_group_ad.ad.legacy_responsive_display_ad.main_color": "", "ad_group_ad.ad.legacy_responsive_display_ad.marketing_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.price_prefix": "", "ad_group_ad.ad.legacy_responsive_display_ad.promo_text": "", "ad_group_ad.ad.legacy_responsive_display_ad.short_headline": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_marketing_image": "", "ad_group_ad.ad.local_ad.call_to_actions": [], "ad_group_ad.ad.local_ad.descriptions": [], "ad_group_ad.ad.local_ad.headlines": [], "ad_group_ad.ad.local_ad.logo_images": [], "ad_group_ad.ad.local_ad.marketing_images": [], "ad_group_ad.ad.local_ad.path1": "", "ad_group_ad.ad.local_ad.path2": "", "ad_group_ad.ad.local_ad.videos": [], "ad_group_ad.ad.name": "", "ad_group_ad.ad.resource_name": "customers/4651612872/ads/592078631218", "ad_group_ad.ad.responsive_display_ad.accent_color": "", "ad_group_ad.ad.responsive_display_ad.allow_flexible_color": false, "ad_group_ad.ad.responsive_display_ad.business_name": "", "ad_group_ad.ad.responsive_display_ad.call_to_action_text": "", "ad_group_ad.ad.responsive_display_ad.control_spec.enable_asset_enhancements": false, "ad_group_ad.ad.responsive_display_ad.control_spec.enable_autogen_video": false, "ad_group_ad.ad.responsive_display_ad.descriptions": [], "ad_group_ad.ad.responsive_display_ad.format_setting": "UNSPECIFIED", "ad_group_ad.ad.responsive_display_ad.headlines": [], "ad_group_ad.ad.responsive_display_ad.logo_images": [], "ad_group_ad.ad.responsive_display_ad.long_headline": "", "ad_group_ad.ad.responsive_display_ad.main_color": "", "ad_group_ad.ad.responsive_display_ad.marketing_images": [], "ad_group_ad.ad.responsive_display_ad.price_prefix": "", "ad_group_ad.ad.responsive_display_ad.promo_text": "", "ad_group_ad.ad.responsive_display_ad.square_logo_images": [], "ad_group_ad.ad.responsive_display_ad.square_marketing_images": [], "ad_group_ad.ad.responsive_display_ad.youtube_videos": [], "ad_group_ad.ad.responsive_search_ad.descriptions": ["text: \"Behind The Scenes: Testing The Airbyte Maintainer Program\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Airbyte | Open-Source Data Integration Platform | ELT tool\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Upgrading Our Discourse And Slack To Support Our Community Growth\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Consolidate your data in your data warehouses, lakes and databases\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n"], "ad_group_ad.ad.responsive_search_ad.headlines": ["text: \"Airbyte\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"ELT tool\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Open-source Data Integration\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n"], "ad_group_ad.ad.responsive_search_ad.path1": "", "ad_group_ad.ad.responsive_search_ad.path2": "", "ad_group_ad.ad.shopping_comparison_listing_ad.headline": "", "ad_group_ad.ad.shopping_product_ad": "", "ad_group_ad.ad.shopping_smart_ad": "", "ad_group_ad.ad.smart_campaign_ad.descriptions": [], "ad_group_ad.ad.smart_campaign_ad.headlines": [], "ad_group_ad.ad.system_managed_resource_source": "UNSPECIFIED", "ad_group_ad.ad.text_ad.description1": "", "ad_group_ad.ad.text_ad.description2": "", "ad_group_ad.ad.text_ad.headline": "", "ad_group_ad.ad.tracking_url_template": "", "ad_group_ad.ad.type": "RESPONSIVE_SEARCH_AD", "ad_group_ad.ad.url_collections": [], "ad_group_ad.ad.url_custom_parameters": [], "ad_group_ad.ad.video_ad.in_feed.description1": "", "ad_group_ad.ad.video_ad.in_feed.description2": "", "ad_group_ad.ad.video_ad.in_feed.headline": "", "ad_group_ad.ad.video_ad.in_stream.action_button_label": "", "ad_group_ad.ad.video_ad.in_stream.action_headline": "", "ad_group_ad.ad.video_ad.out_stream.description": "", "ad_group_ad.ad.video_ad.out_stream.headline": "", "ad_group_ad.ad.video_responsive_ad.call_to_actions": [], "ad_group_ad.ad.video_responsive_ad.companion_banners": [], "ad_group_ad.ad.video_responsive_ad.descriptions": [], "ad_group_ad.ad.video_responsive_ad.headlines": [], "ad_group_ad.ad.video_responsive_ad.long_headlines": [], "ad_group_ad.ad.video_responsive_ad.videos": [], "ad_group_ad.ad_group": "customers/4651612872/adGroups/137020701042", "ad_group_ad.ad_strength": "POOR", "ad_group_ad.labels": ["customers/4651612872/labels/21906377810"], "ad_group_ad.policy_summary.approval_status": "APPROVED", "ad_group_ad.policy_summary.policy_topic_entries": [], "ad_group_ad.policy_summary.review_status": "REVIEWED", "ad_group_ad.resource_name": "customers/4651612872/adGroupAds/137020701042~592078631218", "ad_group_ad.status": "ENABLED", "segments.date": "2022-05-19"}, "emitted_at": 1697021382704} +{"stream": "ad_group_ads", "data": {"ad_group.id": 137020701042, "ad_group_ad.ad.added_by_google_ads": false, "ad_group_ad.ad.app_ad.descriptions": [], "ad_group_ad.ad.app_ad.headlines": [], "ad_group_ad.ad.app_ad.html5_media_bundles": [], "ad_group_ad.ad.app_ad.images": [], "ad_group_ad.ad.app_ad.mandatory_ad_text": "", "ad_group_ad.ad.app_ad.youtube_videos": [], "ad_group_ad.ad.app_engagement_ad.descriptions": [], "ad_group_ad.ad.app_engagement_ad.headlines": [], "ad_group_ad.ad.app_engagement_ad.images": [], "ad_group_ad.ad.app_engagement_ad.videos": [], "ad_group_ad.ad.call_ad.business_name": "", "ad_group_ad.ad.call_ad.call_tracked": false, "ad_group_ad.ad.call_ad.conversion_action": "", "ad_group_ad.ad.call_ad.conversion_reporting_state": "UNSPECIFIED", "ad_group_ad.ad.call_ad.country_code": "", "ad_group_ad.ad.call_ad.description1": "", "ad_group_ad.ad.call_ad.description2": "", "ad_group_ad.ad.call_ad.disable_call_conversion": false, "ad_group_ad.ad.call_ad.headline1": "", "ad_group_ad.ad.call_ad.headline2": "", "ad_group_ad.ad.call_ad.path1": "", "ad_group_ad.ad.call_ad.path2": "", "ad_group_ad.ad.call_ad.phone_number": "", "ad_group_ad.ad.call_ad.phone_number_verification_url": "", "ad_group_ad.ad.device_preference": "UNSPECIFIED", "ad_group_ad.ad.display_upload_ad.display_upload_product_type": "UNSPECIFIED", "ad_group_ad.ad.display_upload_ad.media_bundle": "", "ad_group_ad.ad.display_url": "", "ad_group_ad.ad.expanded_dynamic_search_ad.description": "", "ad_group_ad.ad.expanded_dynamic_search_ad.description2": "", "ad_group_ad.ad.expanded_text_ad.description": "", "ad_group_ad.ad.expanded_text_ad.description2": "", "ad_group_ad.ad.expanded_text_ad.headline_part1": "", "ad_group_ad.ad.expanded_text_ad.headline_part2": "", "ad_group_ad.ad.expanded_text_ad.headline_part3": "", "ad_group_ad.ad.expanded_text_ad.path1": "", "ad_group_ad.ad.expanded_text_ad.path2": "", "ad_group_ad.ad.final_app_urls": [], "ad_group_ad.ad.final_mobile_urls": [], "ad_group_ad.ad.final_url_suffix": "", "ad_group_ad.ad.final_urls": ["https://airbyte.com"], "ad_group_ad.ad.hotel_ad": "", "ad_group_ad.ad.id": 592078631218, "ad_group_ad.ad.image_ad.image_url": "", "ad_group_ad.ad.image_ad.mime_type": "UNSPECIFIED", "ad_group_ad.ad.image_ad.name": "", "ad_group_ad.ad.image_ad.pixel_height": 0, "ad_group_ad.ad.image_ad.pixel_width": 0, "ad_group_ad.ad.image_ad.preview_image_url": "", "ad_group_ad.ad.image_ad.preview_pixel_height": 0, "ad_group_ad.ad.image_ad.preview_pixel_width": 0, "ad_group_ad.ad.legacy_app_install_ad": "", "ad_group_ad.ad.legacy_responsive_display_ad.accent_color": "", "ad_group_ad.ad.legacy_responsive_display_ad.allow_flexible_color": false, "ad_group_ad.ad.legacy_responsive_display_ad.business_name": "", "ad_group_ad.ad.legacy_responsive_display_ad.call_to_action_text": "", "ad_group_ad.ad.legacy_responsive_display_ad.description": "", "ad_group_ad.ad.legacy_responsive_display_ad.format_setting": "UNSPECIFIED", "ad_group_ad.ad.legacy_responsive_display_ad.logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.long_headline": "", "ad_group_ad.ad.legacy_responsive_display_ad.main_color": "", "ad_group_ad.ad.legacy_responsive_display_ad.marketing_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.price_prefix": "", "ad_group_ad.ad.legacy_responsive_display_ad.promo_text": "", "ad_group_ad.ad.legacy_responsive_display_ad.short_headline": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_marketing_image": "", "ad_group_ad.ad.local_ad.call_to_actions": [], "ad_group_ad.ad.local_ad.descriptions": [], "ad_group_ad.ad.local_ad.headlines": [], "ad_group_ad.ad.local_ad.logo_images": [], "ad_group_ad.ad.local_ad.marketing_images": [], "ad_group_ad.ad.local_ad.path1": "", "ad_group_ad.ad.local_ad.path2": "", "ad_group_ad.ad.local_ad.videos": [], "ad_group_ad.ad.name": "", "ad_group_ad.ad.resource_name": "customers/4651612872/ads/592078631218", "ad_group_ad.ad.responsive_display_ad.accent_color": "", "ad_group_ad.ad.responsive_display_ad.allow_flexible_color": false, "ad_group_ad.ad.responsive_display_ad.business_name": "", "ad_group_ad.ad.responsive_display_ad.call_to_action_text": "", "ad_group_ad.ad.responsive_display_ad.control_spec.enable_asset_enhancements": false, "ad_group_ad.ad.responsive_display_ad.control_spec.enable_autogen_video": false, "ad_group_ad.ad.responsive_display_ad.descriptions": [], "ad_group_ad.ad.responsive_display_ad.format_setting": "UNSPECIFIED", "ad_group_ad.ad.responsive_display_ad.headlines": [], "ad_group_ad.ad.responsive_display_ad.logo_images": [], "ad_group_ad.ad.responsive_display_ad.long_headline": "", "ad_group_ad.ad.responsive_display_ad.main_color": "", "ad_group_ad.ad.responsive_display_ad.marketing_images": [], "ad_group_ad.ad.responsive_display_ad.price_prefix": "", "ad_group_ad.ad.responsive_display_ad.promo_text": "", "ad_group_ad.ad.responsive_display_ad.square_logo_images": [], "ad_group_ad.ad.responsive_display_ad.square_marketing_images": [], "ad_group_ad.ad.responsive_display_ad.youtube_videos": [], "ad_group_ad.ad.responsive_search_ad.descriptions": ["text: \"Behind The Scenes: Testing The Airbyte Maintainer Program\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Airbyte | Open-Source Data Integration Platform | ELT tool\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Upgrading Our Discourse And Slack To Support Our Community Growth\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Consolidate your data in your data warehouses, lakes and databases\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n"], "ad_group_ad.ad.responsive_search_ad.headlines": ["text: \"Airbyte\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"ELT tool\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Open-source Data Integration\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n"], "ad_group_ad.ad.responsive_search_ad.path1": "", "ad_group_ad.ad.responsive_search_ad.path2": "", "ad_group_ad.ad.shopping_comparison_listing_ad.headline": "", "ad_group_ad.ad.shopping_product_ad": "", "ad_group_ad.ad.shopping_smart_ad": "", "ad_group_ad.ad.smart_campaign_ad.descriptions": [], "ad_group_ad.ad.smart_campaign_ad.headlines": [], "ad_group_ad.ad.system_managed_resource_source": "UNSPECIFIED", "ad_group_ad.ad.text_ad.description1": "", "ad_group_ad.ad.text_ad.description2": "", "ad_group_ad.ad.text_ad.headline": "", "ad_group_ad.ad.tracking_url_template": "", "ad_group_ad.ad.type": "RESPONSIVE_SEARCH_AD", "ad_group_ad.ad.url_collections": [], "ad_group_ad.ad.url_custom_parameters": [], "ad_group_ad.ad.video_ad.in_feed.description1": "", "ad_group_ad.ad.video_ad.in_feed.description2": "", "ad_group_ad.ad.video_ad.in_feed.headline": "", "ad_group_ad.ad.video_ad.in_stream.action_button_label": "", "ad_group_ad.ad.video_ad.in_stream.action_headline": "", "ad_group_ad.ad.video_ad.out_stream.description": "", "ad_group_ad.ad.video_ad.out_stream.headline": "", "ad_group_ad.ad.video_responsive_ad.call_to_actions": [], "ad_group_ad.ad.video_responsive_ad.companion_banners": [], "ad_group_ad.ad.video_responsive_ad.descriptions": [], "ad_group_ad.ad.video_responsive_ad.headlines": [], "ad_group_ad.ad.video_responsive_ad.long_headlines": [], "ad_group_ad.ad.video_responsive_ad.videos": [], "ad_group_ad.ad_group": "customers/4651612872/adGroups/137020701042", "ad_group_ad.ad_strength": "POOR", "ad_group_ad.labels": ["customers/4651612872/labels/21906377810"], "ad_group_ad.policy_summary.approval_status": "APPROVED", "ad_group_ad.policy_summary.policy_topic_entries": [], "ad_group_ad.policy_summary.review_status": "REVIEWED", "ad_group_ad.resource_name": "customers/4651612872/adGroupAds/137020701042~592078631218", "ad_group_ad.status": "ENABLED", "segments.date": "2022-05-20"}, "emitted_at": 1697021382710} +{"stream": "ad_group_ad_labels", "data": {"ad_group.id": 123273719655, "ad_group_ad.ad.id": 524518584182, "ad_group_ad.ad.resource_name": "customers/4651612872/ads/524518584182", "ad_group_ad_label.resource_name": "customers/4651612872/adGroupAdLabels/123273719655~524518584182~21585034471", "label.name": "edgao-example-label", "label.resource_name": "customers/4651612872/labels/21585034471", "label.id": 21585034471}, "emitted_at": 1697021384357} +{"stream": "ad_group_ad_labels", "data": {"ad_group.id": 137020701042, "ad_group_ad.ad.id": 592078631218, "ad_group_ad.ad.resource_name": "customers/4651612872/ads/592078631218", "ad_group_ad_label.resource_name": "customers/4651612872/adGroupAdLabels/137020701042~592078631218~21906377810", "label.name": "Test Delete label customer", "label.resource_name": "customers/4651612872/labels/21906377810", "label.id": 21906377810}, "emitted_at": 1697021384359} +{"stream": "ad_groups", "data": {"campaign.id": 16820250687, "ad_group.ad_rotation_mode": "UNSPECIFIED", "ad_group.base_ad_group": "customers/4651612872/adGroups/137020701042", "ad_group.campaign": "customers/4651612872/campaigns/16820250687", "ad_group.cpc_bid_micros": 10000, "ad_group.cpm_bid_micros": 10000, "ad_group.cpv_bid_micros": 0, "ad_group.display_custom_bid_dimension": "UNSPECIFIED", "ad_group.effective_target_cpa_micros": 0, "ad_group.effective_target_cpa_source": "UNSPECIFIED", "ad_group.effective_target_roas": 0.0, "ad_group.effective_target_roas_source": "UNSPECIFIED", "ad_group.excluded_parent_asset_field_types": [], "ad_group.optimized_targeting_enabled": false, "ad_group.final_url_suffix": "", "ad_group.id": 137020701042, "ad_group.labels": ["customers/4651612872/labels/21906377810"], "ad_group.name": "\u0413\u0440\u0443\u043f\u043f\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0439\u00a02", "ad_group.percent_cpc_bid_micros": 0, "ad_group.resource_name": "customers/4651612872/adGroups/137020701042", "ad_group.status": "ENABLED", "ad_group.target_cpa_micros": 0, "ad_group.target_cpm_micros": 10000, "ad_group.target_roas": 0.0, "ad_group.targeting_setting.target_restrictions": ["targeting_dimension: AUDIENCE\nbid_only: true\n", "targeting_dimension: AGE_RANGE\nbid_only: true\n", "targeting_dimension: GENDER\nbid_only: true\n", "targeting_dimension: PARENTAL_STATUS\nbid_only: true\n", "targeting_dimension: INCOME_RANGE\nbid_only: true\n"], "ad_group.tracking_url_template": "", "ad_group.type": "SEARCH_STANDARD", "ad_group.url_custom_parameters": [], "segments.date": "2022-05-18"}, "emitted_at": 1697021384871} +{"stream": "ad_groups", "data": {"campaign.id": 16820250687, "ad_group.ad_rotation_mode": "UNSPECIFIED", "ad_group.base_ad_group": "customers/4651612872/adGroups/137020701042", "ad_group.campaign": "customers/4651612872/campaigns/16820250687", "ad_group.cpc_bid_micros": 10000, "ad_group.cpm_bid_micros": 10000, "ad_group.cpv_bid_micros": 0, "ad_group.display_custom_bid_dimension": "UNSPECIFIED", "ad_group.effective_target_cpa_micros": 0, "ad_group.effective_target_cpa_source": "UNSPECIFIED", "ad_group.effective_target_roas": 0.0, "ad_group.effective_target_roas_source": "UNSPECIFIED", "ad_group.excluded_parent_asset_field_types": [], "ad_group.optimized_targeting_enabled": false, "ad_group.final_url_suffix": "", "ad_group.id": 137020701042, "ad_group.labels": ["customers/4651612872/labels/21906377810"], "ad_group.name": "\u0413\u0440\u0443\u043f\u043f\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0439\u00a02", "ad_group.percent_cpc_bid_micros": 0, "ad_group.resource_name": "customers/4651612872/adGroups/137020701042", "ad_group.status": "ENABLED", "ad_group.target_cpa_micros": 0, "ad_group.target_cpm_micros": 10000, "ad_group.target_roas": 0.0, "ad_group.targeting_setting.target_restrictions": ["targeting_dimension: AUDIENCE\nbid_only: true\n", "targeting_dimension: AGE_RANGE\nbid_only: true\n", "targeting_dimension: GENDER\nbid_only: true\n", "targeting_dimension: PARENTAL_STATUS\nbid_only: true\n", "targeting_dimension: INCOME_RANGE\nbid_only: true\n"], "ad_group.tracking_url_template": "", "ad_group.type": "SEARCH_STANDARD", "ad_group.url_custom_parameters": [], "segments.date": "2022-05-19"}, "emitted_at": 1697021384874} +{"stream": "ad_groups", "data": {"campaign.id": 16820250687, "ad_group.ad_rotation_mode": "UNSPECIFIED", "ad_group.base_ad_group": "customers/4651612872/adGroups/137020701042", "ad_group.campaign": "customers/4651612872/campaigns/16820250687", "ad_group.cpc_bid_micros": 10000, "ad_group.cpm_bid_micros": 10000, "ad_group.cpv_bid_micros": 0, "ad_group.display_custom_bid_dimension": "UNSPECIFIED", "ad_group.effective_target_cpa_micros": 0, "ad_group.effective_target_cpa_source": "UNSPECIFIED", "ad_group.effective_target_roas": 0.0, "ad_group.effective_target_roas_source": "UNSPECIFIED", "ad_group.excluded_parent_asset_field_types": [], "ad_group.optimized_targeting_enabled": false, "ad_group.final_url_suffix": "", "ad_group.id": 137020701042, "ad_group.labels": ["customers/4651612872/labels/21906377810"], "ad_group.name": "\u0413\u0440\u0443\u043f\u043f\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0439\u00a02", "ad_group.percent_cpc_bid_micros": 0, "ad_group.resource_name": "customers/4651612872/adGroups/137020701042", "ad_group.status": "ENABLED", "ad_group.target_cpa_micros": 0, "ad_group.target_cpm_micros": 10000, "ad_group.target_roas": 0.0, "ad_group.targeting_setting.target_restrictions": ["targeting_dimension: AUDIENCE\nbid_only: true\n", "targeting_dimension: AGE_RANGE\nbid_only: true\n", "targeting_dimension: GENDER\nbid_only: true\n", "targeting_dimension: PARENTAL_STATUS\nbid_only: true\n", "targeting_dimension: INCOME_RANGE\nbid_only: true\n"], "ad_group.tracking_url_template": "", "ad_group.type": "SEARCH_STANDARD", "ad_group.url_custom_parameters": [], "segments.date": "2022-05-20"}, "emitted_at": 1697021384875} +{"stream": "ad_group_bidding_strategies", "data": {"ad_group.id": 137020701042, "bidding_strategy.aligned_campaign_budget_id": 0, "bidding_strategy.campaign_count": 0, "bidding_strategy.currency_code": "", "bidding_strategy.effective_currency_code": "", "bidding_strategy.enhanced_cpc": "", "bidding_strategy.id": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversion_value.target_roas": 0.0, "bidding_strategy.maximize_conversions.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversions.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversions.target_cpa_micros": 0, "bidding_strategy.name": "", "bidding_strategy.non_removed_campaign_count": 0, "bidding_strategy.resource_name": "", "bidding_strategy.status": "UNSPECIFIED", "bidding_strategy.target_cpa.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_cpa.cpc_bid_floor_micros": 0, "bidding_strategy.target_cpa.target_cpa_micros": 0, "bidding_strategy.target_impression_share.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_impression_share.location": "UNSPECIFIED", "bidding_strategy.target_impression_share.location_fraction_micros": 0, "bidding_strategy.target_roas.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_roas.cpc_bid_floor_micros": 0, "bidding_strategy.target_roas.target_roas": 0.0, "bidding_strategy.target_spend.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_spend.target_spend_micros": 0, "bidding_strategy.type": "UNSPECIFIED", "segments.date": "2022-05-18"}, "emitted_at": 1697021385800} +{"stream": "ad_group_bidding_strategies", "data": {"ad_group.id": 137020701042, "bidding_strategy.aligned_campaign_budget_id": 0, "bidding_strategy.campaign_count": 0, "bidding_strategy.currency_code": "", "bidding_strategy.effective_currency_code": "", "bidding_strategy.enhanced_cpc": "", "bidding_strategy.id": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversion_value.target_roas": 0.0, "bidding_strategy.maximize_conversions.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversions.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversions.target_cpa_micros": 0, "bidding_strategy.name": "", "bidding_strategy.non_removed_campaign_count": 0, "bidding_strategy.resource_name": "", "bidding_strategy.status": "UNSPECIFIED", "bidding_strategy.target_cpa.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_cpa.cpc_bid_floor_micros": 0, "bidding_strategy.target_cpa.target_cpa_micros": 0, "bidding_strategy.target_impression_share.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_impression_share.location": "UNSPECIFIED", "bidding_strategy.target_impression_share.location_fraction_micros": 0, "bidding_strategy.target_roas.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_roas.cpc_bid_floor_micros": 0, "bidding_strategy.target_roas.target_roas": 0.0, "bidding_strategy.target_spend.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_spend.target_spend_micros": 0, "bidding_strategy.type": "UNSPECIFIED", "segments.date": "2022-05-19"}, "emitted_at": 1697021385802} +{"stream": "ad_group_bidding_strategies", "data": {"ad_group.id": 137020701042, "bidding_strategy.aligned_campaign_budget_id": 0, "bidding_strategy.campaign_count": 0, "bidding_strategy.currency_code": "", "bidding_strategy.effective_currency_code": "", "bidding_strategy.enhanced_cpc": "", "bidding_strategy.id": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversion_value.target_roas": 0.0, "bidding_strategy.maximize_conversions.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversions.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversions.target_cpa_micros": 0, "bidding_strategy.name": "", "bidding_strategy.non_removed_campaign_count": 0, "bidding_strategy.resource_name": "", "bidding_strategy.status": "UNSPECIFIED", "bidding_strategy.target_cpa.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_cpa.cpc_bid_floor_micros": 0, "bidding_strategy.target_cpa.target_cpa_micros": 0, "bidding_strategy.target_impression_share.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_impression_share.location": "UNSPECIFIED", "bidding_strategy.target_impression_share.location_fraction_micros": 0, "bidding_strategy.target_roas.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_roas.cpc_bid_floor_micros": 0, "bidding_strategy.target_roas.target_roas": 0.0, "bidding_strategy.target_spend.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_spend.target_spend_micros": 0, "bidding_strategy.type": "UNSPECIFIED", "segments.date": "2022-05-20"}, "emitted_at": 1697021385804} +{"stream": "ad_group_criterions", "data": {"deleted_at": null, "change_status.last_change_date_time": null, "ad_group.id": 123273719655, "ad_group_criterion.ad_group": "customers/4651612872/adGroups/123273719655", "ad_group_criterion.age_range.type": "UNSPECIFIED", "ad_group_criterion.app_payment_model.type": "UNSPECIFIED", "ad_group_criterion.approval_status": "APPROVED", "ad_group_criterion.audience.audience": "", "ad_group_criterion.bid_modifier": 0.0, "ad_group_criterion.combined_audience.combined_audience": "", "ad_group_criterion.cpc_bid_micros": 0, "ad_group_criterion.cpm_bid_micros": 0, "ad_group_criterion.cpv_bid_micros": 0, "ad_group_criterion.criterion_id": 10515001, "ad_group_criterion.custom_affinity.custom_affinity": "", "ad_group_criterion.custom_audience.custom_audience": "", "ad_group_criterion.custom_intent.custom_intent": "", "ad_group_criterion.disapproval_reasons": [], "ad_group_criterion.display_name": "data warehouses", "ad_group_criterion.effective_cpc_bid_micros": 10000, "ad_group_criterion.effective_cpc_bid_source": "AD_GROUP", "ad_group_criterion.effective_cpm_bid_micros": 10000, "ad_group_criterion.effective_cpm_bid_source": "AD_GROUP", "ad_group_criterion.effective_cpv_bid_micros": 0, "ad_group_criterion.effective_cpv_bid_source": "UNSPECIFIED", "ad_group_criterion.effective_percent_cpc_bid_micros": 0, "ad_group_criterion.effective_percent_cpc_bid_source": "UNSPECIFIED", "ad_group_criterion.final_mobile_urls": [], "ad_group_criterion.final_url_suffix": "", "ad_group_criterion.final_urls": [], "ad_group_criterion.gender.type": "UNSPECIFIED", "ad_group_criterion.income_range.type": "UNSPECIFIED", "ad_group_criterion.keyword.match_type": "BROAD", "ad_group_criterion.keyword.text": "data warehouses", "ad_group_criterion.labels": [], "ad_group_criterion.mobile_app_category.mobile_app_category_constant": "", "ad_group_criterion.mobile_application.app_id": "", "ad_group_criterion.mobile_application.name": "", "ad_group_criterion.negative": false, "ad_group_criterion.parental_status.type": "UNSPECIFIED", "ad_group_criterion.percent_cpc_bid_micros": 0, "ad_group_criterion.placement.url": "", "ad_group_criterion.position_estimates.estimated_add_clicks_at_first_position_cpc": 0, "ad_group_criterion.position_estimates.estimated_add_cost_at_first_position_cpc": 0, "ad_group_criterion.position_estimates.first_page_cpc_micros": 0, "ad_group_criterion.position_estimates.first_position_cpc_micros": 0, "ad_group_criterion.position_estimates.top_of_page_cpc_micros": 0, "ad_group_criterion.quality_info.creative_quality_score": "UNSPECIFIED", "ad_group_criterion.quality_info.post_click_quality_score": "UNSPECIFIED", "ad_group_criterion.quality_info.quality_score": 0, "ad_group_criterion.quality_info.search_predicted_ctr": "UNSPECIFIED", "ad_group_criterion.resource_name": "customers/4651612872/adGroupCriteria/123273719655~10515001", "ad_group_criterion.status": "ENABLED", "ad_group_criterion.system_serving_status": "ELIGIBLE", "ad_group_criterion.topic.path": [], "ad_group_criterion.topic.topic_constant": "", "ad_group_criterion.tracking_url_template": "", "ad_group_criterion.type": "KEYWORD", "ad_group_criterion.url_custom_parameters": [], "ad_group_criterion.user_interest.user_interest_category": "", "ad_group_criterion.user_list.user_list": "", "ad_group_criterion.webpage.conditions": [], "ad_group_criterion.webpage.coverage_percentage": 0.0, "ad_group_criterion.webpage.criterion_name": "", "ad_group_criterion.webpage.sample.sample_urls": [], "ad_group_criterion.youtube_channel.channel_id": "", "ad_group_criterion.youtube_video.video_id": ""}, "emitted_at": 1697021388630} +{"stream": "ad_group_criterions", "data": {"deleted_at": null, "change_status.last_change_date_time": null, "ad_group.id": 123273719655, "ad_group_criterion.ad_group": "customers/4651612872/adGroups/123273719655", "ad_group_criterion.age_range.type": "UNSPECIFIED", "ad_group_criterion.app_payment_model.type": "UNSPECIFIED", "ad_group_criterion.approval_status": "UNSPECIFIED", "ad_group_criterion.audience.audience": "", "ad_group_criterion.bid_modifier": 0.0, "ad_group_criterion.combined_audience.combined_audience": "", "ad_group_criterion.cpc_bid_micros": 0, "ad_group_criterion.cpm_bid_micros": 0, "ad_group_criterion.cpv_bid_micros": 0, "ad_group_criterion.criterion_id": 10683521, "ad_group_criterion.custom_affinity.custom_affinity": "", "ad_group_criterion.custom_audience.custom_audience": "", "ad_group_criterion.custom_intent.custom_intent": "", "ad_group_criterion.disapproval_reasons": [], "ad_group_criterion.display_name": "database software", "ad_group_criterion.effective_cpc_bid_micros": 0, "ad_group_criterion.effective_cpc_bid_source": "UNSPECIFIED", "ad_group_criterion.effective_cpm_bid_micros": 0, "ad_group_criterion.effective_cpm_bid_source": "UNSPECIFIED", "ad_group_criterion.effective_cpv_bid_micros": 0, "ad_group_criterion.effective_cpv_bid_source": "UNSPECIFIED", "ad_group_criterion.effective_percent_cpc_bid_micros": 0, "ad_group_criterion.effective_percent_cpc_bid_source": "UNSPECIFIED", "ad_group_criterion.final_mobile_urls": [], "ad_group_criterion.final_url_suffix": "", "ad_group_criterion.final_urls": [], "ad_group_criterion.gender.type": "UNSPECIFIED", "ad_group_criterion.income_range.type": "UNSPECIFIED", "ad_group_criterion.keyword.match_type": "BROAD", "ad_group_criterion.keyword.text": "database software", "ad_group_criterion.labels": [], "ad_group_criterion.mobile_app_category.mobile_app_category_constant": "", "ad_group_criterion.mobile_application.app_id": "", "ad_group_criterion.mobile_application.name": "", "ad_group_criterion.negative": false, "ad_group_criterion.parental_status.type": "UNSPECIFIED", "ad_group_criterion.percent_cpc_bid_micros": 0, "ad_group_criterion.placement.url": "", "ad_group_criterion.position_estimates.estimated_add_clicks_at_first_position_cpc": 0, "ad_group_criterion.position_estimates.estimated_add_cost_at_first_position_cpc": 0, "ad_group_criterion.position_estimates.first_page_cpc_micros": 0, "ad_group_criterion.position_estimates.first_position_cpc_micros": 0, "ad_group_criterion.position_estimates.top_of_page_cpc_micros": 0, "ad_group_criterion.quality_info.creative_quality_score": "UNSPECIFIED", "ad_group_criterion.quality_info.post_click_quality_score": "UNSPECIFIED", "ad_group_criterion.quality_info.quality_score": 0, "ad_group_criterion.quality_info.search_predicted_ctr": "UNSPECIFIED", "ad_group_criterion.resource_name": "customers/4651612872/adGroupCriteria/123273719655~10683521", "ad_group_criterion.status": "REMOVED", "ad_group_criterion.system_serving_status": "UNSPECIFIED", "ad_group_criterion.topic.path": [], "ad_group_criterion.topic.topic_constant": "", "ad_group_criterion.tracking_url_template": "", "ad_group_criterion.type": "KEYWORD", "ad_group_criterion.url_custom_parameters": [], "ad_group_criterion.user_interest.user_interest_category": "", "ad_group_criterion.user_list.user_list": "", "ad_group_criterion.webpage.conditions": [], "ad_group_criterion.webpage.coverage_percentage": 0.0, "ad_group_criterion.webpage.criterion_name": "", "ad_group_criterion.webpage.sample.sample_urls": [], "ad_group_criterion.youtube_channel.channel_id": "", "ad_group_criterion.youtube_video.video_id": ""}, "emitted_at": 1697021388634} +{"stream": "ad_group_criterions", "data": {"deleted_at": null, "change_status.last_change_date_time": null, "ad_group.id": 123273719655, "ad_group_criterion.ad_group": "customers/4651612872/adGroups/123273719655", "ad_group_criterion.age_range.type": "UNSPECIFIED", "ad_group_criterion.app_payment_model.type": "UNSPECIFIED", "ad_group_criterion.approval_status": "APPROVED", "ad_group_criterion.audience.audience": "", "ad_group_criterion.bid_modifier": 0.0, "ad_group_criterion.combined_audience.combined_audience": "", "ad_group_criterion.cpc_bid_micros": 0, "ad_group_criterion.cpm_bid_micros": 0, "ad_group_criterion.cpv_bid_micros": 0, "ad_group_criterion.criterion_id": 11100571, "ad_group_criterion.custom_affinity.custom_affinity": "", "ad_group_criterion.custom_audience.custom_audience": "", "ad_group_criterion.custom_intent.custom_intent": "", "ad_group_criterion.disapproval_reasons": [], "ad_group_criterion.display_name": "integration software", "ad_group_criterion.effective_cpc_bid_micros": 10000, "ad_group_criterion.effective_cpc_bid_source": "AD_GROUP", "ad_group_criterion.effective_cpm_bid_micros": 10000, "ad_group_criterion.effective_cpm_bid_source": "AD_GROUP", "ad_group_criterion.effective_cpv_bid_micros": 0, "ad_group_criterion.effective_cpv_bid_source": "UNSPECIFIED", "ad_group_criterion.effective_percent_cpc_bid_micros": 0, "ad_group_criterion.effective_percent_cpc_bid_source": "UNSPECIFIED", "ad_group_criterion.final_mobile_urls": [], "ad_group_criterion.final_url_suffix": "", "ad_group_criterion.final_urls": [], "ad_group_criterion.gender.type": "UNSPECIFIED", "ad_group_criterion.income_range.type": "UNSPECIFIED", "ad_group_criterion.keyword.match_type": "BROAD", "ad_group_criterion.keyword.text": "integration software", "ad_group_criterion.labels": [], "ad_group_criterion.mobile_app_category.mobile_app_category_constant": "", "ad_group_criterion.mobile_application.app_id": "", "ad_group_criterion.mobile_application.name": "", "ad_group_criterion.negative": false, "ad_group_criterion.parental_status.type": "UNSPECIFIED", "ad_group_criterion.percent_cpc_bid_micros": 0, "ad_group_criterion.placement.url": "", "ad_group_criterion.position_estimates.estimated_add_clicks_at_first_position_cpc": 0, "ad_group_criterion.position_estimates.estimated_add_cost_at_first_position_cpc": 0, "ad_group_criterion.position_estimates.first_page_cpc_micros": 0, "ad_group_criterion.position_estimates.first_position_cpc_micros": 0, "ad_group_criterion.position_estimates.top_of_page_cpc_micros": 0, "ad_group_criterion.quality_info.creative_quality_score": "UNSPECIFIED", "ad_group_criterion.quality_info.post_click_quality_score": "UNSPECIFIED", "ad_group_criterion.quality_info.quality_score": 0, "ad_group_criterion.quality_info.search_predicted_ctr": "UNSPECIFIED", "ad_group_criterion.resource_name": "customers/4651612872/adGroupCriteria/123273719655~11100571", "ad_group_criterion.status": "ENABLED", "ad_group_criterion.system_serving_status": "ELIGIBLE", "ad_group_criterion.topic.path": [], "ad_group_criterion.topic.topic_constant": "", "ad_group_criterion.tracking_url_template": "", "ad_group_criterion.type": "KEYWORD", "ad_group_criterion.url_custom_parameters": [], "ad_group_criterion.user_interest.user_interest_category": "", "ad_group_criterion.user_list.user_list": "", "ad_group_criterion.webpage.conditions": [], "ad_group_criterion.webpage.coverage_percentage": 0.0, "ad_group_criterion.webpage.criterion_name": "", "ad_group_criterion.webpage.sample.sample_urls": [], "ad_group_criterion.youtube_channel.channel_id": "", "ad_group_criterion.youtube_video.video_id": ""}, "emitted_at": 1697021388637} +{"stream": "ad_group_criterion_labels", "data": {"ad_group.id": 137051662444, "label.id": 21902092838, "ad_group_criterion_label.ad_group_criterion": "customers/4651612872/adGroupCriteria/137051662444~10766861", "ad_group_criterion_label.label": "customers/4651612872/labels/21902092838", "ad_group_criterion_label.resource_name": "customers/4651612872/adGroupCriterionLabels/137051662444~10766861~21902092838", "ad_group_criterion.criterion_id": 10766861}, "emitted_at": 1697021392241} +{"stream": "ad_group_criterion_labels", "data": {"ad_group.id": 137051662444, "label.id": 21906377810, "ad_group_criterion_label.ad_group_criterion": "customers/4651612872/adGroupCriteria/137051662444~528912986", "ad_group_criterion_label.label": "customers/4651612872/labels/21906377810", "ad_group_criterion_label.resource_name": "customers/4651612872/adGroupCriterionLabels/137051662444~528912986~21906377810", "ad_group_criterion.criterion_id": 528912986}, "emitted_at": 1697021392242} +{"stream": "ad_group_labels", "data": {"ad_group.id": 123273719655, "label.id": 21585034471, "ad_group.resource_name": "customers/4651612872/adGroups/123273719655", "ad_group_label.resource_name": "customers/4651612872/adGroupLabels/123273719655~21585034471", "label.name": "edgao-example-label", "label.resource_name": "customers/4651612872/labels/21585034471"}, "emitted_at": 1697021392652} +{"stream": "ad_group_labels", "data": {"ad_group.id": 138643385242, "label.id": 21585034471, "ad_group.resource_name": "customers/4651612872/adGroups/138643385242", "ad_group_label.resource_name": "customers/4651612872/adGroupLabels/138643385242~21585034471", "label.name": "edgao-example-label", "label.resource_name": "customers/4651612872/labels/21585034471"}, "emitted_at": 1697021392653} +{"stream": "ad_group_labels", "data": {"ad_group.id": 137020701042, "label.id": 21906377810, "ad_group.resource_name": "customers/4651612872/adGroups/137020701042", "ad_group_label.resource_name": "customers/4651612872/adGroupLabels/137020701042~21906377810", "label.name": "Test Delete label customer", "label.resource_name": "customers/4651612872/labels/21906377810"}, "emitted_at": 1697021392653} +{"stream": "ad_listing_group_criterions", "data": {"deleted_at": null, "change_status.last_change_date_time": null, "ad_group_criterion.resource_name": "customers/4651612872/adGroupCriteria/123273719655~10515001", "ad_group.id": 123273719655, "ad_group_criterion.criterion_id": 10515001, "ad_group_criterion.listing_group.case_value.activity_country.value": "", "ad_group_criterion.listing_group.case_value.activity_id.value": "", "ad_group_criterion.listing_group.case_value.activity_rating.value": 0, "ad_group_criterion.listing_group.case_value.hotel_city.city_criterion": "", "ad_group_criterion.listing_group.case_value.hotel_class.value": 0, "ad_group_criterion.listing_group.case_value.hotel_country_region.country_region_criterion": "", "ad_group_criterion.listing_group.case_value.hotel_id.value": "", "ad_group_criterion.listing_group.case_value.hotel_state.state_criterion": "", "ad_group_criterion.listing_group.case_value.product_bidding_category.id": 0, "ad_group_criterion.listing_group.case_value.product_bidding_category.level": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_brand.value": "", "ad_group_criterion.listing_group.case_value.product_channel.channel": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_channel_exclusivity.channel_exclusivity": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_condition.condition": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_custom_attribute.index": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_custom_attribute.value": "", "ad_group_criterion.listing_group.case_value.product_item_id.value": "", "ad_group_criterion.listing_group.case_value.product_type.level": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_type.value": "", "ad_group_criterion.listing_group.parent_ad_group_criterion": "", "ad_group_criterion.listing_group.type": "UNSPECIFIED"}, "emitted_at": 1697021394435} +{"stream": "ad_listing_group_criterions", "data": {"deleted_at": null, "change_status.last_change_date_time": null, "ad_group_criterion.resource_name": "customers/4651612872/adGroupCriteria/123273719655~10683521", "ad_group.id": 123273719655, "ad_group_criterion.criterion_id": 10683521, "ad_group_criterion.listing_group.case_value.activity_country.value": "", "ad_group_criterion.listing_group.case_value.activity_id.value": "", "ad_group_criterion.listing_group.case_value.activity_rating.value": 0, "ad_group_criterion.listing_group.case_value.hotel_city.city_criterion": "", "ad_group_criterion.listing_group.case_value.hotel_class.value": 0, "ad_group_criterion.listing_group.case_value.hotel_country_region.country_region_criterion": "", "ad_group_criterion.listing_group.case_value.hotel_id.value": "", "ad_group_criterion.listing_group.case_value.hotel_state.state_criterion": "", "ad_group_criterion.listing_group.case_value.product_bidding_category.id": 0, "ad_group_criterion.listing_group.case_value.product_bidding_category.level": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_brand.value": "", "ad_group_criterion.listing_group.case_value.product_channel.channel": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_channel_exclusivity.channel_exclusivity": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_condition.condition": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_custom_attribute.index": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_custom_attribute.value": "", "ad_group_criterion.listing_group.case_value.product_item_id.value": "", "ad_group_criterion.listing_group.case_value.product_type.level": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_type.value": "", "ad_group_criterion.listing_group.parent_ad_group_criterion": "", "ad_group_criterion.listing_group.type": "UNSPECIFIED"}, "emitted_at": 1697021394437} +{"stream": "ad_listing_group_criterions", "data": {"deleted_at": null, "change_status.last_change_date_time": null, "ad_group_criterion.resource_name": "customers/4651612872/adGroupCriteria/123273719655~11100571", "ad_group.id": 123273719655, "ad_group_criterion.criterion_id": 11100571, "ad_group_criterion.listing_group.case_value.activity_country.value": "", "ad_group_criterion.listing_group.case_value.activity_id.value": "", "ad_group_criterion.listing_group.case_value.activity_rating.value": 0, "ad_group_criterion.listing_group.case_value.hotel_city.city_criterion": "", "ad_group_criterion.listing_group.case_value.hotel_class.value": 0, "ad_group_criterion.listing_group.case_value.hotel_country_region.country_region_criterion": "", "ad_group_criterion.listing_group.case_value.hotel_id.value": "", "ad_group_criterion.listing_group.case_value.hotel_state.state_criterion": "", "ad_group_criterion.listing_group.case_value.product_bidding_category.id": 0, "ad_group_criterion.listing_group.case_value.product_bidding_category.level": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_brand.value": "", "ad_group_criterion.listing_group.case_value.product_channel.channel": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_channel_exclusivity.channel_exclusivity": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_condition.condition": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_custom_attribute.index": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_custom_attribute.value": "", "ad_group_criterion.listing_group.case_value.product_item_id.value": "", "ad_group_criterion.listing_group.case_value.product_type.level": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_type.value": "", "ad_group_criterion.listing_group.parent_ad_group_criterion": "", "ad_group_criterion.listing_group.type": "UNSPECIFIED"}, "emitted_at": 1697021394439} +{"stream": "accounts", "data": {"customer.auto_tagging_enabled": true, "customer.call_reporting_setting.call_conversion_action": "customers/4651612872/conversionActions/179", "customer.call_reporting_setting.call_conversion_reporting_enabled": true, "customer.call_reporting_setting.call_reporting_enabled": true, "customer.conversion_tracking_setting.conversion_tracking_id": 657981234, "customer.conversion_tracking_setting.cross_account_conversion_tracking_id": 0, "customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.final_url_suffix": "", "customer.has_partners_badge": false, "customer.id": 4651612872, "customer.manager": false, "customer.optimization_score": 0.8607706, "customer.optimization_score_weight": 93.688858, "customer.pay_per_conversion_eligibility_failure_reasons": ["CustomerPayPerConversionEligibilityFailureReason.NOT_ENOUGH_CONVERSIONS"], "customer.remarketing_setting.google_global_site_tag": "\n\n\n", "customer.resource_name": "customers/4651612872", "customer.test_account": false, "customer.time_zone": "America/Los_Angeles", "customer.tracking_url_template": "{lpurl}?utm_term={keyword}&utm_campaign={_utmcampaign}&utm_source=adwords&utm_medium=ppc&hsa_acc=4651612872&hsa_cam={campaignid}&hsa_grp={adgroupid}&hsa_ad={creative}&hsa_src={network}&hsa_tgt={targetid}&hsa_kw={keyword}&hsa_mt={matchtype}&hsa_net=adwords&hsa_ver=3", "segments.date": "2022-05-18"}, "emitted_at": 1697021397324} +{"stream": "accounts", "data": {"customer.auto_tagging_enabled": true, "customer.call_reporting_setting.call_conversion_action": "customers/4651612872/conversionActions/179", "customer.call_reporting_setting.call_conversion_reporting_enabled": true, "customer.call_reporting_setting.call_reporting_enabled": true, "customer.conversion_tracking_setting.conversion_tracking_id": 657981234, "customer.conversion_tracking_setting.cross_account_conversion_tracking_id": 0, "customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.final_url_suffix": "", "customer.has_partners_badge": false, "customer.id": 4651612872, "customer.manager": false, "customer.optimization_score": 0.8607706, "customer.optimization_score_weight": 93.688858, "customer.pay_per_conversion_eligibility_failure_reasons": ["CustomerPayPerConversionEligibilityFailureReason.NOT_ENOUGH_CONVERSIONS"], "customer.remarketing_setting.google_global_site_tag": "\n\n\n", "customer.resource_name": "customers/4651612872", "customer.test_account": false, "customer.time_zone": "America/Los_Angeles", "customer.tracking_url_template": "{lpurl}?utm_term={keyword}&utm_campaign={_utmcampaign}&utm_source=adwords&utm_medium=ppc&hsa_acc=4651612872&hsa_cam={campaignid}&hsa_grp={adgroupid}&hsa_ad={creative}&hsa_src={network}&hsa_tgt={targetid}&hsa_kw={keyword}&hsa_mt={matchtype}&hsa_net=adwords&hsa_ver=3", "segments.date": "2022-05-19"}, "emitted_at": 1697021397326} +{"stream": "accounts", "data": {"customer.auto_tagging_enabled": true, "customer.call_reporting_setting.call_conversion_action": "customers/4651612872/conversionActions/179", "customer.call_reporting_setting.call_conversion_reporting_enabled": true, "customer.call_reporting_setting.call_reporting_enabled": true, "customer.conversion_tracking_setting.conversion_tracking_id": 657981234, "customer.conversion_tracking_setting.cross_account_conversion_tracking_id": 0, "customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.final_url_suffix": "", "customer.has_partners_badge": false, "customer.id": 4651612872, "customer.manager": false, "customer.optimization_score": 0.8607706, "customer.optimization_score_weight": 93.688858, "customer.pay_per_conversion_eligibility_failure_reasons": ["CustomerPayPerConversionEligibilityFailureReason.NOT_ENOUGH_CONVERSIONS"], "customer.remarketing_setting.google_global_site_tag": "\n\n\n", "customer.resource_name": "customers/4651612872", "customer.test_account": false, "customer.time_zone": "America/Los_Angeles", "customer.tracking_url_template": "{lpurl}?utm_term={keyword}&utm_campaign={_utmcampaign}&utm_source=adwords&utm_medium=ppc&hsa_acc=4651612872&hsa_cam={campaignid}&hsa_grp={adgroupid}&hsa_ad={creative}&hsa_src={network}&hsa_tgt={targetid}&hsa_kw={keyword}&hsa_mt={matchtype}&hsa_net=adwords&hsa_ver=3", "segments.date": "2022-05-20"}, "emitted_at": 1697021397327} +{"stream": "audience", "data": {"customer.id": 4651612872, "audience.description": "", "audience.dimensions": ["audience_segments {\n segments {\n custom_audience {\n custom_audience: \"customers/4651612872/customAudiences/523469909\"\n }\n }\n}\n"], "audience.exclusion_dimension": "", "audience.id": 47792633, "audience.name": "Audience name 1", "audience.resource_name": "customers/4651612872/audiences/47792633", "audience.status": "ENABLED"}, "emitted_at": 1697021398516} +{"stream": "audience", "data": {"customer.id": 4651612872, "audience.description": "", "audience.dimensions": ["audience_segments {\n segments {\n user_interest {\n user_interest_category: \"customers/4651612872/userInterests/80276\"\n }\n }\n segments {\n user_interest {\n user_interest_category: \"customers/4651612872/userInterests/80279\"\n }\n }\n segments {\n user_interest {\n user_interest_category: \"customers/4651612872/userInterests/80520\"\n }\n }\n segments {\n user_interest {\n user_interest_category: \"customers/4651612872/userInterests/80530\"\n }\n }\n segments {\n user_interest {\n user_interest_category: \"customers/4651612872/userInterests/92931\"\n }\n }\n}\n"], "audience.exclusion_dimension": "", "audience.id": 97300129, "audience.name": "Upgraded Audience 1", "audience.resource_name": "customers/4651612872/audiences/97300129", "audience.status": "ENABLED"}, "emitted_at": 1697021398517} +{"stream": "campaign_bidding_strategies", "data": {"customer.id": 4651612872, "campaign.id": 16820250687, "bidding_strategy.aligned_campaign_budget_id": 0, "bidding_strategy.campaign_count": 0, "bidding_strategy.currency_code": "", "bidding_strategy.effective_currency_code": "", "bidding_strategy.enhanced_cpc": "", "bidding_strategy.id": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversion_value.target_roas": 0.0, "bidding_strategy.maximize_conversions.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversions.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversions.target_cpa_micros": 0, "bidding_strategy.name": "", "bidding_strategy.non_removed_campaign_count": 0, "bidding_strategy.resource_name": "", "bidding_strategy.status": "UNSPECIFIED", "bidding_strategy.target_cpa.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_cpa.cpc_bid_floor_micros": 0, "bidding_strategy.target_cpa.target_cpa_micros": 0, "bidding_strategy.target_impression_share.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_impression_share.location": "UNSPECIFIED", "bidding_strategy.target_impression_share.location_fraction_micros": 0, "bidding_strategy.target_roas.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_roas.cpc_bid_floor_micros": 0, "bidding_strategy.target_roas.target_roas": 0.0, "bidding_strategy.target_spend.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_spend.target_spend_micros": 0, "bidding_strategy.type": "UNSPECIFIED", "segments.date": "2022-05-18"}, "emitted_at": 1697021399002} +{"stream": "campaign_bidding_strategies", "data": {"customer.id": 4651612872, "campaign.id": 16820250687, "bidding_strategy.aligned_campaign_budget_id": 0, "bidding_strategy.campaign_count": 0, "bidding_strategy.currency_code": "", "bidding_strategy.effective_currency_code": "", "bidding_strategy.enhanced_cpc": "", "bidding_strategy.id": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversion_value.target_roas": 0.0, "bidding_strategy.maximize_conversions.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversions.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversions.target_cpa_micros": 0, "bidding_strategy.name": "", "bidding_strategy.non_removed_campaign_count": 0, "bidding_strategy.resource_name": "", "bidding_strategy.status": "UNSPECIFIED", "bidding_strategy.target_cpa.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_cpa.cpc_bid_floor_micros": 0, "bidding_strategy.target_cpa.target_cpa_micros": 0, "bidding_strategy.target_impression_share.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_impression_share.location": "UNSPECIFIED", "bidding_strategy.target_impression_share.location_fraction_micros": 0, "bidding_strategy.target_roas.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_roas.cpc_bid_floor_micros": 0, "bidding_strategy.target_roas.target_roas": 0.0, "bidding_strategy.target_spend.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_spend.target_spend_micros": 0, "bidding_strategy.type": "UNSPECIFIED", "segments.date": "2022-05-19"}, "emitted_at": 1697021399004} +{"stream": "campaign_bidding_strategies", "data": {"customer.id": 4651612872, "campaign.id": 16820250687, "bidding_strategy.aligned_campaign_budget_id": 0, "bidding_strategy.campaign_count": 0, "bidding_strategy.currency_code": "", "bidding_strategy.effective_currency_code": "", "bidding_strategy.enhanced_cpc": "", "bidding_strategy.id": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversion_value.target_roas": 0.0, "bidding_strategy.maximize_conversions.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversions.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversions.target_cpa_micros": 0, "bidding_strategy.name": "", "bidding_strategy.non_removed_campaign_count": 0, "bidding_strategy.resource_name": "", "bidding_strategy.status": "UNSPECIFIED", "bidding_strategy.target_cpa.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_cpa.cpc_bid_floor_micros": 0, "bidding_strategy.target_cpa.target_cpa_micros": 0, "bidding_strategy.target_impression_share.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_impression_share.location": "UNSPECIFIED", "bidding_strategy.target_impression_share.location_fraction_micros": 0, "bidding_strategy.target_roas.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_roas.cpc_bid_floor_micros": 0, "bidding_strategy.target_roas.target_roas": 0.0, "bidding_strategy.target_spend.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_spend.target_spend_micros": 0, "bidding_strategy.type": "UNSPECIFIED", "segments.date": "2022-05-20"}, "emitted_at": 1697021399006} +{"stream": "campaign_criterion", "data": {"deleted_at": null, "change_status.last_change_date_time": null, "campaign.id": 9660123292, "campaign_criterion.resource_name": "customers/4651612872/campaignCriteria/9660123292~2124", "campaign_criterion.campaign": "customers/4651612872/campaigns/9660123292", "campaign_criterion.age_range.type": "UNSPECIFIED", "campaign_criterion.mobile_application.name": "", "campaign_criterion.negative": false, "campaign_criterion.youtube_channel.channel_id": "", "campaign_criterion.youtube_video.video_id": ""}, "emitted_at": 1697021400132} +{"stream": "campaign_criterion", "data": {"deleted_at": null, "change_status.last_change_date_time": null, "campaign.id": 9660123292, "campaign_criterion.resource_name": "customers/4651612872/campaignCriteria/9660123292~2250", "campaign_criterion.campaign": "customers/4651612872/campaigns/9660123292", "campaign_criterion.age_range.type": "UNSPECIFIED", "campaign_criterion.mobile_application.name": "", "campaign_criterion.negative": false, "campaign_criterion.youtube_channel.channel_id": "", "campaign_criterion.youtube_video.video_id": ""}, "emitted_at": 1697021400133} +{"stream": "campaign_criterion", "data": {"deleted_at": null, "change_status.last_change_date_time": null, "campaign.id": 9660123292, "campaign_criterion.resource_name": "customers/4651612872/campaignCriteria/9660123292~2276", "campaign_criterion.campaign": "customers/4651612872/campaigns/9660123292", "campaign_criterion.age_range.type": "UNSPECIFIED", "campaign_criterion.mobile_application.name": "", "campaign_criterion.negative": false, "campaign_criterion.youtube_channel.channel_id": "", "campaign_criterion.youtube_video.video_id": ""}, "emitted_at": 1697021400134} +{"stream": "campaign_labels", "data": {"campaign.id": 12124071339, "label.id": 21585034471, "campaign.resource_name": "customers/4651612872/campaigns/12124071339", "campaign_label.resource_name": "customers/4651612872/campaignLabels/12124071339~21585034471", "label.name": "edgao-example-label", "label.resource_name": "customers/4651612872/labels/21585034471"}, "emitted_at": 1697021400599} +{"stream": "campaign_labels", "data": {"campaign.id": 13284356762, "label.id": 21585034471, "campaign.resource_name": "customers/4651612872/campaigns/13284356762", "campaign_label.resource_name": "customers/4651612872/campaignLabels/13284356762~21585034471", "label.name": "edgao-example-label", "label.resource_name": "customers/4651612872/labels/21585034471"}, "emitted_at": 1697021400600} +{"stream": "campaign_labels", "data": {"campaign.id": 16820250687, "label.id": 21906377810, "campaign.resource_name": "customers/4651612872/campaigns/16820250687", "campaign_label.resource_name": "customers/4651612872/campaignLabels/16820250687~21906377810", "label.name": "Test Delete label customer", "label.resource_name": "customers/4651612872/labels/21906377810"}, "emitted_at": 1697021400601} +{"stream": "labels", "data": {"customer.id": 4651612872, "label.id": 21585034471, "label.name": "edgao-example-label", "label.resource_name": "customers/4651612872/labels/21585034471", "label.status": "ENABLED", "label.text_label.background_color": "#E993EB", "label.text_label.description": "example label for edgao"}, "emitted_at": 1697021400947} +{"stream": "labels", "data": {"customer.id": 4651612872, "label.id": 21902092838, "label.name": "Test Label", "label.resource_name": "customers/4651612872/labels/21902092838", "label.status": "ENABLED", "label.text_label.background_color": "#8BCBD2", "label.text_label.description": "Description to test label"}, "emitted_at": 1697021400948} +{"stream": "labels", "data": {"customer.id": 4651612872, "label.id": 21906377810, "label.name": "Test Delete label customer", "label.resource_name": "customers/4651612872/labels/21906377810", "label.status": "ENABLED", "label.text_label.background_color": "#8266C9", "label.text_label.description": ""}, "emitted_at": 1697021400948} +{"stream": "user_interest", "data": {"user_interest.availabilities": [], "user_interest.launched_to_all": true, "user_interest.name": "Arts & Entertainment", "user_interest.resource_name": "customers/4651612872/userInterests/3", "user_interest.taxonomy_type": "VERTICAL_GEO", "user_interest.user_interest_id": 3, "user_interest.user_interest_parent": ""}, "emitted_at": 1697021402802} +{"stream": "user_interest", "data": {"user_interest.availabilities": [], "user_interest.launched_to_all": true, "user_interest.name": "Computers & Electronics", "user_interest.resource_name": "customers/4651612872/userInterests/5", "user_interest.taxonomy_type": "VERTICAL_GEO", "user_interest.user_interest_id": 5, "user_interest.user_interest_parent": ""}, "emitted_at": 1697021402803} +{"stream": "user_interest", "data": {"user_interest.availabilities": [], "user_interest.launched_to_all": true, "user_interest.name": "Finance", "user_interest.resource_name": "customers/4651612872/userInterests/7", "user_interest.taxonomy_type": "VERTICAL_GEO", "user_interest.user_interest_id": 7, "user_interest.user_interest_parent": ""}, "emitted_at": 1697021402803} +{"stream": "campaigns", "data": {"campaign.accessible_bidding_strategy": "", "campaign.ad_serving_optimization_status": "OPTIMIZE", "campaign.advertising_channel_sub_type": "UNSPECIFIED", "campaign.advertising_channel_type": "SEARCH", "campaign.app_campaign_setting.app_id": "", "campaign.app_campaign_setting.app_store": "UNSPECIFIED", "campaign.app_campaign_setting.bidding_strategy_goal_type": "UNSPECIFIED", "campaign.base_campaign": "customers/4651612872/campaigns/16820250687", "campaign.bidding_strategy": "", "campaign.bidding_strategy_type": "MAXIMIZE_CONVERSIONS", "campaign.campaign_budget": "customers/4651612872/campaignBudgets/12862729190", "campaign_budget.amount_micros": 1000000, "campaign.commission.commission_rate_micros": 0, "campaign.dynamic_search_ads_setting.domain_name": "", "campaign.dynamic_search_ads_setting.feeds": [], "campaign.dynamic_search_ads_setting.language_code": "", "campaign.dynamic_search_ads_setting.use_supplied_urls_only": false, "campaign.end_date": "2037-12-30", "campaign.excluded_parent_asset_field_types": [], "campaign.experiment_type": "BASE", "campaign.final_url_suffix": "", "campaign.frequency_caps": [], "campaign.geo_target_type_setting.negative_geo_target_type": "PRESENCE", "campaign.geo_target_type_setting.positive_geo_target_type": "PRESENCE_OR_INTEREST", "campaign.hotel_setting.hotel_center_id": 0, "campaign.id": 16820250687, "campaign.labels": ["customers/4651612872/labels/21906377810"], "campaign.local_campaign_setting.location_source_type": "UNSPECIFIED", "campaign.manual_cpc.enhanced_cpc_enabled": false, "campaign.manual_cpm": "", "campaign.manual_cpv": "", "campaign.maximize_conversion_value.target_roas": 0.0, "campaign.maximize_conversions.target_cpa_micros": 0, "campaign.name": "Website traffic-Search-15", "campaign.network_settings.target_content_network": true, "campaign.network_settings.target_google_search": true, "campaign.network_settings.target_partner_search_network": false, "campaign.network_settings.target_search_network": true, "campaign.optimization_goal_setting.optimization_goal_types": [], "campaign.optimization_score": 0.0, "campaign.payment_mode": "CLICKS", "campaign.percent_cpc.cpc_bid_ceiling_micros": 0, "campaign.percent_cpc.enhanced_cpc_enabled": false, "campaign.real_time_bidding_setting.opt_in": false, "campaign.resource_name": "customers/4651612872/campaigns/16820250687", "campaign.selective_optimization.conversion_actions": [], "campaign.serving_status": "SERVING", "campaign.shopping_setting.campaign_priority": 0, "campaign.shopping_setting.enable_local": false, "campaign.shopping_setting.merchant_id": 0, "campaign.shopping_setting.sales_country": "", "campaign.start_date": "2022-04-08", "campaign.status": "PAUSED", "campaign.target_cpa.cpc_bid_ceiling_micros": 0, "campaign.target_cpa.cpc_bid_floor_micros": 0, "campaign.target_cpa.target_cpa_micros": 0, "campaign.target_cpm.target_frequency_goal.target_count": 0, "campaign.target_cpm.target_frequency_goal.time_unit": "UNSPECIFIED", "campaign.target_impression_share.cpc_bid_ceiling_micros": 0, "campaign.target_impression_share.location": "UNSPECIFIED", "campaign.target_impression_share.location_fraction_micros": 0, "campaign.target_roas.cpc_bid_ceiling_micros": 0, "campaign.target_roas.cpc_bid_floor_micros": 0, "campaign.target_roas.target_roas": 0.0, "campaign.target_spend.cpc_bid_ceiling_micros": 0, "campaign.target_spend.target_spend_micros": 0, "campaign.targeting_setting.target_restrictions": ["targeting_dimension: AUDIENCE\nbid_only: true\n"], "campaign.tracking_setting.tracking_url": "", "campaign.tracking_url_template": "", "campaign.url_custom_parameters": [], "campaign.vanity_pharma.vanity_pharma_display_url_mode": "UNSPECIFIED", "campaign.vanity_pharma.vanity_pharma_text": "UNSPECIFIED", "campaign.video_brand_safety_suitability": "UNSPECIFIED", "metrics.clicks": 0, "metrics.ctr": 0.0, "metrics.conversions": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 0, "metrics.impressions": 1.0, "metrics.video_views": 0.0, "metrics.video_quartile_p100_rate": 0.0, "metrics.active_view_cpm": 0.0, "metrics.active_view_ctr": 0.0, "metrics.active_view_impressions": 0, "metrics.active_view_measurability": 0.0, "metrics.active_view_measurable_cost_micros": 0, "metrics.active_view_measurable_impressions": 0, "metrics.active_view_viewability": 0.0, "metrics.average_cost": 0.0, "metrics.average_cpc": 0.0, "metrics.average_cpm": 0.0, "metrics.interactions": 0, "metrics.interaction_event_types": "[]", "metrics.value_per_conversion": 0.0, "metrics.cost_per_conversion": 0.0, "segments.date": "2022-05-18", "segments.hour": 1.0, "segments.ad_network_type": "SEARCH"}, "emitted_at": 1697021407038} +{"stream": "campaigns", "data": {"campaign.accessible_bidding_strategy": "", "campaign.ad_serving_optimization_status": "OPTIMIZE", "campaign.advertising_channel_sub_type": "UNSPECIFIED", "campaign.advertising_channel_type": "SEARCH", "campaign.app_campaign_setting.app_id": "", "campaign.app_campaign_setting.app_store": "UNSPECIFIED", "campaign.app_campaign_setting.bidding_strategy_goal_type": "UNSPECIFIED", "campaign.base_campaign": "customers/4651612872/campaigns/16820250687", "campaign.bidding_strategy": "", "campaign.bidding_strategy_type": "MAXIMIZE_CONVERSIONS", "campaign.campaign_budget": "customers/4651612872/campaignBudgets/12862729190", "campaign_budget.amount_micros": 1000000, "campaign.commission.commission_rate_micros": 0, "campaign.dynamic_search_ads_setting.domain_name": "", "campaign.dynamic_search_ads_setting.feeds": [], "campaign.dynamic_search_ads_setting.language_code": "", "campaign.dynamic_search_ads_setting.use_supplied_urls_only": false, "campaign.end_date": "2037-12-30", "campaign.excluded_parent_asset_field_types": [], "campaign.experiment_type": "BASE", "campaign.final_url_suffix": "", "campaign.frequency_caps": [], "campaign.geo_target_type_setting.negative_geo_target_type": "PRESENCE", "campaign.geo_target_type_setting.positive_geo_target_type": "PRESENCE_OR_INTEREST", "campaign.hotel_setting.hotel_center_id": 0, "campaign.id": 16820250687, "campaign.labels": ["customers/4651612872/labels/21906377810"], "campaign.local_campaign_setting.location_source_type": "UNSPECIFIED", "campaign.manual_cpc.enhanced_cpc_enabled": false, "campaign.manual_cpm": "", "campaign.manual_cpv": "", "campaign.maximize_conversion_value.target_roas": 0.0, "campaign.maximize_conversions.target_cpa_micros": 0, "campaign.name": "Website traffic-Search-15", "campaign.network_settings.target_content_network": true, "campaign.network_settings.target_google_search": true, "campaign.network_settings.target_partner_search_network": false, "campaign.network_settings.target_search_network": true, "campaign.optimization_goal_setting.optimization_goal_types": [], "campaign.optimization_score": 0.0, "campaign.payment_mode": "CLICKS", "campaign.percent_cpc.cpc_bid_ceiling_micros": 0, "campaign.percent_cpc.enhanced_cpc_enabled": false, "campaign.real_time_bidding_setting.opt_in": false, "campaign.resource_name": "customers/4651612872/campaigns/16820250687", "campaign.selective_optimization.conversion_actions": [], "campaign.serving_status": "SERVING", "campaign.shopping_setting.campaign_priority": 0, "campaign.shopping_setting.enable_local": false, "campaign.shopping_setting.merchant_id": 0, "campaign.shopping_setting.sales_country": "", "campaign.start_date": "2022-04-08", "campaign.status": "PAUSED", "campaign.target_cpa.cpc_bid_ceiling_micros": 0, "campaign.target_cpa.cpc_bid_floor_micros": 0, "campaign.target_cpa.target_cpa_micros": 0, "campaign.target_cpm.target_frequency_goal.target_count": 0, "campaign.target_cpm.target_frequency_goal.time_unit": "UNSPECIFIED", "campaign.target_impression_share.cpc_bid_ceiling_micros": 0, "campaign.target_impression_share.location": "UNSPECIFIED", "campaign.target_impression_share.location_fraction_micros": 0, "campaign.target_roas.cpc_bid_ceiling_micros": 0, "campaign.target_roas.cpc_bid_floor_micros": 0, "campaign.target_roas.target_roas": 0.0, "campaign.target_spend.cpc_bid_ceiling_micros": 0, "campaign.target_spend.target_spend_micros": 0, "campaign.targeting_setting.target_restrictions": ["targeting_dimension: AUDIENCE\nbid_only: true\n"], "campaign.tracking_setting.tracking_url": "", "campaign.tracking_url_template": "", "campaign.url_custom_parameters": [], "campaign.vanity_pharma.vanity_pharma_display_url_mode": "UNSPECIFIED", "campaign.vanity_pharma.vanity_pharma_text": "UNSPECIFIED", "campaign.video_brand_safety_suitability": "UNSPECIFIED", "metrics.clicks": 0, "metrics.ctr": 0.0, "metrics.conversions": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 0, "metrics.impressions": 2.0, "metrics.video_views": 0.0, "metrics.video_quartile_p100_rate": 0.0, "metrics.active_view_cpm": 0.0, "metrics.active_view_ctr": 0.0, "metrics.active_view_impressions": 0, "metrics.active_view_measurability": 0.0, "metrics.active_view_measurable_cost_micros": 0, "metrics.active_view_measurable_impressions": 0, "metrics.active_view_viewability": 0.0, "metrics.average_cost": 0.0, "metrics.average_cpc": 0.0, "metrics.average_cpm": 0.0, "metrics.interactions": 0, "metrics.interaction_event_types": "[]", "metrics.value_per_conversion": 0.0, "metrics.cost_per_conversion": 0.0, "segments.date": "2022-05-18", "segments.hour": 2.0, "segments.ad_network_type": "SEARCH"}, "emitted_at": 1697021407042} +{"stream": "campaigns", "data": {"campaign.accessible_bidding_strategy": "", "campaign.ad_serving_optimization_status": "OPTIMIZE", "campaign.advertising_channel_sub_type": "UNSPECIFIED", "campaign.advertising_channel_type": "SEARCH", "campaign.app_campaign_setting.app_id": "", "campaign.app_campaign_setting.app_store": "UNSPECIFIED", "campaign.app_campaign_setting.bidding_strategy_goal_type": "UNSPECIFIED", "campaign.base_campaign": "customers/4651612872/campaigns/16820250687", "campaign.bidding_strategy": "", "campaign.bidding_strategy_type": "MAXIMIZE_CONVERSIONS", "campaign.campaign_budget": "customers/4651612872/campaignBudgets/12862729190", "campaign_budget.amount_micros": 1000000, "campaign.commission.commission_rate_micros": 0, "campaign.dynamic_search_ads_setting.domain_name": "", "campaign.dynamic_search_ads_setting.feeds": [], "campaign.dynamic_search_ads_setting.language_code": "", "campaign.dynamic_search_ads_setting.use_supplied_urls_only": false, "campaign.end_date": "2037-12-30", "campaign.excluded_parent_asset_field_types": [], "campaign.experiment_type": "BASE", "campaign.final_url_suffix": "", "campaign.frequency_caps": [], "campaign.geo_target_type_setting.negative_geo_target_type": "PRESENCE", "campaign.geo_target_type_setting.positive_geo_target_type": "PRESENCE_OR_INTEREST", "campaign.hotel_setting.hotel_center_id": 0, "campaign.id": 16820250687, "campaign.labels": ["customers/4651612872/labels/21906377810"], "campaign.local_campaign_setting.location_source_type": "UNSPECIFIED", "campaign.manual_cpc.enhanced_cpc_enabled": false, "campaign.manual_cpm": "", "campaign.manual_cpv": "", "campaign.maximize_conversion_value.target_roas": 0.0, "campaign.maximize_conversions.target_cpa_micros": 0, "campaign.name": "Website traffic-Search-15", "campaign.network_settings.target_content_network": true, "campaign.network_settings.target_google_search": true, "campaign.network_settings.target_partner_search_network": false, "campaign.network_settings.target_search_network": true, "campaign.optimization_goal_setting.optimization_goal_types": [], "campaign.optimization_score": 0.0, "campaign.payment_mode": "CLICKS", "campaign.percent_cpc.cpc_bid_ceiling_micros": 0, "campaign.percent_cpc.enhanced_cpc_enabled": false, "campaign.real_time_bidding_setting.opt_in": false, "campaign.resource_name": "customers/4651612872/campaigns/16820250687", "campaign.selective_optimization.conversion_actions": [], "campaign.serving_status": "SERVING", "campaign.shopping_setting.campaign_priority": 0, "campaign.shopping_setting.enable_local": false, "campaign.shopping_setting.merchant_id": 0, "campaign.shopping_setting.sales_country": "", "campaign.start_date": "2022-04-08", "campaign.status": "PAUSED", "campaign.target_cpa.cpc_bid_ceiling_micros": 0, "campaign.target_cpa.cpc_bid_floor_micros": 0, "campaign.target_cpa.target_cpa_micros": 0, "campaign.target_cpm.target_frequency_goal.target_count": 0, "campaign.target_cpm.target_frequency_goal.time_unit": "UNSPECIFIED", "campaign.target_impression_share.cpc_bid_ceiling_micros": 0, "campaign.target_impression_share.location": "UNSPECIFIED", "campaign.target_impression_share.location_fraction_micros": 0, "campaign.target_roas.cpc_bid_ceiling_micros": 0, "campaign.target_roas.cpc_bid_floor_micros": 0, "campaign.target_roas.target_roas": 0.0, "campaign.target_spend.cpc_bid_ceiling_micros": 0, "campaign.target_spend.target_spend_micros": 0, "campaign.targeting_setting.target_restrictions": ["targeting_dimension: AUDIENCE\nbid_only: true\n"], "campaign.tracking_setting.tracking_url": "", "campaign.tracking_url_template": "", "campaign.url_custom_parameters": [], "campaign.vanity_pharma.vanity_pharma_display_url_mode": "UNSPECIFIED", "campaign.vanity_pharma.vanity_pharma_text": "UNSPECIFIED", "campaign.video_brand_safety_suitability": "UNSPECIFIED", "metrics.clicks": 0, "metrics.ctr": 0.0, "metrics.conversions": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 0, "metrics.impressions": 2.0, "metrics.video_views": 0.0, "metrics.video_quartile_p100_rate": 0.0, "metrics.active_view_cpm": 0.0, "metrics.active_view_ctr": 0.0, "metrics.active_view_impressions": 0, "metrics.active_view_measurability": 0.0, "metrics.active_view_measurable_cost_micros": 0, "metrics.active_view_measurable_impressions": 0, "metrics.active_view_viewability": 0.0, "metrics.average_cost": 0.0, "metrics.average_cpc": 0.0, "metrics.average_cpm": 0.0, "metrics.interactions": 0, "metrics.interaction_event_types": "[]", "metrics.value_per_conversion": 0.0, "metrics.cost_per_conversion": 0.0, "segments.date": "2022-05-18", "segments.hour": 3.0, "segments.ad_network_type": "SEARCH"}, "emitted_at": 1697021407047} +{"stream": "campaign_budget", "data": {"customer.id": 4651612872, "campaign.id": 16820250687, "campaign_budget.aligned_bidding_strategy_id": 0, "campaign_budget.amount_micros": 750000, "campaign_budget.delivery_method": ["STANDARD"], "campaign_budget.explicitly_shared": false, "campaign_budget.has_recommended_budget": false, "campaign_budget.id": 10695604507, "campaign_budget.name": "Website traffic-Search-15", "campaign_budget.period": ["DAILY"], "campaign_budget.recommended_budget_amount_micros": 0, "campaign_budget.recommended_budget_estimated_change_weekly_clicks": 0, "campaign_budget.recommended_budget_estimated_change_weekly_cost_micros": 0, "campaign_budget.recommended_budget_estimated_change_weekly_interactions": 0, "campaign_budget.recommended_budget_estimated_change_weekly_views": 0, "campaign_budget.reference_count": 0, "campaign_budget.resource_name": "customers/4651612872/campaignBudgets/10695604507", "campaign_budget.status": ["REMOVED"], "campaign_budget.total_amount_micros": 0, "campaign_budget.type": ["STANDARD"], "segments.date": "2022-05-18", "segments.budget_campaign_association_status.campaign": "customers/4651612872/campaigns/16820250687", "segments.budget_campaign_association_status.status": ["REMOVED"], "metrics.all_conversions": 0.0, "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.average_cost": 197500.0, "metrics.average_cpc": 197500.0, "metrics.average_cpe": 0.0, "metrics.average_cpm": 15490196.078431372, "metrics.average_cpv": 0.0, "metrics.clicks": 4, "metrics.conversions": 0.0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 790000, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.0784313725490196, "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "metrics.impressions": 51, "metrics.interaction_event_types": ["InteractionEventType.CLICK"], "metrics.interaction_rate": 0.0784313725490196, "metrics.interactions": 4, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0}, "emitted_at": 1697021409578} +{"stream": "campaign_budget", "data": {"customer.id": 4651612872, "campaign.id": 16820250687, "campaign_budget.aligned_bidding_strategy_id": 0, "campaign_budget.amount_micros": 750000, "campaign_budget.delivery_method": ["STANDARD"], "campaign_budget.explicitly_shared": false, "campaign_budget.has_recommended_budget": false, "campaign_budget.id": 10695604507, "campaign_budget.name": "Website traffic-Search-15", "campaign_budget.period": ["DAILY"], "campaign_budget.recommended_budget_amount_micros": 0, "campaign_budget.recommended_budget_estimated_change_weekly_clicks": 0, "campaign_budget.recommended_budget_estimated_change_weekly_cost_micros": 0, "campaign_budget.recommended_budget_estimated_change_weekly_interactions": 0, "campaign_budget.recommended_budget_estimated_change_weekly_views": 0, "campaign_budget.reference_count": 0, "campaign_budget.resource_name": "customers/4651612872/campaignBudgets/10695604507", "campaign_budget.status": ["REMOVED"], "campaign_budget.total_amount_micros": 0, "campaign_budget.type": ["STANDARD"], "segments.date": "2022-05-19", "segments.budget_campaign_association_status.campaign": "customers/4651612872/campaigns/16820250687", "segments.budget_campaign_association_status.status": ["REMOVED"], "metrics.all_conversions": 0.0, "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.average_cost": 143333.33333333334, "metrics.average_cpc": 143333.33333333334, "metrics.average_cpe": 0.0, "metrics.average_cpm": 31851851.85185185, "metrics.average_cpv": 0.0, "metrics.clicks": 6, "metrics.conversions": 0.0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 860000, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.2222222222222222, "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "metrics.impressions": 27, "metrics.interaction_event_types": ["InteractionEventType.CLICK"], "metrics.interaction_rate": 0.2222222222222222, "metrics.interactions": 6, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0}, "emitted_at": 1697021409581} +{"stream": "campaign_budget", "data": {"customer.id": 4651612872, "campaign.id": 16820250687, "campaign_budget.aligned_bidding_strategy_id": 0, "campaign_budget.amount_micros": 750000, "campaign_budget.delivery_method": ["STANDARD"], "campaign_budget.explicitly_shared": false, "campaign_budget.has_recommended_budget": false, "campaign_budget.id": 10695604507, "campaign_budget.name": "Website traffic-Search-15", "campaign_budget.period": ["DAILY"], "campaign_budget.recommended_budget_amount_micros": 0, "campaign_budget.recommended_budget_estimated_change_weekly_clicks": 0, "campaign_budget.recommended_budget_estimated_change_weekly_cost_micros": 0, "campaign_budget.recommended_budget_estimated_change_weekly_interactions": 0, "campaign_budget.recommended_budget_estimated_change_weekly_views": 0, "campaign_budget.reference_count": 0, "campaign_budget.resource_name": "customers/4651612872/campaignBudgets/10695604507", "campaign_budget.status": ["REMOVED"], "campaign_budget.total_amount_micros": 0, "campaign_budget.type": ["STANDARD"], "segments.date": "2022-05-20", "segments.budget_campaign_association_status.campaign": "customers/4651612872/campaigns/16820250687", "segments.budget_campaign_association_status.status": ["REMOVED"], "metrics.all_conversions": 0.0, "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.average_cost": 215000.0, "metrics.average_cpc": 215000.0, "metrics.average_cpe": 0.0, "metrics.average_cpm": 16538461.53846154, "metrics.average_cpv": 0.0, "metrics.clicks": 2, "metrics.conversions": 0.0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 430000, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.07692307692307693, "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "metrics.impressions": 26, "metrics.interaction_event_types": ["InteractionEventType.CLICK"], "metrics.interaction_rate": 0.07692307692307693, "metrics.interactions": 2, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0}, "emitted_at": 1697021409584} +{"stream": "user_location_report", "data": {"segments.date": "2022-05-18", "segments.day_of_week": "WEDNESDAY", "segments.month": "2022-05-01", "segments.week": "2022-05-16", "segments.quarter": "2022-04-01", "segments.year": 2022, "segments.ad_network_type": "SEARCH", "customer.currency_code": "USD", "customer.id": 4651612872, "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "user_location_view.country_criterion_id": 2356, "user_location_view.targeting_location": false, "user_location_view.resource_name": "customers/4651612872/userLocationViews/2356~false", "campaign.base_campaign": "customers/4651612872/campaigns/16820250687", "campaign.id": 16820250687, "campaign.name": "Website traffic-Search-15", "campaign.status": "PAUSED", "ad_group.name": "\u0413\u0440\u0443\u043f\u043f\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0439\u00a02", "ad_group.status": "ENABLED", "ad_group.base_ad_group": "customers/4651612872/adGroups/137020701042", "metrics.all_conversions": 0.0, "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.average_cost": 0.0, "metrics.average_cpc": 0.0, "metrics.average_cpm": 0.0, "metrics.average_cpv": 0.0, "metrics.clicks": 0, "metrics.conversions": 0.0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 0, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.0, "metrics.impressions": 3, "metrics.interaction_event_types": [], "metrics.interaction_rate": 0.0, "metrics.interactions": 0, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0}, "emitted_at": 1697021411190} +{"stream": "user_location_report", "data": {"segments.date": "2022-05-18", "segments.day_of_week": "WEDNESDAY", "segments.month": "2022-05-01", "segments.week": "2022-05-16", "segments.quarter": "2022-04-01", "segments.year": 2022, "segments.ad_network_type": "SEARCH", "customer.currency_code": "USD", "customer.id": 4651612872, "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "user_location_view.country_criterion_id": 2484, "user_location_view.targeting_location": false, "user_location_view.resource_name": "customers/4651612872/userLocationViews/2484~false", "campaign.base_campaign": "customers/4651612872/campaigns/16820250687", "campaign.id": 16820250687, "campaign.name": "Website traffic-Search-15", "campaign.status": "PAUSED", "ad_group.name": "\u0413\u0440\u0443\u043f\u043f\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0439\u00a02", "ad_group.status": "ENABLED", "ad_group.base_ad_group": "customers/4651612872/adGroups/137020701042", "metrics.all_conversions": 0.0, "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.average_cost": 0.0, "metrics.average_cpc": 0.0, "metrics.average_cpm": 0.0, "metrics.average_cpv": 0.0, "metrics.clicks": 0, "metrics.conversions": 0.0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 0, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.0, "metrics.impressions": 1, "metrics.interaction_event_types": [], "metrics.interaction_rate": 0.0, "metrics.interactions": 0, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0}, "emitted_at": 1697021411193} +{"stream": "user_location_report", "data": {"segments.date": "2022-05-18", "segments.day_of_week": "WEDNESDAY", "segments.month": "2022-05-01", "segments.week": "2022-05-16", "segments.quarter": "2022-04-01", "segments.year": 2022, "segments.ad_network_type": "SEARCH", "customer.currency_code": "USD", "customer.id": 4651612872, "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "user_location_view.country_criterion_id": 2124, "user_location_view.targeting_location": true, "user_location_view.resource_name": "customers/4651612872/userLocationViews/2124~true", "campaign.base_campaign": "customers/4651612872/campaigns/16820250687", "campaign.id": 16820250687, "campaign.name": "Website traffic-Search-15", "campaign.status": "PAUSED", "ad_group.name": "\u0413\u0440\u0443\u043f\u043f\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0439\u00a02", "ad_group.status": "ENABLED", "ad_group.base_ad_group": "customers/4651612872/adGroups/137020701042", "metrics.all_conversions": 0.0, "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.average_cost": 253333.33333333334, "metrics.average_cpc": 253333.33333333334, "metrics.average_cpm": 36190476.190476194, "metrics.average_cpv": 0.0, "metrics.clicks": 3, "metrics.conversions": 0.0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 760000, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.14285714285714285, "metrics.impressions": 21, "metrics.interaction_event_types": ["InteractionEventType.CLICK"], "metrics.interaction_rate": 0.14285714285714285, "metrics.interactions": 3, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0}, "emitted_at": 1697021411194} +{"stream": "account_performance_report", "data": {"customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "metrics.active_view_cpm": 0.0, "metrics.active_view_ctr": 0.0, "metrics.active_view_impressions": 0, "metrics.active_view_measurability": 0.0, "metrics.active_view_measurable_cost_micros": 0, "metrics.active_view_measurable_impressions": 0, "metrics.active_view_viewability": 0.0, "segments.ad_network_type": "SEARCH", "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.all_conversions": 0.0, "metrics.average_cost": 253333.33333333334, "metrics.average_cpc": 253333.33333333334, "metrics.average_cpe": 0.0, "metrics.average_cpm": 27142857.14285714, "metrics.average_cpv": 0.0, "customer.manager": false, "metrics.clicks": 3, "metrics.content_budget_lost_impression_share": 0.0, "metrics.content_impression_share": 0.0, "metrics.content_rank_lost_impression_share": 0.0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.conversions": 0.0, "metrics.cost_micros": 760000, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.10714285714285714, "segments.date": "2022-05-18", "segments.day_of_week": "WEDNESDAY", "segments.device": "DESKTOP", "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "customer.id": 4651612872, "metrics.impressions": 28, "metrics.interaction_rate": 0.10714285714285714, "metrics.interaction_event_types": ["InteractionEventType.CLICK"], "metrics.interactions": 3, "customer.auto_tagging_enabled": true, "customer.test_account": false, "segments.month": "2022-05-01", "segments.quarter": "2022-04-01", "metrics.search_budget_lost_impression_share": 0.6935849056603773, "metrics.search_exact_match_impression_share": 0.0999, "metrics.search_impression_share": 0.0999, "metrics.search_rank_lost_impression_share": 0.2852830188679245, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0, "segments.week": "2022-05-16", "segments.year": 2022}, "emitted_at": 1697021413030} +{"stream": "account_performance_report", "data": {"customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "metrics.active_view_cpm": 0.0, "metrics.active_view_ctr": 0.0, "metrics.active_view_impressions": 0, "metrics.active_view_measurability": 0.0, "metrics.active_view_measurable_cost_micros": 0, "metrics.active_view_measurable_impressions": 0, "metrics.active_view_viewability": 0.0, "segments.ad_network_type": "SEARCH", "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.all_conversions": 0.0, "metrics.average_cost": 30000.0, "metrics.average_cpc": 30000.0, "metrics.average_cpe": 0.0, "metrics.average_cpm": 2500000.0, "metrics.average_cpv": 0.0, "customer.manager": false, "metrics.clicks": 1, "metrics.content_budget_lost_impression_share": 0.0, "metrics.content_impression_share": 0.0, "metrics.content_rank_lost_impression_share": 0.0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.conversions": 0.0, "metrics.cost_micros": 30000, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.08333333333333333, "segments.date": "2022-05-18", "segments.day_of_week": "WEDNESDAY", "segments.device": "MOBILE", "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "customer.id": 4651612872, "metrics.impressions": 12, "metrics.interaction_rate": 0.08333333333333333, "metrics.interaction_event_types": ["InteractionEventType.CLICK"], "metrics.interactions": 1, "customer.auto_tagging_enabled": true, "customer.test_account": false, "segments.month": "2022-05-01", "segments.quarter": "2022-04-01", "metrics.search_budget_lost_impression_share": 0.7254437869822485, "metrics.search_exact_match_impression_share": 0.0999, "metrics.search_impression_share": 0.0999, "metrics.search_rank_lost_impression_share": 0.2603550295857988, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0, "segments.week": "2022-05-16", "segments.year": 2022}, "emitted_at": 1697021413033} +{"stream": "account_performance_report", "data": {"customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "metrics.active_view_cpm": 0.0, "metrics.active_view_ctr": 0.0, "metrics.active_view_impressions": 0, "metrics.active_view_measurability": 0.0, "metrics.active_view_measurable_cost_micros": 0, "metrics.active_view_measurable_impressions": 0, "metrics.active_view_viewability": 0.0, "segments.ad_network_type": "SEARCH", "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.all_conversions": 0.0, "metrics.average_cost": 0.0, "metrics.average_cpc": 0.0, "metrics.average_cpe": 0.0, "metrics.average_cpm": 0.0, "metrics.average_cpv": 0.0, "customer.manager": false, "metrics.clicks": 0, "metrics.content_budget_lost_impression_share": 0.0, "metrics.content_impression_share": 0.0, "metrics.content_rank_lost_impression_share": 0.0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.conversions": 0.0, "metrics.cost_micros": 0, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.0, "segments.date": "2022-05-18", "segments.day_of_week": "WEDNESDAY", "segments.device": "TABLET", "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "customer.id": 4651612872, "metrics.impressions": 0, "metrics.interaction_rate": 0.0, "metrics.interaction_event_types": [], "metrics.interactions": 0, "customer.auto_tagging_enabled": true, "customer.test_account": false, "segments.month": "2022-05-01", "segments.quarter": "2022-04-01", "metrics.search_budget_lost_impression_share": 0.9001, "metrics.search_exact_match_impression_share": 0.0999, "metrics.search_impression_share": 0.0999, "metrics.search_rank_lost_impression_share": 0.0, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0, "segments.week": "2022-05-16", "segments.year": 2022}, "emitted_at": 1697021413034} +{"stream": "display_keyword_performance_report", "data": {"customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "metrics.active_view_cpm": 10012000.0, "metrics.active_view_ctr": 0.0, "metrics.active_view_impressions": 1, "metrics.active_view_measurability": 1.0, "metrics.active_view_measurable_cost_micros": 10012, "metrics.active_view_measurable_impressions": 1, "metrics.active_view_viewability": 1.0, "ad_group.id": 143992182864, "ad_group.name": "Video Non-skippable - 2022-05-30", "ad_group.status": "ENABLED", "segments.ad_network_type": "YOUTUBE_WATCH", "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.all_conversions": 0.0, "metrics.average_cost": 0.0, "metrics.average_cpc": 0.0, "metrics.average_cpe": 0.0, "metrics.average_cpm": 10012000.0, "metrics.average_cpv": 0.0, "ad_group.base_ad_group": "customers/4651612872/adGroups/143992182864", "campaign.base_campaign": "customers/4651612872/campaigns/17354032686", "campaign.bidding_strategy": "", "campaign.bidding_strategy_type": "TARGET_CPM", "campaign.id": 17354032686, "campaign.name": "Video Non-skippable - 2022-05-30", "campaign.status": "ENABLED", "metrics.clicks": 0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.conversions": 0.0, "metrics.cost_micros": 10012, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "ad_group_criterion.effective_cpc_bid_micros": 10000, "ad_group_criterion.effective_cpc_bid_source": "AD_GROUP", "ad_group_criterion.effective_cpm_bid_micros": 10000, "ad_group_criterion.effective_cpm_bid_source": "AD_GROUP", "ad_group_criterion.effective_cpv_bid_micros": 10000, "ad_group_criterion.effective_cpv_bid_source": "AD_GROUP", "ad_group_criterion.keyword.text": "big data software", "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.0, "segments.day_of_week": "TUESDAY", "segments.device": "MOBILE", "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "customer.id": 4651612872, "ad_group_criterion.final_mobile_urls": [], "ad_group_criterion.final_urls": [], "metrics.gmail_forwards": 0, "metrics.gmail_saves": 0, "metrics.gmail_secondary_clicks": 0, "ad_group_criterion.criterion_id": 26160872903, "metrics.impressions": 1, "metrics.interaction_rate": 0.0, "metrics.interaction_event_types": [], "metrics.interactions": 0, "ad_group_criterion.negative": false, "ad_group.targeting_setting.target_restrictions": ["targeting_dimension: AGE_RANGE\nbid_only: true\n", "targeting_dimension: GENDER\nbid_only: true\n", "targeting_dimension: PARENTAL_STATUS\nbid_only: true\n", "targeting_dimension: INCOME_RANGE\nbid_only: true\n", "targeting_dimension: TOPIC\nbid_only: false\n"], "segments.month": "2022-05-01", "segments.quarter": "2022-04-01", "ad_group_criterion.status": "ENABLED", "ad_group_criterion.tracking_url_template": "", "ad_group_criterion.keyword.match_type": "BROAD", "ad_group_criterion.url_custom_parameters": [], "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_quartile_p100_rate": 0.0, "metrics.video_quartile_p25_rate": 0.0, "metrics.video_quartile_p50_rate": 0.0, "metrics.video_quartile_p75_rate": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0, "segments.week": "2022-05-30", "segments.year": 2022, "segments.date": "2022-05-31"}, "emitted_at": 1697021417130} +{"stream": "ad_group_ad_report", "data": {"ad_group_ad.ad.legacy_responsive_display_ad.accent_color": "", "ad_group.id": 137020701042, "customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "metrics.active_view_cpm": 0.0, "metrics.active_view_ctr": 0.0, "metrics.active_view_impressions": 0, "metrics.active_view_measurability": 0.0, "metrics.active_view_measurable_cost_micros": 0, "metrics.active_view_measurable_impressions": 0, "metrics.active_view_viewability": 0.0, "ad_group_ad.ad_group": "customers/4651612872/adGroups/137020701042", "ad_group.name": "\u0413\u0440\u0443\u043f\u043f\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0439\u00a02", "ad_group.status": "ENABLED", "segments.ad_network_type": "SEARCH", "ad_group_ad.ad_strength": "POOR", "ad_group_ad.ad.type": "RESPONSIVE_SEARCH_AD", "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.all_conversions": 0.0, "ad_group_ad.ad.legacy_responsive_display_ad.allow_flexible_color": false, "ad_group_ad.ad.added_by_google_ads": false, "metrics.average_cost": 197500.0, "metrics.average_cpc": 197500.0, "metrics.average_cpe": 0.0, "metrics.average_cpm": 19750000.0, "metrics.average_cpv": 0.0, "metrics.average_page_views": 0.0, "metrics.average_time_on_site": 0.0, "ad_group.base_ad_group": "customers/4651612872/adGroups/137020701042", "campaign.base_campaign": "customers/4651612872/campaigns/16820250687", "metrics.bounce_rate": 0.0, "ad_group_ad.ad.legacy_responsive_display_ad.business_name": "", "ad_group_ad.ad.legacy_responsive_display_ad.call_to_action_text": "", "campaign.id": 16820250687, "campaign.name": "Website traffic-Search-15", "campaign.status": "PAUSED", "metrics.clicks": 4, "ad_group_ad.policy_summary.approval_status": "APPROVED", "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.conversions": 0.0, "metrics.cost_micros": 790000, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cost_per_current_model_attributed_conversion": 0.0, "ad_group_ad.ad.final_mobile_urls": [], "ad_group_ad.ad.final_urls": ["https://airbyte.com"], "ad_group_ad.ad.tracking_url_template": "", "ad_group_ad.ad.url_custom_parameters": [], "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.1, "metrics.current_model_attributed_conversions_value": 0.0, "metrics.current_model_attributed_conversions": 0.0, "segments.date": "2022-05-18", "segments.day_of_week": "WEDNESDAY", "ad_group_ad.ad.expanded_text_ad.description": "", "ad_group_ad.ad.text_ad.description1": "", "ad_group_ad.ad.text_ad.description2": "", "ad_group_ad.ad.device_preference": "UNSPECIFIED", "ad_group_ad.ad.display_url": "", "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "ad_group_ad.ad.legacy_responsive_display_ad.logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.marketing_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_marketing_image": "", "ad_group_ad.ad.expanded_dynamic_search_ad.description": "", "ad_group_ad.ad.expanded_text_ad.description2": "", "ad_group_ad.ad.expanded_text_ad.headline_part3": "", "customer.id": 4651612872, "ad_group_ad.ad.legacy_responsive_display_ad.format_setting": "UNSPECIFIED", "metrics.gmail_forwards": 0, "metrics.gmail_saves": 0, "metrics.gmail_secondary_clicks": 0, "ad_group_ad.ad.text_ad.headline": "", "ad_group_ad.ad.expanded_text_ad.headline_part1": "", "ad_group_ad.ad.expanded_text_ad.headline_part2": "", "ad_group_ad.ad.id": 592078631218, "ad_group_ad.ad.image_ad.image_url": "", "ad_group_ad.ad.image_ad.pixel_height": 0, "ad_group_ad.ad.image_ad.pixel_width": 0, "ad_group_ad.ad.image_ad.mime_type": "UNSPECIFIED", "ad_group_ad.ad.image_ad.name": "", "metrics.impressions": 40, "metrics.interaction_rate": 0.1, "metrics.interaction_event_types": ["InteractionEventType.CLICK"], "metrics.interactions": 4, "ad_group_ad.ad.legacy_responsive_display_ad.long_headline": "", "ad_group_ad.ad.legacy_responsive_display_ad.main_color": "", "segments.month": "2022-05-01", "ad_group_ad.ad.responsive_display_ad.accent_color": "", "ad_group_ad.ad.responsive_display_ad.allow_flexible_color": false, "ad_group_ad.ad.responsive_display_ad.business_name": "", "ad_group_ad.ad.responsive_display_ad.call_to_action_text": "", "ad_group_ad.ad.responsive_display_ad.descriptions": [], "ad_group_ad.ad.responsive_display_ad.price_prefix": "", "ad_group_ad.ad.responsive_display_ad.promo_text": "", "ad_group_ad.ad.responsive_display_ad.format_setting": "UNSPECIFIED", "ad_group_ad.ad.responsive_display_ad.headlines": [], "ad_group_ad.ad.responsive_display_ad.logo_images": [], "ad_group_ad.ad.responsive_display_ad.square_logo_images": [], "ad_group_ad.ad.responsive_display_ad.long_headline": "", "ad_group_ad.ad.responsive_display_ad.main_color": "", "ad_group_ad.ad.responsive_display_ad.marketing_images": [], "ad_group_ad.ad.responsive_display_ad.square_marketing_images": [], "ad_group_ad.ad.responsive_display_ad.youtube_videos": [], "ad_group_ad.ad.expanded_text_ad.path1": "", "ad_group_ad.ad.expanded_text_ad.path2": "", "metrics.percent_new_visitors": 0.0, "ad_group_ad.ad.legacy_responsive_display_ad.price_prefix": "", "ad_group_ad.ad.legacy_responsive_display_ad.promo_text": "", "segments.quarter": "2022-04-01", "ad_group_ad.ad.responsive_search_ad.descriptions": ["text: \"Behind The Scenes: Testing The Airbyte Maintainer Program\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Airbyte | Open-Source Data Integration Platform | ELT tool\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Upgrading Our Discourse And Slack To Support Our Community Growth\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Consolidate your data in your data warehouses, lakes and databases\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n"], "ad_group_ad.ad.responsive_search_ad.headlines": ["text: \"Airbyte\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"ELT tool\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Open-source Data Integration\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n"], "ad_group_ad.ad.responsive_search_ad.path1": "", "ad_group_ad.ad.responsive_search_ad.path2": "", "ad_group_ad.ad.legacy_responsive_display_ad.short_headline": "", "ad_group_ad.status": "ENABLED", "ad_group_ad.ad.system_managed_resource_source": "UNSPECIFIED", "metrics.top_impression_percentage": 0.75, "ad_group_ad.ad.app_ad.descriptions": [], "ad_group_ad.ad.app_ad.headlines": [], "ad_group_ad.ad.app_ad.html5_media_bundles": [], "ad_group_ad.ad.app_ad.images": [], "ad_group_ad.ad.app_ad.mandatory_ad_text": "", "ad_group_ad.ad.app_ad.youtube_videos": [], "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.value_per_current_model_attributed_conversion": 0.0, "metrics.video_quartile_p100_rate": 0.0, "metrics.video_quartile_p25_rate": 0.0, "metrics.video_quartile_p50_rate": 0.0, "metrics.video_quartile_p75_rate": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0, "segments.week": "2022-05-16", "segments.year": 2022}, "emitted_at": 1697021422901} +{"stream": "ad_group_ad_report", "data": {"ad_group_ad.ad.legacy_responsive_display_ad.accent_color": "", "ad_group.id": 137020701042, "customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "metrics.active_view_cpm": 0.0, "metrics.active_view_ctr": 0.0, "metrics.active_view_impressions": 0, "metrics.active_view_measurability": 0.0, "metrics.active_view_measurable_cost_micros": 0, "metrics.active_view_measurable_impressions": 0, "metrics.active_view_viewability": 0.0, "ad_group_ad.ad_group": "customers/4651612872/adGroups/137020701042", "ad_group.name": "\u0413\u0440\u0443\u043f\u043f\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0439\u00a02", "ad_group.status": "ENABLED", "segments.ad_network_type": "SEARCH_PARTNERS", "ad_group_ad.ad_strength": "POOR", "ad_group_ad.ad.type": "RESPONSIVE_SEARCH_AD", "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.all_conversions": 0.0, "ad_group_ad.ad.legacy_responsive_display_ad.allow_flexible_color": false, "ad_group_ad.ad.added_by_google_ads": false, "metrics.average_cost": 0.0, "metrics.average_cpc": 0.0, "metrics.average_cpe": 0.0, "metrics.average_cpm": 0.0, "metrics.average_cpv": 0.0, "metrics.average_page_views": 0.0, "metrics.average_time_on_site": 0.0, "ad_group.base_ad_group": "customers/4651612872/adGroups/137020701042", "campaign.base_campaign": "customers/4651612872/campaigns/16820250687", "metrics.bounce_rate": 0.0, "ad_group_ad.ad.legacy_responsive_display_ad.business_name": "", "ad_group_ad.ad.legacy_responsive_display_ad.call_to_action_text": "", "campaign.id": 16820250687, "campaign.name": "Website traffic-Search-15", "campaign.status": "PAUSED", "metrics.clicks": 0, "ad_group_ad.policy_summary.approval_status": "APPROVED", "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.conversions": 0.0, "metrics.cost_micros": 0, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cost_per_current_model_attributed_conversion": 0.0, "ad_group_ad.ad.final_mobile_urls": [], "ad_group_ad.ad.final_urls": ["https://airbyte.com"], "ad_group_ad.ad.tracking_url_template": "", "ad_group_ad.ad.url_custom_parameters": [], "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.0, "metrics.current_model_attributed_conversions_value": 0.0, "metrics.current_model_attributed_conversions": 0.0, "segments.date": "2022-05-18", "segments.day_of_week": "WEDNESDAY", "ad_group_ad.ad.expanded_text_ad.description": "", "ad_group_ad.ad.text_ad.description1": "", "ad_group_ad.ad.text_ad.description2": "", "ad_group_ad.ad.device_preference": "UNSPECIFIED", "ad_group_ad.ad.display_url": "", "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "ad_group_ad.ad.legacy_responsive_display_ad.logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.marketing_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_marketing_image": "", "ad_group_ad.ad.expanded_dynamic_search_ad.description": "", "ad_group_ad.ad.expanded_text_ad.description2": "", "ad_group_ad.ad.expanded_text_ad.headline_part3": "", "customer.id": 4651612872, "ad_group_ad.ad.legacy_responsive_display_ad.format_setting": "UNSPECIFIED", "metrics.gmail_forwards": 0, "metrics.gmail_saves": 0, "metrics.gmail_secondary_clicks": 0, "ad_group_ad.ad.text_ad.headline": "", "ad_group_ad.ad.expanded_text_ad.headline_part1": "", "ad_group_ad.ad.expanded_text_ad.headline_part2": "", "ad_group_ad.ad.id": 592078631218, "ad_group_ad.ad.image_ad.image_url": "", "ad_group_ad.ad.image_ad.pixel_height": 0, "ad_group_ad.ad.image_ad.pixel_width": 0, "ad_group_ad.ad.image_ad.mime_type": "UNSPECIFIED", "ad_group_ad.ad.image_ad.name": "", "metrics.impressions": 11, "metrics.interaction_rate": 0.0, "metrics.interaction_event_types": [], "metrics.interactions": 0, "ad_group_ad.ad.legacy_responsive_display_ad.long_headline": "", "ad_group_ad.ad.legacy_responsive_display_ad.main_color": "", "segments.month": "2022-05-01", "ad_group_ad.ad.responsive_display_ad.accent_color": "", "ad_group_ad.ad.responsive_display_ad.allow_flexible_color": false, "ad_group_ad.ad.responsive_display_ad.business_name": "", "ad_group_ad.ad.responsive_display_ad.call_to_action_text": "", "ad_group_ad.ad.responsive_display_ad.descriptions": [], "ad_group_ad.ad.responsive_display_ad.price_prefix": "", "ad_group_ad.ad.responsive_display_ad.promo_text": "", "ad_group_ad.ad.responsive_display_ad.format_setting": "UNSPECIFIED", "ad_group_ad.ad.responsive_display_ad.headlines": [], "ad_group_ad.ad.responsive_display_ad.logo_images": [], "ad_group_ad.ad.responsive_display_ad.square_logo_images": [], "ad_group_ad.ad.responsive_display_ad.long_headline": "", "ad_group_ad.ad.responsive_display_ad.main_color": "", "ad_group_ad.ad.responsive_display_ad.marketing_images": [], "ad_group_ad.ad.responsive_display_ad.square_marketing_images": [], "ad_group_ad.ad.responsive_display_ad.youtube_videos": [], "ad_group_ad.ad.expanded_text_ad.path1": "", "ad_group_ad.ad.expanded_text_ad.path2": "", "metrics.percent_new_visitors": 0.0, "ad_group_ad.ad.legacy_responsive_display_ad.price_prefix": "", "ad_group_ad.ad.legacy_responsive_display_ad.promo_text": "", "segments.quarter": "2022-04-01", "ad_group_ad.ad.responsive_search_ad.descriptions": ["text: \"Behind The Scenes: Testing The Airbyte Maintainer Program\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Airbyte | Open-Source Data Integration Platform | ELT tool\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Upgrading Our Discourse And Slack To Support Our Community Growth\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Consolidate your data in your data warehouses, lakes and databases\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n"], "ad_group_ad.ad.responsive_search_ad.headlines": ["text: \"Airbyte\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"ELT tool\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Open-source Data Integration\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n"], "ad_group_ad.ad.responsive_search_ad.path1": "", "ad_group_ad.ad.responsive_search_ad.path2": "", "ad_group_ad.ad.legacy_responsive_display_ad.short_headline": "", "ad_group_ad.status": "ENABLED", "ad_group_ad.ad.system_managed_resource_source": "UNSPECIFIED", "metrics.top_impression_percentage": 0.0, "ad_group_ad.ad.app_ad.descriptions": [], "ad_group_ad.ad.app_ad.headlines": [], "ad_group_ad.ad.app_ad.html5_media_bundles": [], "ad_group_ad.ad.app_ad.images": [], "ad_group_ad.ad.app_ad.mandatory_ad_text": "", "ad_group_ad.ad.app_ad.youtube_videos": [], "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.value_per_current_model_attributed_conversion": 0.0, "metrics.video_quartile_p100_rate": 0.0, "metrics.video_quartile_p25_rate": 0.0, "metrics.video_quartile_p50_rate": 0.0, "metrics.video_quartile_p75_rate": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0, "segments.week": "2022-05-16", "segments.year": 2022}, "emitted_at": 1697021422906} +{"stream": "ad_group_ad_report", "data": {"ad_group_ad.ad.legacy_responsive_display_ad.accent_color": "", "ad_group.id": 137020701042, "customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "metrics.active_view_cpm": 0.0, "metrics.active_view_ctr": 0.0, "metrics.active_view_impressions": 0, "metrics.active_view_measurability": 0.0, "metrics.active_view_measurable_cost_micros": 0, "metrics.active_view_measurable_impressions": 0, "metrics.active_view_viewability": 0.0, "ad_group_ad.ad_group": "customers/4651612872/adGroups/137020701042", "ad_group.name": "\u0413\u0440\u0443\u043f\u043f\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0439\u00a02", "ad_group.status": "ENABLED", "segments.ad_network_type": "SEARCH", "ad_group_ad.ad_strength": "POOR", "ad_group_ad.ad.type": "RESPONSIVE_SEARCH_AD", "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.all_conversions": 0.0, "ad_group_ad.ad.legacy_responsive_display_ad.allow_flexible_color": false, "ad_group_ad.ad.added_by_google_ads": false, "metrics.average_cost": 143333.33333333334, "metrics.average_cpc": 143333.33333333334, "metrics.average_cpe": 0.0, "metrics.average_cpm": 37391304.347826086, "metrics.average_cpv": 0.0, "metrics.average_page_views": 0.0, "metrics.average_time_on_site": 0.0, "ad_group.base_ad_group": "customers/4651612872/adGroups/137020701042", "campaign.base_campaign": "customers/4651612872/campaigns/16820250687", "metrics.bounce_rate": 0.0, "ad_group_ad.ad.legacy_responsive_display_ad.business_name": "", "ad_group_ad.ad.legacy_responsive_display_ad.call_to_action_text": "", "campaign.id": 16820250687, "campaign.name": "Website traffic-Search-15", "campaign.status": "PAUSED", "metrics.clicks": 6, "ad_group_ad.policy_summary.approval_status": "APPROVED", "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.conversions": 0.0, "metrics.cost_micros": 860000, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cost_per_current_model_attributed_conversion": 0.0, "ad_group_ad.ad.final_mobile_urls": [], "ad_group_ad.ad.final_urls": ["https://airbyte.com"], "ad_group_ad.ad.tracking_url_template": "", "ad_group_ad.ad.url_custom_parameters": [], "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.2608695652173913, "metrics.current_model_attributed_conversions_value": 0.0, "metrics.current_model_attributed_conversions": 0.0, "segments.date": "2022-05-19", "segments.day_of_week": "THURSDAY", "ad_group_ad.ad.expanded_text_ad.description": "", "ad_group_ad.ad.text_ad.description1": "", "ad_group_ad.ad.text_ad.description2": "", "ad_group_ad.ad.device_preference": "UNSPECIFIED", "ad_group_ad.ad.display_url": "", "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "ad_group_ad.ad.legacy_responsive_display_ad.logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.marketing_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_marketing_image": "", "ad_group_ad.ad.expanded_dynamic_search_ad.description": "", "ad_group_ad.ad.expanded_text_ad.description2": "", "ad_group_ad.ad.expanded_text_ad.headline_part3": "", "customer.id": 4651612872, "ad_group_ad.ad.legacy_responsive_display_ad.format_setting": "UNSPECIFIED", "metrics.gmail_forwards": 0, "metrics.gmail_saves": 0, "metrics.gmail_secondary_clicks": 0, "ad_group_ad.ad.text_ad.headline": "", "ad_group_ad.ad.expanded_text_ad.headline_part1": "", "ad_group_ad.ad.expanded_text_ad.headline_part2": "", "ad_group_ad.ad.id": 592078631218, "ad_group_ad.ad.image_ad.image_url": "", "ad_group_ad.ad.image_ad.pixel_height": 0, "ad_group_ad.ad.image_ad.pixel_width": 0, "ad_group_ad.ad.image_ad.mime_type": "UNSPECIFIED", "ad_group_ad.ad.image_ad.name": "", "metrics.impressions": 23, "metrics.interaction_rate": 0.2608695652173913, "metrics.interaction_event_types": ["InteractionEventType.CLICK"], "metrics.interactions": 6, "ad_group_ad.ad.legacy_responsive_display_ad.long_headline": "", "ad_group_ad.ad.legacy_responsive_display_ad.main_color": "", "segments.month": "2022-05-01", "ad_group_ad.ad.responsive_display_ad.accent_color": "", "ad_group_ad.ad.responsive_display_ad.allow_flexible_color": false, "ad_group_ad.ad.responsive_display_ad.business_name": "", "ad_group_ad.ad.responsive_display_ad.call_to_action_text": "", "ad_group_ad.ad.responsive_display_ad.descriptions": [], "ad_group_ad.ad.responsive_display_ad.price_prefix": "", "ad_group_ad.ad.responsive_display_ad.promo_text": "", "ad_group_ad.ad.responsive_display_ad.format_setting": "UNSPECIFIED", "ad_group_ad.ad.responsive_display_ad.headlines": [], "ad_group_ad.ad.responsive_display_ad.logo_images": [], "ad_group_ad.ad.responsive_display_ad.square_logo_images": [], "ad_group_ad.ad.responsive_display_ad.long_headline": "", "ad_group_ad.ad.responsive_display_ad.main_color": "", "ad_group_ad.ad.responsive_display_ad.marketing_images": [], "ad_group_ad.ad.responsive_display_ad.square_marketing_images": [], "ad_group_ad.ad.responsive_display_ad.youtube_videos": [], "ad_group_ad.ad.expanded_text_ad.path1": "", "ad_group_ad.ad.expanded_text_ad.path2": "", "metrics.percent_new_visitors": 0.0, "ad_group_ad.ad.legacy_responsive_display_ad.price_prefix": "", "ad_group_ad.ad.legacy_responsive_display_ad.promo_text": "", "segments.quarter": "2022-04-01", "ad_group_ad.ad.responsive_search_ad.descriptions": ["text: \"Behind The Scenes: Testing The Airbyte Maintainer Program\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Airbyte | Open-Source Data Integration Platform | ELT tool\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Upgrading Our Discourse And Slack To Support Our Community Growth\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Consolidate your data in your data warehouses, lakes and databases\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n"], "ad_group_ad.ad.responsive_search_ad.headlines": ["text: \"Airbyte\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"ELT tool\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n", "text: \"Open-source Data Integration\"\nasset_performance_label: PENDING\npolicy_summary_info {\n review_status: REVIEWED\n approval_status: APPROVED\n}\n"], "ad_group_ad.ad.responsive_search_ad.path1": "", "ad_group_ad.ad.responsive_search_ad.path2": "", "ad_group_ad.ad.legacy_responsive_display_ad.short_headline": "", "ad_group_ad.status": "ENABLED", "ad_group_ad.ad.system_managed_resource_source": "UNSPECIFIED", "metrics.top_impression_percentage": 0.7391304347826086, "ad_group_ad.ad.app_ad.descriptions": [], "ad_group_ad.ad.app_ad.headlines": [], "ad_group_ad.ad.app_ad.html5_media_bundles": [], "ad_group_ad.ad.app_ad.images": [], "ad_group_ad.ad.app_ad.mandatory_ad_text": "", "ad_group_ad.ad.app_ad.youtube_videos": [], "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.value_per_current_model_attributed_conversion": 0.0, "metrics.video_quartile_p100_rate": 0.0, "metrics.video_quartile_p25_rate": 0.0, "metrics.video_quartile_p50_rate": 0.0, "metrics.video_quartile_p75_rate": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0, "segments.week": "2022-05-16", "segments.year": 2022}, "emitted_at": 1697021422912} +{"stream": "geographic_report", "data": {"customer.id": 4651612872, "customer.descriptive_name": "Airbyte", "geographic_view.country_criterion_id": 2840, "geographic_view.location_type": "AREA_OF_INTEREST", "ad_group.id": 137020701042, "segments.date": "2022-05-18"}, "emitted_at": 1697021424862} +{"stream": "geographic_report", "data": {"customer.id": 4651612872, "customer.descriptive_name": "Airbyte", "geographic_view.country_criterion_id": 2124, "geographic_view.location_type": "LOCATION_OF_PRESENCE", "ad_group.id": 137020701042, "segments.date": "2022-05-18"}, "emitted_at": 1697021424863} +{"stream": "geographic_report", "data": {"customer.id": 4651612872, "customer.descriptive_name": "Airbyte", "geographic_view.country_criterion_id": 2840, "geographic_view.location_type": "LOCATION_OF_PRESENCE", "ad_group.id": 137020701042, "segments.date": "2022-05-18"}, "emitted_at": 1697021424863} +{"stream": "keyword_report", "data": {"customer.id": 4651612872, "customer.descriptive_name": "Airbyte", "campaign.id": 16820250687, "ad_group.id": 137020701042, "ad_group_criterion.type": "KEYWORD", "ad_group_criterion.keyword.text": "data integration software", "ad_group_criterion.negative": false, "ad_group_criterion.keyword.match_type": "BROAD", "metrics.historical_quality_score": 0, "metrics.ctr": 0.0, "segments.date": "2022-05-18", "campaign.bidding_strategy_type": "MAXIMIZE_CONVERSIONS", "metrics.clicks": 0, "metrics.cost_micros": 0, "metrics.impressions": 2, "metrics.active_view_impressions": 0, "metrics.active_view_measurability": 0.0, "metrics.active_view_measurable_cost_micros": 0, "metrics.active_view_measurable_impressions": 0, "metrics.active_view_viewability": 0.0, "metrics.conversions": 0.0, "metrics.conversions_value": 0.0, "metrics.interactions": 0, "metrics.interaction_event_types": [], "metrics.view_through_conversions": 0, "ad_group_criterion.criterion_id": 18697003}, "emitted_at": 1697021426347} +{"stream": "keyword_report", "data": {"customer.id": 4651612872, "customer.descriptive_name": "Airbyte", "campaign.id": 16820250687, "ad_group.id": 137020701042, "ad_group_criterion.type": "KEYWORD", "ad_group_criterion.keyword.text": "informatica software", "ad_group_criterion.negative": false, "ad_group_criterion.keyword.match_type": "BROAD", "metrics.historical_quality_score": 0, "metrics.ctr": 0.0, "segments.date": "2022-05-18", "campaign.bidding_strategy_type": "MAXIMIZE_CONVERSIONS", "metrics.clicks": 0, "metrics.cost_micros": 0, "metrics.impressions": 3, "metrics.active_view_impressions": 0, "metrics.active_view_measurability": 0.0, "metrics.active_view_measurable_cost_micros": 0, "metrics.active_view_measurable_impressions": 0, "metrics.active_view_viewability": 0.0, "metrics.conversions": 0.0, "metrics.conversions_value": 0.0, "metrics.interactions": 0, "metrics.interaction_event_types": [], "metrics.view_through_conversions": 0, "ad_group_criterion.criterion_id": 27723800}, "emitted_at": 1697021426349} +{"stream": "keyword_report", "data": {"customer.id": 4651612872, "customer.descriptive_name": "Airbyte", "campaign.id": 16820250687, "ad_group.id": 137020701042, "ad_group_criterion.type": "KEYWORD", "ad_group_criterion.keyword.text": "etl extract transform load", "ad_group_criterion.negative": false, "ad_group_criterion.keyword.match_type": "BROAD", "metrics.historical_quality_score": 0, "metrics.ctr": 0.0, "segments.date": "2022-05-18", "campaign.bidding_strategy_type": "MAXIMIZE_CONVERSIONS", "metrics.clicks": 0, "metrics.cost_micros": 0, "metrics.impressions": 4, "metrics.active_view_impressions": 0, "metrics.active_view_measurability": 0.0, "metrics.active_view_measurable_cost_micros": 0, "metrics.active_view_measurable_impressions": 0, "metrics.active_view_viewability": 0.0, "metrics.conversions": 0.0, "metrics.conversions_value": 0.0, "metrics.interactions": 0, "metrics.interaction_event_types": [], "metrics.view_through_conversions": 0, "ad_group_criterion.criterion_id": 439152736}, "emitted_at": 1697021426350} +{"stream": "happytable", "data": {"campaign.accessible_bidding_strategy": "", "segments.ad_destination_type": "NOT_APPLICABLE", "campaign.start_date": "2022-04-08", "campaign.end_date": "2037-12-30", "segments.date": "2022-05-18"}, "emitted_at": 1697021428429} +{"stream": "happytable", "data": {"campaign.accessible_bidding_strategy": "", "segments.ad_destination_type": "NOT_APPLICABLE", "campaign.start_date": "2022-04-08", "campaign.end_date": "2037-12-30", "segments.date": "2022-05-19"}, "emitted_at": 1697021428430} +{"stream": "happytable", "data": {"campaign.accessible_bidding_strategy": "", "segments.ad_destination_type": "NOT_APPLICABLE", "campaign.start_date": "2022-04-08", "campaign.end_date": "2037-12-30", "segments.date": "2022-05-20"}, "emitted_at": 1697021428431} +{"stream": "ad_group_custom", "data": {"ad_group.targeting_setting.target_restrictions": ["targeting_dimension: AUDIENCE\nbid_only: true\n", "targeting_dimension: AGE_RANGE\nbid_only: true\n", "targeting_dimension: GENDER\nbid_only: true\n", "targeting_dimension: PARENTAL_STATUS\nbid_only: true\n", "targeting_dimension: INCOME_RANGE\nbid_only: true\n"], "segments.date": "2022-05-18"}, "emitted_at": 1697021430133} +{"stream": "ad_group_custom", "data": {"ad_group.targeting_setting.target_restrictions": ["targeting_dimension: AUDIENCE\nbid_only: true\n", "targeting_dimension: AGE_RANGE\nbid_only: true\n", "targeting_dimension: GENDER\nbid_only: true\n", "targeting_dimension: PARENTAL_STATUS\nbid_only: true\n", "targeting_dimension: INCOME_RANGE\nbid_only: true\n"], "segments.date": "2022-05-19"}, "emitted_at": 1697021430135} +{"stream": "ad_group_custom", "data": {"ad_group.targeting_setting.target_restrictions": ["targeting_dimension: AUDIENCE\nbid_only: true\n", "targeting_dimension: AGE_RANGE\nbid_only: true\n", "targeting_dimension: GENDER\nbid_only: true\n", "targeting_dimension: PARENTAL_STATUS\nbid_only: true\n", "targeting_dimension: INCOME_RANGE\nbid_only: true\n"], "segments.date": "2022-05-20"}, "emitted_at": 1697021430135} +{"stream": "custom_audience", "data": {"custom_audience.description": "", "custom_audience.name": "Airbyet", "custom_audience.id": 523469909, "custom_audience.members": ["member_type: KEYWORD\nkeyword: \"etl elt\"\n", "member_type: KEYWORD\nkeyword: \"cloud data management and analytics\"\n", "member_type: KEYWORD\nkeyword: \"data integration\"\n", "member_type: KEYWORD\nkeyword: \"big data analytics database\"\n", "member_type: KEYWORD\nkeyword: \"data\"\n", "member_type: KEYWORD\nkeyword: \"data sherid nada\"\n", "member_type: KEYWORD\nkeyword: \"airbyteforeveryone\"\n", "member_type: KEYWORD\nkeyword: \"Airbyte\"\n"], "custom_audience.resource_name": "customers/4651612872/customAudiences/523469909", "custom_audience.status": "ENABLED", "custom_audience.type": "AUTO"}, "emitted_at": 1697021431463} diff --git a/airbyte-integrations/connectors/source-google-ads/integration_tests/expected_records_click.jsonl b/airbyte-integrations/connectors/source-google-ads/integration_tests/expected_records_click.jsonl index 619d2f6caa9a..35c0356bc41f 100644 --- a/airbyte-integrations/connectors/source-google-ads/integration_tests/expected_records_click.jsonl +++ b/airbyte-integrations/connectors/source-google-ads/integration_tests/expected_records_click.jsonl @@ -1,73 +1,73 @@ -{"stream": "account_performance_report", "data": {"customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "metrics.active_view_cpm": 322678.1115879828, "metrics.active_view_ctr": 0.001430615164520744, "metrics.active_view_impressions": 699, "metrics.active_view_measurability": 1.0, "metrics.active_view_measurable_cost_micros": 225552, "metrics.active_view_measurable_impressions": 868, "metrics.active_view_viewability": 0.8052995391705069, "segments.ad_network_type": "CONTENT", "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.all_conversions": 0.0, "metrics.average_cost": 225552.0, "metrics.average_cpc": 225552.0, "metrics.average_cpe": 0.0, "metrics.average_cpm": 259852.53456221198, "metrics.average_cpv": 0.0, "customer.manager": false, "metrics.clicks": 1, "metrics.content_budget_lost_impression_share": 0.0, "metrics.content_impression_share": 0.0999, "metrics.content_rank_lost_impression_share": 0.9001, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.conversions": 0.0, "metrics.cost_micros": 225552, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.001152073732718894, "segments.date": "2023-08-31", "segments.day_of_week": "THURSDAY", "segments.device": "DESKTOP", "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "customer.id": 4651612872, "metrics.impressions": 868, "metrics.interaction_rate": 0.001152073732718894, "metrics.interaction_event_types": ["InteractionEventType.CLICK"], "metrics.interactions": 1, "customer.auto_tagging_enabled": true, "customer.test_account": false, "segments.month": "2023-08-01", "segments.quarter": "2023-07-01", "metrics.search_budget_lost_impression_share": 0.0, "metrics.search_exact_match_impression_share": 0.0, "metrics.search_impression_share": 0.0, "metrics.search_rank_lost_impression_share": 0.0, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0, "segments.week": "2023-08-28", "segments.year": 2023}, "emitted_at": 1695662471270} -{"stream": "account_performance_report", "data": {"customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "metrics.active_view_cpm": 849618.904224174, "metrics.active_view_ctr": 0.001589293182768716, "metrics.active_view_impressions": 11955, "metrics.active_view_measurability": 1.0, "metrics.active_view_measurable_cost_micros": 10157194, "metrics.active_view_measurable_impressions": 12717, "metrics.active_view_viewability": 0.9400802075961312, "segments.ad_network_type": "CONTENT", "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.all_conversions": 0.0, "metrics.average_cost": 534589.1578947369, "metrics.average_cpc": 534589.1578947369, "metrics.average_cpe": 0.0, "metrics.average_cpm": 798709.915860659, "metrics.average_cpv": 0.0, "customer.manager": false, "metrics.clicks": 19, "metrics.content_budget_lost_impression_share": 0.9001, "metrics.content_impression_share": 0.0999, "metrics.content_rank_lost_impression_share": 0.008972127521976223, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.conversions": 0.0, "metrics.cost_micros": 10157194, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.0014940630651883305, "segments.date": "2023-08-31", "segments.day_of_week": "THURSDAY", "segments.device": "MOBILE", "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "customer.id": 4651612872, "metrics.impressions": 12717, "metrics.interaction_rate": 0.0014940630651883305, "metrics.interaction_event_types": ["InteractionEventType.CLICK"], "metrics.interactions": 19, "customer.auto_tagging_enabled": true, "customer.test_account": false, "segments.month": "2023-08-01", "segments.quarter": "2023-07-01", "metrics.search_budget_lost_impression_share": 0.0, "metrics.search_exact_match_impression_share": 0.0, "metrics.search_impression_share": 0.0, "metrics.search_rank_lost_impression_share": 0.0, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0, "segments.week": "2023-08-28", "segments.year": 2023}, "emitted_at": 1695662471272} -{"stream": "account_performance_report", "data": {"customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "metrics.active_view_cpm": 768549.1573033708, "metrics.active_view_ctr": 0.0, "metrics.active_view_impressions": 712, "metrics.active_view_measurability": 1.0, "metrics.active_view_measurable_cost_micros": 547207, "metrics.active_view_measurable_impressions": 740, "metrics.active_view_viewability": 0.9621621621621622, "segments.ad_network_type": "CONTENT", "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.all_conversions": 0.0, "metrics.average_cost": 0.0, "metrics.average_cpc": 0.0, "metrics.average_cpe": 0.0, "metrics.average_cpm": 739468.9189189189, "metrics.average_cpv": 0.0, "customer.manager": false, "metrics.clicks": 0, "metrics.content_budget_lost_impression_share": 0.9001, "metrics.content_impression_share": 0.0999, "metrics.content_rank_lost_impression_share": 0.002987251805929501, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.conversions": 0.0, "metrics.cost_micros": 547207, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.0, "segments.date": "2023-08-31", "segments.day_of_week": "THURSDAY", "segments.device": "TABLET", "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "customer.id": 4651612872, "metrics.impressions": 740, "metrics.interaction_rate": 0.0, "metrics.interaction_event_types": [], "metrics.interactions": 0, "customer.auto_tagging_enabled": true, "customer.test_account": false, "segments.month": "2023-08-01", "segments.quarter": "2023-07-01", "metrics.search_budget_lost_impression_share": 0.0, "metrics.search_exact_match_impression_share": 0.0, "metrics.search_impression_share": 0.0, "metrics.search_rank_lost_impression_share": 0.0, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0, "segments.week": "2023-08-28", "segments.year": 2023}, "emitted_at": 1695662471273} -{"stream": "accounts", "data": {"customer.auto_tagging_enabled": true, "customer.call_reporting_setting.call_conversion_action": "customers/4651612872/conversionActions/179", "customer.call_reporting_setting.call_conversion_reporting_enabled": true, "customer.call_reporting_setting.call_reporting_enabled": true, "customer.conversion_tracking_setting.conversion_tracking_id": 657981234, "customer.conversion_tracking_setting.cross_account_conversion_tracking_id": 0, "customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.final_url_suffix": "", "customer.has_partners_badge": false, "customer.id": 4651612872, "customer.manager": false, "customer.optimization_score": 0.7460287999999999, "customer.optimization_score_weight": 92.525065, "customer.pay_per_conversion_eligibility_failure_reasons": ["CustomerPayPerConversionEligibilityFailureReason.NOT_ENOUGH_CONVERSIONS"], "customer.remarketing_setting.google_global_site_tag": "\n\n\n", "customer.resource_name": "customers/4651612872", "customer.test_account": false, "customer.time_zone": "America/Los_Angeles", "customer.tracking_url_template": "", "segments.date": "2023-08-31"}, "emitted_at": 1695662481854} -{"stream": "accounts", "data": {"customer.auto_tagging_enabled": true, "customer.call_reporting_setting.call_conversion_action": "customers/4651612872/conversionActions/179", "customer.call_reporting_setting.call_conversion_reporting_enabled": true, "customer.call_reporting_setting.call_reporting_enabled": true, "customer.conversion_tracking_setting.conversion_tracking_id": 657981234, "customer.conversion_tracking_setting.cross_account_conversion_tracking_id": 0, "customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.final_url_suffix": "", "customer.has_partners_badge": false, "customer.id": 4651612872, "customer.manager": false, "customer.optimization_score": 0.7460287999999999, "customer.optimization_score_weight": 92.525065, "customer.pay_per_conversion_eligibility_failure_reasons": ["CustomerPayPerConversionEligibilityFailureReason.NOT_ENOUGH_CONVERSIONS"], "customer.remarketing_setting.google_global_site_tag": "\n\n\n", "customer.resource_name": "customers/4651612872", "customer.test_account": false, "customer.time_zone": "America/Los_Angeles", "customer.tracking_url_template": "", "segments.date": "2023-09-01"}, "emitted_at": 1695662481857} -{"stream": "accounts", "data": {"customer.auto_tagging_enabled": true, "customer.call_reporting_setting.call_conversion_action": "customers/4651612872/conversionActions/179", "customer.call_reporting_setting.call_conversion_reporting_enabled": true, "customer.call_reporting_setting.call_reporting_enabled": true, "customer.conversion_tracking_setting.conversion_tracking_id": 657981234, "customer.conversion_tracking_setting.cross_account_conversion_tracking_id": 0, "customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.final_url_suffix": "", "customer.has_partners_badge": false, "customer.id": 4651612872, "customer.manager": false, "customer.optimization_score": 0.7460287999999999, "customer.optimization_score_weight": 92.525065, "customer.pay_per_conversion_eligibility_failure_reasons": ["CustomerPayPerConversionEligibilityFailureReason.NOT_ENOUGH_CONVERSIONS"], "customer.remarketing_setting.google_global_site_tag": "\n\n\n", "customer.resource_name": "customers/4651612872", "customer.test_account": false, "customer.time_zone": "America/Los_Angeles", "customer.tracking_url_template": "", "segments.date": "2023-09-02"}, "emitted_at": 1695662481859} -{"stream": "ad_group_ad_labels", "data": {"ad_group.id": 123273719655, "ad_group_ad.ad.id": 524518584182, "ad_group_ad.ad.resource_name": "customers/4651612872/ads/524518584182", "ad_group_ad_label.resource_name": "customers/4651612872/adGroupAdLabels/123273719655~524518584182~21585034471", "label.name": "edgao-example-label", "label.resource_name": "customers/4651612872/labels/21585034471", "label.id": 21585034471}, "emitted_at": 1695662484628} -{"stream": "ad_group_ad_labels", "data": {"ad_group.id": 137020701042, "ad_group_ad.ad.id": 592078631218, "ad_group_ad.ad.resource_name": "customers/4651612872/ads/592078631218", "ad_group_ad_label.resource_name": "customers/4651612872/adGroupAdLabels/137020701042~592078631218~21906377810", "label.name": "Test Delete label customer", "label.resource_name": "customers/4651612872/labels/21906377810", "label.id": 21906377810}, "emitted_at": 1695662484629} -{"stream": "ad_group_ad_report", "data": {"ad_group_ad.ad.legacy_responsive_display_ad.accent_color": "", "ad_group.id": 144799120517, "customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "metrics.active_view_cpm": 817743.0046386354, "metrics.active_view_ctr": 0.0014963339817447255, "metrics.active_view_impressions": 13366, "metrics.active_view_measurability": 1.0, "metrics.active_view_measurable_cost_micros": 10929953, "metrics.active_view_measurable_impressions": 14325, "metrics.active_view_viewability": 0.9330541012216405, "ad_group_ad.ad_group": "customers/4651612872/adGroups/144799120517", "ad_group.name": "Ad group 1", "ad_group.status": "ENABLED", "segments.ad_network_type": "CONTENT", "ad_group_ad.ad_strength": "AVERAGE", "ad_group_ad.ad.type": "RESPONSIVE_DISPLAY_AD", "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.all_conversions": 0.0, "ad_group_ad.ad.legacy_responsive_display_ad.allow_flexible_color": false, "ad_group_ad.ad.added_by_google_ads": false, "metrics.average_cost": 546497.65, "metrics.average_cpc": 546497.65, "metrics.average_cpe": 0.0, "metrics.average_cpm": 762998.4642233857, "metrics.average_cpv": 0.0, "metrics.average_page_views": 0.0, "metrics.average_time_on_site": 0.0, "ad_group.base_ad_group": "customers/4651612872/adGroups/144799120517", "campaign.base_campaign": "customers/4651612872/campaigns/19410069806", "metrics.bounce_rate": 0.0, "ad_group_ad.ad.legacy_responsive_display_ad.business_name": "", "ad_group_ad.ad.legacy_responsive_display_ad.call_to_action_text": "", "campaign.id": 19410069806, "campaign.name": "Brand awareness and reach-Display-1", "campaign.status": "ENABLED", "metrics.clicks": 20, "ad_group_ad.policy_summary.approval_status": "APPROVED", "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.conversions": 0.0, "metrics.cost_micros": 10929953, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cost_per_current_model_attributed_conversion": 0.0, "ad_group_ad.ad.final_mobile_urls": [], "ad_group_ad.ad.final_urls": ["https://airbyte.com"], "ad_group_ad.ad.tracking_url_template": "", "ad_group_ad.ad.url_custom_parameters": [], "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.0013961605584642235, "metrics.current_model_attributed_conversions_value": 0.0, "metrics.current_model_attributed_conversions": 0.0, "segments.date": "2023-08-31", "segments.day_of_week": "THURSDAY", "ad_group_ad.ad.expanded_text_ad.description": "", "ad_group_ad.ad.text_ad.description1": "", "ad_group_ad.ad.text_ad.description2": "", "ad_group_ad.ad.device_preference": "UNSPECIFIED", "ad_group_ad.ad.display_url": "", "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "ad_group_ad.ad.legacy_responsive_display_ad.logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.marketing_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_marketing_image": "", "ad_group_ad.ad.expanded_dynamic_search_ad.description": "", "ad_group_ad.ad.expanded_text_ad.description2": "", "ad_group_ad.ad.expanded_text_ad.headline_part3": "", "customer.id": 4651612872, "ad_group_ad.ad.legacy_responsive_display_ad.format_setting": "UNSPECIFIED", "metrics.gmail_forwards": 0, "metrics.gmail_saves": 0, "metrics.gmail_secondary_clicks": 0, "ad_group_ad.ad.text_ad.headline": "", "ad_group_ad.ad.expanded_text_ad.headline_part1": "", "ad_group_ad.ad.expanded_text_ad.headline_part2": "", "ad_group_ad.ad.id": 643022056303, "ad_group_ad.ad.image_ad.image_url": "", "ad_group_ad.ad.image_ad.pixel_height": 0, "ad_group_ad.ad.image_ad.pixel_width": 0, "ad_group_ad.ad.image_ad.mime_type": "UNSPECIFIED", "ad_group_ad.ad.image_ad.name": "", "metrics.impressions": 14325, "metrics.interaction_rate": 0.0013961605584642235, "metrics.interaction_event_types": ["InteractionEventType.CLICK"], "metrics.interactions": 20, "ad_group_ad.ad.legacy_responsive_display_ad.long_headline": "", "ad_group_ad.ad.legacy_responsive_display_ad.main_color": "", "segments.month": "2023-08-01", "ad_group_ad.ad.responsive_display_ad.accent_color": "", "ad_group_ad.ad.responsive_display_ad.allow_flexible_color": true, "ad_group_ad.ad.responsive_display_ad.business_name": "c", "ad_group_ad.ad.responsive_display_ad.call_to_action_text": "", "ad_group_ad.ad.responsive_display_ad.descriptions": ["text: \"Airbyte | Open-Source Data Integration Platform | ELT tool\"\n", "text: \"\u30c6\u30ec\u30d3CM\u3067\u8a71\u984c\"\n", "text: \"modern ELT\"\n"], "ad_group_ad.ad.responsive_display_ad.price_prefix": "", "ad_group_ad.ad.responsive_display_ad.promo_text": "", "ad_group_ad.ad.responsive_display_ad.format_setting": "ALL_FORMATS", "ad_group_ad.ad.responsive_display_ad.headlines": ["text: \"ELT\"\n"], "ad_group_ad.ad.responsive_display_ad.logo_images": [], "ad_group_ad.ad.responsive_display_ad.square_logo_images": [], "ad_group_ad.ad.responsive_display_ad.long_headline": "text: \"ELT data portability\"\n", "ad_group_ad.ad.responsive_display_ad.main_color": "", "ad_group_ad.ad.responsive_display_ad.marketing_images": ["asset: \"customers/4651612872/assets/39906715549\"\n", "asset: \"customers/4651612872/assets/40179016327\"\n"], "ad_group_ad.ad.responsive_display_ad.square_marketing_images": ["asset: \"customers/4651612872/assets/39906715552\"\n", "asset: \"customers/4651612872/assets/40179014782\"\n"], "ad_group_ad.ad.responsive_display_ad.youtube_videos": [], "ad_group_ad.ad.expanded_text_ad.path1": "", "ad_group_ad.ad.expanded_text_ad.path2": "", "metrics.percent_new_visitors": 0.0, "ad_group_ad.ad.legacy_responsive_display_ad.price_prefix": "", "ad_group_ad.ad.legacy_responsive_display_ad.promo_text": "", "segments.quarter": "2023-07-01", "ad_group_ad.ad.responsive_search_ad.descriptions": [], "ad_group_ad.ad.responsive_search_ad.headlines": [], "ad_group_ad.ad.responsive_search_ad.path1": "", "ad_group_ad.ad.responsive_search_ad.path2": "", "ad_group_ad.ad.legacy_responsive_display_ad.short_headline": "", "ad_group_ad.status": "ENABLED", "ad_group_ad.ad.system_managed_resource_source": "UNSPECIFIED", "metrics.top_impression_percentage": 0.0, "ad_group_ad.ad.app_ad.descriptions": [], "ad_group_ad.ad.app_ad.headlines": [], "ad_group_ad.ad.app_ad.html5_media_bundles": [], "ad_group_ad.ad.app_ad.images": [], "ad_group_ad.ad.app_ad.mandatory_ad_text": "", "ad_group_ad.ad.app_ad.youtube_videos": [], "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.value_per_current_model_attributed_conversion": 0.0, "metrics.video_quartile_p100_rate": 0.0, "metrics.video_quartile_p25_rate": 0.0, "metrics.video_quartile_p50_rate": 0.0, "metrics.video_quartile_p75_rate": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0, "segments.week": "2023-08-28", "segments.year": 2023}, "emitted_at": 1695662468761} -{"stream": "ad_group_ad_report", "data": {"ad_group_ad.ad.legacy_responsive_display_ad.accent_color": "", "ad_group.id": 144799120517, "customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "metrics.active_view_cpm": 801880.5223334146, "metrics.active_view_ctr": 0.00183060776177691, "metrics.active_view_impressions": 16388, "metrics.active_view_measurability": 1.0, "metrics.active_view_measurable_cost_micros": 13141218, "metrics.active_view_measurable_impressions": 17733, "metrics.active_view_viewability": 0.9241527096373992, "ad_group_ad.ad_group": "customers/4651612872/adGroups/144799120517", "ad_group.name": "Ad group 1", "ad_group.status": "ENABLED", "segments.ad_network_type": "CONTENT", "ad_group_ad.ad_strength": "AVERAGE", "ad_group_ad.ad.type": "RESPONSIVE_DISPLAY_AD", "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.all_conversions": 0.0, "ad_group_ad.ad.legacy_responsive_display_ad.allow_flexible_color": false, "ad_group_ad.ad.added_by_google_ads": false, "metrics.average_cost": 438040.6, "metrics.average_cpc": 438040.6, "metrics.average_cpe": 0.0, "metrics.average_cpm": 741060.0575198783, "metrics.average_cpv": 0.0, "metrics.average_page_views": 0.0, "metrics.average_time_on_site": 0.0, "ad_group.base_ad_group": "customers/4651612872/adGroups/144799120517", "campaign.base_campaign": "customers/4651612872/campaigns/19410069806", "metrics.bounce_rate": 0.0, "ad_group_ad.ad.legacy_responsive_display_ad.business_name": "", "ad_group_ad.ad.legacy_responsive_display_ad.call_to_action_text": "", "campaign.id": 19410069806, "campaign.name": "Brand awareness and reach-Display-1", "campaign.status": "ENABLED", "metrics.clicks": 30, "ad_group_ad.policy_summary.approval_status": "APPROVED", "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.conversions": 0.0, "metrics.cost_micros": 13141218, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cost_per_current_model_attributed_conversion": 0.0, "ad_group_ad.ad.final_mobile_urls": [], "ad_group_ad.ad.final_urls": ["https://airbyte.com"], "ad_group_ad.ad.tracking_url_template": "", "ad_group_ad.ad.url_custom_parameters": [], "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.001691761123329386, "metrics.current_model_attributed_conversions_value": 0.0, "metrics.current_model_attributed_conversions": 0.0, "segments.date": "2023-09-01", "segments.day_of_week": "FRIDAY", "ad_group_ad.ad.expanded_text_ad.description": "", "ad_group_ad.ad.text_ad.description1": "", "ad_group_ad.ad.text_ad.description2": "", "ad_group_ad.ad.device_preference": "UNSPECIFIED", "ad_group_ad.ad.display_url": "", "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "ad_group_ad.ad.legacy_responsive_display_ad.logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.marketing_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_marketing_image": "", "ad_group_ad.ad.expanded_dynamic_search_ad.description": "", "ad_group_ad.ad.expanded_text_ad.description2": "", "ad_group_ad.ad.expanded_text_ad.headline_part3": "", "customer.id": 4651612872, "ad_group_ad.ad.legacy_responsive_display_ad.format_setting": "UNSPECIFIED", "metrics.gmail_forwards": 0, "metrics.gmail_saves": 0, "metrics.gmail_secondary_clicks": 0, "ad_group_ad.ad.text_ad.headline": "", "ad_group_ad.ad.expanded_text_ad.headline_part1": "", "ad_group_ad.ad.expanded_text_ad.headline_part2": "", "ad_group_ad.ad.id": 643022056303, "ad_group_ad.ad.image_ad.image_url": "", "ad_group_ad.ad.image_ad.pixel_height": 0, "ad_group_ad.ad.image_ad.pixel_width": 0, "ad_group_ad.ad.image_ad.mime_type": "UNSPECIFIED", "ad_group_ad.ad.image_ad.name": "", "metrics.impressions": 17733, "metrics.interaction_rate": 0.001691761123329386, "metrics.interaction_event_types": ["InteractionEventType.CLICK"], "metrics.interactions": 30, "ad_group_ad.ad.legacy_responsive_display_ad.long_headline": "", "ad_group_ad.ad.legacy_responsive_display_ad.main_color": "", "segments.month": "2023-09-01", "ad_group_ad.ad.responsive_display_ad.accent_color": "", "ad_group_ad.ad.responsive_display_ad.allow_flexible_color": true, "ad_group_ad.ad.responsive_display_ad.business_name": "c", "ad_group_ad.ad.responsive_display_ad.call_to_action_text": "", "ad_group_ad.ad.responsive_display_ad.descriptions": ["text: \"Airbyte | Open-Source Data Integration Platform | ELT tool\"\n", "text: \"\u30c6\u30ec\u30d3CM\u3067\u8a71\u984c\"\n", "text: \"modern ELT\"\n"], "ad_group_ad.ad.responsive_display_ad.price_prefix": "", "ad_group_ad.ad.responsive_display_ad.promo_text": "", "ad_group_ad.ad.responsive_display_ad.format_setting": "ALL_FORMATS", "ad_group_ad.ad.responsive_display_ad.headlines": ["text: \"ELT\"\n"], "ad_group_ad.ad.responsive_display_ad.logo_images": [], "ad_group_ad.ad.responsive_display_ad.square_logo_images": [], "ad_group_ad.ad.responsive_display_ad.long_headline": "text: \"ELT data portability\"\n", "ad_group_ad.ad.responsive_display_ad.main_color": "", "ad_group_ad.ad.responsive_display_ad.marketing_images": ["asset: \"customers/4651612872/assets/39906715549\"\n", "asset: \"customers/4651612872/assets/40179016327\"\n"], "ad_group_ad.ad.responsive_display_ad.square_marketing_images": ["asset: \"customers/4651612872/assets/39906715552\"\n", "asset: \"customers/4651612872/assets/40179014782\"\n"], "ad_group_ad.ad.responsive_display_ad.youtube_videos": [], "ad_group_ad.ad.expanded_text_ad.path1": "", "ad_group_ad.ad.expanded_text_ad.path2": "", "metrics.percent_new_visitors": 0.0, "ad_group_ad.ad.legacy_responsive_display_ad.price_prefix": "", "ad_group_ad.ad.legacy_responsive_display_ad.promo_text": "", "segments.quarter": "2023-07-01", "ad_group_ad.ad.responsive_search_ad.descriptions": [], "ad_group_ad.ad.responsive_search_ad.headlines": [], "ad_group_ad.ad.responsive_search_ad.path1": "", "ad_group_ad.ad.responsive_search_ad.path2": "", "ad_group_ad.ad.legacy_responsive_display_ad.short_headline": "", "ad_group_ad.status": "ENABLED", "ad_group_ad.ad.system_managed_resource_source": "UNSPECIFIED", "metrics.top_impression_percentage": 0.0, "ad_group_ad.ad.app_ad.descriptions": [], "ad_group_ad.ad.app_ad.headlines": [], "ad_group_ad.ad.app_ad.html5_media_bundles": [], "ad_group_ad.ad.app_ad.images": [], "ad_group_ad.ad.app_ad.mandatory_ad_text": "", "ad_group_ad.ad.app_ad.youtube_videos": [], "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.value_per_current_model_attributed_conversion": 0.0, "metrics.video_quartile_p100_rate": 0.0, "metrics.video_quartile_p25_rate": 0.0, "metrics.video_quartile_p50_rate": 0.0, "metrics.video_quartile_p75_rate": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0, "segments.week": "2023-08-28", "segments.year": 2023}, "emitted_at": 1695662468770} -{"stream": "ad_group_ad_report", "data": {"ad_group_ad.ad.legacy_responsive_display_ad.accent_color": "", "ad_group.id": 144799120517, "customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "metrics.active_view_cpm": 789581.4073226545, "metrics.active_view_ctr": 0.002059496567505721, "metrics.active_view_impressions": 17480, "metrics.active_view_measurability": 1.0, "metrics.active_view_measurable_cost_micros": 13801883, "metrics.active_view_measurable_impressions": 19049, "metrics.active_view_viewability": 0.917633471573311, "ad_group_ad.ad_group": "customers/4651612872/adGroups/144799120517", "ad_group.name": "Ad group 1", "ad_group.status": "ENABLED", "segments.ad_network_type": "CONTENT", "ad_group_ad.ad_strength": "AVERAGE", "ad_group_ad.ad.type": "RESPONSIVE_DISPLAY_AD", "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.all_conversions": 0.0, "ad_group_ad.ad.legacy_responsive_display_ad.allow_flexible_color": false, "ad_group_ad.ad.added_by_google_ads": false, "metrics.average_cost": 383385.6388888889, "metrics.average_cpc": 383385.6388888889, "metrics.average_cpe": 0.0, "metrics.average_cpm": 724546.3278912279, "metrics.average_cpv": 0.0, "metrics.average_page_views": 0.0, "metrics.average_time_on_site": 0.0, "ad_group.base_ad_group": "customers/4651612872/adGroups/144799120517", "campaign.base_campaign": "customers/4651612872/campaigns/19410069806", "metrics.bounce_rate": 0.0, "ad_group_ad.ad.legacy_responsive_display_ad.business_name": "", "ad_group_ad.ad.legacy_responsive_display_ad.call_to_action_text": "", "campaign.id": 19410069806, "campaign.name": "Brand awareness and reach-Display-1", "campaign.status": "ENABLED", "metrics.clicks": 36, "ad_group_ad.policy_summary.approval_status": "APPROVED", "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.conversions": 0.0, "metrics.cost_micros": 13801883, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cost_per_current_model_attributed_conversion": 0.0, "ad_group_ad.ad.final_mobile_urls": [], "ad_group_ad.ad.final_urls": ["https://airbyte.com"], "ad_group_ad.ad.tracking_url_template": "", "ad_group_ad.ad.url_custom_parameters": [], "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.0018898629849335923, "metrics.current_model_attributed_conversions_value": 0.0, "metrics.current_model_attributed_conversions": 0.0, "segments.date": "2023-09-02", "segments.day_of_week": "SATURDAY", "ad_group_ad.ad.expanded_text_ad.description": "", "ad_group_ad.ad.text_ad.description1": "", "ad_group_ad.ad.text_ad.description2": "", "ad_group_ad.ad.device_preference": "UNSPECIFIED", "ad_group_ad.ad.display_url": "", "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "ad_group_ad.ad.legacy_responsive_display_ad.logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.marketing_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_marketing_image": "", "ad_group_ad.ad.expanded_dynamic_search_ad.description": "", "ad_group_ad.ad.expanded_text_ad.description2": "", "ad_group_ad.ad.expanded_text_ad.headline_part3": "", "customer.id": 4651612872, "ad_group_ad.ad.legacy_responsive_display_ad.format_setting": "UNSPECIFIED", "metrics.gmail_forwards": 0, "metrics.gmail_saves": 0, "metrics.gmail_secondary_clicks": 0, "ad_group_ad.ad.text_ad.headline": "", "ad_group_ad.ad.expanded_text_ad.headline_part1": "", "ad_group_ad.ad.expanded_text_ad.headline_part2": "", "ad_group_ad.ad.id": 643022056303, "ad_group_ad.ad.image_ad.image_url": "", "ad_group_ad.ad.image_ad.pixel_height": 0, "ad_group_ad.ad.image_ad.pixel_width": 0, "ad_group_ad.ad.image_ad.mime_type": "UNSPECIFIED", "ad_group_ad.ad.image_ad.name": "", "metrics.impressions": 19049, "metrics.interaction_rate": 0.0018898629849335923, "metrics.interaction_event_types": ["InteractionEventType.CLICK"], "metrics.interactions": 36, "ad_group_ad.ad.legacy_responsive_display_ad.long_headline": "", "ad_group_ad.ad.legacy_responsive_display_ad.main_color": "", "segments.month": "2023-09-01", "ad_group_ad.ad.responsive_display_ad.accent_color": "", "ad_group_ad.ad.responsive_display_ad.allow_flexible_color": true, "ad_group_ad.ad.responsive_display_ad.business_name": "c", "ad_group_ad.ad.responsive_display_ad.call_to_action_text": "", "ad_group_ad.ad.responsive_display_ad.descriptions": ["text: \"Airbyte | Open-Source Data Integration Platform | ELT tool\"\n", "text: \"\u30c6\u30ec\u30d3CM\u3067\u8a71\u984c\"\n", "text: \"modern ELT\"\n"], "ad_group_ad.ad.responsive_display_ad.price_prefix": "", "ad_group_ad.ad.responsive_display_ad.promo_text": "", "ad_group_ad.ad.responsive_display_ad.format_setting": "ALL_FORMATS", "ad_group_ad.ad.responsive_display_ad.headlines": ["text: \"ELT\"\n"], "ad_group_ad.ad.responsive_display_ad.logo_images": [], "ad_group_ad.ad.responsive_display_ad.square_logo_images": [], "ad_group_ad.ad.responsive_display_ad.long_headline": "text: \"ELT data portability\"\n", "ad_group_ad.ad.responsive_display_ad.main_color": "", "ad_group_ad.ad.responsive_display_ad.marketing_images": ["asset: \"customers/4651612872/assets/39906715549\"\n", "asset: \"customers/4651612872/assets/40179016327\"\n"], "ad_group_ad.ad.responsive_display_ad.square_marketing_images": ["asset: \"customers/4651612872/assets/39906715552\"\n", "asset: \"customers/4651612872/assets/40179014782\"\n"], "ad_group_ad.ad.responsive_display_ad.youtube_videos": [], "ad_group_ad.ad.expanded_text_ad.path1": "", "ad_group_ad.ad.expanded_text_ad.path2": "", "metrics.percent_new_visitors": 0.0, "ad_group_ad.ad.legacy_responsive_display_ad.price_prefix": "", "ad_group_ad.ad.legacy_responsive_display_ad.promo_text": "", "segments.quarter": "2023-07-01", "ad_group_ad.ad.responsive_search_ad.descriptions": [], "ad_group_ad.ad.responsive_search_ad.headlines": [], "ad_group_ad.ad.responsive_search_ad.path1": "", "ad_group_ad.ad.responsive_search_ad.path2": "", "ad_group_ad.ad.legacy_responsive_display_ad.short_headline": "", "ad_group_ad.status": "ENABLED", "ad_group_ad.ad.system_managed_resource_source": "UNSPECIFIED", "metrics.top_impression_percentage": 0.0, "ad_group_ad.ad.app_ad.descriptions": [], "ad_group_ad.ad.app_ad.headlines": [], "ad_group_ad.ad.app_ad.html5_media_bundles": [], "ad_group_ad.ad.app_ad.images": [], "ad_group_ad.ad.app_ad.mandatory_ad_text": "", "ad_group_ad.ad.app_ad.youtube_videos": [], "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.value_per_current_model_attributed_conversion": 0.0, "metrics.video_quartile_p100_rate": 0.0, "metrics.video_quartile_p25_rate": 0.0, "metrics.video_quartile_p50_rate": 0.0, "metrics.video_quartile_p75_rate": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0, "segments.week": "2023-08-28", "segments.year": 2023}, "emitted_at": 1695662468775} -{"stream": "ad_group_ads", "data": {"ad_group.id": 144799120517, "ad_group_ad.ad.added_by_google_ads": false, "ad_group_ad.ad.app_ad.descriptions": [], "ad_group_ad.ad.app_ad.headlines": [], "ad_group_ad.ad.app_ad.html5_media_bundles": [], "ad_group_ad.ad.app_ad.images": [], "ad_group_ad.ad.app_ad.mandatory_ad_text": "", "ad_group_ad.ad.app_ad.youtube_videos": [], "ad_group_ad.ad.app_engagement_ad.descriptions": [], "ad_group_ad.ad.app_engagement_ad.headlines": [], "ad_group_ad.ad.app_engagement_ad.images": [], "ad_group_ad.ad.app_engagement_ad.videos": [], "ad_group_ad.ad.call_ad.business_name": "", "ad_group_ad.ad.call_ad.call_tracked": false, "ad_group_ad.ad.call_ad.conversion_action": "", "ad_group_ad.ad.call_ad.conversion_reporting_state": "UNSPECIFIED", "ad_group_ad.ad.call_ad.country_code": "", "ad_group_ad.ad.call_ad.description1": "", "ad_group_ad.ad.call_ad.description2": "", "ad_group_ad.ad.call_ad.disable_call_conversion": false, "ad_group_ad.ad.call_ad.headline1": "", "ad_group_ad.ad.call_ad.headline2": "", "ad_group_ad.ad.call_ad.path1": "", "ad_group_ad.ad.call_ad.path2": "", "ad_group_ad.ad.call_ad.phone_number": "", "ad_group_ad.ad.call_ad.phone_number_verification_url": "", "ad_group_ad.ad.device_preference": "UNSPECIFIED", "ad_group_ad.ad.display_upload_ad.display_upload_product_type": "UNSPECIFIED", "ad_group_ad.ad.display_upload_ad.media_bundle": "", "ad_group_ad.ad.display_url": "", "ad_group_ad.ad.expanded_dynamic_search_ad.description": "", "ad_group_ad.ad.expanded_dynamic_search_ad.description2": "", "ad_group_ad.ad.expanded_text_ad.description": "", "ad_group_ad.ad.expanded_text_ad.description2": "", "ad_group_ad.ad.expanded_text_ad.headline_part1": "", "ad_group_ad.ad.expanded_text_ad.headline_part2": "", "ad_group_ad.ad.expanded_text_ad.headline_part3": "", "ad_group_ad.ad.expanded_text_ad.path1": "", "ad_group_ad.ad.expanded_text_ad.path2": "", "ad_group_ad.ad.final_app_urls": [], "ad_group_ad.ad.final_mobile_urls": [], "ad_group_ad.ad.final_url_suffix": "", "ad_group_ad.ad.final_urls": ["https://airbyte.com"], "ad_group_ad.ad.hotel_ad": "", "ad_group_ad.ad.id": 643022056303, "ad_group_ad.ad.image_ad.image_url": "", "ad_group_ad.ad.image_ad.mime_type": "UNSPECIFIED", "ad_group_ad.ad.image_ad.name": "", "ad_group_ad.ad.image_ad.pixel_height": 0, "ad_group_ad.ad.image_ad.pixel_width": 0, "ad_group_ad.ad.image_ad.preview_image_url": "", "ad_group_ad.ad.image_ad.preview_pixel_height": 0, "ad_group_ad.ad.image_ad.preview_pixel_width": 0, "ad_group_ad.ad.legacy_app_install_ad": "", "ad_group_ad.ad.legacy_responsive_display_ad.accent_color": "", "ad_group_ad.ad.legacy_responsive_display_ad.allow_flexible_color": false, "ad_group_ad.ad.legacy_responsive_display_ad.business_name": "", "ad_group_ad.ad.legacy_responsive_display_ad.call_to_action_text": "", "ad_group_ad.ad.legacy_responsive_display_ad.description": "", "ad_group_ad.ad.legacy_responsive_display_ad.format_setting": "UNSPECIFIED", "ad_group_ad.ad.legacy_responsive_display_ad.logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.long_headline": "", "ad_group_ad.ad.legacy_responsive_display_ad.main_color": "", "ad_group_ad.ad.legacy_responsive_display_ad.marketing_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.price_prefix": "", "ad_group_ad.ad.legacy_responsive_display_ad.promo_text": "", "ad_group_ad.ad.legacy_responsive_display_ad.short_headline": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_marketing_image": "", "ad_group_ad.ad.local_ad.call_to_actions": [], "ad_group_ad.ad.local_ad.descriptions": [], "ad_group_ad.ad.local_ad.headlines": [], "ad_group_ad.ad.local_ad.logo_images": [], "ad_group_ad.ad.local_ad.marketing_images": [], "ad_group_ad.ad.local_ad.path1": "", "ad_group_ad.ad.local_ad.path2": "", "ad_group_ad.ad.local_ad.videos": [], "ad_group_ad.ad.name": "", "ad_group_ad.ad.resource_name": "customers/4651612872/ads/643022056303", "ad_group_ad.ad.responsive_display_ad.accent_color": "", "ad_group_ad.ad.responsive_display_ad.allow_flexible_color": true, "ad_group_ad.ad.responsive_display_ad.business_name": "c", "ad_group_ad.ad.responsive_display_ad.call_to_action_text": "", "ad_group_ad.ad.responsive_display_ad.control_spec.enable_asset_enhancements": true, "ad_group_ad.ad.responsive_display_ad.control_spec.enable_autogen_video": true, "ad_group_ad.ad.responsive_display_ad.descriptions": ["text: \"Airbyte | Open-Source Data Integration Platform | ELT tool\"\n", "text: \"\u30c6\u30ec\u30d3CM\u3067\u8a71\u984c\"\n", "text: \"modern ELT\"\n"], "ad_group_ad.ad.responsive_display_ad.format_setting": "ALL_FORMATS", "ad_group_ad.ad.responsive_display_ad.headlines": ["text: \"ELT\"\n"], "ad_group_ad.ad.responsive_display_ad.logo_images": [], "ad_group_ad.ad.responsive_display_ad.long_headline": "text: \"ELT data portability\"\n", "ad_group_ad.ad.responsive_display_ad.main_color": "", "ad_group_ad.ad.responsive_display_ad.marketing_images": ["asset: \"customers/4651612872/assets/39906715549\"\n", "asset: \"customers/4651612872/assets/40179016327\"\n"], "ad_group_ad.ad.responsive_display_ad.price_prefix": "", "ad_group_ad.ad.responsive_display_ad.promo_text": "", "ad_group_ad.ad.responsive_display_ad.square_logo_images": [], "ad_group_ad.ad.responsive_display_ad.square_marketing_images": ["asset: \"customers/4651612872/assets/39906715552\"\n", "asset: \"customers/4651612872/assets/40179014782\"\n"], "ad_group_ad.ad.responsive_display_ad.youtube_videos": [], "ad_group_ad.ad.responsive_search_ad.descriptions": [], "ad_group_ad.ad.responsive_search_ad.headlines": [], "ad_group_ad.ad.responsive_search_ad.path1": "", "ad_group_ad.ad.responsive_search_ad.path2": "", "ad_group_ad.ad.shopping_comparison_listing_ad.headline": "", "ad_group_ad.ad.shopping_product_ad": "", "ad_group_ad.ad.shopping_smart_ad": "", "ad_group_ad.ad.smart_campaign_ad.descriptions": [], "ad_group_ad.ad.smart_campaign_ad.headlines": [], "ad_group_ad.ad.system_managed_resource_source": "UNSPECIFIED", "ad_group_ad.ad.text_ad.description1": "", "ad_group_ad.ad.text_ad.description2": "", "ad_group_ad.ad.text_ad.headline": "", "ad_group_ad.ad.tracking_url_template": "", "ad_group_ad.ad.type": "RESPONSIVE_DISPLAY_AD", "ad_group_ad.ad.url_collections": [], "ad_group_ad.ad.url_custom_parameters": [], "ad_group_ad.ad.video_ad.in_feed.description1": "", "ad_group_ad.ad.video_ad.in_feed.description2": "", "ad_group_ad.ad.video_ad.in_feed.headline": "", "ad_group_ad.ad.video_ad.in_stream.action_button_label": "", "ad_group_ad.ad.video_ad.in_stream.action_headline": "", "ad_group_ad.ad.video_ad.out_stream.description": "", "ad_group_ad.ad.video_ad.out_stream.headline": "", "ad_group_ad.ad.video_responsive_ad.call_to_actions": [], "ad_group_ad.ad.video_responsive_ad.companion_banners": [], "ad_group_ad.ad.video_responsive_ad.descriptions": [], "ad_group_ad.ad.video_responsive_ad.headlines": [], "ad_group_ad.ad.video_responsive_ad.long_headlines": [], "ad_group_ad.ad.video_responsive_ad.videos": [], "ad_group_ad.ad_group": "customers/4651612872/adGroups/144799120517", "ad_group_ad.ad_strength": "AVERAGE", "ad_group_ad.labels": [], "ad_group_ad.policy_summary.approval_status": "APPROVED", "ad_group_ad.policy_summary.policy_topic_entries": [], "ad_group_ad.policy_summary.review_status": "REVIEWED", "ad_group_ad.resource_name": "customers/4651612872/adGroupAds/144799120517~643022056303", "ad_group_ad.status": "ENABLED", "segments.date": "2023-08-31"}, "emitted_at": 1695662479181} -{"stream": "ad_group_ads", "data": {"ad_group.id": 144799120517, "ad_group_ad.ad.added_by_google_ads": false, "ad_group_ad.ad.app_ad.descriptions": [], "ad_group_ad.ad.app_ad.headlines": [], "ad_group_ad.ad.app_ad.html5_media_bundles": [], "ad_group_ad.ad.app_ad.images": [], "ad_group_ad.ad.app_ad.mandatory_ad_text": "", "ad_group_ad.ad.app_ad.youtube_videos": [], "ad_group_ad.ad.app_engagement_ad.descriptions": [], "ad_group_ad.ad.app_engagement_ad.headlines": [], "ad_group_ad.ad.app_engagement_ad.images": [], "ad_group_ad.ad.app_engagement_ad.videos": [], "ad_group_ad.ad.call_ad.business_name": "", "ad_group_ad.ad.call_ad.call_tracked": false, "ad_group_ad.ad.call_ad.conversion_action": "", "ad_group_ad.ad.call_ad.conversion_reporting_state": "UNSPECIFIED", "ad_group_ad.ad.call_ad.country_code": "", "ad_group_ad.ad.call_ad.description1": "", "ad_group_ad.ad.call_ad.description2": "", "ad_group_ad.ad.call_ad.disable_call_conversion": false, "ad_group_ad.ad.call_ad.headline1": "", "ad_group_ad.ad.call_ad.headline2": "", "ad_group_ad.ad.call_ad.path1": "", "ad_group_ad.ad.call_ad.path2": "", "ad_group_ad.ad.call_ad.phone_number": "", "ad_group_ad.ad.call_ad.phone_number_verification_url": "", "ad_group_ad.ad.device_preference": "UNSPECIFIED", "ad_group_ad.ad.display_upload_ad.display_upload_product_type": "UNSPECIFIED", "ad_group_ad.ad.display_upload_ad.media_bundle": "", "ad_group_ad.ad.display_url": "", "ad_group_ad.ad.expanded_dynamic_search_ad.description": "", "ad_group_ad.ad.expanded_dynamic_search_ad.description2": "", "ad_group_ad.ad.expanded_text_ad.description": "", "ad_group_ad.ad.expanded_text_ad.description2": "", "ad_group_ad.ad.expanded_text_ad.headline_part1": "", "ad_group_ad.ad.expanded_text_ad.headline_part2": "", "ad_group_ad.ad.expanded_text_ad.headline_part3": "", "ad_group_ad.ad.expanded_text_ad.path1": "", "ad_group_ad.ad.expanded_text_ad.path2": "", "ad_group_ad.ad.final_app_urls": [], "ad_group_ad.ad.final_mobile_urls": [], "ad_group_ad.ad.final_url_suffix": "", "ad_group_ad.ad.final_urls": ["https://airbyte.com"], "ad_group_ad.ad.hotel_ad": "", "ad_group_ad.ad.id": 643022056303, "ad_group_ad.ad.image_ad.image_url": "", "ad_group_ad.ad.image_ad.mime_type": "UNSPECIFIED", "ad_group_ad.ad.image_ad.name": "", "ad_group_ad.ad.image_ad.pixel_height": 0, "ad_group_ad.ad.image_ad.pixel_width": 0, "ad_group_ad.ad.image_ad.preview_image_url": "", "ad_group_ad.ad.image_ad.preview_pixel_height": 0, "ad_group_ad.ad.image_ad.preview_pixel_width": 0, "ad_group_ad.ad.legacy_app_install_ad": "", "ad_group_ad.ad.legacy_responsive_display_ad.accent_color": "", "ad_group_ad.ad.legacy_responsive_display_ad.allow_flexible_color": false, "ad_group_ad.ad.legacy_responsive_display_ad.business_name": "", "ad_group_ad.ad.legacy_responsive_display_ad.call_to_action_text": "", "ad_group_ad.ad.legacy_responsive_display_ad.description": "", "ad_group_ad.ad.legacy_responsive_display_ad.format_setting": "UNSPECIFIED", "ad_group_ad.ad.legacy_responsive_display_ad.logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.long_headline": "", "ad_group_ad.ad.legacy_responsive_display_ad.main_color": "", "ad_group_ad.ad.legacy_responsive_display_ad.marketing_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.price_prefix": "", "ad_group_ad.ad.legacy_responsive_display_ad.promo_text": "", "ad_group_ad.ad.legacy_responsive_display_ad.short_headline": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_marketing_image": "", "ad_group_ad.ad.local_ad.call_to_actions": [], "ad_group_ad.ad.local_ad.descriptions": [], "ad_group_ad.ad.local_ad.headlines": [], "ad_group_ad.ad.local_ad.logo_images": [], "ad_group_ad.ad.local_ad.marketing_images": [], "ad_group_ad.ad.local_ad.path1": "", "ad_group_ad.ad.local_ad.path2": "", "ad_group_ad.ad.local_ad.videos": [], "ad_group_ad.ad.name": "", "ad_group_ad.ad.resource_name": "customers/4651612872/ads/643022056303", "ad_group_ad.ad.responsive_display_ad.accent_color": "", "ad_group_ad.ad.responsive_display_ad.allow_flexible_color": true, "ad_group_ad.ad.responsive_display_ad.business_name": "c", "ad_group_ad.ad.responsive_display_ad.call_to_action_text": "", "ad_group_ad.ad.responsive_display_ad.control_spec.enable_asset_enhancements": true, "ad_group_ad.ad.responsive_display_ad.control_spec.enable_autogen_video": true, "ad_group_ad.ad.responsive_display_ad.descriptions": ["text: \"Airbyte | Open-Source Data Integration Platform | ELT tool\"\n", "text: \"\u30c6\u30ec\u30d3CM\u3067\u8a71\u984c\"\n", "text: \"modern ELT\"\n"], "ad_group_ad.ad.responsive_display_ad.format_setting": "ALL_FORMATS", "ad_group_ad.ad.responsive_display_ad.headlines": ["text: \"ELT\"\n"], "ad_group_ad.ad.responsive_display_ad.logo_images": [], "ad_group_ad.ad.responsive_display_ad.long_headline": "text: \"ELT data portability\"\n", "ad_group_ad.ad.responsive_display_ad.main_color": "", "ad_group_ad.ad.responsive_display_ad.marketing_images": ["asset: \"customers/4651612872/assets/39906715549\"\n", "asset: \"customers/4651612872/assets/40179016327\"\n"], "ad_group_ad.ad.responsive_display_ad.price_prefix": "", "ad_group_ad.ad.responsive_display_ad.promo_text": "", "ad_group_ad.ad.responsive_display_ad.square_logo_images": [], "ad_group_ad.ad.responsive_display_ad.square_marketing_images": ["asset: \"customers/4651612872/assets/39906715552\"\n", "asset: \"customers/4651612872/assets/40179014782\"\n"], "ad_group_ad.ad.responsive_display_ad.youtube_videos": [], "ad_group_ad.ad.responsive_search_ad.descriptions": [], "ad_group_ad.ad.responsive_search_ad.headlines": [], "ad_group_ad.ad.responsive_search_ad.path1": "", "ad_group_ad.ad.responsive_search_ad.path2": "", "ad_group_ad.ad.shopping_comparison_listing_ad.headline": "", "ad_group_ad.ad.shopping_product_ad": "", "ad_group_ad.ad.shopping_smart_ad": "", "ad_group_ad.ad.smart_campaign_ad.descriptions": [], "ad_group_ad.ad.smart_campaign_ad.headlines": [], "ad_group_ad.ad.system_managed_resource_source": "UNSPECIFIED", "ad_group_ad.ad.text_ad.description1": "", "ad_group_ad.ad.text_ad.description2": "", "ad_group_ad.ad.text_ad.headline": "", "ad_group_ad.ad.tracking_url_template": "", "ad_group_ad.ad.type": "RESPONSIVE_DISPLAY_AD", "ad_group_ad.ad.url_collections": [], "ad_group_ad.ad.url_custom_parameters": [], "ad_group_ad.ad.video_ad.in_feed.description1": "", "ad_group_ad.ad.video_ad.in_feed.description2": "", "ad_group_ad.ad.video_ad.in_feed.headline": "", "ad_group_ad.ad.video_ad.in_stream.action_button_label": "", "ad_group_ad.ad.video_ad.in_stream.action_headline": "", "ad_group_ad.ad.video_ad.out_stream.description": "", "ad_group_ad.ad.video_ad.out_stream.headline": "", "ad_group_ad.ad.video_responsive_ad.call_to_actions": [], "ad_group_ad.ad.video_responsive_ad.companion_banners": [], "ad_group_ad.ad.video_responsive_ad.descriptions": [], "ad_group_ad.ad.video_responsive_ad.headlines": [], "ad_group_ad.ad.video_responsive_ad.long_headlines": [], "ad_group_ad.ad.video_responsive_ad.videos": [], "ad_group_ad.ad_group": "customers/4651612872/adGroups/144799120517", "ad_group_ad.ad_strength": "AVERAGE", "ad_group_ad.labels": [], "ad_group_ad.policy_summary.approval_status": "APPROVED", "ad_group_ad.policy_summary.policy_topic_entries": [], "ad_group_ad.policy_summary.review_status": "REVIEWED", "ad_group_ad.resource_name": "customers/4651612872/adGroupAds/144799120517~643022056303", "ad_group_ad.status": "ENABLED", "segments.date": "2023-09-01"}, "emitted_at": 1695662479190} -{"stream": "ad_group_ads", "data": {"ad_group.id": 144799120517, "ad_group_ad.ad.added_by_google_ads": false, "ad_group_ad.ad.app_ad.descriptions": [], "ad_group_ad.ad.app_ad.headlines": [], "ad_group_ad.ad.app_ad.html5_media_bundles": [], "ad_group_ad.ad.app_ad.images": [], "ad_group_ad.ad.app_ad.mandatory_ad_text": "", "ad_group_ad.ad.app_ad.youtube_videos": [], "ad_group_ad.ad.app_engagement_ad.descriptions": [], "ad_group_ad.ad.app_engagement_ad.headlines": [], "ad_group_ad.ad.app_engagement_ad.images": [], "ad_group_ad.ad.app_engagement_ad.videos": [], "ad_group_ad.ad.call_ad.business_name": "", "ad_group_ad.ad.call_ad.call_tracked": false, "ad_group_ad.ad.call_ad.conversion_action": "", "ad_group_ad.ad.call_ad.conversion_reporting_state": "UNSPECIFIED", "ad_group_ad.ad.call_ad.country_code": "", "ad_group_ad.ad.call_ad.description1": "", "ad_group_ad.ad.call_ad.description2": "", "ad_group_ad.ad.call_ad.disable_call_conversion": false, "ad_group_ad.ad.call_ad.headline1": "", "ad_group_ad.ad.call_ad.headline2": "", "ad_group_ad.ad.call_ad.path1": "", "ad_group_ad.ad.call_ad.path2": "", "ad_group_ad.ad.call_ad.phone_number": "", "ad_group_ad.ad.call_ad.phone_number_verification_url": "", "ad_group_ad.ad.device_preference": "UNSPECIFIED", "ad_group_ad.ad.display_upload_ad.display_upload_product_type": "UNSPECIFIED", "ad_group_ad.ad.display_upload_ad.media_bundle": "", "ad_group_ad.ad.display_url": "", "ad_group_ad.ad.expanded_dynamic_search_ad.description": "", "ad_group_ad.ad.expanded_dynamic_search_ad.description2": "", "ad_group_ad.ad.expanded_text_ad.description": "", "ad_group_ad.ad.expanded_text_ad.description2": "", "ad_group_ad.ad.expanded_text_ad.headline_part1": "", "ad_group_ad.ad.expanded_text_ad.headline_part2": "", "ad_group_ad.ad.expanded_text_ad.headline_part3": "", "ad_group_ad.ad.expanded_text_ad.path1": "", "ad_group_ad.ad.expanded_text_ad.path2": "", "ad_group_ad.ad.final_app_urls": [], "ad_group_ad.ad.final_mobile_urls": [], "ad_group_ad.ad.final_url_suffix": "", "ad_group_ad.ad.final_urls": ["https://airbyte.com"], "ad_group_ad.ad.hotel_ad": "", "ad_group_ad.ad.id": 643022056303, "ad_group_ad.ad.image_ad.image_url": "", "ad_group_ad.ad.image_ad.mime_type": "UNSPECIFIED", "ad_group_ad.ad.image_ad.name": "", "ad_group_ad.ad.image_ad.pixel_height": 0, "ad_group_ad.ad.image_ad.pixel_width": 0, "ad_group_ad.ad.image_ad.preview_image_url": "", "ad_group_ad.ad.image_ad.preview_pixel_height": 0, "ad_group_ad.ad.image_ad.preview_pixel_width": 0, "ad_group_ad.ad.legacy_app_install_ad": "", "ad_group_ad.ad.legacy_responsive_display_ad.accent_color": "", "ad_group_ad.ad.legacy_responsive_display_ad.allow_flexible_color": false, "ad_group_ad.ad.legacy_responsive_display_ad.business_name": "", "ad_group_ad.ad.legacy_responsive_display_ad.call_to_action_text": "", "ad_group_ad.ad.legacy_responsive_display_ad.description": "", "ad_group_ad.ad.legacy_responsive_display_ad.format_setting": "UNSPECIFIED", "ad_group_ad.ad.legacy_responsive_display_ad.logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.long_headline": "", "ad_group_ad.ad.legacy_responsive_display_ad.main_color": "", "ad_group_ad.ad.legacy_responsive_display_ad.marketing_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.price_prefix": "", "ad_group_ad.ad.legacy_responsive_display_ad.promo_text": "", "ad_group_ad.ad.legacy_responsive_display_ad.short_headline": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_marketing_image": "", "ad_group_ad.ad.local_ad.call_to_actions": [], "ad_group_ad.ad.local_ad.descriptions": [], "ad_group_ad.ad.local_ad.headlines": [], "ad_group_ad.ad.local_ad.logo_images": [], "ad_group_ad.ad.local_ad.marketing_images": [], "ad_group_ad.ad.local_ad.path1": "", "ad_group_ad.ad.local_ad.path2": "", "ad_group_ad.ad.local_ad.videos": [], "ad_group_ad.ad.name": "", "ad_group_ad.ad.resource_name": "customers/4651612872/ads/643022056303", "ad_group_ad.ad.responsive_display_ad.accent_color": "", "ad_group_ad.ad.responsive_display_ad.allow_flexible_color": true, "ad_group_ad.ad.responsive_display_ad.business_name": "c", "ad_group_ad.ad.responsive_display_ad.call_to_action_text": "", "ad_group_ad.ad.responsive_display_ad.control_spec.enable_asset_enhancements": true, "ad_group_ad.ad.responsive_display_ad.control_spec.enable_autogen_video": true, "ad_group_ad.ad.responsive_display_ad.descriptions": ["text: \"Airbyte | Open-Source Data Integration Platform | ELT tool\"\n", "text: \"\u30c6\u30ec\u30d3CM\u3067\u8a71\u984c\"\n", "text: \"modern ELT\"\n"], "ad_group_ad.ad.responsive_display_ad.format_setting": "ALL_FORMATS", "ad_group_ad.ad.responsive_display_ad.headlines": ["text: \"ELT\"\n"], "ad_group_ad.ad.responsive_display_ad.logo_images": [], "ad_group_ad.ad.responsive_display_ad.long_headline": "text: \"ELT data portability\"\n", "ad_group_ad.ad.responsive_display_ad.main_color": "", "ad_group_ad.ad.responsive_display_ad.marketing_images": ["asset: \"customers/4651612872/assets/39906715549\"\n", "asset: \"customers/4651612872/assets/40179016327\"\n"], "ad_group_ad.ad.responsive_display_ad.price_prefix": "", "ad_group_ad.ad.responsive_display_ad.promo_text": "", "ad_group_ad.ad.responsive_display_ad.square_logo_images": [], "ad_group_ad.ad.responsive_display_ad.square_marketing_images": ["asset: \"customers/4651612872/assets/39906715552\"\n", "asset: \"customers/4651612872/assets/40179014782\"\n"], "ad_group_ad.ad.responsive_display_ad.youtube_videos": [], "ad_group_ad.ad.responsive_search_ad.descriptions": [], "ad_group_ad.ad.responsive_search_ad.headlines": [], "ad_group_ad.ad.responsive_search_ad.path1": "", "ad_group_ad.ad.responsive_search_ad.path2": "", "ad_group_ad.ad.shopping_comparison_listing_ad.headline": "", "ad_group_ad.ad.shopping_product_ad": "", "ad_group_ad.ad.shopping_smart_ad": "", "ad_group_ad.ad.smart_campaign_ad.descriptions": [], "ad_group_ad.ad.smart_campaign_ad.headlines": [], "ad_group_ad.ad.system_managed_resource_source": "UNSPECIFIED", "ad_group_ad.ad.text_ad.description1": "", "ad_group_ad.ad.text_ad.description2": "", "ad_group_ad.ad.text_ad.headline": "", "ad_group_ad.ad.tracking_url_template": "", "ad_group_ad.ad.type": "RESPONSIVE_DISPLAY_AD", "ad_group_ad.ad.url_collections": [], "ad_group_ad.ad.url_custom_parameters": [], "ad_group_ad.ad.video_ad.in_feed.description1": "", "ad_group_ad.ad.video_ad.in_feed.description2": "", "ad_group_ad.ad.video_ad.in_feed.headline": "", "ad_group_ad.ad.video_ad.in_stream.action_button_label": "", "ad_group_ad.ad.video_ad.in_stream.action_headline": "", "ad_group_ad.ad.video_ad.out_stream.description": "", "ad_group_ad.ad.video_ad.out_stream.headline": "", "ad_group_ad.ad.video_responsive_ad.call_to_actions": [], "ad_group_ad.ad.video_responsive_ad.companion_banners": [], "ad_group_ad.ad.video_responsive_ad.descriptions": [], "ad_group_ad.ad.video_responsive_ad.headlines": [], "ad_group_ad.ad.video_responsive_ad.long_headlines": [], "ad_group_ad.ad.video_responsive_ad.videos": [], "ad_group_ad.ad_group": "customers/4651612872/adGroups/144799120517", "ad_group_ad.ad_strength": "AVERAGE", "ad_group_ad.labels": [], "ad_group_ad.policy_summary.approval_status": "APPROVED", "ad_group_ad.policy_summary.policy_topic_entries": [], "ad_group_ad.policy_summary.review_status": "REVIEWED", "ad_group_ad.resource_name": "customers/4651612872/adGroupAds/144799120517~643022056303", "ad_group_ad.status": "ENABLED", "segments.date": "2023-09-02"}, "emitted_at": 1695662479195} -{"stream": "ad_group_bidding_strategies", "data": {"ad_group.id": 144799120517, "bidding_strategy.aligned_campaign_budget_id": 0, "bidding_strategy.campaign_count": 0, "bidding_strategy.currency_code": "", "bidding_strategy.effective_currency_code": "", "bidding_strategy.enhanced_cpc": "", "bidding_strategy.id": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversion_value.target_roas": 0.0, "bidding_strategy.maximize_conversions.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversions.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversions.target_cpa_micros": 0, "bidding_strategy.name": "", "bidding_strategy.non_removed_campaign_count": 0, "bidding_strategy.resource_name": "", "bidding_strategy.status": "UNSPECIFIED", "bidding_strategy.target_cpa.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_cpa.cpc_bid_floor_micros": 0, "bidding_strategy.target_cpa.target_cpa_micros": 0, "bidding_strategy.target_impression_share.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_impression_share.location": "UNSPECIFIED", "bidding_strategy.target_impression_share.location_fraction_micros": 0, "bidding_strategy.target_roas.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_roas.cpc_bid_floor_micros": 0, "bidding_strategy.target_roas.target_roas": 0.0, "bidding_strategy.target_spend.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_spend.target_spend_micros": 0, "bidding_strategy.type": "UNSPECIFIED", "segments.date": "2023-08-31"}, "emitted_at": 1695662493801} -{"stream": "ad_group_bidding_strategies", "data": {"ad_group.id": 144799120517, "bidding_strategy.aligned_campaign_budget_id": 0, "bidding_strategy.campaign_count": 0, "bidding_strategy.currency_code": "", "bidding_strategy.effective_currency_code": "", "bidding_strategy.enhanced_cpc": "", "bidding_strategy.id": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversion_value.target_roas": 0.0, "bidding_strategy.maximize_conversions.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversions.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversions.target_cpa_micros": 0, "bidding_strategy.name": "", "bidding_strategy.non_removed_campaign_count": 0, "bidding_strategy.resource_name": "", "bidding_strategy.status": "UNSPECIFIED", "bidding_strategy.target_cpa.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_cpa.cpc_bid_floor_micros": 0, "bidding_strategy.target_cpa.target_cpa_micros": 0, "bidding_strategy.target_impression_share.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_impression_share.location": "UNSPECIFIED", "bidding_strategy.target_impression_share.location_fraction_micros": 0, "bidding_strategy.target_roas.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_roas.cpc_bid_floor_micros": 0, "bidding_strategy.target_roas.target_roas": 0.0, "bidding_strategy.target_spend.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_spend.target_spend_micros": 0, "bidding_strategy.type": "UNSPECIFIED", "segments.date": "2023-09-01"}, "emitted_at": 1695662493803} -{"stream": "ad_group_bidding_strategies", "data": {"ad_group.id": 144799120517, "bidding_strategy.aligned_campaign_budget_id": 0, "bidding_strategy.campaign_count": 0, "bidding_strategy.currency_code": "", "bidding_strategy.effective_currency_code": "", "bidding_strategy.enhanced_cpc": "", "bidding_strategy.id": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversion_value.target_roas": 0.0, "bidding_strategy.maximize_conversions.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversions.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversions.target_cpa_micros": 0, "bidding_strategy.name": "", "bidding_strategy.non_removed_campaign_count": 0, "bidding_strategy.resource_name": "", "bidding_strategy.status": "UNSPECIFIED", "bidding_strategy.target_cpa.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_cpa.cpc_bid_floor_micros": 0, "bidding_strategy.target_cpa.target_cpa_micros": 0, "bidding_strategy.target_impression_share.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_impression_share.location": "UNSPECIFIED", "bidding_strategy.target_impression_share.location_fraction_micros": 0, "bidding_strategy.target_roas.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_roas.cpc_bid_floor_micros": 0, "bidding_strategy.target_roas.target_roas": 0.0, "bidding_strategy.target_spend.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_spend.target_spend_micros": 0, "bidding_strategy.type": "UNSPECIFIED", "segments.date": "2023-09-02"}, "emitted_at": 1695662493804} -{"stream": "ad_group_criterion_labels", "data": {"ad_group.id": 137051662444, "label.id": 21902092838, "ad_group_criterion_label.ad_group_criterion": "customers/4651612872/adGroupCriteria/137051662444~10766861", "ad_group_criterion_label.label": "customers/4651612872/labels/21902092838", "ad_group_criterion_label.resource_name": "customers/4651612872/adGroupCriterionLabels/137051662444~10766861~21902092838", "ad_group_criterion.criterion_id": 10766861}, "emitted_at": 1695662496460} -{"stream": "ad_group_criterion_labels", "data": {"ad_group.id": 137051662444, "label.id": 21906377810, "ad_group_criterion_label.ad_group_criterion": "customers/4651612872/adGroupCriteria/137051662444~528912986", "ad_group_criterion_label.label": "customers/4651612872/labels/21906377810", "ad_group_criterion_label.resource_name": "customers/4651612872/adGroupCriterionLabels/137051662444~528912986~21906377810", "ad_group_criterion.criterion_id": 528912986}, "emitted_at": 1695662496461} -{"stream": "ad_group_criterions", "data": {"deleted_at": null, "change_status.last_change_date_time": null, "ad_group.id": 123273719655, "ad_group_criterion.ad_group": "customers/4651612872/adGroups/123273719655", "ad_group_criterion.age_range.type": "UNSPECIFIED", "ad_group_criterion.app_payment_model.type": "UNSPECIFIED", "ad_group_criterion.approval_status": "APPROVED", "ad_group_criterion.audience.audience": "", "ad_group_criterion.bid_modifier": 0.0, "ad_group_criterion.combined_audience.combined_audience": "", "ad_group_criterion.cpc_bid_micros": 0, "ad_group_criterion.cpm_bid_micros": 0, "ad_group_criterion.cpv_bid_micros": 0, "ad_group_criterion.criterion_id": 10515001, "ad_group_criterion.custom_affinity.custom_affinity": "", "ad_group_criterion.custom_audience.custom_audience": "", "ad_group_criterion.custom_intent.custom_intent": "", "ad_group_criterion.disapproval_reasons": [], "ad_group_criterion.display_name": "data warehouses", "ad_group_criterion.effective_cpc_bid_micros": 10000, "ad_group_criterion.effective_cpc_bid_source": "AD_GROUP", "ad_group_criterion.effective_cpm_bid_micros": 10000, "ad_group_criterion.effective_cpm_bid_source": "AD_GROUP", "ad_group_criterion.effective_cpv_bid_micros": 0, "ad_group_criterion.effective_cpv_bid_source": "UNSPECIFIED", "ad_group_criterion.effective_percent_cpc_bid_micros": 0, "ad_group_criterion.effective_percent_cpc_bid_source": "UNSPECIFIED", "ad_group_criterion.final_mobile_urls": [], "ad_group_criterion.final_url_suffix": "", "ad_group_criterion.final_urls": [], "ad_group_criterion.gender.type": "UNSPECIFIED", "ad_group_criterion.income_range.type": "UNSPECIFIED", "ad_group_criterion.keyword.match_type": "BROAD", "ad_group_criterion.keyword.text": "data warehouses", "ad_group_criterion.labels": [], "ad_group_criterion.mobile_app_category.mobile_app_category_constant": "", "ad_group_criterion.mobile_application.app_id": "", "ad_group_criterion.mobile_application.name": "", "ad_group_criterion.negative": false, "ad_group_criterion.parental_status.type": "UNSPECIFIED", "ad_group_criterion.percent_cpc_bid_micros": 0, "ad_group_criterion.placement.url": "", "ad_group_criterion.position_estimates.estimated_add_clicks_at_first_position_cpc": 0, "ad_group_criterion.position_estimates.estimated_add_cost_at_first_position_cpc": 0, "ad_group_criterion.position_estimates.first_page_cpc_micros": 0, "ad_group_criterion.position_estimates.first_position_cpc_micros": 0, "ad_group_criterion.position_estimates.top_of_page_cpc_micros": 0, "ad_group_criterion.quality_info.creative_quality_score": "UNSPECIFIED", "ad_group_criterion.quality_info.post_click_quality_score": "UNSPECIFIED", "ad_group_criterion.quality_info.quality_score": 0, "ad_group_criterion.quality_info.search_predicted_ctr": "UNSPECIFIED", "ad_group_criterion.resource_name": "customers/4651612872/adGroupCriteria/123273719655~10515001", "ad_group_criterion.status": "ENABLED", "ad_group_criterion.system_serving_status": "ELIGIBLE", "ad_group_criterion.topic.path": [], "ad_group_criterion.topic.topic_constant": "", "ad_group_criterion.tracking_url_template": "", "ad_group_criterion.type": "KEYWORD", "ad_group_criterion.url_custom_parameters": [], "ad_group_criterion.user_interest.user_interest_category": "", "ad_group_criterion.user_list.user_list": "", "ad_group_criterion.webpage.conditions": [], "ad_group_criterion.webpage.coverage_percentage": 0.0, "ad_group_criterion.webpage.criterion_name": "", "ad_group_criterion.webpage.sample.sample_urls": [], "ad_group_criterion.youtube_channel.channel_id": "", "ad_group_criterion.youtube_video.video_id": ""}, "emitted_at": 1695662494750} -{"stream": "ad_group_criterions", "data": {"deleted_at": null, "change_status.last_change_date_time": null, "ad_group.id": 123273719655, "ad_group_criterion.ad_group": "customers/4651612872/adGroups/123273719655", "ad_group_criterion.age_range.type": "UNSPECIFIED", "ad_group_criterion.app_payment_model.type": "UNSPECIFIED", "ad_group_criterion.approval_status": "UNSPECIFIED", "ad_group_criterion.audience.audience": "", "ad_group_criterion.bid_modifier": 0.0, "ad_group_criterion.combined_audience.combined_audience": "", "ad_group_criterion.cpc_bid_micros": 0, "ad_group_criterion.cpm_bid_micros": 0, "ad_group_criterion.cpv_bid_micros": 0, "ad_group_criterion.criterion_id": 10683521, "ad_group_criterion.custom_affinity.custom_affinity": "", "ad_group_criterion.custom_audience.custom_audience": "", "ad_group_criterion.custom_intent.custom_intent": "", "ad_group_criterion.disapproval_reasons": [], "ad_group_criterion.display_name": "database software", "ad_group_criterion.effective_cpc_bid_micros": 0, "ad_group_criterion.effective_cpc_bid_source": "UNSPECIFIED", "ad_group_criterion.effective_cpm_bid_micros": 0, "ad_group_criterion.effective_cpm_bid_source": "UNSPECIFIED", "ad_group_criterion.effective_cpv_bid_micros": 0, "ad_group_criterion.effective_cpv_bid_source": "UNSPECIFIED", "ad_group_criterion.effective_percent_cpc_bid_micros": 0, "ad_group_criterion.effective_percent_cpc_bid_source": "UNSPECIFIED", "ad_group_criterion.final_mobile_urls": [], "ad_group_criterion.final_url_suffix": "", "ad_group_criterion.final_urls": [], "ad_group_criterion.gender.type": "UNSPECIFIED", "ad_group_criterion.income_range.type": "UNSPECIFIED", "ad_group_criterion.keyword.match_type": "BROAD", "ad_group_criterion.keyword.text": "database software", "ad_group_criterion.labels": [], "ad_group_criterion.mobile_app_category.mobile_app_category_constant": "", "ad_group_criterion.mobile_application.app_id": "", "ad_group_criterion.mobile_application.name": "", "ad_group_criterion.negative": false, "ad_group_criterion.parental_status.type": "UNSPECIFIED", "ad_group_criterion.percent_cpc_bid_micros": 0, "ad_group_criterion.placement.url": "", "ad_group_criterion.position_estimates.estimated_add_clicks_at_first_position_cpc": 0, "ad_group_criterion.position_estimates.estimated_add_cost_at_first_position_cpc": 0, "ad_group_criterion.position_estimates.first_page_cpc_micros": 0, "ad_group_criterion.position_estimates.first_position_cpc_micros": 0, "ad_group_criterion.position_estimates.top_of_page_cpc_micros": 0, "ad_group_criterion.quality_info.creative_quality_score": "UNSPECIFIED", "ad_group_criterion.quality_info.post_click_quality_score": "UNSPECIFIED", "ad_group_criterion.quality_info.quality_score": 0, "ad_group_criterion.quality_info.search_predicted_ctr": "UNSPECIFIED", "ad_group_criterion.resource_name": "customers/4651612872/adGroupCriteria/123273719655~10683521", "ad_group_criterion.status": "REMOVED", "ad_group_criterion.system_serving_status": "UNSPECIFIED", "ad_group_criterion.topic.path": [], "ad_group_criterion.topic.topic_constant": "", "ad_group_criterion.tracking_url_template": "", "ad_group_criterion.type": "KEYWORD", "ad_group_criterion.url_custom_parameters": [], "ad_group_criterion.user_interest.user_interest_category": "", "ad_group_criterion.user_list.user_list": "", "ad_group_criterion.webpage.conditions": [], "ad_group_criterion.webpage.coverage_percentage": 0.0, "ad_group_criterion.webpage.criterion_name": "", "ad_group_criterion.webpage.sample.sample_urls": [], "ad_group_criterion.youtube_channel.channel_id": "", "ad_group_criterion.youtube_video.video_id": ""}, "emitted_at": 1695662494759} -{"stream": "ad_group_criterions", "data": {"deleted_at": null, "change_status.last_change_date_time": null, "ad_group.id": 123273719655, "ad_group_criterion.ad_group": "customers/4651612872/adGroups/123273719655", "ad_group_criterion.age_range.type": "UNSPECIFIED", "ad_group_criterion.app_payment_model.type": "UNSPECIFIED", "ad_group_criterion.approval_status": "APPROVED", "ad_group_criterion.audience.audience": "", "ad_group_criterion.bid_modifier": 0.0, "ad_group_criterion.combined_audience.combined_audience": "", "ad_group_criterion.cpc_bid_micros": 0, "ad_group_criterion.cpm_bid_micros": 0, "ad_group_criterion.cpv_bid_micros": 0, "ad_group_criterion.criterion_id": 11100571, "ad_group_criterion.custom_affinity.custom_affinity": "", "ad_group_criterion.custom_audience.custom_audience": "", "ad_group_criterion.custom_intent.custom_intent": "", "ad_group_criterion.disapproval_reasons": [], "ad_group_criterion.display_name": "integration software", "ad_group_criterion.effective_cpc_bid_micros": 10000, "ad_group_criterion.effective_cpc_bid_source": "AD_GROUP", "ad_group_criterion.effective_cpm_bid_micros": 10000, "ad_group_criterion.effective_cpm_bid_source": "AD_GROUP", "ad_group_criterion.effective_cpv_bid_micros": 0, "ad_group_criterion.effective_cpv_bid_source": "UNSPECIFIED", "ad_group_criterion.effective_percent_cpc_bid_micros": 0, "ad_group_criterion.effective_percent_cpc_bid_source": "UNSPECIFIED", "ad_group_criterion.final_mobile_urls": [], "ad_group_criterion.final_url_suffix": "", "ad_group_criterion.final_urls": [], "ad_group_criterion.gender.type": "UNSPECIFIED", "ad_group_criterion.income_range.type": "UNSPECIFIED", "ad_group_criterion.keyword.match_type": "BROAD", "ad_group_criterion.keyword.text": "integration software", "ad_group_criterion.labels": [], "ad_group_criterion.mobile_app_category.mobile_app_category_constant": "", "ad_group_criterion.mobile_application.app_id": "", "ad_group_criterion.mobile_application.name": "", "ad_group_criterion.negative": false, "ad_group_criterion.parental_status.type": "UNSPECIFIED", "ad_group_criterion.percent_cpc_bid_micros": 0, "ad_group_criterion.placement.url": "", "ad_group_criterion.position_estimates.estimated_add_clicks_at_first_position_cpc": 0, "ad_group_criterion.position_estimates.estimated_add_cost_at_first_position_cpc": 0, "ad_group_criterion.position_estimates.first_page_cpc_micros": 0, "ad_group_criterion.position_estimates.first_position_cpc_micros": 0, "ad_group_criterion.position_estimates.top_of_page_cpc_micros": 0, "ad_group_criterion.quality_info.creative_quality_score": "UNSPECIFIED", "ad_group_criterion.quality_info.post_click_quality_score": "UNSPECIFIED", "ad_group_criterion.quality_info.quality_score": 0, "ad_group_criterion.quality_info.search_predicted_ctr": "UNSPECIFIED", "ad_group_criterion.resource_name": "customers/4651612872/adGroupCriteria/123273719655~11100571", "ad_group_criterion.status": "ENABLED", "ad_group_criterion.system_serving_status": "ELIGIBLE", "ad_group_criterion.topic.path": [], "ad_group_criterion.topic.topic_constant": "", "ad_group_criterion.tracking_url_template": "", "ad_group_criterion.type": "KEYWORD", "ad_group_criterion.url_custom_parameters": [], "ad_group_criterion.user_interest.user_interest_category": "", "ad_group_criterion.user_list.user_list": "", "ad_group_criterion.webpage.conditions": [], "ad_group_criterion.webpage.coverage_percentage": 0.0, "ad_group_criterion.webpage.criterion_name": "", "ad_group_criterion.webpage.sample.sample_urls": [], "ad_group_criterion.youtube_channel.channel_id": "", "ad_group_criterion.youtube_video.video_id": ""}, "emitted_at": 1695662494764} -{"stream": "ad_group_custom", "data": {"ad_group.targeting_setting.target_restrictions": ["targeting_dimension: AGE_RANGE\nbid_only: true\n", "targeting_dimension: GENDER\nbid_only: true\n", "targeting_dimension: PARENTAL_STATUS\nbid_only: true\n", "targeting_dimension: INCOME_RANGE\nbid_only: true\n", "targeting_dimension: TOPIC\nbid_only: true\n"], "segments.date": "2023-08-31"}, "emitted_at": 1695662470283} -{"stream": "ad_group_custom", "data": {"ad_group.targeting_setting.target_restrictions": ["targeting_dimension: AGE_RANGE\nbid_only: true\n", "targeting_dimension: GENDER\nbid_only: true\n", "targeting_dimension: PARENTAL_STATUS\nbid_only: true\n", "targeting_dimension: INCOME_RANGE\nbid_only: true\n", "targeting_dimension: TOPIC\nbid_only: true\n"], "segments.date": "2023-09-01"}, "emitted_at": 1695662470284} -{"stream": "ad_group_custom", "data": {"ad_group.targeting_setting.target_restrictions": ["targeting_dimension: AGE_RANGE\nbid_only: true\n", "targeting_dimension: GENDER\nbid_only: true\n", "targeting_dimension: PARENTAL_STATUS\nbid_only: true\n", "targeting_dimension: INCOME_RANGE\nbid_only: true\n", "targeting_dimension: TOPIC\nbid_only: true\n"], "segments.date": "2023-09-02"}, "emitted_at": 1695662470284} -{"stream": "ad_group_labels", "data": {"ad_group.id": 123273719655, "label.id": 21585034471, "ad_group.resource_name": "customers/4651612872/adGroups/123273719655", "ad_group_label.resource_name": "customers/4651612872/adGroupLabels/123273719655~21585034471", "label.name": "edgao-example-label", "label.resource_name": "customers/4651612872/labels/21585034471"}, "emitted_at": 1695662483963} -{"stream": "ad_group_labels", "data": {"ad_group.id": 138643385242, "label.id": 21585034471, "ad_group.resource_name": "customers/4651612872/adGroups/138643385242", "ad_group_label.resource_name": "customers/4651612872/adGroupLabels/138643385242~21585034471", "label.name": "edgao-example-label", "label.resource_name": "customers/4651612872/labels/21585034471"}, "emitted_at": 1695662483965} -{"stream": "ad_group_labels", "data": {"ad_group.id": 137020701042, "label.id": 21906377810, "ad_group.resource_name": "customers/4651612872/adGroups/137020701042", "ad_group_label.resource_name": "customers/4651612872/adGroupLabels/137020701042~21906377810", "label.name": "Test Delete label customer", "label.resource_name": "customers/4651612872/labels/21906377810"}, "emitted_at": 1695662483965} -{"stream": "ad_groups", "data": {"campaign.id": 19410069806, "ad_group.ad_rotation_mode": "UNSPECIFIED", "ad_group.base_ad_group": "customers/4651612872/adGroups/144799120517", "ad_group.campaign": "customers/4651612872/campaigns/19410069806", "ad_group.cpc_bid_micros": 10000, "ad_group.cpm_bid_micros": 2000000, "ad_group.cpv_bid_micros": 0, "ad_group.display_custom_bid_dimension": "UNSPECIFIED", "ad_group.effective_target_cpa_micros": 0, "ad_group.effective_target_cpa_source": "UNSPECIFIED", "ad_group.effective_target_roas": 0.0, "ad_group.effective_target_roas_source": "UNSPECIFIED", "ad_group.excluded_parent_asset_field_types": [], "ad_group.optimized_targeting_enabled": true, "ad_group.final_url_suffix": "", "ad_group.id": 144799120517, "ad_group.labels": [], "ad_group.name": "Ad group 1", "ad_group.percent_cpc_bid_micros": 0, "ad_group.resource_name": "customers/4651612872/adGroups/144799120517", "ad_group.status": "ENABLED", "ad_group.target_cpa_micros": 0, "ad_group.target_cpm_micros": 10000, "ad_group.target_roas": 0.0, "ad_group.targeting_setting.target_restrictions": ["targeting_dimension: AGE_RANGE\nbid_only: true\n", "targeting_dimension: GENDER\nbid_only: true\n", "targeting_dimension: PARENTAL_STATUS\nbid_only: true\n", "targeting_dimension: INCOME_RANGE\nbid_only: true\n", "targeting_dimension: TOPIC\nbid_only: true\n"], "ad_group.tracking_url_template": "", "ad_group.type": "DISPLAY_STANDARD", "ad_group.url_custom_parameters": [], "segments.date": "2023-08-31"}, "emitted_at": 1695662480483} -{"stream": "ad_groups", "data": {"campaign.id": 19410069806, "ad_group.ad_rotation_mode": "UNSPECIFIED", "ad_group.base_ad_group": "customers/4651612872/adGroups/144799120517", "ad_group.campaign": "customers/4651612872/campaigns/19410069806", "ad_group.cpc_bid_micros": 10000, "ad_group.cpm_bid_micros": 2000000, "ad_group.cpv_bid_micros": 0, "ad_group.display_custom_bid_dimension": "UNSPECIFIED", "ad_group.effective_target_cpa_micros": 0, "ad_group.effective_target_cpa_source": "UNSPECIFIED", "ad_group.effective_target_roas": 0.0, "ad_group.effective_target_roas_source": "UNSPECIFIED", "ad_group.excluded_parent_asset_field_types": [], "ad_group.optimized_targeting_enabled": true, "ad_group.final_url_suffix": "", "ad_group.id": 144799120517, "ad_group.labels": [], "ad_group.name": "Ad group 1", "ad_group.percent_cpc_bid_micros": 0, "ad_group.resource_name": "customers/4651612872/adGroups/144799120517", "ad_group.status": "ENABLED", "ad_group.target_cpa_micros": 0, "ad_group.target_cpm_micros": 10000, "ad_group.target_roas": 0.0, "ad_group.targeting_setting.target_restrictions": ["targeting_dimension: AGE_RANGE\nbid_only: true\n", "targeting_dimension: GENDER\nbid_only: true\n", "targeting_dimension: PARENTAL_STATUS\nbid_only: true\n", "targeting_dimension: INCOME_RANGE\nbid_only: true\n", "targeting_dimension: TOPIC\nbid_only: true\n"], "ad_group.tracking_url_template": "", "ad_group.type": "DISPLAY_STANDARD", "ad_group.url_custom_parameters": [], "segments.date": "2023-09-01"}, "emitted_at": 1695662480486} -{"stream": "ad_groups", "data": {"campaign.id": 19410069806, "ad_group.ad_rotation_mode": "UNSPECIFIED", "ad_group.base_ad_group": "customers/4651612872/adGroups/144799120517", "ad_group.campaign": "customers/4651612872/campaigns/19410069806", "ad_group.cpc_bid_micros": 10000, "ad_group.cpm_bid_micros": 2000000, "ad_group.cpv_bid_micros": 0, "ad_group.display_custom_bid_dimension": "UNSPECIFIED", "ad_group.effective_target_cpa_micros": 0, "ad_group.effective_target_cpa_source": "UNSPECIFIED", "ad_group.effective_target_roas": 0.0, "ad_group.effective_target_roas_source": "UNSPECIFIED", "ad_group.excluded_parent_asset_field_types": [], "ad_group.optimized_targeting_enabled": true, "ad_group.final_url_suffix": "", "ad_group.id": 144799120517, "ad_group.labels": [], "ad_group.name": "Ad group 1", "ad_group.percent_cpc_bid_micros": 0, "ad_group.resource_name": "customers/4651612872/adGroups/144799120517", "ad_group.status": "ENABLED", "ad_group.target_cpa_micros": 0, "ad_group.target_cpm_micros": 10000, "ad_group.target_roas": 0.0, "ad_group.targeting_setting.target_restrictions": ["targeting_dimension: AGE_RANGE\nbid_only: true\n", "targeting_dimension: GENDER\nbid_only: true\n", "targeting_dimension: PARENTAL_STATUS\nbid_only: true\n", "targeting_dimension: INCOME_RANGE\nbid_only: true\n", "targeting_dimension: TOPIC\nbid_only: true\n"], "ad_group.tracking_url_template": "", "ad_group.type": "DISPLAY_STANDARD", "ad_group.url_custom_parameters": [], "segments.date": "2023-09-02"}, "emitted_at": 1695662480489} -{"stream": "ad_listing_group_criterions", "data": {"deleted_at": null, "change_status.last_change_date_time": null, "ad_group_criterion.resource_name": "customers/4651612872/adGroupCriteria/123273719655~10515001", "ad_group.id": 123273719655, "ad_group_criterion.criterion_id": 10515001, "ad_group_criterion.listing_group.case_value.activity_country.value": "", "ad_group_criterion.listing_group.case_value.activity_id.value": "", "ad_group_criterion.listing_group.case_value.activity_rating.value": 0, "ad_group_criterion.listing_group.case_value.hotel_city.city_criterion": "", "ad_group_criterion.listing_group.case_value.hotel_class.value": 0, "ad_group_criterion.listing_group.case_value.hotel_country_region.country_region_criterion": "", "ad_group_criterion.listing_group.case_value.hotel_id.value": "", "ad_group_criterion.listing_group.case_value.hotel_state.state_criterion": "", "ad_group_criterion.listing_group.case_value.product_bidding_category.id": 0, "ad_group_criterion.listing_group.case_value.product_bidding_category.level": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_brand.value": "", "ad_group_criterion.listing_group.case_value.product_channel.channel": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_channel_exclusivity.channel_exclusivity": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_condition.condition": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_custom_attribute.index": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_custom_attribute.value": "", "ad_group_criterion.listing_group.case_value.product_item_id.value": "", "ad_group_criterion.listing_group.case_value.product_type.level": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_type.value": "", "ad_group_criterion.listing_group.parent_ad_group_criterion": "", "ad_group_criterion.listing_group.type": "UNSPECIFIED"}, "emitted_at": 1695662495616} -{"stream": "ad_listing_group_criterions", "data": {"deleted_at": null, "change_status.last_change_date_time": null, "ad_group_criterion.resource_name": "customers/4651612872/adGroupCriteria/123273719655~10683521", "ad_group.id": 123273719655, "ad_group_criterion.criterion_id": 10683521, "ad_group_criterion.listing_group.case_value.activity_country.value": "", "ad_group_criterion.listing_group.case_value.activity_id.value": "", "ad_group_criterion.listing_group.case_value.activity_rating.value": 0, "ad_group_criterion.listing_group.case_value.hotel_city.city_criterion": "", "ad_group_criterion.listing_group.case_value.hotel_class.value": 0, "ad_group_criterion.listing_group.case_value.hotel_country_region.country_region_criterion": "", "ad_group_criterion.listing_group.case_value.hotel_id.value": "", "ad_group_criterion.listing_group.case_value.hotel_state.state_criterion": "", "ad_group_criterion.listing_group.case_value.product_bidding_category.id": 0, "ad_group_criterion.listing_group.case_value.product_bidding_category.level": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_brand.value": "", "ad_group_criterion.listing_group.case_value.product_channel.channel": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_channel_exclusivity.channel_exclusivity": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_condition.condition": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_custom_attribute.index": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_custom_attribute.value": "", "ad_group_criterion.listing_group.case_value.product_item_id.value": "", "ad_group_criterion.listing_group.case_value.product_type.level": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_type.value": "", "ad_group_criterion.listing_group.parent_ad_group_criterion": "", "ad_group_criterion.listing_group.type": "UNSPECIFIED"}, "emitted_at": 1695662495622} -{"stream": "ad_listing_group_criterions", "data": {"deleted_at": null, "change_status.last_change_date_time": null, "ad_group_criterion.resource_name": "customers/4651612872/adGroupCriteria/123273719655~11100571", "ad_group.id": 123273719655, "ad_group_criterion.criterion_id": 11100571, "ad_group_criterion.listing_group.case_value.activity_country.value": "", "ad_group_criterion.listing_group.case_value.activity_id.value": "", "ad_group_criterion.listing_group.case_value.activity_rating.value": 0, "ad_group_criterion.listing_group.case_value.hotel_city.city_criterion": "", "ad_group_criterion.listing_group.case_value.hotel_class.value": 0, "ad_group_criterion.listing_group.case_value.hotel_country_region.country_region_criterion": "", "ad_group_criterion.listing_group.case_value.hotel_id.value": "", "ad_group_criterion.listing_group.case_value.hotel_state.state_criterion": "", "ad_group_criterion.listing_group.case_value.product_bidding_category.id": 0, "ad_group_criterion.listing_group.case_value.product_bidding_category.level": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_brand.value": "", "ad_group_criterion.listing_group.case_value.product_channel.channel": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_channel_exclusivity.channel_exclusivity": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_condition.condition": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_custom_attribute.index": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_custom_attribute.value": "", "ad_group_criterion.listing_group.case_value.product_item_id.value": "", "ad_group_criterion.listing_group.case_value.product_type.level": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_type.value": "", "ad_group_criterion.listing_group.parent_ad_group_criterion": "", "ad_group_criterion.listing_group.type": "UNSPECIFIED"}, "emitted_at": 1695662495626} -{"stream": "audience", "data": {"customer.id": 4651612872, "audience.description": "", "audience.dimensions": ["audience_segments {\n segments {\n custom_audience {\n custom_audience: \"customers/4651612872/customAudiences/523469909\"\n }\n }\n}\n"], "audience.exclusion_dimension": "", "audience.id": 47792633, "audience.name": "Audience name 1", "audience.resource_name": "customers/4651612872/audiences/47792633", "audience.status": "ENABLED"}, "emitted_at": 1695662487756} -{"stream": "audience", "data": {"customer.id": 4651612872, "audience.description": "", "audience.dimensions": ["audience_segments {\n segments {\n user_interest {\n user_interest_category: \"customers/4651612872/userInterests/80276\"\n }\n }\n segments {\n user_interest {\n user_interest_category: \"customers/4651612872/userInterests/80279\"\n }\n }\n segments {\n user_interest {\n user_interest_category: \"customers/4651612872/userInterests/80520\"\n }\n }\n segments {\n user_interest {\n user_interest_category: \"customers/4651612872/userInterests/80530\"\n }\n }\n segments {\n user_interest {\n user_interest_category: \"customers/4651612872/userInterests/92931\"\n }\n }\n}\n"], "audience.exclusion_dimension": "", "audience.id": 97300129, "audience.name": "Upgraded Audience 1", "audience.resource_name": "customers/4651612872/audiences/97300129", "audience.status": "ENABLED"}, "emitted_at": 1695662487758} -{"stream": "campaign_bidding_strategies", "data": {"customer.id": 4651612872, "campaign.id": 19410069806, "bidding_strategy.aligned_campaign_budget_id": 0, "bidding_strategy.campaign_count": 0, "bidding_strategy.currency_code": "", "bidding_strategy.effective_currency_code": "", "bidding_strategy.enhanced_cpc": "", "bidding_strategy.id": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversion_value.target_roas": 0.0, "bidding_strategy.maximize_conversions.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversions.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversions.target_cpa_micros": 0, "bidding_strategy.name": "", "bidding_strategy.non_removed_campaign_count": 0, "bidding_strategy.resource_name": "", "bidding_strategy.status": "UNSPECIFIED", "bidding_strategy.target_cpa.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_cpa.cpc_bid_floor_micros": 0, "bidding_strategy.target_cpa.target_cpa_micros": 0, "bidding_strategy.target_impression_share.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_impression_share.location": "UNSPECIFIED", "bidding_strategy.target_impression_share.location_fraction_micros": 0, "bidding_strategy.target_roas.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_roas.cpc_bid_floor_micros": 0, "bidding_strategy.target_roas.target_roas": 0.0, "bidding_strategy.target_spend.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_spend.target_spend_micros": 0, "bidding_strategy.type": "UNSPECIFIED", "segments.date": "2023-08-31"}, "emitted_at": 1695662493391} -{"stream": "campaign_bidding_strategies", "data": {"customer.id": 4651612872, "campaign.id": 19959839954, "bidding_strategy.aligned_campaign_budget_id": 0, "bidding_strategy.campaign_count": 0, "bidding_strategy.currency_code": "", "bidding_strategy.effective_currency_code": "", "bidding_strategy.enhanced_cpc": "", "bidding_strategy.id": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversion_value.target_roas": 0.0, "bidding_strategy.maximize_conversions.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversions.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversions.target_cpa_micros": 0, "bidding_strategy.name": "", "bidding_strategy.non_removed_campaign_count": 0, "bidding_strategy.resource_name": "", "bidding_strategy.status": "UNSPECIFIED", "bidding_strategy.target_cpa.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_cpa.cpc_bid_floor_micros": 0, "bidding_strategy.target_cpa.target_cpa_micros": 0, "bidding_strategy.target_impression_share.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_impression_share.location": "UNSPECIFIED", "bidding_strategy.target_impression_share.location_fraction_micros": 0, "bidding_strategy.target_roas.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_roas.cpc_bid_floor_micros": 0, "bidding_strategy.target_roas.target_roas": 0.0, "bidding_strategy.target_spend.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_spend.target_spend_micros": 0, "bidding_strategy.type": "UNSPECIFIED", "segments.date": "2023-08-31"}, "emitted_at": 1695662493392} -{"stream": "campaign_bidding_strategies", "data": {"customer.id": 4651612872, "campaign.id": 19410069806, "bidding_strategy.aligned_campaign_budget_id": 0, "bidding_strategy.campaign_count": 0, "bidding_strategy.currency_code": "", "bidding_strategy.effective_currency_code": "", "bidding_strategy.enhanced_cpc": "", "bidding_strategy.id": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversion_value.target_roas": 0.0, "bidding_strategy.maximize_conversions.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversions.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversions.target_cpa_micros": 0, "bidding_strategy.name": "", "bidding_strategy.non_removed_campaign_count": 0, "bidding_strategy.resource_name": "", "bidding_strategy.status": "UNSPECIFIED", "bidding_strategy.target_cpa.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_cpa.cpc_bid_floor_micros": 0, "bidding_strategy.target_cpa.target_cpa_micros": 0, "bidding_strategy.target_impression_share.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_impression_share.location": "UNSPECIFIED", "bidding_strategy.target_impression_share.location_fraction_micros": 0, "bidding_strategy.target_roas.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_roas.cpc_bid_floor_micros": 0, "bidding_strategy.target_roas.target_roas": 0.0, "bidding_strategy.target_spend.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_spend.target_spend_micros": 0, "bidding_strategy.type": "UNSPECIFIED", "segments.date": "2023-09-01"}, "emitted_at": 1695662493393} -{"stream": "campaign_budget", "data": {"customer.id": 4651612872, "campaign.id": 19410069806, "campaign_budget.aligned_bidding_strategy_id": 0, "campaign_budget.amount_micros": 13000000, "campaign_budget.delivery_method": ["STANDARD"], "campaign_budget.explicitly_shared": false, "campaign_budget.has_recommended_budget": true, "campaign_budget.id": 12199001897, "campaign_budget.name": "Brand awareness and reach-Display-1", "campaign_budget.period": ["DAILY"], "campaign_budget.recommended_budget_amount_micros": 45000000, "campaign_budget.recommended_budget_estimated_change_weekly_clicks": 0, "campaign_budget.recommended_budget_estimated_change_weekly_cost_micros": 224000000, "campaign_budget.recommended_budget_estimated_change_weekly_interactions": 414, "campaign_budget.recommended_budget_estimated_change_weekly_views": 0, "campaign_budget.reference_count": 1, "campaign_budget.resource_name": "customers/4651612872/campaignBudgets/12199001897", "campaign_budget.status": ["ENABLED"], "campaign_budget.total_amount_micros": 0, "campaign_budget.type": ["STANDARD"], "segments.date": "2023-08-31", "segments.budget_campaign_association_status.campaign": "customers/4651612872/campaigns/19410069806", "segments.budget_campaign_association_status.status": ["ENABLED"], "metrics.all_conversions": 0.0, "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.average_cost": 546497.65, "metrics.average_cpc": 546497.65, "metrics.average_cpe": 0.0, "metrics.average_cpm": 762998.4642233857, "metrics.average_cpv": 0.0, "metrics.clicks": 20, "metrics.conversions": 0.0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 10929953, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.0013961605584642235, "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "metrics.impressions": 14325, "metrics.interaction_event_types": ["InteractionEventType.CLICK"], "metrics.interaction_rate": 0.0013961605584642235, "metrics.interactions": 20, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0}, "emitted_at": 1695662469433} -{"stream": "campaign_budget", "data": {"customer.id": 4651612872, "campaign.id": 19959839954, "campaign_budget.aligned_bidding_strategy_id": 0, "campaign_budget.amount_micros": 10000000, "campaign_budget.delivery_method": ["STANDARD"], "campaign_budget.explicitly_shared": false, "campaign_budget.has_recommended_budget": false, "campaign_budget.id": 12516167002, "campaign_budget.name": "Performance Max-5", "campaign_budget.period": ["DAILY"], "campaign_budget.recommended_budget_amount_micros": 0, "campaign_budget.recommended_budget_estimated_change_weekly_clicks": 0, "campaign_budget.recommended_budget_estimated_change_weekly_cost_micros": 0, "campaign_budget.recommended_budget_estimated_change_weekly_interactions": 0, "campaign_budget.recommended_budget_estimated_change_weekly_views": 0, "campaign_budget.reference_count": 1, "campaign_budget.resource_name": "customers/4651612872/campaignBudgets/12516167002", "campaign_budget.status": ["ENABLED"], "campaign_budget.total_amount_micros": 0, "campaign_budget.type": ["STANDARD"], "segments.date": "2023-08-31", "segments.budget_campaign_association_status.campaign": "customers/4651612872/campaigns/19959839954", "segments.budget_campaign_association_status.status": ["ENABLED"], "metrics.all_conversions": 0.0, "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.average_cost": 0.0, "metrics.average_cpc": 0.0, "metrics.average_cpe": 0.0, "metrics.average_cpm": 0.0, "metrics.average_cpv": 0.0, "metrics.clicks": 0, "metrics.conversions": 0.0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 0, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.0, "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "metrics.impressions": 1, "metrics.interaction_event_types": [], "metrics.interaction_rate": 0.0, "metrics.interactions": 0, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0}, "emitted_at": 1695662469440} -{"stream": "campaign_budget", "data": {"customer.id": 4651612872, "campaign.id": 19410069806, "campaign_budget.aligned_bidding_strategy_id": 0, "campaign_budget.amount_micros": 13000000, "campaign_budget.delivery_method": ["STANDARD"], "campaign_budget.explicitly_shared": false, "campaign_budget.has_recommended_budget": true, "campaign_budget.id": 12199001897, "campaign_budget.name": "Brand awareness and reach-Display-1", "campaign_budget.period": ["DAILY"], "campaign_budget.recommended_budget_amount_micros": 45000000, "campaign_budget.recommended_budget_estimated_change_weekly_clicks": 0, "campaign_budget.recommended_budget_estimated_change_weekly_cost_micros": 224000000, "campaign_budget.recommended_budget_estimated_change_weekly_interactions": 414, "campaign_budget.recommended_budget_estimated_change_weekly_views": 0, "campaign_budget.reference_count": 1, "campaign_budget.resource_name": "customers/4651612872/campaignBudgets/12199001897", "campaign_budget.status": ["ENABLED"], "campaign_budget.total_amount_micros": 0, "campaign_budget.type": ["STANDARD"], "segments.date": "2023-09-01", "segments.budget_campaign_association_status.campaign": "customers/4651612872/campaigns/19410069806", "segments.budget_campaign_association_status.status": ["ENABLED"], "metrics.all_conversions": 0.0, "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.average_cost": 438040.6, "metrics.average_cpc": 438040.6, "metrics.average_cpe": 0.0, "metrics.average_cpm": 741060.0575198783, "metrics.average_cpv": 0.0, "metrics.clicks": 30, "metrics.conversions": 0.0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 13141218, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.001691761123329386, "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "metrics.impressions": 17733, "metrics.interaction_event_types": ["InteractionEventType.CLICK"], "metrics.interaction_rate": 0.001691761123329386, "metrics.interactions": 30, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0}, "emitted_at": 1695662469445} -{"stream": "campaign_criterion", "data": {"deleted_at": null, "change_status.last_change_date_time": null, "campaign.id": 9660123292, "campaign_criterion.resource_name": "customers/4651612872/campaignCriteria/9660123292~2124", "campaign_criterion.campaign": "customers/4651612872/campaigns/9660123292", "campaign_criterion.age_range.type": "UNSPECIFIED", "campaign_criterion.mobile_application.name": "", "campaign_criterion.negative": false, "campaign_criterion.youtube_channel.channel_id": "", "campaign_criterion.youtube_video.video_id": ""}, "emitted_at": 1695662496915} -{"stream": "campaign_criterion", "data": {"deleted_at": null, "change_status.last_change_date_time": null, "campaign.id": 9660123292, "campaign_criterion.resource_name": "customers/4651612872/campaignCriteria/9660123292~2250", "campaign_criterion.campaign": "customers/4651612872/campaigns/9660123292", "campaign_criterion.age_range.type": "UNSPECIFIED", "campaign_criterion.mobile_application.name": "", "campaign_criterion.negative": false, "campaign_criterion.youtube_channel.channel_id": "", "campaign_criterion.youtube_video.video_id": ""}, "emitted_at": 1695662496917} -{"stream": "campaign_criterion", "data": {"deleted_at": null, "change_status.last_change_date_time": null, "campaign.id": 9660123292, "campaign_criterion.resource_name": "customers/4651612872/campaignCriteria/9660123292~2276", "campaign_criterion.campaign": "customers/4651612872/campaigns/9660123292", "campaign_criterion.age_range.type": "UNSPECIFIED", "campaign_criterion.mobile_application.name": "", "campaign_criterion.negative": false, "campaign_criterion.youtube_channel.channel_id": "", "campaign_criterion.youtube_video.video_id": ""}, "emitted_at": 1695662496919} -{"stream": "campaign_labels", "data": {"campaign.id": 12124071339, "label.id": 21585034471, "campaign.resource_name": "customers/4651612872/campaigns/12124071339", "campaign_label.resource_name": "customers/4651612872/campaignLabels/12124071339~21585034471", "label.name": "edgao-example-label", "label.resource_name": "customers/4651612872/labels/21585034471"}, "emitted_at": 1695662483456} -{"stream": "campaign_labels", "data": {"campaign.id": 13284356762, "label.id": 21585034471, "campaign.resource_name": "customers/4651612872/campaigns/13284356762", "campaign_label.resource_name": "customers/4651612872/campaignLabels/13284356762~21585034471", "label.name": "edgao-example-label", "label.resource_name": "customers/4651612872/labels/21585034471"}, "emitted_at": 1695662483458} -{"stream": "campaign_labels", "data": {"campaign.id": 16820250687, "label.id": 21906377810, "campaign.resource_name": "customers/4651612872/campaigns/16820250687", "campaign_label.resource_name": "customers/4651612872/campaignLabels/16820250687~21906377810", "label.name": "Test Delete label customer", "label.resource_name": "customers/4651612872/labels/21906377810"}, "emitted_at": 1695662483459} -{"stream": "campaigns", "data": {"campaign.accessible_bidding_strategy": "", "campaign.ad_serving_optimization_status": "OPTIMIZE", "campaign.advertising_channel_sub_type": "UNSPECIFIED", "campaign.advertising_channel_type": "DISPLAY", "campaign.app_campaign_setting.app_id": "", "campaign.app_campaign_setting.app_store": "UNSPECIFIED", "campaign.app_campaign_setting.bidding_strategy_goal_type": "UNSPECIFIED", "campaign.base_campaign": "customers/4651612872/campaigns/19410069806", "campaign.bidding_strategy": "", "campaign.bidding_strategy_type": "MANUAL_CPM", "campaign.campaign_budget": "customers/4651612872/campaignBudgets/12199001897", "campaign_budget.amount_micros": 13000000, "campaign.commission.commission_rate_micros": 0, "campaign.dynamic_search_ads_setting.domain_name": "", "campaign.dynamic_search_ads_setting.feeds": [], "campaign.dynamic_search_ads_setting.language_code": "", "campaign.dynamic_search_ads_setting.use_supplied_urls_only": false, "campaign.end_date": "2037-12-30", "campaign.excluded_parent_asset_field_types": [], "campaign.experiment_type": "BASE", "campaign.final_url_suffix": "", "campaign.frequency_caps": [], "campaign.geo_target_type_setting.negative_geo_target_type": "PRESENCE", "campaign.geo_target_type_setting.positive_geo_target_type": "PRESENCE_OR_INTEREST", "campaign.hotel_setting.hotel_center_id": 0, "campaign.id": 19410069806, "campaign.labels": [], "campaign.local_campaign_setting.location_source_type": "UNSPECIFIED", "campaign.manual_cpc.enhanced_cpc_enabled": false, "campaign.manual_cpm": "", "campaign.manual_cpv": "", "campaign.maximize_conversion_value.target_roas": 0.0, "campaign.maximize_conversions.target_cpa_micros": 0, "campaign.name": "Brand awareness and reach-Display-1", "campaign.network_settings.target_content_network": true, "campaign.network_settings.target_google_search": false, "campaign.network_settings.target_partner_search_network": false, "campaign.network_settings.target_search_network": false, "campaign.optimization_goal_setting.optimization_goal_types": [], "campaign.optimization_score": 0.7508164894347842, "campaign.payment_mode": "UNKNOWN", "campaign.percent_cpc.cpc_bid_ceiling_micros": 0, "campaign.percent_cpc.enhanced_cpc_enabled": false, "campaign.real_time_bidding_setting.opt_in": false, "campaign.resource_name": "customers/4651612872/campaigns/19410069806", "campaign.selective_optimization.conversion_actions": [], "campaign.serving_status": "SERVING", "campaign.shopping_setting.campaign_priority": 0, "campaign.shopping_setting.enable_local": false, "campaign.shopping_setting.merchant_id": 0, "campaign.shopping_setting.sales_country": "", "campaign.start_date": "2022-12-28", "campaign.status": "ENABLED", "campaign.target_cpa.cpc_bid_ceiling_micros": 0, "campaign.target_cpa.cpc_bid_floor_micros": 0, "campaign.target_cpa.target_cpa_micros": 0, "campaign.target_cpm.target_frequency_goal.target_count": 0, "campaign.target_cpm.target_frequency_goal.time_unit": "UNSPECIFIED", "campaign.target_impression_share.cpc_bid_ceiling_micros": 0, "campaign.target_impression_share.location": "UNSPECIFIED", "campaign.target_impression_share.location_fraction_micros": 0, "campaign.target_roas.cpc_bid_ceiling_micros": 0, "campaign.target_roas.cpc_bid_floor_micros": 0, "campaign.target_roas.target_roas": 0.0, "campaign.target_spend.cpc_bid_ceiling_micros": 0, "campaign.target_spend.target_spend_micros": 0, "campaign.targeting_setting.target_restrictions": [], "campaign.tracking_setting.tracking_url": "", "campaign.tracking_url_template": "", "campaign.url_custom_parameters": [], "campaign.vanity_pharma.vanity_pharma_display_url_mode": "UNSPECIFIED", "campaign.vanity_pharma.vanity_pharma_text": "UNSPECIFIED", "campaign.video_brand_safety_suitability": "UNSPECIFIED", "metrics.clicks": 1, "metrics.ctr": 0.0013440860215053765, "metrics.conversions": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 514885, "metrics.impressions": 744.0, "metrics.video_views": 0.0, "metrics.video_quartile_p100_rate": 0.0, "metrics.active_view_cpm": 762792.5925925926, "metrics.active_view_ctr": 0.0014814814814814814, "metrics.active_view_impressions": 675, "metrics.active_view_measurability": 1.0, "metrics.active_view_measurable_cost_micros": 514885, "metrics.active_view_measurable_impressions": 744, "metrics.active_view_viewability": 0.907258064516129, "metrics.average_cost": 514885.0, "metrics.average_cpc": 514885.0, "metrics.average_cpm": 692049.7311827956, "metrics.interactions": 1, "metrics.interaction_event_types": "['InteractionEventType.CLICK']", "metrics.value_per_conversion": 0.0, "metrics.cost_per_conversion": 0.0, "segments.date": "2023-08-31", "segments.hour": 0.0, "segments.ad_network_type": "CONTENT"}, "emitted_at": 1695662482766} -{"stream": "campaigns", "data": {"campaign.accessible_bidding_strategy": "", "campaign.ad_serving_optimization_status": "OPTIMIZE", "campaign.advertising_channel_sub_type": "UNSPECIFIED", "campaign.advertising_channel_type": "DISPLAY", "campaign.app_campaign_setting.app_id": "", "campaign.app_campaign_setting.app_store": "UNSPECIFIED", "campaign.app_campaign_setting.bidding_strategy_goal_type": "UNSPECIFIED", "campaign.base_campaign": "customers/4651612872/campaigns/19410069806", "campaign.bidding_strategy": "", "campaign.bidding_strategy_type": "MANUAL_CPM", "campaign.campaign_budget": "customers/4651612872/campaignBudgets/12199001897", "campaign_budget.amount_micros": 13000000, "campaign.commission.commission_rate_micros": 0, "campaign.dynamic_search_ads_setting.domain_name": "", "campaign.dynamic_search_ads_setting.feeds": [], "campaign.dynamic_search_ads_setting.language_code": "", "campaign.dynamic_search_ads_setting.use_supplied_urls_only": false, "campaign.end_date": "2037-12-30", "campaign.excluded_parent_asset_field_types": [], "campaign.experiment_type": "BASE", "campaign.final_url_suffix": "", "campaign.frequency_caps": [], "campaign.geo_target_type_setting.negative_geo_target_type": "PRESENCE", "campaign.geo_target_type_setting.positive_geo_target_type": "PRESENCE_OR_INTEREST", "campaign.hotel_setting.hotel_center_id": 0, "campaign.id": 19410069806, "campaign.labels": [], "campaign.local_campaign_setting.location_source_type": "UNSPECIFIED", "campaign.manual_cpc.enhanced_cpc_enabled": false, "campaign.manual_cpm": "", "campaign.manual_cpv": "", "campaign.maximize_conversion_value.target_roas": 0.0, "campaign.maximize_conversions.target_cpa_micros": 0, "campaign.name": "Brand awareness and reach-Display-1", "campaign.network_settings.target_content_network": true, "campaign.network_settings.target_google_search": false, "campaign.network_settings.target_partner_search_network": false, "campaign.network_settings.target_search_network": false, "campaign.optimization_goal_setting.optimization_goal_types": [], "campaign.optimization_score": 0.7508164894347842, "campaign.payment_mode": "UNKNOWN", "campaign.percent_cpc.cpc_bid_ceiling_micros": 0, "campaign.percent_cpc.enhanced_cpc_enabled": false, "campaign.real_time_bidding_setting.opt_in": false, "campaign.resource_name": "customers/4651612872/campaigns/19410069806", "campaign.selective_optimization.conversion_actions": [], "campaign.serving_status": "SERVING", "campaign.shopping_setting.campaign_priority": 0, "campaign.shopping_setting.enable_local": false, "campaign.shopping_setting.merchant_id": 0, "campaign.shopping_setting.sales_country": "", "campaign.start_date": "2022-12-28", "campaign.status": "ENABLED", "campaign.target_cpa.cpc_bid_ceiling_micros": 0, "campaign.target_cpa.cpc_bid_floor_micros": 0, "campaign.target_cpa.target_cpa_micros": 0, "campaign.target_cpm.target_frequency_goal.target_count": 0, "campaign.target_cpm.target_frequency_goal.time_unit": "UNSPECIFIED", "campaign.target_impression_share.cpc_bid_ceiling_micros": 0, "campaign.target_impression_share.location": "UNSPECIFIED", "campaign.target_impression_share.location_fraction_micros": 0, "campaign.target_roas.cpc_bid_ceiling_micros": 0, "campaign.target_roas.cpc_bid_floor_micros": 0, "campaign.target_roas.target_roas": 0.0, "campaign.target_spend.cpc_bid_ceiling_micros": 0, "campaign.target_spend.target_spend_micros": 0, "campaign.targeting_setting.target_restrictions": [], "campaign.tracking_setting.tracking_url": "", "campaign.tracking_url_template": "", "campaign.url_custom_parameters": [], "campaign.vanity_pharma.vanity_pharma_display_url_mode": "UNSPECIFIED", "campaign.vanity_pharma.vanity_pharma_text": "UNSPECIFIED", "campaign.video_brand_safety_suitability": "UNSPECIFIED", "metrics.clicks": 0, "metrics.ctr": 0.0, "metrics.conversions": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 646461, "metrics.impressions": 916.0, "metrics.video_views": 0.0, "metrics.video_quartile_p100_rate": 0.0, "metrics.active_view_cpm": 753451.048951049, "metrics.active_view_ctr": 0.0, "metrics.active_view_impressions": 858, "metrics.active_view_measurability": 1.0, "metrics.active_view_measurable_cost_micros": 646461, "metrics.active_view_measurable_impressions": 916, "metrics.active_view_viewability": 0.9366812227074236, "metrics.average_cost": 0.0, "metrics.average_cpc": 0.0, "metrics.average_cpm": 705743.4497816594, "metrics.interactions": 0, "metrics.interaction_event_types": "[]", "metrics.value_per_conversion": 0.0, "metrics.cost_per_conversion": 0.0, "segments.date": "2023-08-31", "segments.hour": 1.0, "segments.ad_network_type": "CONTENT"}, "emitted_at": 1695662482770} -{"stream": "campaigns", "data": {"campaign.accessible_bidding_strategy": "", "campaign.ad_serving_optimization_status": "OPTIMIZE", "campaign.advertising_channel_sub_type": "UNSPECIFIED", "campaign.advertising_channel_type": "DISPLAY", "campaign.app_campaign_setting.app_id": "", "campaign.app_campaign_setting.app_store": "UNSPECIFIED", "campaign.app_campaign_setting.bidding_strategy_goal_type": "UNSPECIFIED", "campaign.base_campaign": "customers/4651612872/campaigns/19410069806", "campaign.bidding_strategy": "", "campaign.bidding_strategy_type": "MANUAL_CPM", "campaign.campaign_budget": "customers/4651612872/campaignBudgets/12199001897", "campaign_budget.amount_micros": 13000000, "campaign.commission.commission_rate_micros": 0, "campaign.dynamic_search_ads_setting.domain_name": "", "campaign.dynamic_search_ads_setting.feeds": [], "campaign.dynamic_search_ads_setting.language_code": "", "campaign.dynamic_search_ads_setting.use_supplied_urls_only": false, "campaign.end_date": "2037-12-30", "campaign.excluded_parent_asset_field_types": [], "campaign.experiment_type": "BASE", "campaign.final_url_suffix": "", "campaign.frequency_caps": [], "campaign.geo_target_type_setting.negative_geo_target_type": "PRESENCE", "campaign.geo_target_type_setting.positive_geo_target_type": "PRESENCE_OR_INTEREST", "campaign.hotel_setting.hotel_center_id": 0, "campaign.id": 19410069806, "campaign.labels": [], "campaign.local_campaign_setting.location_source_type": "UNSPECIFIED", "campaign.manual_cpc.enhanced_cpc_enabled": false, "campaign.manual_cpm": "", "campaign.manual_cpv": "", "campaign.maximize_conversion_value.target_roas": 0.0, "campaign.maximize_conversions.target_cpa_micros": 0, "campaign.name": "Brand awareness and reach-Display-1", "campaign.network_settings.target_content_network": true, "campaign.network_settings.target_google_search": false, "campaign.network_settings.target_partner_search_network": false, "campaign.network_settings.target_search_network": false, "campaign.optimization_goal_setting.optimization_goal_types": [], "campaign.optimization_score": 0.7508164894347842, "campaign.payment_mode": "UNKNOWN", "campaign.percent_cpc.cpc_bid_ceiling_micros": 0, "campaign.percent_cpc.enhanced_cpc_enabled": false, "campaign.real_time_bidding_setting.opt_in": false, "campaign.resource_name": "customers/4651612872/campaigns/19410069806", "campaign.selective_optimization.conversion_actions": [], "campaign.serving_status": "SERVING", "campaign.shopping_setting.campaign_priority": 0, "campaign.shopping_setting.enable_local": false, "campaign.shopping_setting.merchant_id": 0, "campaign.shopping_setting.sales_country": "", "campaign.start_date": "2022-12-28", "campaign.status": "ENABLED", "campaign.target_cpa.cpc_bid_ceiling_micros": 0, "campaign.target_cpa.cpc_bid_floor_micros": 0, "campaign.target_cpa.target_cpa_micros": 0, "campaign.target_cpm.target_frequency_goal.target_count": 0, "campaign.target_cpm.target_frequency_goal.time_unit": "UNSPECIFIED", "campaign.target_impression_share.cpc_bid_ceiling_micros": 0, "campaign.target_impression_share.location": "UNSPECIFIED", "campaign.target_impression_share.location_fraction_micros": 0, "campaign.target_roas.cpc_bid_ceiling_micros": 0, "campaign.target_roas.cpc_bid_floor_micros": 0, "campaign.target_roas.target_roas": 0.0, "campaign.target_spend.cpc_bid_ceiling_micros": 0, "campaign.target_spend.target_spend_micros": 0, "campaign.targeting_setting.target_restrictions": [], "campaign.tracking_setting.tracking_url": "", "campaign.tracking_url_template": "", "campaign.url_custom_parameters": [], "campaign.vanity_pharma.vanity_pharma_display_url_mode": "UNSPECIFIED", "campaign.vanity_pharma.vanity_pharma_text": "UNSPECIFIED", "campaign.video_brand_safety_suitability": "UNSPECIFIED", "metrics.clicks": 1, "metrics.ctr": 0.0009746588693957114, "metrics.conversions": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 720408, "metrics.impressions": 1026.0, "metrics.video_views": 0.0, "metrics.video_quartile_p100_rate": 0.0, "metrics.active_view_cpm": 759924.0506329114, "metrics.active_view_ctr": 0.0010548523206751054, "metrics.active_view_impressions": 948, "metrics.active_view_measurability": 1.0, "metrics.active_view_measurable_cost_micros": 720408, "metrics.active_view_measurable_impressions": 1026, "metrics.active_view_viewability": 0.9239766081871345, "metrics.average_cost": 720408.0, "metrics.average_cpc": 720408.0, "metrics.average_cpm": 702152.0467836257, "metrics.interactions": 1, "metrics.interaction_event_types": "['InteractionEventType.CLICK']", "metrics.value_per_conversion": 0.0, "metrics.cost_per_conversion": 0.0, "segments.date": "2023-08-31", "segments.hour": 2.0, "segments.ad_network_type": "CONTENT"}, "emitted_at": 1695662482772} -{"stream": "click_view", "data": {"ad_group.name": "Ad group 1", "click_view.gclid": "Cj0KCQjw9MCnBhCYARIsAB1WQVUIRLTdkamVscRiXquP1eII_RaEdkhIWLZH-4pheDHLztk14iU0q6AaAnAqEALw_wcB", "click_view.ad_group_ad": "customers/4651612872/adGroupAds/144799120517~643022056303", "click_view.keyword": "", "click_view.keyword_info.match_type": "UNSPECIFIED", "click_view.keyword_info.text": "", "campaign.id": 19410069806, "ad_group.id": 144799120517, "segments.date": "2023-08-31", "customer.id": 4651612872, "campaign.name": "Brand awareness and reach-Display-1", "segments.ad_network_type": "CONTENT", "campaign.network_settings.target_content_network": true, "campaign.network_settings.target_google_search": false, "campaign.network_settings.target_partner_search_network": false, "campaign.network_settings.target_search_network": false}, "emitted_at": 1695662471713} -{"stream": "click_view", "data": {"ad_group.name": "Ad group 1", "click_view.gclid": "Cj0KCQjw9MCnBhCYARIsAB1WQVUW_kB70LlXrJjshH0iPvI55YQpnWPqPBbZiyCyh3XThG84yXubRJQaArTeEALw_wcB", "click_view.ad_group_ad": "customers/4651612872/adGroupAds/144799120517~643022056303", "click_view.keyword": "", "click_view.keyword_info.match_type": "UNSPECIFIED", "click_view.keyword_info.text": "", "campaign.id": 19410069806, "ad_group.id": 144799120517, "segments.date": "2023-08-31", "customer.id": 4651612872, "campaign.name": "Brand awareness and reach-Display-1", "segments.ad_network_type": "CONTENT", "campaign.network_settings.target_content_network": true, "campaign.network_settings.target_google_search": false, "campaign.network_settings.target_partner_search_network": false, "campaign.network_settings.target_search_network": false}, "emitted_at": 1695662471716} -{"stream": "click_view", "data": {"ad_group.name": "Ad group 1", "click_view.gclid": "Cj0KCQjw9MCnBhCYARIsAB1WQVVEPTT3Df-dDQUH5AFq2jb7BFWVIF1iouyQLuBlmdZOW2jlPn51t8waAn4UEALw_wcB", "click_view.ad_group_ad": "customers/4651612872/adGroupAds/144799120517~643022056303", "click_view.keyword": "", "click_view.keyword_info.match_type": "UNSPECIFIED", "click_view.keyword_info.text": "", "campaign.id": 19410069806, "ad_group.id": 144799120517, "segments.date": "2023-08-31", "customer.id": 4651612872, "campaign.name": "Brand awareness and reach-Display-1", "segments.ad_network_type": "CONTENT", "campaign.network_settings.target_content_network": true, "campaign.network_settings.target_google_search": false, "campaign.network_settings.target_partner_search_network": false, "campaign.network_settings.target_search_network": false}, "emitted_at": 1695662471718} -{"stream": "custom_audience", "data": {"custom_audience.description": "", "custom_audience.name": "Airbyet", "custom_audience.id": 523469909, "custom_audience.members": ["member_type: KEYWORD\nkeyword: \"etl elt\"\n", "member_type: KEYWORD\nkeyword: \"cloud data management and analytics\"\n", "member_type: KEYWORD\nkeyword: \"data integration\"\n", "member_type: KEYWORD\nkeyword: \"big data analytics database\"\n", "member_type: KEYWORD\nkeyword: \"data\"\n", "member_type: KEYWORD\nkeyword: \"data sherid nada\"\n", "member_type: KEYWORD\nkeyword: \"airbyteforeveryone\"\n", "member_type: KEYWORD\nkeyword: \"Airbyte\"\n"], "custom_audience.resource_name": "customers/4651612872/customAudiences/523469909", "custom_audience.status": "ENABLED", "custom_audience.type": "AUTO"}, "emitted_at": 1695662487345} -{"stream": "display_topics_performance_report", "data": {"topic_view.resource_name": "customers/4651612872/topicViews/144799120517~945751797", "customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "metrics.active_view_cpm": 443457.14285714284, "metrics.active_view_ctr": 0.0, "metrics.active_view_impressions": 35, "metrics.active_view_measurability": 1.0, "metrics.active_view_measurable_cost_micros": 15521, "metrics.active_view_measurable_impressions": 44, "metrics.active_view_viewability": 0.7954545454545454, "ad_group.id": 144799120517, "ad_group.name": "Ad group 1", "ad_group.status": "ENABLED", "segments.ad_network_type": "CONTENT", "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.all_conversions": 0.0, "metrics.average_cost": 0.0, "metrics.average_cpc": 0.0, "metrics.average_cpe": 0.0, "metrics.average_cpm": 352750.0, "metrics.average_cpv": 0.0, "ad_group.base_ad_group": "customers/4651612872/adGroups/144799120517", "campaign.base_campaign": "customers/4651612872/campaigns/19410069806", "ad_group_criterion.bid_modifier": 0.0, "campaign.bidding_strategy": "", "campaign.bidding_strategy_type": "MANUAL_CPM", "campaign.id": 19410069806, "campaign.name": "Brand awareness and reach-Display-1", "campaign.status": "ENABLED", "metrics.clicks": 0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.conversions": 0.0, "metrics.cost_micros": 15521, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "ad_group_criterion.effective_cpc_bid_micros": 10000, "ad_group_criterion.effective_cpc_bid_source": "AD_GROUP", "ad_group_criterion.effective_cpm_bid_micros": 2000000, "ad_group_criterion.effective_cpm_bid_source": "AD_GROUP", "ad_group_criterion.topic.path": ["", "Online Communities"], "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.0, "segments.date": "2023-08-31", "segments.day_of_week": "THURSDAY", "segments.device": "DESKTOP", "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "customer.id": 4651612872, "ad_group_criterion.final_mobile_urls": [], "ad_group_criterion.final_urls": [], "metrics.gmail_forwards": 0, "metrics.gmail_saves": 0, "metrics.gmail_secondary_clicks": 0, "ad_group_criterion.criterion_id": 945751797, "metrics.impressions": 44, "metrics.interaction_rate": 0.0, "metrics.interaction_event_types": [], "metrics.interactions": 0, "ad_group_criterion.negative": false, "ad_group.targeting_setting.target_restrictions": ["targeting_dimension: AGE_RANGE\nbid_only: true\n", "targeting_dimension: GENDER\nbid_only: true\n", "targeting_dimension: PARENTAL_STATUS\nbid_only: true\n", "targeting_dimension: INCOME_RANGE\nbid_only: true\n", "targeting_dimension: TOPIC\nbid_only: true\n"], "segments.month": "2023-08-01", "segments.quarter": "2023-07-01", "ad_group_criterion.status": "ENABLED", "ad_group_criterion.tracking_url_template": "", "ad_group_criterion.url_custom_parameters": [], "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "ad_group_criterion.topic.topic_constant": "topicConstants/299", "metrics.video_quartile_p100_rate": 0.0, "metrics.video_quartile_p25_rate": 0.0, "metrics.video_quartile_p50_rate": 0.0, "metrics.video_quartile_p75_rate": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0, "segments.week": "2023-08-28", "segments.year": 2023}, "emitted_at": 1695662476660} -{"stream": "display_topics_performance_report", "data": {"topic_view.resource_name": "customers/4651612872/topicViews/144799120517~1543464477", "customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "metrics.active_view_cpm": 422666.6666666667, "metrics.active_view_ctr": 0.0, "metrics.active_view_impressions": 3, "metrics.active_view_measurability": 1.0, "metrics.active_view_measurable_cost_micros": 1268, "metrics.active_view_measurable_impressions": 11, "metrics.active_view_viewability": 0.2727272727272727, "ad_group.id": 144799120517, "ad_group.name": "Ad group 1", "ad_group.status": "ENABLED", "segments.ad_network_type": "CONTENT", "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.all_conversions": 0.0, "metrics.average_cost": 0.0, "metrics.average_cpc": 0.0, "metrics.average_cpe": 0.0, "metrics.average_cpm": 115272.72727272726, "metrics.average_cpv": 0.0, "ad_group.base_ad_group": "customers/4651612872/adGroups/144799120517", "campaign.base_campaign": "customers/4651612872/campaigns/19410069806", "ad_group_criterion.bid_modifier": 0.0, "campaign.bidding_strategy": "", "campaign.bidding_strategy_type": "MANUAL_CPM", "campaign.id": 19410069806, "campaign.name": "Brand awareness and reach-Display-1", "campaign.status": "ENABLED", "metrics.clicks": 0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.conversions": 0.0, "metrics.cost_micros": 1268, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "ad_group_criterion.effective_cpc_bid_micros": 10000, "ad_group_criterion.effective_cpc_bid_source": "AD_GROUP", "ad_group_criterion.effective_cpm_bid_micros": 2000000, "ad_group_criterion.effective_cpm_bid_source": "AD_GROUP", "ad_group_criterion.topic.path": ["", "Shopping"], "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.0, "segments.date": "2023-08-31", "segments.day_of_week": "THURSDAY", "segments.device": "DESKTOP", "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "customer.id": 4651612872, "ad_group_criterion.final_mobile_urls": [], "ad_group_criterion.final_urls": [], "metrics.gmail_forwards": 0, "metrics.gmail_saves": 0, "metrics.gmail_secondary_clicks": 0, "ad_group_criterion.criterion_id": 1543464477, "metrics.impressions": 11, "metrics.interaction_rate": 0.0, "metrics.interaction_event_types": [], "metrics.interactions": 0, "ad_group_criterion.negative": false, "ad_group.targeting_setting.target_restrictions": ["targeting_dimension: AGE_RANGE\nbid_only: true\n", "targeting_dimension: GENDER\nbid_only: true\n", "targeting_dimension: PARENTAL_STATUS\nbid_only: true\n", "targeting_dimension: INCOME_RANGE\nbid_only: true\n", "targeting_dimension: TOPIC\nbid_only: true\n"], "segments.month": "2023-08-01", "segments.quarter": "2023-07-01", "ad_group_criterion.status": "ENABLED", "ad_group_criterion.tracking_url_template": "", "ad_group_criterion.url_custom_parameters": [], "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "ad_group_criterion.topic.topic_constant": "topicConstants/18", "metrics.video_quartile_p100_rate": 0.0, "metrics.video_quartile_p25_rate": 0.0, "metrics.video_quartile_p50_rate": 0.0, "metrics.video_quartile_p75_rate": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0, "segments.week": "2023-08-28", "segments.year": 2023}, "emitted_at": 1695662476662} -{"stream": "display_topics_performance_report", "data": {"topic_view.resource_name": "customers/4651612872/topicViews/144799120517~1543465137", "customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "metrics.active_view_cpm": 312102.08816705336, "metrics.active_view_ctr": 0.002320185614849188, "metrics.active_view_impressions": 431, "metrics.active_view_measurability": 1.0, "metrics.active_view_measurable_cost_micros": 134516, "metrics.active_view_measurable_impressions": 509, "metrics.active_view_viewability": 0.8467583497053045, "ad_group.id": 144799120517, "ad_group.name": "Ad group 1", "ad_group.status": "ENABLED", "segments.ad_network_type": "CONTENT", "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.all_conversions": 0.0, "metrics.average_cost": 134516.0, "metrics.average_cpc": 134516.0, "metrics.average_cpe": 0.0, "metrics.average_cpm": 264275.0491159135, "metrics.average_cpv": 0.0, "ad_group.base_ad_group": "customers/4651612872/adGroups/144799120517", "campaign.base_campaign": "customers/4651612872/campaigns/19410069806", "ad_group_criterion.bid_modifier": 0.0, "campaign.bidding_strategy": "", "campaign.bidding_strategy_type": "MANUAL_CPM", "campaign.id": 19410069806, "campaign.name": "Brand awareness and reach-Display-1", "campaign.status": "ENABLED", "metrics.clicks": 1, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.conversions": 0.0, "metrics.cost_micros": 134516, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "ad_group_criterion.effective_cpc_bid_micros": 10000, "ad_group_criterion.effective_cpc_bid_source": "AD_GROUP", "ad_group_criterion.effective_cpm_bid_micros": 2000000, "ad_group_criterion.effective_cpm_bid_source": "AD_GROUP", "ad_group_criterion.topic.path": ["", "Arts & Entertainment"], "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.0019646365422396855, "segments.date": "2023-08-31", "segments.day_of_week": "THURSDAY", "segments.device": "DESKTOP", "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "customer.id": 4651612872, "ad_group_criterion.final_mobile_urls": [], "ad_group_criterion.final_urls": [], "metrics.gmail_forwards": 0, "metrics.gmail_saves": 0, "metrics.gmail_secondary_clicks": 0, "ad_group_criterion.criterion_id": 1543465137, "metrics.impressions": 509, "metrics.interaction_rate": 0.0019646365422396855, "metrics.interaction_event_types": ["InteractionEventType.CLICK"], "metrics.interactions": 1, "ad_group_criterion.negative": false, "ad_group.targeting_setting.target_restrictions": ["targeting_dimension: AGE_RANGE\nbid_only: true\n", "targeting_dimension: GENDER\nbid_only: true\n", "targeting_dimension: PARENTAL_STATUS\nbid_only: true\n", "targeting_dimension: INCOME_RANGE\nbid_only: true\n", "targeting_dimension: TOPIC\nbid_only: true\n"], "segments.month": "2023-08-01", "segments.quarter": "2023-07-01", "ad_group_criterion.status": "ENABLED", "ad_group_criterion.tracking_url_template": "", "ad_group_criterion.url_custom_parameters": [], "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "ad_group_criterion.topic.topic_constant": "topicConstants/3", "metrics.video_quartile_p100_rate": 0.0, "metrics.video_quartile_p25_rate": 0.0, "metrics.video_quartile_p50_rate": 0.0, "metrics.video_quartile_p75_rate": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0, "segments.week": "2023-08-28", "segments.year": 2023}, "emitted_at": 1695662476664} -{"stream": "geographic_report", "data": {"customer.id": 4651612872, "customer.descriptive_name": "Airbyte", "geographic_view.country_criterion_id": 2410, "geographic_view.location_type": "AREA_OF_INTEREST", "ad_group.id": 144799120517, "segments.date": "2023-08-31"}, "emitted_at": 1695662473932} -{"stream": "geographic_report", "data": {"customer.id": 4651612872, "customer.descriptive_name": "Airbyte", "geographic_view.country_criterion_id": 2410, "geographic_view.location_type": "LOCATION_OF_PRESENCE", "ad_group.id": 144799120517, "segments.date": "2023-08-31"}, "emitted_at": 1695662473934} -{"stream": "geographic_report", "data": {"customer.id": 4651612872, "customer.descriptive_name": "Airbyte", "geographic_view.country_criterion_id": 2410, "geographic_view.location_type": "AREA_OF_INTEREST", "ad_group.id": 144799120517, "segments.date": "2023-09-01"}, "emitted_at": 1695662473935} -{"stream": "happytable", "data": {"campaign.accessible_bidding_strategy": "", "segments.ad_destination_type": "NOT_APPLICABLE", "campaign.start_date": "2022-12-28", "campaign.end_date": "2037-12-30", "segments.date": "2023-08-31"}, "emitted_at": 1695662486427} -{"stream": "happytable", "data": {"campaign.accessible_bidding_strategy": "", "segments.ad_destination_type": "NOT_APPLICABLE", "campaign.start_date": "2023-04-10", "campaign.end_date": "2037-12-30", "segments.date": "2023-08-31"}, "emitted_at": 1695662486429} -{"stream": "happytable", "data": {"campaign.accessible_bidding_strategy": "", "segments.ad_destination_type": "NOT_APPLICABLE", "campaign.start_date": "2022-12-28", "campaign.end_date": "2037-12-30", "segments.date": "2023-09-01"}, "emitted_at": 1695662486430} -{"stream": "labels", "data": {"customer.id": 4651612872, "label.id": 21585034471, "label.name": "edgao-example-label", "label.resource_name": "customers/4651612872/labels/21585034471", "label.status": "ENABLED", "label.text_label.background_color": "#E993EB", "label.text_label.description": "example label for edgao"}, "emitted_at": 1695662492676} -{"stream": "labels", "data": {"customer.id": 4651612872, "label.id": 21902092838, "label.name": "Test Label", "label.resource_name": "customers/4651612872/labels/21902092838", "label.status": "ENABLED", "label.text_label.background_color": "#8BCBD2", "label.text_label.description": "Description to test label"}, "emitted_at": 1695662492677} -{"stream": "labels", "data": {"customer.id": 4651612872, "label.id": 21906377810, "label.name": "Test Delete label customer", "label.resource_name": "customers/4651612872/labels/21906377810", "label.status": "ENABLED", "label.text_label.background_color": "#8266C9", "label.text_label.description": ""}, "emitted_at": 1695662492677} -{"stream": "user_interest", "data": {"user_interest.availabilities": [], "user_interest.launched_to_all": true, "user_interest.name": "Arts & Entertainment", "user_interest.resource_name": "customers/4651612872/userInterests/3", "user_interest.taxonomy_type": "VERTICAL_GEO", "user_interest.user_interest_id": 3, "user_interest.user_interest_parent": ""}, "emitted_at": 1695662489523} -{"stream": "user_interest", "data": {"user_interest.availabilities": [], "user_interest.launched_to_all": true, "user_interest.name": "Computers & Electronics", "user_interest.resource_name": "customers/4651612872/userInterests/5", "user_interest.taxonomy_type": "VERTICAL_GEO", "user_interest.user_interest_id": 5, "user_interest.user_interest_parent": ""}, "emitted_at": 1695662489523} -{"stream": "user_interest", "data": {"user_interest.availabilities": [], "user_interest.launched_to_all": true, "user_interest.name": "Finance", "user_interest.resource_name": "customers/4651612872/userInterests/7", "user_interest.taxonomy_type": "VERTICAL_GEO", "user_interest.user_interest_id": 7, "user_interest.user_interest_parent": ""}, "emitted_at": 1695662489523} -{"stream": "user_location_report", "data": {"segments.date": "2023-08-31", "segments.day_of_week": "THURSDAY", "segments.month": "2023-08-01", "segments.week": "2023-08-28", "segments.quarter": "2023-07-01", "segments.year": 2023, "segments.ad_network_type": "CONTENT", "customer.currency_code": "USD", "customer.id": 4651612872, "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "user_location_view.country_criterion_id": 2040, "user_location_view.targeting_location": false, "user_location_view.resource_name": "customers/4651612872/userLocationViews/2040~false", "campaign.base_campaign": "customers/4651612872/campaigns/19410069806", "campaign.id": 19410069806, "campaign.name": "Brand awareness and reach-Display-1", "campaign.status": "ENABLED", "ad_group.name": "Ad group 1", "ad_group.status": "ENABLED", "ad_group.base_ad_group": "customers/4651612872/adGroups/144799120517", "metrics.all_conversions": 0.0, "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.average_cost": 0.0, "metrics.average_cpc": 0.0, "metrics.average_cpm": 69333.33333333333, "metrics.average_cpv": 0.0, "metrics.clicks": 0, "metrics.conversions": 0.0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 208, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.0, "metrics.impressions": 3, "metrics.interaction_event_types": [], "metrics.interaction_rate": 0.0, "metrics.interactions": 0, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0}, "emitted_at": 1695662485409} -{"stream": "user_location_report", "data": {"segments.date": "2023-08-31", "segments.day_of_week": "THURSDAY", "segments.month": "2023-08-01", "segments.week": "2023-08-28", "segments.quarter": "2023-07-01", "segments.year": 2023, "segments.ad_network_type": "CONTENT", "customer.currency_code": "USD", "customer.id": 4651612872, "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "user_location_view.country_criterion_id": 2124, "user_location_view.targeting_location": false, "user_location_view.resource_name": "customers/4651612872/userLocationViews/2124~false", "campaign.base_campaign": "customers/4651612872/campaigns/19410069806", "campaign.id": 19410069806, "campaign.name": "Brand awareness and reach-Display-1", "campaign.status": "ENABLED", "ad_group.name": "Ad group 1", "ad_group.status": "ENABLED", "ad_group.base_ad_group": "customers/4651612872/adGroups/144799120517", "metrics.all_conversions": 0.0, "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.average_cost": 0.0, "metrics.average_cpc": 0.0, "metrics.average_cpm": 0.0, "metrics.average_cpv": 0.0, "metrics.clicks": 0, "metrics.conversions": 0.0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 0, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.0, "metrics.impressions": 1, "metrics.interaction_event_types": [], "metrics.interaction_rate": 0.0, "metrics.interactions": 0, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0}, "emitted_at": 1695662485414} -{"stream": "user_location_report", "data": {"segments.date": "2023-08-31", "segments.day_of_week": "THURSDAY", "segments.month": "2023-08-01", "segments.week": "2023-08-28", "segments.quarter": "2023-07-01", "segments.year": 2023, "segments.ad_network_type": "CONTENT", "customer.currency_code": "USD", "customer.id": 4651612872, "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "user_location_view.country_criterion_id": 2344, "user_location_view.targeting_location": false, "user_location_view.resource_name": "customers/4651612872/userLocationViews/2344~false", "campaign.base_campaign": "customers/4651612872/campaigns/19410069806", "campaign.id": 19410069806, "campaign.name": "Brand awareness and reach-Display-1", "campaign.status": "ENABLED", "ad_group.name": "Ad group 1", "ad_group.status": "ENABLED", "ad_group.base_ad_group": "customers/4651612872/adGroups/144799120517", "metrics.all_conversions": 0.0, "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.average_cost": 0.0, "metrics.average_cpc": 0.0, "metrics.average_cpm": 612683.3333333333, "metrics.average_cpv": 0.0, "metrics.clicks": 0, "metrics.conversions": 0.0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 36761, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.0, "metrics.impressions": 60, "metrics.interaction_event_types": [], "metrics.interaction_rate": 0.0, "metrics.interactions": 0, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0}, "emitted_at": 1695662485417} +{"stream": "ad_group_ads", "data": {"ad_group.id": 144799120517, "ad_group_ad.ad.added_by_google_ads": false, "ad_group_ad.ad.app_ad.descriptions": [], "ad_group_ad.ad.app_ad.headlines": [], "ad_group_ad.ad.app_ad.html5_media_bundles": [], "ad_group_ad.ad.app_ad.images": [], "ad_group_ad.ad.app_ad.mandatory_ad_text": "", "ad_group_ad.ad.app_ad.youtube_videos": [], "ad_group_ad.ad.app_engagement_ad.descriptions": [], "ad_group_ad.ad.app_engagement_ad.headlines": [], "ad_group_ad.ad.app_engagement_ad.images": [], "ad_group_ad.ad.app_engagement_ad.videos": [], "ad_group_ad.ad.call_ad.business_name": "", "ad_group_ad.ad.call_ad.call_tracked": false, "ad_group_ad.ad.call_ad.conversion_action": "", "ad_group_ad.ad.call_ad.conversion_reporting_state": "UNSPECIFIED", "ad_group_ad.ad.call_ad.country_code": "", "ad_group_ad.ad.call_ad.description1": "", "ad_group_ad.ad.call_ad.description2": "", "ad_group_ad.ad.call_ad.disable_call_conversion": false, "ad_group_ad.ad.call_ad.headline1": "", "ad_group_ad.ad.call_ad.headline2": "", "ad_group_ad.ad.call_ad.path1": "", "ad_group_ad.ad.call_ad.path2": "", "ad_group_ad.ad.call_ad.phone_number": "", "ad_group_ad.ad.call_ad.phone_number_verification_url": "", "ad_group_ad.ad.device_preference": "UNSPECIFIED", "ad_group_ad.ad.display_upload_ad.display_upload_product_type": "UNSPECIFIED", "ad_group_ad.ad.display_upload_ad.media_bundle": "", "ad_group_ad.ad.display_url": "", "ad_group_ad.ad.expanded_dynamic_search_ad.description": "", "ad_group_ad.ad.expanded_dynamic_search_ad.description2": "", "ad_group_ad.ad.expanded_text_ad.description": "", "ad_group_ad.ad.expanded_text_ad.description2": "", "ad_group_ad.ad.expanded_text_ad.headline_part1": "", "ad_group_ad.ad.expanded_text_ad.headline_part2": "", "ad_group_ad.ad.expanded_text_ad.headline_part3": "", "ad_group_ad.ad.expanded_text_ad.path1": "", "ad_group_ad.ad.expanded_text_ad.path2": "", "ad_group_ad.ad.final_app_urls": [], "ad_group_ad.ad.final_mobile_urls": [], "ad_group_ad.ad.final_url_suffix": "", "ad_group_ad.ad.final_urls": ["https://airbyte.com"], "ad_group_ad.ad.hotel_ad": "", "ad_group_ad.ad.id": 643022056303, "ad_group_ad.ad.image_ad.image_url": "", "ad_group_ad.ad.image_ad.mime_type": "UNSPECIFIED", "ad_group_ad.ad.image_ad.name": "", "ad_group_ad.ad.image_ad.pixel_height": 0, "ad_group_ad.ad.image_ad.pixel_width": 0, "ad_group_ad.ad.image_ad.preview_image_url": "", "ad_group_ad.ad.image_ad.preview_pixel_height": 0, "ad_group_ad.ad.image_ad.preview_pixel_width": 0, "ad_group_ad.ad.legacy_app_install_ad": "", "ad_group_ad.ad.legacy_responsive_display_ad.accent_color": "", "ad_group_ad.ad.legacy_responsive_display_ad.allow_flexible_color": false, "ad_group_ad.ad.legacy_responsive_display_ad.business_name": "", "ad_group_ad.ad.legacy_responsive_display_ad.call_to_action_text": "", "ad_group_ad.ad.legacy_responsive_display_ad.description": "", "ad_group_ad.ad.legacy_responsive_display_ad.format_setting": "UNSPECIFIED", "ad_group_ad.ad.legacy_responsive_display_ad.logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.long_headline": "", "ad_group_ad.ad.legacy_responsive_display_ad.main_color": "", "ad_group_ad.ad.legacy_responsive_display_ad.marketing_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.price_prefix": "", "ad_group_ad.ad.legacy_responsive_display_ad.promo_text": "", "ad_group_ad.ad.legacy_responsive_display_ad.short_headline": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_marketing_image": "", "ad_group_ad.ad.local_ad.call_to_actions": [], "ad_group_ad.ad.local_ad.descriptions": [], "ad_group_ad.ad.local_ad.headlines": [], "ad_group_ad.ad.local_ad.logo_images": [], "ad_group_ad.ad.local_ad.marketing_images": [], "ad_group_ad.ad.local_ad.path1": "", "ad_group_ad.ad.local_ad.path2": "", "ad_group_ad.ad.local_ad.videos": [], "ad_group_ad.ad.name": "", "ad_group_ad.ad.resource_name": "customers/4651612872/ads/643022056303", "ad_group_ad.ad.responsive_display_ad.accent_color": "", "ad_group_ad.ad.responsive_display_ad.allow_flexible_color": true, "ad_group_ad.ad.responsive_display_ad.business_name": "c", "ad_group_ad.ad.responsive_display_ad.call_to_action_text": "", "ad_group_ad.ad.responsive_display_ad.control_spec.enable_asset_enhancements": true, "ad_group_ad.ad.responsive_display_ad.control_spec.enable_autogen_video": true, "ad_group_ad.ad.responsive_display_ad.descriptions": ["text: \"Airbyte | Open-Source Data Integration Platform | ELT tool\"\n", "text: \"\u30c6\u30ec\u30d3CM\u3067\u8a71\u984c\"\n", "text: \"modern ELT\"\n"], "ad_group_ad.ad.responsive_display_ad.format_setting": "ALL_FORMATS", "ad_group_ad.ad.responsive_display_ad.headlines": ["text: \"ELT\"\n"], "ad_group_ad.ad.responsive_display_ad.logo_images": [], "ad_group_ad.ad.responsive_display_ad.long_headline": "text: \"ELT data portability\"\n", "ad_group_ad.ad.responsive_display_ad.main_color": "", "ad_group_ad.ad.responsive_display_ad.marketing_images": ["asset: \"customers/4651612872/assets/39906715549\"\n", "asset: \"customers/4651612872/assets/40179016327\"\n"], "ad_group_ad.ad.responsive_display_ad.price_prefix": "", "ad_group_ad.ad.responsive_display_ad.promo_text": "", "ad_group_ad.ad.responsive_display_ad.square_logo_images": [], "ad_group_ad.ad.responsive_display_ad.square_marketing_images": ["asset: \"customers/4651612872/assets/39906715552\"\n", "asset: \"customers/4651612872/assets/40179014782\"\n"], "ad_group_ad.ad.responsive_display_ad.youtube_videos": [], "ad_group_ad.ad.responsive_search_ad.descriptions": [], "ad_group_ad.ad.responsive_search_ad.headlines": [], "ad_group_ad.ad.responsive_search_ad.path1": "", "ad_group_ad.ad.responsive_search_ad.path2": "", "ad_group_ad.ad.shopping_comparison_listing_ad.headline": "", "ad_group_ad.ad.shopping_product_ad": "", "ad_group_ad.ad.shopping_smart_ad": "", "ad_group_ad.ad.smart_campaign_ad.descriptions": [], "ad_group_ad.ad.smart_campaign_ad.headlines": [], "ad_group_ad.ad.system_managed_resource_source": "UNSPECIFIED", "ad_group_ad.ad.text_ad.description1": "", "ad_group_ad.ad.text_ad.description2": "", "ad_group_ad.ad.text_ad.headline": "", "ad_group_ad.ad.tracking_url_template": "", "ad_group_ad.ad.type": "RESPONSIVE_DISPLAY_AD", "ad_group_ad.ad.url_collections": [], "ad_group_ad.ad.url_custom_parameters": [], "ad_group_ad.ad.video_ad.in_feed.description1": "", "ad_group_ad.ad.video_ad.in_feed.description2": "", "ad_group_ad.ad.video_ad.in_feed.headline": "", "ad_group_ad.ad.video_ad.in_stream.action_button_label": "", "ad_group_ad.ad.video_ad.in_stream.action_headline": "", "ad_group_ad.ad.video_ad.out_stream.description": "", "ad_group_ad.ad.video_ad.out_stream.headline": "", "ad_group_ad.ad.video_responsive_ad.call_to_actions": [], "ad_group_ad.ad.video_responsive_ad.companion_banners": [], "ad_group_ad.ad.video_responsive_ad.descriptions": [], "ad_group_ad.ad.video_responsive_ad.headlines": [], "ad_group_ad.ad.video_responsive_ad.long_headlines": [], "ad_group_ad.ad.video_responsive_ad.videos": [], "ad_group_ad.ad_group": "customers/4651612872/adGroups/144799120517", "ad_group_ad.ad_strength": "AVERAGE", "ad_group_ad.labels": [], "ad_group_ad.policy_summary.approval_status": "APPROVED", "ad_group_ad.policy_summary.policy_topic_entries": [], "ad_group_ad.policy_summary.review_status": "REVIEWED", "ad_group_ad.resource_name": "customers/4651612872/adGroupAds/144799120517~643022056303", "ad_group_ad.status": "ENABLED", "segments.date": "2023-08-31"}, "emitted_at": 1697021598795} +{"stream": "ad_group_ads", "data": {"ad_group.id": 144799120517, "ad_group_ad.ad.added_by_google_ads": false, "ad_group_ad.ad.app_ad.descriptions": [], "ad_group_ad.ad.app_ad.headlines": [], "ad_group_ad.ad.app_ad.html5_media_bundles": [], "ad_group_ad.ad.app_ad.images": [], "ad_group_ad.ad.app_ad.mandatory_ad_text": "", "ad_group_ad.ad.app_ad.youtube_videos": [], "ad_group_ad.ad.app_engagement_ad.descriptions": [], "ad_group_ad.ad.app_engagement_ad.headlines": [], "ad_group_ad.ad.app_engagement_ad.images": [], "ad_group_ad.ad.app_engagement_ad.videos": [], "ad_group_ad.ad.call_ad.business_name": "", "ad_group_ad.ad.call_ad.call_tracked": false, "ad_group_ad.ad.call_ad.conversion_action": "", "ad_group_ad.ad.call_ad.conversion_reporting_state": "UNSPECIFIED", "ad_group_ad.ad.call_ad.country_code": "", "ad_group_ad.ad.call_ad.description1": "", "ad_group_ad.ad.call_ad.description2": "", "ad_group_ad.ad.call_ad.disable_call_conversion": false, "ad_group_ad.ad.call_ad.headline1": "", "ad_group_ad.ad.call_ad.headline2": "", "ad_group_ad.ad.call_ad.path1": "", "ad_group_ad.ad.call_ad.path2": "", "ad_group_ad.ad.call_ad.phone_number": "", "ad_group_ad.ad.call_ad.phone_number_verification_url": "", "ad_group_ad.ad.device_preference": "UNSPECIFIED", "ad_group_ad.ad.display_upload_ad.display_upload_product_type": "UNSPECIFIED", "ad_group_ad.ad.display_upload_ad.media_bundle": "", "ad_group_ad.ad.display_url": "", "ad_group_ad.ad.expanded_dynamic_search_ad.description": "", "ad_group_ad.ad.expanded_dynamic_search_ad.description2": "", "ad_group_ad.ad.expanded_text_ad.description": "", "ad_group_ad.ad.expanded_text_ad.description2": "", "ad_group_ad.ad.expanded_text_ad.headline_part1": "", "ad_group_ad.ad.expanded_text_ad.headline_part2": "", "ad_group_ad.ad.expanded_text_ad.headline_part3": "", "ad_group_ad.ad.expanded_text_ad.path1": "", "ad_group_ad.ad.expanded_text_ad.path2": "", "ad_group_ad.ad.final_app_urls": [], "ad_group_ad.ad.final_mobile_urls": [], "ad_group_ad.ad.final_url_suffix": "", "ad_group_ad.ad.final_urls": ["https://airbyte.com"], "ad_group_ad.ad.hotel_ad": "", "ad_group_ad.ad.id": 643022056303, "ad_group_ad.ad.image_ad.image_url": "", "ad_group_ad.ad.image_ad.mime_type": "UNSPECIFIED", "ad_group_ad.ad.image_ad.name": "", "ad_group_ad.ad.image_ad.pixel_height": 0, "ad_group_ad.ad.image_ad.pixel_width": 0, "ad_group_ad.ad.image_ad.preview_image_url": "", "ad_group_ad.ad.image_ad.preview_pixel_height": 0, "ad_group_ad.ad.image_ad.preview_pixel_width": 0, "ad_group_ad.ad.legacy_app_install_ad": "", "ad_group_ad.ad.legacy_responsive_display_ad.accent_color": "", "ad_group_ad.ad.legacy_responsive_display_ad.allow_flexible_color": false, "ad_group_ad.ad.legacy_responsive_display_ad.business_name": "", "ad_group_ad.ad.legacy_responsive_display_ad.call_to_action_text": "", "ad_group_ad.ad.legacy_responsive_display_ad.description": "", "ad_group_ad.ad.legacy_responsive_display_ad.format_setting": "UNSPECIFIED", "ad_group_ad.ad.legacy_responsive_display_ad.logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.long_headline": "", "ad_group_ad.ad.legacy_responsive_display_ad.main_color": "", "ad_group_ad.ad.legacy_responsive_display_ad.marketing_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.price_prefix": "", "ad_group_ad.ad.legacy_responsive_display_ad.promo_text": "", "ad_group_ad.ad.legacy_responsive_display_ad.short_headline": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_marketing_image": "", "ad_group_ad.ad.local_ad.call_to_actions": [], "ad_group_ad.ad.local_ad.descriptions": [], "ad_group_ad.ad.local_ad.headlines": [], "ad_group_ad.ad.local_ad.logo_images": [], "ad_group_ad.ad.local_ad.marketing_images": [], "ad_group_ad.ad.local_ad.path1": "", "ad_group_ad.ad.local_ad.path2": "", "ad_group_ad.ad.local_ad.videos": [], "ad_group_ad.ad.name": "", "ad_group_ad.ad.resource_name": "customers/4651612872/ads/643022056303", "ad_group_ad.ad.responsive_display_ad.accent_color": "", "ad_group_ad.ad.responsive_display_ad.allow_flexible_color": true, "ad_group_ad.ad.responsive_display_ad.business_name": "c", "ad_group_ad.ad.responsive_display_ad.call_to_action_text": "", "ad_group_ad.ad.responsive_display_ad.control_spec.enable_asset_enhancements": true, "ad_group_ad.ad.responsive_display_ad.control_spec.enable_autogen_video": true, "ad_group_ad.ad.responsive_display_ad.descriptions": ["text: \"Airbyte | Open-Source Data Integration Platform | ELT tool\"\n", "text: \"\u30c6\u30ec\u30d3CM\u3067\u8a71\u984c\"\n", "text: \"modern ELT\"\n"], "ad_group_ad.ad.responsive_display_ad.format_setting": "ALL_FORMATS", "ad_group_ad.ad.responsive_display_ad.headlines": ["text: \"ELT\"\n"], "ad_group_ad.ad.responsive_display_ad.logo_images": [], "ad_group_ad.ad.responsive_display_ad.long_headline": "text: \"ELT data portability\"\n", "ad_group_ad.ad.responsive_display_ad.main_color": "", "ad_group_ad.ad.responsive_display_ad.marketing_images": ["asset: \"customers/4651612872/assets/39906715549\"\n", "asset: \"customers/4651612872/assets/40179016327\"\n"], "ad_group_ad.ad.responsive_display_ad.price_prefix": "", "ad_group_ad.ad.responsive_display_ad.promo_text": "", "ad_group_ad.ad.responsive_display_ad.square_logo_images": [], "ad_group_ad.ad.responsive_display_ad.square_marketing_images": ["asset: \"customers/4651612872/assets/39906715552\"\n", "asset: \"customers/4651612872/assets/40179014782\"\n"], "ad_group_ad.ad.responsive_display_ad.youtube_videos": [], "ad_group_ad.ad.responsive_search_ad.descriptions": [], "ad_group_ad.ad.responsive_search_ad.headlines": [], "ad_group_ad.ad.responsive_search_ad.path1": "", "ad_group_ad.ad.responsive_search_ad.path2": "", "ad_group_ad.ad.shopping_comparison_listing_ad.headline": "", "ad_group_ad.ad.shopping_product_ad": "", "ad_group_ad.ad.shopping_smart_ad": "", "ad_group_ad.ad.smart_campaign_ad.descriptions": [], "ad_group_ad.ad.smart_campaign_ad.headlines": [], "ad_group_ad.ad.system_managed_resource_source": "UNSPECIFIED", "ad_group_ad.ad.text_ad.description1": "", "ad_group_ad.ad.text_ad.description2": "", "ad_group_ad.ad.text_ad.headline": "", "ad_group_ad.ad.tracking_url_template": "", "ad_group_ad.ad.type": "RESPONSIVE_DISPLAY_AD", "ad_group_ad.ad.url_collections": [], "ad_group_ad.ad.url_custom_parameters": [], "ad_group_ad.ad.video_ad.in_feed.description1": "", "ad_group_ad.ad.video_ad.in_feed.description2": "", "ad_group_ad.ad.video_ad.in_feed.headline": "", "ad_group_ad.ad.video_ad.in_stream.action_button_label": "", "ad_group_ad.ad.video_ad.in_stream.action_headline": "", "ad_group_ad.ad.video_ad.out_stream.description": "", "ad_group_ad.ad.video_ad.out_stream.headline": "", "ad_group_ad.ad.video_responsive_ad.call_to_actions": [], "ad_group_ad.ad.video_responsive_ad.companion_banners": [], "ad_group_ad.ad.video_responsive_ad.descriptions": [], "ad_group_ad.ad.video_responsive_ad.headlines": [], "ad_group_ad.ad.video_responsive_ad.long_headlines": [], "ad_group_ad.ad.video_responsive_ad.videos": [], "ad_group_ad.ad_group": "customers/4651612872/adGroups/144799120517", "ad_group_ad.ad_strength": "AVERAGE", "ad_group_ad.labels": [], "ad_group_ad.policy_summary.approval_status": "APPROVED", "ad_group_ad.policy_summary.policy_topic_entries": [], "ad_group_ad.policy_summary.review_status": "REVIEWED", "ad_group_ad.resource_name": "customers/4651612872/adGroupAds/144799120517~643022056303", "ad_group_ad.status": "ENABLED", "segments.date": "2023-09-01"}, "emitted_at": 1697021598803} +{"stream": "ad_group_ads", "data": {"ad_group.id": 144799120517, "ad_group_ad.ad.added_by_google_ads": false, "ad_group_ad.ad.app_ad.descriptions": [], "ad_group_ad.ad.app_ad.headlines": [], "ad_group_ad.ad.app_ad.html5_media_bundles": [], "ad_group_ad.ad.app_ad.images": [], "ad_group_ad.ad.app_ad.mandatory_ad_text": "", "ad_group_ad.ad.app_ad.youtube_videos": [], "ad_group_ad.ad.app_engagement_ad.descriptions": [], "ad_group_ad.ad.app_engagement_ad.headlines": [], "ad_group_ad.ad.app_engagement_ad.images": [], "ad_group_ad.ad.app_engagement_ad.videos": [], "ad_group_ad.ad.call_ad.business_name": "", "ad_group_ad.ad.call_ad.call_tracked": false, "ad_group_ad.ad.call_ad.conversion_action": "", "ad_group_ad.ad.call_ad.conversion_reporting_state": "UNSPECIFIED", "ad_group_ad.ad.call_ad.country_code": "", "ad_group_ad.ad.call_ad.description1": "", "ad_group_ad.ad.call_ad.description2": "", "ad_group_ad.ad.call_ad.disable_call_conversion": false, "ad_group_ad.ad.call_ad.headline1": "", "ad_group_ad.ad.call_ad.headline2": "", "ad_group_ad.ad.call_ad.path1": "", "ad_group_ad.ad.call_ad.path2": "", "ad_group_ad.ad.call_ad.phone_number": "", "ad_group_ad.ad.call_ad.phone_number_verification_url": "", "ad_group_ad.ad.device_preference": "UNSPECIFIED", "ad_group_ad.ad.display_upload_ad.display_upload_product_type": "UNSPECIFIED", "ad_group_ad.ad.display_upload_ad.media_bundle": "", "ad_group_ad.ad.display_url": "", "ad_group_ad.ad.expanded_dynamic_search_ad.description": "", "ad_group_ad.ad.expanded_dynamic_search_ad.description2": "", "ad_group_ad.ad.expanded_text_ad.description": "", "ad_group_ad.ad.expanded_text_ad.description2": "", "ad_group_ad.ad.expanded_text_ad.headline_part1": "", "ad_group_ad.ad.expanded_text_ad.headline_part2": "", "ad_group_ad.ad.expanded_text_ad.headline_part3": "", "ad_group_ad.ad.expanded_text_ad.path1": "", "ad_group_ad.ad.expanded_text_ad.path2": "", "ad_group_ad.ad.final_app_urls": [], "ad_group_ad.ad.final_mobile_urls": [], "ad_group_ad.ad.final_url_suffix": "", "ad_group_ad.ad.final_urls": ["https://airbyte.com"], "ad_group_ad.ad.hotel_ad": "", "ad_group_ad.ad.id": 643022056303, "ad_group_ad.ad.image_ad.image_url": "", "ad_group_ad.ad.image_ad.mime_type": "UNSPECIFIED", "ad_group_ad.ad.image_ad.name": "", "ad_group_ad.ad.image_ad.pixel_height": 0, "ad_group_ad.ad.image_ad.pixel_width": 0, "ad_group_ad.ad.image_ad.preview_image_url": "", "ad_group_ad.ad.image_ad.preview_pixel_height": 0, "ad_group_ad.ad.image_ad.preview_pixel_width": 0, "ad_group_ad.ad.legacy_app_install_ad": "", "ad_group_ad.ad.legacy_responsive_display_ad.accent_color": "", "ad_group_ad.ad.legacy_responsive_display_ad.allow_flexible_color": false, "ad_group_ad.ad.legacy_responsive_display_ad.business_name": "", "ad_group_ad.ad.legacy_responsive_display_ad.call_to_action_text": "", "ad_group_ad.ad.legacy_responsive_display_ad.description": "", "ad_group_ad.ad.legacy_responsive_display_ad.format_setting": "UNSPECIFIED", "ad_group_ad.ad.legacy_responsive_display_ad.logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.long_headline": "", "ad_group_ad.ad.legacy_responsive_display_ad.main_color": "", "ad_group_ad.ad.legacy_responsive_display_ad.marketing_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.price_prefix": "", "ad_group_ad.ad.legacy_responsive_display_ad.promo_text": "", "ad_group_ad.ad.legacy_responsive_display_ad.short_headline": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_marketing_image": "", "ad_group_ad.ad.local_ad.call_to_actions": [], "ad_group_ad.ad.local_ad.descriptions": [], "ad_group_ad.ad.local_ad.headlines": [], "ad_group_ad.ad.local_ad.logo_images": [], "ad_group_ad.ad.local_ad.marketing_images": [], "ad_group_ad.ad.local_ad.path1": "", "ad_group_ad.ad.local_ad.path2": "", "ad_group_ad.ad.local_ad.videos": [], "ad_group_ad.ad.name": "", "ad_group_ad.ad.resource_name": "customers/4651612872/ads/643022056303", "ad_group_ad.ad.responsive_display_ad.accent_color": "", "ad_group_ad.ad.responsive_display_ad.allow_flexible_color": true, "ad_group_ad.ad.responsive_display_ad.business_name": "c", "ad_group_ad.ad.responsive_display_ad.call_to_action_text": "", "ad_group_ad.ad.responsive_display_ad.control_spec.enable_asset_enhancements": true, "ad_group_ad.ad.responsive_display_ad.control_spec.enable_autogen_video": true, "ad_group_ad.ad.responsive_display_ad.descriptions": ["text: \"Airbyte | Open-Source Data Integration Platform | ELT tool\"\n", "text: \"\u30c6\u30ec\u30d3CM\u3067\u8a71\u984c\"\n", "text: \"modern ELT\"\n"], "ad_group_ad.ad.responsive_display_ad.format_setting": "ALL_FORMATS", "ad_group_ad.ad.responsive_display_ad.headlines": ["text: \"ELT\"\n"], "ad_group_ad.ad.responsive_display_ad.logo_images": [], "ad_group_ad.ad.responsive_display_ad.long_headline": "text: \"ELT data portability\"\n", "ad_group_ad.ad.responsive_display_ad.main_color": "", "ad_group_ad.ad.responsive_display_ad.marketing_images": ["asset: \"customers/4651612872/assets/39906715549\"\n", "asset: \"customers/4651612872/assets/40179016327\"\n"], "ad_group_ad.ad.responsive_display_ad.price_prefix": "", "ad_group_ad.ad.responsive_display_ad.promo_text": "", "ad_group_ad.ad.responsive_display_ad.square_logo_images": [], "ad_group_ad.ad.responsive_display_ad.square_marketing_images": ["asset: \"customers/4651612872/assets/39906715552\"\n", "asset: \"customers/4651612872/assets/40179014782\"\n"], "ad_group_ad.ad.responsive_display_ad.youtube_videos": [], "ad_group_ad.ad.responsive_search_ad.descriptions": [], "ad_group_ad.ad.responsive_search_ad.headlines": [], "ad_group_ad.ad.responsive_search_ad.path1": "", "ad_group_ad.ad.responsive_search_ad.path2": "", "ad_group_ad.ad.shopping_comparison_listing_ad.headline": "", "ad_group_ad.ad.shopping_product_ad": "", "ad_group_ad.ad.shopping_smart_ad": "", "ad_group_ad.ad.smart_campaign_ad.descriptions": [], "ad_group_ad.ad.smart_campaign_ad.headlines": [], "ad_group_ad.ad.system_managed_resource_source": "UNSPECIFIED", "ad_group_ad.ad.text_ad.description1": "", "ad_group_ad.ad.text_ad.description2": "", "ad_group_ad.ad.text_ad.headline": "", "ad_group_ad.ad.tracking_url_template": "", "ad_group_ad.ad.type": "RESPONSIVE_DISPLAY_AD", "ad_group_ad.ad.url_collections": [], "ad_group_ad.ad.url_custom_parameters": [], "ad_group_ad.ad.video_ad.in_feed.description1": "", "ad_group_ad.ad.video_ad.in_feed.description2": "", "ad_group_ad.ad.video_ad.in_feed.headline": "", "ad_group_ad.ad.video_ad.in_stream.action_button_label": "", "ad_group_ad.ad.video_ad.in_stream.action_headline": "", "ad_group_ad.ad.video_ad.out_stream.description": "", "ad_group_ad.ad.video_ad.out_stream.headline": "", "ad_group_ad.ad.video_responsive_ad.call_to_actions": [], "ad_group_ad.ad.video_responsive_ad.companion_banners": [], "ad_group_ad.ad.video_responsive_ad.descriptions": [], "ad_group_ad.ad.video_responsive_ad.headlines": [], "ad_group_ad.ad.video_responsive_ad.long_headlines": [], "ad_group_ad.ad.video_responsive_ad.videos": [], "ad_group_ad.ad_group": "customers/4651612872/adGroups/144799120517", "ad_group_ad.ad_strength": "AVERAGE", "ad_group_ad.labels": [], "ad_group_ad.policy_summary.approval_status": "APPROVED", "ad_group_ad.policy_summary.policy_topic_entries": [], "ad_group_ad.policy_summary.review_status": "REVIEWED", "ad_group_ad.resource_name": "customers/4651612872/adGroupAds/144799120517~643022056303", "ad_group_ad.status": "ENABLED", "segments.date": "2023-09-02"}, "emitted_at": 1697021598809} +{"stream": "ad_group_ad_labels", "data": {"ad_group.id": 123273719655, "ad_group_ad.ad.id": 524518584182, "ad_group_ad.ad.resource_name": "customers/4651612872/ads/524518584182", "ad_group_ad_label.resource_name": "customers/4651612872/adGroupAdLabels/123273719655~524518584182~21585034471", "label.name": "edgao-example-label", "label.resource_name": "customers/4651612872/labels/21585034471", "label.id": 21585034471}, "emitted_at": 1697021599298} +{"stream": "ad_group_ad_labels", "data": {"ad_group.id": 137020701042, "ad_group_ad.ad.id": 592078631218, "ad_group_ad.ad.resource_name": "customers/4651612872/ads/592078631218", "ad_group_ad_label.resource_name": "customers/4651612872/adGroupAdLabels/137020701042~592078631218~21906377810", "label.name": "Test Delete label customer", "label.resource_name": "customers/4651612872/labels/21906377810", "label.id": 21906377810}, "emitted_at": 1697021599299} +{"stream": "ad_groups", "data": {"campaign.id": 19410069806, "ad_group.ad_rotation_mode": "UNSPECIFIED", "ad_group.base_ad_group": "customers/4651612872/adGroups/144799120517", "ad_group.campaign": "customers/4651612872/campaigns/19410069806", "ad_group.cpc_bid_micros": 10000, "ad_group.cpm_bid_micros": 2000000, "ad_group.cpv_bid_micros": 0, "ad_group.display_custom_bid_dimension": "UNSPECIFIED", "ad_group.effective_target_cpa_micros": 0, "ad_group.effective_target_cpa_source": "UNSPECIFIED", "ad_group.effective_target_roas": 0.0, "ad_group.effective_target_roas_source": "UNSPECIFIED", "ad_group.excluded_parent_asset_field_types": [], "ad_group.optimized_targeting_enabled": true, "ad_group.final_url_suffix": "", "ad_group.id": 144799120517, "ad_group.labels": [], "ad_group.name": "Ad group 1", "ad_group.percent_cpc_bid_micros": 0, "ad_group.resource_name": "customers/4651612872/adGroups/144799120517", "ad_group.status": "ENABLED", "ad_group.target_cpa_micros": 0, "ad_group.target_cpm_micros": 10000, "ad_group.target_roas": 0.0, "ad_group.targeting_setting.target_restrictions": ["targeting_dimension: AGE_RANGE\nbid_only: true\n", "targeting_dimension: GENDER\nbid_only: true\n", "targeting_dimension: PARENTAL_STATUS\nbid_only: true\n", "targeting_dimension: INCOME_RANGE\nbid_only: true\n", "targeting_dimension: TOPIC\nbid_only: true\n"], "ad_group.tracking_url_template": "", "ad_group.type": "DISPLAY_STANDARD", "ad_group.url_custom_parameters": [], "segments.date": "2023-08-31"}, "emitted_at": 1697021599810} +{"stream": "ad_groups", "data": {"campaign.id": 19410069806, "ad_group.ad_rotation_mode": "UNSPECIFIED", "ad_group.base_ad_group": "customers/4651612872/adGroups/144799120517", "ad_group.campaign": "customers/4651612872/campaigns/19410069806", "ad_group.cpc_bid_micros": 10000, "ad_group.cpm_bid_micros": 2000000, "ad_group.cpv_bid_micros": 0, "ad_group.display_custom_bid_dimension": "UNSPECIFIED", "ad_group.effective_target_cpa_micros": 0, "ad_group.effective_target_cpa_source": "UNSPECIFIED", "ad_group.effective_target_roas": 0.0, "ad_group.effective_target_roas_source": "UNSPECIFIED", "ad_group.excluded_parent_asset_field_types": [], "ad_group.optimized_targeting_enabled": true, "ad_group.final_url_suffix": "", "ad_group.id": 144799120517, "ad_group.labels": [], "ad_group.name": "Ad group 1", "ad_group.percent_cpc_bid_micros": 0, "ad_group.resource_name": "customers/4651612872/adGroups/144799120517", "ad_group.status": "ENABLED", "ad_group.target_cpa_micros": 0, "ad_group.target_cpm_micros": 10000, "ad_group.target_roas": 0.0, "ad_group.targeting_setting.target_restrictions": ["targeting_dimension: AGE_RANGE\nbid_only: true\n", "targeting_dimension: GENDER\nbid_only: true\n", "targeting_dimension: PARENTAL_STATUS\nbid_only: true\n", "targeting_dimension: INCOME_RANGE\nbid_only: true\n", "targeting_dimension: TOPIC\nbid_only: true\n"], "ad_group.tracking_url_template": "", "ad_group.type": "DISPLAY_STANDARD", "ad_group.url_custom_parameters": [], "segments.date": "2023-09-01"}, "emitted_at": 1697021599812} +{"stream": "ad_groups", "data": {"campaign.id": 19410069806, "ad_group.ad_rotation_mode": "UNSPECIFIED", "ad_group.base_ad_group": "customers/4651612872/adGroups/144799120517", "ad_group.campaign": "customers/4651612872/campaigns/19410069806", "ad_group.cpc_bid_micros": 10000, "ad_group.cpm_bid_micros": 2000000, "ad_group.cpv_bid_micros": 0, "ad_group.display_custom_bid_dimension": "UNSPECIFIED", "ad_group.effective_target_cpa_micros": 0, "ad_group.effective_target_cpa_source": "UNSPECIFIED", "ad_group.effective_target_roas": 0.0, "ad_group.effective_target_roas_source": "UNSPECIFIED", "ad_group.excluded_parent_asset_field_types": [], "ad_group.optimized_targeting_enabled": true, "ad_group.final_url_suffix": "", "ad_group.id": 144799120517, "ad_group.labels": [], "ad_group.name": "Ad group 1", "ad_group.percent_cpc_bid_micros": 0, "ad_group.resource_name": "customers/4651612872/adGroups/144799120517", "ad_group.status": "ENABLED", "ad_group.target_cpa_micros": 0, "ad_group.target_cpm_micros": 10000, "ad_group.target_roas": 0.0, "ad_group.targeting_setting.target_restrictions": ["targeting_dimension: AGE_RANGE\nbid_only: true\n", "targeting_dimension: GENDER\nbid_only: true\n", "targeting_dimension: PARENTAL_STATUS\nbid_only: true\n", "targeting_dimension: INCOME_RANGE\nbid_only: true\n", "targeting_dimension: TOPIC\nbid_only: true\n"], "ad_group.tracking_url_template": "", "ad_group.type": "DISPLAY_STANDARD", "ad_group.url_custom_parameters": [], "segments.date": "2023-09-02"}, "emitted_at": 1697021599814} +{"stream": "ad_group_bidding_strategies", "data": {"ad_group.id": 144799120517, "bidding_strategy.aligned_campaign_budget_id": 0, "bidding_strategy.campaign_count": 0, "bidding_strategy.currency_code": "", "bidding_strategy.effective_currency_code": "", "bidding_strategy.enhanced_cpc": "", "bidding_strategy.id": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversion_value.target_roas": 0.0, "bidding_strategy.maximize_conversions.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversions.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversions.target_cpa_micros": 0, "bidding_strategy.name": "", "bidding_strategy.non_removed_campaign_count": 0, "bidding_strategy.resource_name": "", "bidding_strategy.status": "UNSPECIFIED", "bidding_strategy.target_cpa.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_cpa.cpc_bid_floor_micros": 0, "bidding_strategy.target_cpa.target_cpa_micros": 0, "bidding_strategy.target_impression_share.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_impression_share.location": "UNSPECIFIED", "bidding_strategy.target_impression_share.location_fraction_micros": 0, "bidding_strategy.target_roas.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_roas.cpc_bid_floor_micros": 0, "bidding_strategy.target_roas.target_roas": 0.0, "bidding_strategy.target_spend.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_spend.target_spend_micros": 0, "bidding_strategy.type": "UNSPECIFIED", "segments.date": "2023-08-31"}, "emitted_at": 1697021600221} +{"stream": "ad_group_bidding_strategies", "data": {"ad_group.id": 144799120517, "bidding_strategy.aligned_campaign_budget_id": 0, "bidding_strategy.campaign_count": 0, "bidding_strategy.currency_code": "", "bidding_strategy.effective_currency_code": "", "bidding_strategy.enhanced_cpc": "", "bidding_strategy.id": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversion_value.target_roas": 0.0, "bidding_strategy.maximize_conversions.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversions.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversions.target_cpa_micros": 0, "bidding_strategy.name": "", "bidding_strategy.non_removed_campaign_count": 0, "bidding_strategy.resource_name": "", "bidding_strategy.status": "UNSPECIFIED", "bidding_strategy.target_cpa.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_cpa.cpc_bid_floor_micros": 0, "bidding_strategy.target_cpa.target_cpa_micros": 0, "bidding_strategy.target_impression_share.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_impression_share.location": "UNSPECIFIED", "bidding_strategy.target_impression_share.location_fraction_micros": 0, "bidding_strategy.target_roas.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_roas.cpc_bid_floor_micros": 0, "bidding_strategy.target_roas.target_roas": 0.0, "bidding_strategy.target_spend.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_spend.target_spend_micros": 0, "bidding_strategy.type": "UNSPECIFIED", "segments.date": "2023-09-01"}, "emitted_at": 1697021600224} +{"stream": "ad_group_bidding_strategies", "data": {"ad_group.id": 144799120517, "bidding_strategy.aligned_campaign_budget_id": 0, "bidding_strategy.campaign_count": 0, "bidding_strategy.currency_code": "", "bidding_strategy.effective_currency_code": "", "bidding_strategy.enhanced_cpc": "", "bidding_strategy.id": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversion_value.target_roas": 0.0, "bidding_strategy.maximize_conversions.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversions.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversions.target_cpa_micros": 0, "bidding_strategy.name": "", "bidding_strategy.non_removed_campaign_count": 0, "bidding_strategy.resource_name": "", "bidding_strategy.status": "UNSPECIFIED", "bidding_strategy.target_cpa.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_cpa.cpc_bid_floor_micros": 0, "bidding_strategy.target_cpa.target_cpa_micros": 0, "bidding_strategy.target_impression_share.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_impression_share.location": "UNSPECIFIED", "bidding_strategy.target_impression_share.location_fraction_micros": 0, "bidding_strategy.target_roas.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_roas.cpc_bid_floor_micros": 0, "bidding_strategy.target_roas.target_roas": 0.0, "bidding_strategy.target_spend.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_spend.target_spend_micros": 0, "bidding_strategy.type": "UNSPECIFIED", "segments.date": "2023-09-02"}, "emitted_at": 1697021600226} +{"stream": "ad_group_criterions", "data": {"deleted_at": null, "change_status.last_change_date_time": null, "ad_group.id": 123273719655, "ad_group_criterion.ad_group": "customers/4651612872/adGroups/123273719655", "ad_group_criterion.age_range.type": "UNSPECIFIED", "ad_group_criterion.app_payment_model.type": "UNSPECIFIED", "ad_group_criterion.approval_status": "APPROVED", "ad_group_criterion.audience.audience": "", "ad_group_criterion.bid_modifier": 0.0, "ad_group_criterion.combined_audience.combined_audience": "", "ad_group_criterion.cpc_bid_micros": 0, "ad_group_criterion.cpm_bid_micros": 0, "ad_group_criterion.cpv_bid_micros": 0, "ad_group_criterion.criterion_id": 10515001, "ad_group_criterion.custom_affinity.custom_affinity": "", "ad_group_criterion.custom_audience.custom_audience": "", "ad_group_criterion.custom_intent.custom_intent": "", "ad_group_criterion.disapproval_reasons": [], "ad_group_criterion.display_name": "data warehouses", "ad_group_criterion.effective_cpc_bid_micros": 10000, "ad_group_criterion.effective_cpc_bid_source": "AD_GROUP", "ad_group_criterion.effective_cpm_bid_micros": 10000, "ad_group_criterion.effective_cpm_bid_source": "AD_GROUP", "ad_group_criterion.effective_cpv_bid_micros": 0, "ad_group_criterion.effective_cpv_bid_source": "UNSPECIFIED", "ad_group_criterion.effective_percent_cpc_bid_micros": 0, "ad_group_criterion.effective_percent_cpc_bid_source": "UNSPECIFIED", "ad_group_criterion.final_mobile_urls": [], "ad_group_criterion.final_url_suffix": "", "ad_group_criterion.final_urls": [], "ad_group_criterion.gender.type": "UNSPECIFIED", "ad_group_criterion.income_range.type": "UNSPECIFIED", "ad_group_criterion.keyword.match_type": "BROAD", "ad_group_criterion.keyword.text": "data warehouses", "ad_group_criterion.labels": [], "ad_group_criterion.mobile_app_category.mobile_app_category_constant": "", "ad_group_criterion.mobile_application.app_id": "", "ad_group_criterion.mobile_application.name": "", "ad_group_criterion.negative": false, "ad_group_criterion.parental_status.type": "UNSPECIFIED", "ad_group_criterion.percent_cpc_bid_micros": 0, "ad_group_criterion.placement.url": "", "ad_group_criterion.position_estimates.estimated_add_clicks_at_first_position_cpc": 0, "ad_group_criterion.position_estimates.estimated_add_cost_at_first_position_cpc": 0, "ad_group_criterion.position_estimates.first_page_cpc_micros": 0, "ad_group_criterion.position_estimates.first_position_cpc_micros": 0, "ad_group_criterion.position_estimates.top_of_page_cpc_micros": 0, "ad_group_criterion.quality_info.creative_quality_score": "UNSPECIFIED", "ad_group_criterion.quality_info.post_click_quality_score": "UNSPECIFIED", "ad_group_criterion.quality_info.quality_score": 0, "ad_group_criterion.quality_info.search_predicted_ctr": "UNSPECIFIED", "ad_group_criterion.resource_name": "customers/4651612872/adGroupCriteria/123273719655~10515001", "ad_group_criterion.status": "ENABLED", "ad_group_criterion.system_serving_status": "ELIGIBLE", "ad_group_criterion.topic.path": [], "ad_group_criterion.topic.topic_constant": "", "ad_group_criterion.tracking_url_template": "", "ad_group_criterion.type": "KEYWORD", "ad_group_criterion.url_custom_parameters": [], "ad_group_criterion.user_interest.user_interest_category": "", "ad_group_criterion.user_list.user_list": "", "ad_group_criterion.webpage.conditions": [], "ad_group_criterion.webpage.coverage_percentage": 0.0, "ad_group_criterion.webpage.criterion_name": "", "ad_group_criterion.webpage.sample.sample_urls": [], "ad_group_criterion.youtube_channel.channel_id": "", "ad_group_criterion.youtube_video.video_id": ""}, "emitted_at": 1697021602699} +{"stream": "ad_group_criterions", "data": {"deleted_at": null, "change_status.last_change_date_time": null, "ad_group.id": 123273719655, "ad_group_criterion.ad_group": "customers/4651612872/adGroups/123273719655", "ad_group_criterion.age_range.type": "UNSPECIFIED", "ad_group_criterion.app_payment_model.type": "UNSPECIFIED", "ad_group_criterion.approval_status": "UNSPECIFIED", "ad_group_criterion.audience.audience": "", "ad_group_criterion.bid_modifier": 0.0, "ad_group_criterion.combined_audience.combined_audience": "", "ad_group_criterion.cpc_bid_micros": 0, "ad_group_criterion.cpm_bid_micros": 0, "ad_group_criterion.cpv_bid_micros": 0, "ad_group_criterion.criterion_id": 10683521, "ad_group_criterion.custom_affinity.custom_affinity": "", "ad_group_criterion.custom_audience.custom_audience": "", "ad_group_criterion.custom_intent.custom_intent": "", "ad_group_criterion.disapproval_reasons": [], "ad_group_criterion.display_name": "database software", "ad_group_criterion.effective_cpc_bid_micros": 0, "ad_group_criterion.effective_cpc_bid_source": "UNSPECIFIED", "ad_group_criterion.effective_cpm_bid_micros": 0, "ad_group_criterion.effective_cpm_bid_source": "UNSPECIFIED", "ad_group_criterion.effective_cpv_bid_micros": 0, "ad_group_criterion.effective_cpv_bid_source": "UNSPECIFIED", "ad_group_criterion.effective_percent_cpc_bid_micros": 0, "ad_group_criterion.effective_percent_cpc_bid_source": "UNSPECIFIED", "ad_group_criterion.final_mobile_urls": [], "ad_group_criterion.final_url_suffix": "", "ad_group_criterion.final_urls": [], "ad_group_criterion.gender.type": "UNSPECIFIED", "ad_group_criterion.income_range.type": "UNSPECIFIED", "ad_group_criterion.keyword.match_type": "BROAD", "ad_group_criterion.keyword.text": "database software", "ad_group_criterion.labels": [], "ad_group_criterion.mobile_app_category.mobile_app_category_constant": "", "ad_group_criterion.mobile_application.app_id": "", "ad_group_criterion.mobile_application.name": "", "ad_group_criterion.negative": false, "ad_group_criterion.parental_status.type": "UNSPECIFIED", "ad_group_criterion.percent_cpc_bid_micros": 0, "ad_group_criterion.placement.url": "", "ad_group_criterion.position_estimates.estimated_add_clicks_at_first_position_cpc": 0, "ad_group_criterion.position_estimates.estimated_add_cost_at_first_position_cpc": 0, "ad_group_criterion.position_estimates.first_page_cpc_micros": 0, "ad_group_criterion.position_estimates.first_position_cpc_micros": 0, "ad_group_criterion.position_estimates.top_of_page_cpc_micros": 0, "ad_group_criterion.quality_info.creative_quality_score": "UNSPECIFIED", "ad_group_criterion.quality_info.post_click_quality_score": "UNSPECIFIED", "ad_group_criterion.quality_info.quality_score": 0, "ad_group_criterion.quality_info.search_predicted_ctr": "UNSPECIFIED", "ad_group_criterion.resource_name": "customers/4651612872/adGroupCriteria/123273719655~10683521", "ad_group_criterion.status": "REMOVED", "ad_group_criterion.system_serving_status": "UNSPECIFIED", "ad_group_criterion.topic.path": [], "ad_group_criterion.topic.topic_constant": "", "ad_group_criterion.tracking_url_template": "", "ad_group_criterion.type": "KEYWORD", "ad_group_criterion.url_custom_parameters": [], "ad_group_criterion.user_interest.user_interest_category": "", "ad_group_criterion.user_list.user_list": "", "ad_group_criterion.webpage.conditions": [], "ad_group_criterion.webpage.coverage_percentage": 0.0, "ad_group_criterion.webpage.criterion_name": "", "ad_group_criterion.webpage.sample.sample_urls": [], "ad_group_criterion.youtube_channel.channel_id": "", "ad_group_criterion.youtube_video.video_id": ""}, "emitted_at": 1697021602703} +{"stream": "ad_group_criterions", "data": {"deleted_at": null, "change_status.last_change_date_time": null, "ad_group.id": 123273719655, "ad_group_criterion.ad_group": "customers/4651612872/adGroups/123273719655", "ad_group_criterion.age_range.type": "UNSPECIFIED", "ad_group_criterion.app_payment_model.type": "UNSPECIFIED", "ad_group_criterion.approval_status": "APPROVED", "ad_group_criterion.audience.audience": "", "ad_group_criterion.bid_modifier": 0.0, "ad_group_criterion.combined_audience.combined_audience": "", "ad_group_criterion.cpc_bid_micros": 0, "ad_group_criterion.cpm_bid_micros": 0, "ad_group_criterion.cpv_bid_micros": 0, "ad_group_criterion.criterion_id": 11100571, "ad_group_criterion.custom_affinity.custom_affinity": "", "ad_group_criterion.custom_audience.custom_audience": "", "ad_group_criterion.custom_intent.custom_intent": "", "ad_group_criterion.disapproval_reasons": [], "ad_group_criterion.display_name": "integration software", "ad_group_criterion.effective_cpc_bid_micros": 10000, "ad_group_criterion.effective_cpc_bid_source": "AD_GROUP", "ad_group_criterion.effective_cpm_bid_micros": 10000, "ad_group_criterion.effective_cpm_bid_source": "AD_GROUP", "ad_group_criterion.effective_cpv_bid_micros": 0, "ad_group_criterion.effective_cpv_bid_source": "UNSPECIFIED", "ad_group_criterion.effective_percent_cpc_bid_micros": 0, "ad_group_criterion.effective_percent_cpc_bid_source": "UNSPECIFIED", "ad_group_criterion.final_mobile_urls": [], "ad_group_criterion.final_url_suffix": "", "ad_group_criterion.final_urls": [], "ad_group_criterion.gender.type": "UNSPECIFIED", "ad_group_criterion.income_range.type": "UNSPECIFIED", "ad_group_criterion.keyword.match_type": "BROAD", "ad_group_criterion.keyword.text": "integration software", "ad_group_criterion.labels": [], "ad_group_criterion.mobile_app_category.mobile_app_category_constant": "", "ad_group_criterion.mobile_application.app_id": "", "ad_group_criterion.mobile_application.name": "", "ad_group_criterion.negative": false, "ad_group_criterion.parental_status.type": "UNSPECIFIED", "ad_group_criterion.percent_cpc_bid_micros": 0, "ad_group_criterion.placement.url": "", "ad_group_criterion.position_estimates.estimated_add_clicks_at_first_position_cpc": 0, "ad_group_criterion.position_estimates.estimated_add_cost_at_first_position_cpc": 0, "ad_group_criterion.position_estimates.first_page_cpc_micros": 0, "ad_group_criterion.position_estimates.first_position_cpc_micros": 0, "ad_group_criterion.position_estimates.top_of_page_cpc_micros": 0, "ad_group_criterion.quality_info.creative_quality_score": "UNSPECIFIED", "ad_group_criterion.quality_info.post_click_quality_score": "UNSPECIFIED", "ad_group_criterion.quality_info.quality_score": 0, "ad_group_criterion.quality_info.search_predicted_ctr": "UNSPECIFIED", "ad_group_criterion.resource_name": "customers/4651612872/adGroupCriteria/123273719655~11100571", "ad_group_criterion.status": "ENABLED", "ad_group_criterion.system_serving_status": "ELIGIBLE", "ad_group_criterion.topic.path": [], "ad_group_criterion.topic.topic_constant": "", "ad_group_criterion.tracking_url_template": "", "ad_group_criterion.type": "KEYWORD", "ad_group_criterion.url_custom_parameters": [], "ad_group_criterion.user_interest.user_interest_category": "", "ad_group_criterion.user_list.user_list": "", "ad_group_criterion.webpage.conditions": [], "ad_group_criterion.webpage.coverage_percentage": 0.0, "ad_group_criterion.webpage.criterion_name": "", "ad_group_criterion.webpage.sample.sample_urls": [], "ad_group_criterion.youtube_channel.channel_id": "", "ad_group_criterion.youtube_video.video_id": ""}, "emitted_at": 1697021602706} +{"stream": "ad_group_criterion_labels", "data": {"ad_group.id": 137051662444, "label.id": 21902092838, "ad_group_criterion_label.ad_group_criterion": "customers/4651612872/adGroupCriteria/137051662444~10766861", "ad_group_criterion_label.label": "customers/4651612872/labels/21902092838", "ad_group_criterion_label.resource_name": "customers/4651612872/adGroupCriterionLabels/137051662444~10766861~21902092838", "ad_group_criterion.criterion_id": 10766861}, "emitted_at": 1697021606876} +{"stream": "ad_group_criterion_labels", "data": {"ad_group.id": 137051662444, "label.id": 21906377810, "ad_group_criterion_label.ad_group_criterion": "customers/4651612872/adGroupCriteria/137051662444~528912986", "ad_group_criterion_label.label": "customers/4651612872/labels/21906377810", "ad_group_criterion_label.resource_name": "customers/4651612872/adGroupCriterionLabels/137051662444~528912986~21906377810", "ad_group_criterion.criterion_id": 528912986}, "emitted_at": 1697021606877} +{"stream": "ad_group_labels", "data": {"ad_group.id": 123273719655, "label.id": 21585034471, "ad_group.resource_name": "customers/4651612872/adGroups/123273719655", "ad_group_label.resource_name": "customers/4651612872/adGroupLabels/123273719655~21585034471", "label.name": "edgao-example-label", "label.resource_name": "customers/4651612872/labels/21585034471"}, "emitted_at": 1697021607285} +{"stream": "ad_group_labels", "data": {"ad_group.id": 138643385242, "label.id": 21585034471, "ad_group.resource_name": "customers/4651612872/adGroups/138643385242", "ad_group_label.resource_name": "customers/4651612872/adGroupLabels/138643385242~21585034471", "label.name": "edgao-example-label", "label.resource_name": "customers/4651612872/labels/21585034471"}, "emitted_at": 1697021607286} +{"stream": "ad_group_labels", "data": {"ad_group.id": 137020701042, "label.id": 21906377810, "ad_group.resource_name": "customers/4651612872/adGroups/137020701042", "ad_group_label.resource_name": "customers/4651612872/adGroupLabels/137020701042~21906377810", "label.name": "Test Delete label customer", "label.resource_name": "customers/4651612872/labels/21906377810"}, "emitted_at": 1697021607287} +{"stream": "ad_listing_group_criterions", "data": {"deleted_at": null, "change_status.last_change_date_time": null, "ad_group_criterion.resource_name": "customers/4651612872/adGroupCriteria/123273719655~10515001", "ad_group.id": 123273719655, "ad_group_criterion.criterion_id": 10515001, "ad_group_criterion.listing_group.case_value.activity_country.value": "", "ad_group_criterion.listing_group.case_value.activity_id.value": "", "ad_group_criterion.listing_group.case_value.activity_rating.value": 0, "ad_group_criterion.listing_group.case_value.hotel_city.city_criterion": "", "ad_group_criterion.listing_group.case_value.hotel_class.value": 0, "ad_group_criterion.listing_group.case_value.hotel_country_region.country_region_criterion": "", "ad_group_criterion.listing_group.case_value.hotel_id.value": "", "ad_group_criterion.listing_group.case_value.hotel_state.state_criterion": "", "ad_group_criterion.listing_group.case_value.product_bidding_category.id": 0, "ad_group_criterion.listing_group.case_value.product_bidding_category.level": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_brand.value": "", "ad_group_criterion.listing_group.case_value.product_channel.channel": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_channel_exclusivity.channel_exclusivity": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_condition.condition": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_custom_attribute.index": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_custom_attribute.value": "", "ad_group_criterion.listing_group.case_value.product_item_id.value": "", "ad_group_criterion.listing_group.case_value.product_type.level": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_type.value": "", "ad_group_criterion.listing_group.parent_ad_group_criterion": "", "ad_group_criterion.listing_group.type": "UNSPECIFIED"}, "emitted_at": 1697021608890} +{"stream": "ad_listing_group_criterions", "data": {"deleted_at": null, "change_status.last_change_date_time": null, "ad_group_criterion.resource_name": "customers/4651612872/adGroupCriteria/123273719655~10683521", "ad_group.id": 123273719655, "ad_group_criterion.criterion_id": 10683521, "ad_group_criterion.listing_group.case_value.activity_country.value": "", "ad_group_criterion.listing_group.case_value.activity_id.value": "", "ad_group_criterion.listing_group.case_value.activity_rating.value": 0, "ad_group_criterion.listing_group.case_value.hotel_city.city_criterion": "", "ad_group_criterion.listing_group.case_value.hotel_class.value": 0, "ad_group_criterion.listing_group.case_value.hotel_country_region.country_region_criterion": "", "ad_group_criterion.listing_group.case_value.hotel_id.value": "", "ad_group_criterion.listing_group.case_value.hotel_state.state_criterion": "", "ad_group_criterion.listing_group.case_value.product_bidding_category.id": 0, "ad_group_criterion.listing_group.case_value.product_bidding_category.level": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_brand.value": "", "ad_group_criterion.listing_group.case_value.product_channel.channel": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_channel_exclusivity.channel_exclusivity": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_condition.condition": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_custom_attribute.index": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_custom_attribute.value": "", "ad_group_criterion.listing_group.case_value.product_item_id.value": "", "ad_group_criterion.listing_group.case_value.product_type.level": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_type.value": "", "ad_group_criterion.listing_group.parent_ad_group_criterion": "", "ad_group_criterion.listing_group.type": "UNSPECIFIED"}, "emitted_at": 1697021608892} +{"stream": "ad_listing_group_criterions", "data": {"deleted_at": null, "change_status.last_change_date_time": null, "ad_group_criterion.resource_name": "customers/4651612872/adGroupCriteria/123273719655~11100571", "ad_group.id": 123273719655, "ad_group_criterion.criterion_id": 11100571, "ad_group_criterion.listing_group.case_value.activity_country.value": "", "ad_group_criterion.listing_group.case_value.activity_id.value": "", "ad_group_criterion.listing_group.case_value.activity_rating.value": 0, "ad_group_criterion.listing_group.case_value.hotel_city.city_criterion": "", "ad_group_criterion.listing_group.case_value.hotel_class.value": 0, "ad_group_criterion.listing_group.case_value.hotel_country_region.country_region_criterion": "", "ad_group_criterion.listing_group.case_value.hotel_id.value": "", "ad_group_criterion.listing_group.case_value.hotel_state.state_criterion": "", "ad_group_criterion.listing_group.case_value.product_bidding_category.id": 0, "ad_group_criterion.listing_group.case_value.product_bidding_category.level": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_brand.value": "", "ad_group_criterion.listing_group.case_value.product_channel.channel": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_channel_exclusivity.channel_exclusivity": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_condition.condition": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_custom_attribute.index": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_custom_attribute.value": "", "ad_group_criterion.listing_group.case_value.product_item_id.value": "", "ad_group_criterion.listing_group.case_value.product_type.level": "UNSPECIFIED", "ad_group_criterion.listing_group.case_value.product_type.value": "", "ad_group_criterion.listing_group.parent_ad_group_criterion": "", "ad_group_criterion.listing_group.type": "UNSPECIFIED"}, "emitted_at": 1697021608894} +{"stream": "accounts", "data": {"customer.auto_tagging_enabled": true, "customer.call_reporting_setting.call_conversion_action": "customers/4651612872/conversionActions/179", "customer.call_reporting_setting.call_conversion_reporting_enabled": true, "customer.call_reporting_setting.call_reporting_enabled": true, "customer.conversion_tracking_setting.conversion_tracking_id": 657981234, "customer.conversion_tracking_setting.cross_account_conversion_tracking_id": 0, "customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.final_url_suffix": "", "customer.has_partners_badge": false, "customer.id": 4651612872, "customer.manager": false, "customer.optimization_score": 0.8607706, "customer.optimization_score_weight": 93.688858, "customer.pay_per_conversion_eligibility_failure_reasons": ["CustomerPayPerConversionEligibilityFailureReason.NOT_ENOUGH_CONVERSIONS"], "customer.remarketing_setting.google_global_site_tag": "\n\n\n", "customer.resource_name": "customers/4651612872", "customer.test_account": false, "customer.time_zone": "America/Los_Angeles", "customer.tracking_url_template": "{lpurl}?utm_term={keyword}&utm_campaign={_utmcampaign}&utm_source=adwords&utm_medium=ppc&hsa_acc=4651612872&hsa_cam={campaignid}&hsa_grp={adgroupid}&hsa_ad={creative}&hsa_src={network}&hsa_tgt={targetid}&hsa_kw={keyword}&hsa_mt={matchtype}&hsa_net=adwords&hsa_ver=3", "segments.date": "2023-08-31"}, "emitted_at": 1697021611893} +{"stream": "accounts", "data": {"customer.auto_tagging_enabled": true, "customer.call_reporting_setting.call_conversion_action": "customers/4651612872/conversionActions/179", "customer.call_reporting_setting.call_conversion_reporting_enabled": true, "customer.call_reporting_setting.call_reporting_enabled": true, "customer.conversion_tracking_setting.conversion_tracking_id": 657981234, "customer.conversion_tracking_setting.cross_account_conversion_tracking_id": 0, "customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.final_url_suffix": "", "customer.has_partners_badge": false, "customer.id": 4651612872, "customer.manager": false, "customer.optimization_score": 0.8607706, "customer.optimization_score_weight": 93.688858, "customer.pay_per_conversion_eligibility_failure_reasons": ["CustomerPayPerConversionEligibilityFailureReason.NOT_ENOUGH_CONVERSIONS"], "customer.remarketing_setting.google_global_site_tag": "\n\n\n", "customer.resource_name": "customers/4651612872", "customer.test_account": false, "customer.time_zone": "America/Los_Angeles", "customer.tracking_url_template": "{lpurl}?utm_term={keyword}&utm_campaign={_utmcampaign}&utm_source=adwords&utm_medium=ppc&hsa_acc=4651612872&hsa_cam={campaignid}&hsa_grp={adgroupid}&hsa_ad={creative}&hsa_src={network}&hsa_tgt={targetid}&hsa_kw={keyword}&hsa_mt={matchtype}&hsa_net=adwords&hsa_ver=3", "segments.date": "2023-09-01"}, "emitted_at": 1697021611895} +{"stream": "accounts", "data": {"customer.auto_tagging_enabled": true, "customer.call_reporting_setting.call_conversion_action": "customers/4651612872/conversionActions/179", "customer.call_reporting_setting.call_conversion_reporting_enabled": true, "customer.call_reporting_setting.call_reporting_enabled": true, "customer.conversion_tracking_setting.conversion_tracking_id": 657981234, "customer.conversion_tracking_setting.cross_account_conversion_tracking_id": 0, "customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.final_url_suffix": "", "customer.has_partners_badge": false, "customer.id": 4651612872, "customer.manager": false, "customer.optimization_score": 0.8607706, "customer.optimization_score_weight": 93.688858, "customer.pay_per_conversion_eligibility_failure_reasons": ["CustomerPayPerConversionEligibilityFailureReason.NOT_ENOUGH_CONVERSIONS"], "customer.remarketing_setting.google_global_site_tag": "\n\n\n", "customer.resource_name": "customers/4651612872", "customer.test_account": false, "customer.time_zone": "America/Los_Angeles", "customer.tracking_url_template": "{lpurl}?utm_term={keyword}&utm_campaign={_utmcampaign}&utm_source=adwords&utm_medium=ppc&hsa_acc=4651612872&hsa_cam={campaignid}&hsa_grp={adgroupid}&hsa_ad={creative}&hsa_src={network}&hsa_tgt={targetid}&hsa_kw={keyword}&hsa_mt={matchtype}&hsa_net=adwords&hsa_ver=3", "segments.date": "2023-09-02"}, "emitted_at": 1697021611896} +{"stream": "audience", "data": {"customer.id": 4651612872, "audience.description": "", "audience.dimensions": ["audience_segments {\n segments {\n custom_audience {\n custom_audience: \"customers/4651612872/customAudiences/523469909\"\n }\n }\n}\n"], "audience.exclusion_dimension": "", "audience.id": 47792633, "audience.name": "Audience name 1", "audience.resource_name": "customers/4651612872/audiences/47792633", "audience.status": "ENABLED"}, "emitted_at": 1697021612609} +{"stream": "audience", "data": {"customer.id": 4651612872, "audience.description": "", "audience.dimensions": ["audience_segments {\n segments {\n user_interest {\n user_interest_category: \"customers/4651612872/userInterests/80276\"\n }\n }\n segments {\n user_interest {\n user_interest_category: \"customers/4651612872/userInterests/80279\"\n }\n }\n segments {\n user_interest {\n user_interest_category: \"customers/4651612872/userInterests/80520\"\n }\n }\n segments {\n user_interest {\n user_interest_category: \"customers/4651612872/userInterests/80530\"\n }\n }\n segments {\n user_interest {\n user_interest_category: \"customers/4651612872/userInterests/92931\"\n }\n }\n}\n"], "audience.exclusion_dimension": "", "audience.id": 97300129, "audience.name": "Upgraded Audience 1", "audience.resource_name": "customers/4651612872/audiences/97300129", "audience.status": "ENABLED"}, "emitted_at": 1697021612609} +{"stream": "campaign_bidding_strategies", "data": {"customer.id": 4651612872, "campaign.id": 19410069806, "bidding_strategy.aligned_campaign_budget_id": 0, "bidding_strategy.campaign_count": 0, "bidding_strategy.currency_code": "", "bidding_strategy.effective_currency_code": "", "bidding_strategy.enhanced_cpc": "", "bidding_strategy.id": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversion_value.target_roas": 0.0, "bidding_strategy.maximize_conversions.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversions.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversions.target_cpa_micros": 0, "bidding_strategy.name": "", "bidding_strategy.non_removed_campaign_count": 0, "bidding_strategy.resource_name": "", "bidding_strategy.status": "UNSPECIFIED", "bidding_strategy.target_cpa.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_cpa.cpc_bid_floor_micros": 0, "bidding_strategy.target_cpa.target_cpa_micros": 0, "bidding_strategy.target_impression_share.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_impression_share.location": "UNSPECIFIED", "bidding_strategy.target_impression_share.location_fraction_micros": 0, "bidding_strategy.target_roas.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_roas.cpc_bid_floor_micros": 0, "bidding_strategy.target_roas.target_roas": 0.0, "bidding_strategy.target_spend.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_spend.target_spend_micros": 0, "bidding_strategy.type": "UNSPECIFIED", "segments.date": "2023-08-31"}, "emitted_at": 1697021613014} +{"stream": "campaign_bidding_strategies", "data": {"customer.id": 4651612872, "campaign.id": 19959839954, "bidding_strategy.aligned_campaign_budget_id": 0, "bidding_strategy.campaign_count": 0, "bidding_strategy.currency_code": "", "bidding_strategy.effective_currency_code": "", "bidding_strategy.enhanced_cpc": "", "bidding_strategy.id": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversion_value.target_roas": 0.0, "bidding_strategy.maximize_conversions.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversions.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversions.target_cpa_micros": 0, "bidding_strategy.name": "", "bidding_strategy.non_removed_campaign_count": 0, "bidding_strategy.resource_name": "", "bidding_strategy.status": "UNSPECIFIED", "bidding_strategy.target_cpa.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_cpa.cpc_bid_floor_micros": 0, "bidding_strategy.target_cpa.target_cpa_micros": 0, "bidding_strategy.target_impression_share.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_impression_share.location": "UNSPECIFIED", "bidding_strategy.target_impression_share.location_fraction_micros": 0, "bidding_strategy.target_roas.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_roas.cpc_bid_floor_micros": 0, "bidding_strategy.target_roas.target_roas": 0.0, "bidding_strategy.target_spend.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_spend.target_spend_micros": 0, "bidding_strategy.type": "UNSPECIFIED", "segments.date": "2023-08-31"}, "emitted_at": 1697021613015} +{"stream": "campaign_bidding_strategies", "data": {"customer.id": 4651612872, "campaign.id": 19410069806, "bidding_strategy.aligned_campaign_budget_id": 0, "bidding_strategy.campaign_count": 0, "bidding_strategy.currency_code": "", "bidding_strategy.effective_currency_code": "", "bidding_strategy.enhanced_cpc": "", "bidding_strategy.id": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversion_value.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversion_value.target_roas": 0.0, "bidding_strategy.maximize_conversions.cpc_bid_ceiling_micros": 0, "bidding_strategy.maximize_conversions.cpc_bid_floor_micros": 0, "bidding_strategy.maximize_conversions.target_cpa_micros": 0, "bidding_strategy.name": "", "bidding_strategy.non_removed_campaign_count": 0, "bidding_strategy.resource_name": "", "bidding_strategy.status": "UNSPECIFIED", "bidding_strategy.target_cpa.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_cpa.cpc_bid_floor_micros": 0, "bidding_strategy.target_cpa.target_cpa_micros": 0, "bidding_strategy.target_impression_share.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_impression_share.location": "UNSPECIFIED", "bidding_strategy.target_impression_share.location_fraction_micros": 0, "bidding_strategy.target_roas.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_roas.cpc_bid_floor_micros": 0, "bidding_strategy.target_roas.target_roas": 0.0, "bidding_strategy.target_spend.cpc_bid_ceiling_micros": 0, "bidding_strategy.target_spend.target_spend_micros": 0, "bidding_strategy.type": "UNSPECIFIED", "segments.date": "2023-09-01"}, "emitted_at": 1697021613017} +{"stream": "campaign_criterion", "data": {"deleted_at": null, "change_status.last_change_date_time": null, "campaign.id": 9660123292, "campaign_criterion.resource_name": "customers/4651612872/campaignCriteria/9660123292~2124", "campaign_criterion.campaign": "customers/4651612872/campaigns/9660123292", "campaign_criterion.age_range.type": "UNSPECIFIED", "campaign_criterion.mobile_application.name": "", "campaign_criterion.negative": false, "campaign_criterion.youtube_channel.channel_id": "", "campaign_criterion.youtube_video.video_id": ""}, "emitted_at": 1697021613635} +{"stream": "campaign_criterion", "data": {"deleted_at": null, "change_status.last_change_date_time": null, "campaign.id": 9660123292, "campaign_criterion.resource_name": "customers/4651612872/campaignCriteria/9660123292~2250", "campaign_criterion.campaign": "customers/4651612872/campaigns/9660123292", "campaign_criterion.age_range.type": "UNSPECIFIED", "campaign_criterion.mobile_application.name": "", "campaign_criterion.negative": false, "campaign_criterion.youtube_channel.channel_id": "", "campaign_criterion.youtube_video.video_id": ""}, "emitted_at": 1697021613636} +{"stream": "campaign_criterion", "data": {"deleted_at": null, "change_status.last_change_date_time": null, "campaign.id": 9660123292, "campaign_criterion.resource_name": "customers/4651612872/campaignCriteria/9660123292~2276", "campaign_criterion.campaign": "customers/4651612872/campaigns/9660123292", "campaign_criterion.age_range.type": "UNSPECIFIED", "campaign_criterion.mobile_application.name": "", "campaign_criterion.negative": false, "campaign_criterion.youtube_channel.channel_id": "", "campaign_criterion.youtube_video.video_id": ""}, "emitted_at": 1697021613637} +{"stream": "campaign_labels", "data": {"campaign.id": 12124071339, "label.id": 21585034471, "campaign.resource_name": "customers/4651612872/campaigns/12124071339", "campaign_label.resource_name": "customers/4651612872/campaignLabels/12124071339~21585034471", "label.name": "edgao-example-label", "label.resource_name": "customers/4651612872/labels/21585034471"}, "emitted_at": 1697021614088} +{"stream": "campaign_labels", "data": {"campaign.id": 13284356762, "label.id": 21585034471, "campaign.resource_name": "customers/4651612872/campaigns/13284356762", "campaign_label.resource_name": "customers/4651612872/campaignLabels/13284356762~21585034471", "label.name": "edgao-example-label", "label.resource_name": "customers/4651612872/labels/21585034471"}, "emitted_at": 1697021614089} +{"stream": "campaign_labels", "data": {"campaign.id": 16820250687, "label.id": 21906377810, "campaign.resource_name": "customers/4651612872/campaigns/16820250687", "campaign_label.resource_name": "customers/4651612872/campaignLabels/16820250687~21906377810", "label.name": "Test Delete label customer", "label.resource_name": "customers/4651612872/labels/21906377810"}, "emitted_at": 1697021614089} +{"stream": "click_view", "data": {"ad_group.name": "Ad group 1", "click_view.gclid": "Cj0KCQjw9MCnBhCYARIsAB1WQVUIRLTdkamVscRiXquP1eII_RaEdkhIWLZH-4pheDHLztk14iU0q6AaAnAqEALw_wcB", "click_view.ad_group_ad": "customers/4651612872/adGroupAds/144799120517~643022056303", "click_view.keyword": "", "click_view.keyword_info.match_type": "UNSPECIFIED", "click_view.keyword_info.text": "", "campaign.id": 19410069806, "ad_group.id": 144799120517, "segments.date": "2023-08-31", "customer.id": 4651612872, "campaign.name": "Brand awareness and reach-Display-1", "segments.ad_network_type": "CONTENT", "campaign.network_settings.target_content_network": true, "campaign.network_settings.target_google_search": false, "campaign.network_settings.target_partner_search_network": false, "campaign.network_settings.target_search_network": false}, "emitted_at": 1697021614555} +{"stream": "click_view", "data": {"ad_group.name": "Ad group 1", "click_view.gclid": "Cj0KCQjw9MCnBhCYARIsAB1WQVUW_kB70LlXrJjshH0iPvI55YQpnWPqPBbZiyCyh3XThG84yXubRJQaArTeEALw_wcB", "click_view.ad_group_ad": "customers/4651612872/adGroupAds/144799120517~643022056303", "click_view.keyword": "", "click_view.keyword_info.match_type": "UNSPECIFIED", "click_view.keyword_info.text": "", "campaign.id": 19410069806, "ad_group.id": 144799120517, "segments.date": "2023-08-31", "customer.id": 4651612872, "campaign.name": "Brand awareness and reach-Display-1", "segments.ad_network_type": "CONTENT", "campaign.network_settings.target_content_network": true, "campaign.network_settings.target_google_search": false, "campaign.network_settings.target_partner_search_network": false, "campaign.network_settings.target_search_network": false}, "emitted_at": 1697021614556} +{"stream": "click_view", "data": {"ad_group.name": "Ad group 1", "click_view.gclid": "Cj0KCQjw9MCnBhCYARIsAB1WQVVEPTT3Df-dDQUH5AFq2jb7BFWVIF1iouyQLuBlmdZOW2jlPn51t8waAn4UEALw_wcB", "click_view.ad_group_ad": "customers/4651612872/adGroupAds/144799120517~643022056303", "click_view.keyword": "", "click_view.keyword_info.match_type": "UNSPECIFIED", "click_view.keyword_info.text": "", "campaign.id": 19410069806, "ad_group.id": 144799120517, "segments.date": "2023-08-31", "customer.id": 4651612872, "campaign.name": "Brand awareness and reach-Display-1", "segments.ad_network_type": "CONTENT", "campaign.network_settings.target_content_network": true, "campaign.network_settings.target_google_search": false, "campaign.network_settings.target_partner_search_network": false, "campaign.network_settings.target_search_network": false}, "emitted_at": 1697021614557} +{"stream": "labels", "data": {"customer.id": 4651612872, "label.id": 21585034471, "label.name": "edgao-example-label", "label.resource_name": "customers/4651612872/labels/21585034471", "label.status": "ENABLED", "label.text_label.background_color": "#E993EB", "label.text_label.description": "example label for edgao"}, "emitted_at": 1697021616334} +{"stream": "labels", "data": {"customer.id": 4651612872, "label.id": 21902092838, "label.name": "Test Label", "label.resource_name": "customers/4651612872/labels/21902092838", "label.status": "ENABLED", "label.text_label.background_color": "#8BCBD2", "label.text_label.description": "Description to test label"}, "emitted_at": 1697021616335} +{"stream": "labels", "data": {"customer.id": 4651612872, "label.id": 21906377810, "label.name": "Test Delete label customer", "label.resource_name": "customers/4651612872/labels/21906377810", "label.status": "ENABLED", "label.text_label.background_color": "#8266C9", "label.text_label.description": ""}, "emitted_at": 1697021616336} +{"stream": "user_interest", "data": {"user_interest.availabilities": [], "user_interest.launched_to_all": true, "user_interest.name": "Arts & Entertainment", "user_interest.resource_name": "customers/4651612872/userInterests/3", "user_interest.taxonomy_type": "VERTICAL_GEO", "user_interest.user_interest_id": 3, "user_interest.user_interest_parent": ""}, "emitted_at": 1697021618161} +{"stream": "user_interest", "data": {"user_interest.availabilities": [], "user_interest.launched_to_all": true, "user_interest.name": "Computers & Electronics", "user_interest.resource_name": "customers/4651612872/userInterests/5", "user_interest.taxonomy_type": "VERTICAL_GEO", "user_interest.user_interest_id": 5, "user_interest.user_interest_parent": ""}, "emitted_at": 1697021618162} +{"stream": "user_interest", "data": {"user_interest.availabilities": [], "user_interest.launched_to_all": true, "user_interest.name": "Finance", "user_interest.resource_name": "customers/4651612872/userInterests/7", "user_interest.taxonomy_type": "VERTICAL_GEO", "user_interest.user_interest_id": 7, "user_interest.user_interest_parent": ""}, "emitted_at": 1697021618162} +{"stream": "campaigns", "data": {"campaign.accessible_bidding_strategy": "", "campaign.ad_serving_optimization_status": "OPTIMIZE", "campaign.advertising_channel_sub_type": "UNSPECIFIED", "campaign.advertising_channel_type": "DISPLAY", "campaign.app_campaign_setting.app_id": "", "campaign.app_campaign_setting.app_store": "UNSPECIFIED", "campaign.app_campaign_setting.bidding_strategy_goal_type": "UNSPECIFIED", "campaign.base_campaign": "customers/4651612872/campaigns/19410069806", "campaign.bidding_strategy": "", "campaign.bidding_strategy_type": "MANUAL_CPM", "campaign.campaign_budget": "customers/4651612872/campaignBudgets/12199001897", "campaign_budget.amount_micros": 13000000, "campaign.commission.commission_rate_micros": 0, "campaign.dynamic_search_ads_setting.domain_name": "", "campaign.dynamic_search_ads_setting.feeds": [], "campaign.dynamic_search_ads_setting.language_code": "", "campaign.dynamic_search_ads_setting.use_supplied_urls_only": false, "campaign.end_date": "2037-12-30", "campaign.excluded_parent_asset_field_types": [], "campaign.experiment_type": "BASE", "campaign.final_url_suffix": "", "campaign.frequency_caps": [], "campaign.geo_target_type_setting.negative_geo_target_type": "PRESENCE", "campaign.geo_target_type_setting.positive_geo_target_type": "PRESENCE_OR_INTEREST", "campaign.hotel_setting.hotel_center_id": 0, "campaign.id": 19410069806, "campaign.labels": [], "campaign.local_campaign_setting.location_source_type": "UNSPECIFIED", "campaign.manual_cpc.enhanced_cpc_enabled": false, "campaign.manual_cpm": "", "campaign.manual_cpv": "", "campaign.maximize_conversion_value.target_roas": 0.0, "campaign.maximize_conversions.target_cpa_micros": 0, "campaign.name": "Brand awareness and reach-Display-1", "campaign.network_settings.target_content_network": true, "campaign.network_settings.target_google_search": false, "campaign.network_settings.target_partner_search_network": false, "campaign.network_settings.target_search_network": false, "campaign.optimization_goal_setting.optimization_goal_types": [], "campaign.optimization_score": 0.0, "campaign.payment_mode": "UNKNOWN", "campaign.percent_cpc.cpc_bid_ceiling_micros": 0, "campaign.percent_cpc.enhanced_cpc_enabled": false, "campaign.real_time_bidding_setting.opt_in": false, "campaign.resource_name": "customers/4651612872/campaigns/19410069806", "campaign.selective_optimization.conversion_actions": [], "campaign.serving_status": "SERVING", "campaign.shopping_setting.campaign_priority": 0, "campaign.shopping_setting.enable_local": false, "campaign.shopping_setting.merchant_id": 0, "campaign.shopping_setting.sales_country": "", "campaign.start_date": "2022-12-28", "campaign.status": "PAUSED", "campaign.target_cpa.cpc_bid_ceiling_micros": 0, "campaign.target_cpa.cpc_bid_floor_micros": 0, "campaign.target_cpa.target_cpa_micros": 0, "campaign.target_cpm.target_frequency_goal.target_count": 0, "campaign.target_cpm.target_frequency_goal.time_unit": "UNSPECIFIED", "campaign.target_impression_share.cpc_bid_ceiling_micros": 0, "campaign.target_impression_share.location": "UNSPECIFIED", "campaign.target_impression_share.location_fraction_micros": 0, "campaign.target_roas.cpc_bid_ceiling_micros": 0, "campaign.target_roas.cpc_bid_floor_micros": 0, "campaign.target_roas.target_roas": 0.0, "campaign.target_spend.cpc_bid_ceiling_micros": 0, "campaign.target_spend.target_spend_micros": 0, "campaign.targeting_setting.target_restrictions": [], "campaign.tracking_setting.tracking_url": "", "campaign.tracking_url_template": "", "campaign.url_custom_parameters": [], "campaign.vanity_pharma.vanity_pharma_display_url_mode": "UNSPECIFIED", "campaign.vanity_pharma.vanity_pharma_text": "UNSPECIFIED", "campaign.video_brand_safety_suitability": "UNSPECIFIED", "metrics.clicks": 1, "metrics.ctr": 0.0013440860215053765, "metrics.conversions": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 514885, "metrics.impressions": 744.0, "metrics.video_views": 0.0, "metrics.video_quartile_p100_rate": 0.0, "metrics.active_view_cpm": 762792.5925925926, "metrics.active_view_ctr": 0.0014814814814814814, "metrics.active_view_impressions": 675, "metrics.active_view_measurability": 1.0, "metrics.active_view_measurable_cost_micros": 514885, "metrics.active_view_measurable_impressions": 744, "metrics.active_view_viewability": 0.907258064516129, "metrics.average_cost": 514885.0, "metrics.average_cpc": 514885.0, "metrics.average_cpm": 692049.7311827956, "metrics.interactions": 1, "metrics.interaction_event_types": "['InteractionEventType.CLICK']", "metrics.value_per_conversion": 0.0, "metrics.cost_per_conversion": 0.0, "segments.date": "2023-08-31", "segments.hour": 0.0, "segments.ad_network_type": "CONTENT"}, "emitted_at": 1697021622342} +{"stream": "campaigns", "data": {"campaign.accessible_bidding_strategy": "", "campaign.ad_serving_optimization_status": "OPTIMIZE", "campaign.advertising_channel_sub_type": "UNSPECIFIED", "campaign.advertising_channel_type": "DISPLAY", "campaign.app_campaign_setting.app_id": "", "campaign.app_campaign_setting.app_store": "UNSPECIFIED", "campaign.app_campaign_setting.bidding_strategy_goal_type": "UNSPECIFIED", "campaign.base_campaign": "customers/4651612872/campaigns/19410069806", "campaign.bidding_strategy": "", "campaign.bidding_strategy_type": "MANUAL_CPM", "campaign.campaign_budget": "customers/4651612872/campaignBudgets/12199001897", "campaign_budget.amount_micros": 13000000, "campaign.commission.commission_rate_micros": 0, "campaign.dynamic_search_ads_setting.domain_name": "", "campaign.dynamic_search_ads_setting.feeds": [], "campaign.dynamic_search_ads_setting.language_code": "", "campaign.dynamic_search_ads_setting.use_supplied_urls_only": false, "campaign.end_date": "2037-12-30", "campaign.excluded_parent_asset_field_types": [], "campaign.experiment_type": "BASE", "campaign.final_url_suffix": "", "campaign.frequency_caps": [], "campaign.geo_target_type_setting.negative_geo_target_type": "PRESENCE", "campaign.geo_target_type_setting.positive_geo_target_type": "PRESENCE_OR_INTEREST", "campaign.hotel_setting.hotel_center_id": 0, "campaign.id": 19410069806, "campaign.labels": [], "campaign.local_campaign_setting.location_source_type": "UNSPECIFIED", "campaign.manual_cpc.enhanced_cpc_enabled": false, "campaign.manual_cpm": "", "campaign.manual_cpv": "", "campaign.maximize_conversion_value.target_roas": 0.0, "campaign.maximize_conversions.target_cpa_micros": 0, "campaign.name": "Brand awareness and reach-Display-1", "campaign.network_settings.target_content_network": true, "campaign.network_settings.target_google_search": false, "campaign.network_settings.target_partner_search_network": false, "campaign.network_settings.target_search_network": false, "campaign.optimization_goal_setting.optimization_goal_types": [], "campaign.optimization_score": 0.0, "campaign.payment_mode": "UNKNOWN", "campaign.percent_cpc.cpc_bid_ceiling_micros": 0, "campaign.percent_cpc.enhanced_cpc_enabled": false, "campaign.real_time_bidding_setting.opt_in": false, "campaign.resource_name": "customers/4651612872/campaigns/19410069806", "campaign.selective_optimization.conversion_actions": [], "campaign.serving_status": "SERVING", "campaign.shopping_setting.campaign_priority": 0, "campaign.shopping_setting.enable_local": false, "campaign.shopping_setting.merchant_id": 0, "campaign.shopping_setting.sales_country": "", "campaign.start_date": "2022-12-28", "campaign.status": "PAUSED", "campaign.target_cpa.cpc_bid_ceiling_micros": 0, "campaign.target_cpa.cpc_bid_floor_micros": 0, "campaign.target_cpa.target_cpa_micros": 0, "campaign.target_cpm.target_frequency_goal.target_count": 0, "campaign.target_cpm.target_frequency_goal.time_unit": "UNSPECIFIED", "campaign.target_impression_share.cpc_bid_ceiling_micros": 0, "campaign.target_impression_share.location": "UNSPECIFIED", "campaign.target_impression_share.location_fraction_micros": 0, "campaign.target_roas.cpc_bid_ceiling_micros": 0, "campaign.target_roas.cpc_bid_floor_micros": 0, "campaign.target_roas.target_roas": 0.0, "campaign.target_spend.cpc_bid_ceiling_micros": 0, "campaign.target_spend.target_spend_micros": 0, "campaign.targeting_setting.target_restrictions": [], "campaign.tracking_setting.tracking_url": "", "campaign.tracking_url_template": "", "campaign.url_custom_parameters": [], "campaign.vanity_pharma.vanity_pharma_display_url_mode": "UNSPECIFIED", "campaign.vanity_pharma.vanity_pharma_text": "UNSPECIFIED", "campaign.video_brand_safety_suitability": "UNSPECIFIED", "metrics.clicks": 0, "metrics.ctr": 0.0, "metrics.conversions": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 646461, "metrics.impressions": 916.0, "metrics.video_views": 0.0, "metrics.video_quartile_p100_rate": 0.0, "metrics.active_view_cpm": 753451.048951049, "metrics.active_view_ctr": 0.0, "metrics.active_view_impressions": 858, "metrics.active_view_measurability": 1.0, "metrics.active_view_measurable_cost_micros": 646461, "metrics.active_view_measurable_impressions": 916, "metrics.active_view_viewability": 0.9366812227074236, "metrics.average_cost": 0.0, "metrics.average_cpc": 0.0, "metrics.average_cpm": 705743.4497816594, "metrics.interactions": 0, "metrics.interaction_event_types": "[]", "metrics.value_per_conversion": 0.0, "metrics.cost_per_conversion": 0.0, "segments.date": "2023-08-31", "segments.hour": 1.0, "segments.ad_network_type": "CONTENT"}, "emitted_at": 1697021622346} +{"stream": "campaigns", "data": {"campaign.accessible_bidding_strategy": "", "campaign.ad_serving_optimization_status": "OPTIMIZE", "campaign.advertising_channel_sub_type": "UNSPECIFIED", "campaign.advertising_channel_type": "DISPLAY", "campaign.app_campaign_setting.app_id": "", "campaign.app_campaign_setting.app_store": "UNSPECIFIED", "campaign.app_campaign_setting.bidding_strategy_goal_type": "UNSPECIFIED", "campaign.base_campaign": "customers/4651612872/campaigns/19410069806", "campaign.bidding_strategy": "", "campaign.bidding_strategy_type": "MANUAL_CPM", "campaign.campaign_budget": "customers/4651612872/campaignBudgets/12199001897", "campaign_budget.amount_micros": 13000000, "campaign.commission.commission_rate_micros": 0, "campaign.dynamic_search_ads_setting.domain_name": "", "campaign.dynamic_search_ads_setting.feeds": [], "campaign.dynamic_search_ads_setting.language_code": "", "campaign.dynamic_search_ads_setting.use_supplied_urls_only": false, "campaign.end_date": "2037-12-30", "campaign.excluded_parent_asset_field_types": [], "campaign.experiment_type": "BASE", "campaign.final_url_suffix": "", "campaign.frequency_caps": [], "campaign.geo_target_type_setting.negative_geo_target_type": "PRESENCE", "campaign.geo_target_type_setting.positive_geo_target_type": "PRESENCE_OR_INTEREST", "campaign.hotel_setting.hotel_center_id": 0, "campaign.id": 19410069806, "campaign.labels": [], "campaign.local_campaign_setting.location_source_type": "UNSPECIFIED", "campaign.manual_cpc.enhanced_cpc_enabled": false, "campaign.manual_cpm": "", "campaign.manual_cpv": "", "campaign.maximize_conversion_value.target_roas": 0.0, "campaign.maximize_conversions.target_cpa_micros": 0, "campaign.name": "Brand awareness and reach-Display-1", "campaign.network_settings.target_content_network": true, "campaign.network_settings.target_google_search": false, "campaign.network_settings.target_partner_search_network": false, "campaign.network_settings.target_search_network": false, "campaign.optimization_goal_setting.optimization_goal_types": [], "campaign.optimization_score": 0.0, "campaign.payment_mode": "UNKNOWN", "campaign.percent_cpc.cpc_bid_ceiling_micros": 0, "campaign.percent_cpc.enhanced_cpc_enabled": false, "campaign.real_time_bidding_setting.opt_in": false, "campaign.resource_name": "customers/4651612872/campaigns/19410069806", "campaign.selective_optimization.conversion_actions": [], "campaign.serving_status": "SERVING", "campaign.shopping_setting.campaign_priority": 0, "campaign.shopping_setting.enable_local": false, "campaign.shopping_setting.merchant_id": 0, "campaign.shopping_setting.sales_country": "", "campaign.start_date": "2022-12-28", "campaign.status": "PAUSED", "campaign.target_cpa.cpc_bid_ceiling_micros": 0, "campaign.target_cpa.cpc_bid_floor_micros": 0, "campaign.target_cpa.target_cpa_micros": 0, "campaign.target_cpm.target_frequency_goal.target_count": 0, "campaign.target_cpm.target_frequency_goal.time_unit": "UNSPECIFIED", "campaign.target_impression_share.cpc_bid_ceiling_micros": 0, "campaign.target_impression_share.location": "UNSPECIFIED", "campaign.target_impression_share.location_fraction_micros": 0, "campaign.target_roas.cpc_bid_ceiling_micros": 0, "campaign.target_roas.cpc_bid_floor_micros": 0, "campaign.target_roas.target_roas": 0.0, "campaign.target_spend.cpc_bid_ceiling_micros": 0, "campaign.target_spend.target_spend_micros": 0, "campaign.targeting_setting.target_restrictions": [], "campaign.tracking_setting.tracking_url": "", "campaign.tracking_url_template": "", "campaign.url_custom_parameters": [], "campaign.vanity_pharma.vanity_pharma_display_url_mode": "UNSPECIFIED", "campaign.vanity_pharma.vanity_pharma_text": "UNSPECIFIED", "campaign.video_brand_safety_suitability": "UNSPECIFIED", "metrics.clicks": 1, "metrics.ctr": 0.0009746588693957114, "metrics.conversions": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 720408, "metrics.impressions": 1026.0, "metrics.video_views": 0.0, "metrics.video_quartile_p100_rate": 0.0, "metrics.active_view_cpm": 759924.0506329114, "metrics.active_view_ctr": 0.0010548523206751054, "metrics.active_view_impressions": 948, "metrics.active_view_measurability": 1.0, "metrics.active_view_measurable_cost_micros": 720408, "metrics.active_view_measurable_impressions": 1026, "metrics.active_view_viewability": 0.9239766081871345, "metrics.average_cost": 720408.0, "metrics.average_cpc": 720408.0, "metrics.average_cpm": 702152.0467836257, "metrics.interactions": 1, "metrics.interaction_event_types": "['InteractionEventType.CLICK']", "metrics.value_per_conversion": 0.0, "metrics.cost_per_conversion": 0.0, "segments.date": "2023-08-31", "segments.hour": 2.0, "segments.ad_network_type": "CONTENT"}, "emitted_at": 1697021622351} +{"stream": "campaign_budget", "data": {"customer.id": 4651612872, "campaign.id": 19410069806, "campaign_budget.aligned_bidding_strategy_id": 0, "campaign_budget.amount_micros": 13000000, "campaign_budget.delivery_method": ["STANDARD"], "campaign_budget.explicitly_shared": false, "campaign_budget.has_recommended_budget": true, "campaign_budget.id": 12199001897, "campaign_budget.name": "Brand awareness and reach-Display-1", "campaign_budget.period": ["DAILY"], "campaign_budget.recommended_budget_amount_micros": 45000000, "campaign_budget.recommended_budget_estimated_change_weekly_clicks": 0, "campaign_budget.recommended_budget_estimated_change_weekly_cost_micros": 224000000, "campaign_budget.recommended_budget_estimated_change_weekly_interactions": 371, "campaign_budget.recommended_budget_estimated_change_weekly_views": 0, "campaign_budget.reference_count": 1, "campaign_budget.resource_name": "customers/4651612872/campaignBudgets/12199001897", "campaign_budget.status": ["ENABLED"], "campaign_budget.total_amount_micros": 0, "campaign_budget.type": ["STANDARD"], "segments.date": "2023-08-31", "segments.budget_campaign_association_status.campaign": "customers/4651612872/campaigns/19410069806", "segments.budget_campaign_association_status.status": ["ENABLED"], "metrics.all_conversions": 0.0, "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.average_cost": 546497.65, "metrics.average_cpc": 546497.65, "metrics.average_cpe": 0.0, "metrics.average_cpm": 762998.4642233857, "metrics.average_cpv": 0.0, "metrics.clicks": 20, "metrics.conversions": 0.0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 10929953, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.0013961605584642235, "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "metrics.impressions": 14325, "metrics.interaction_event_types": ["InteractionEventType.CLICK"], "metrics.interaction_rate": 0.0013961605584642235, "metrics.interactions": 20, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0}, "emitted_at": 1697021623270} +{"stream": "campaign_budget", "data": {"customer.id": 4651612872, "campaign.id": 19959839954, "campaign_budget.aligned_bidding_strategy_id": 0, "campaign_budget.amount_micros": 10000000, "campaign_budget.delivery_method": ["STANDARD"], "campaign_budget.explicitly_shared": false, "campaign_budget.has_recommended_budget": false, "campaign_budget.id": 12516167002, "campaign_budget.name": "Performance Max-5", "campaign_budget.period": ["DAILY"], "campaign_budget.recommended_budget_amount_micros": 0, "campaign_budget.recommended_budget_estimated_change_weekly_clicks": 0, "campaign_budget.recommended_budget_estimated_change_weekly_cost_micros": 0, "campaign_budget.recommended_budget_estimated_change_weekly_interactions": 0, "campaign_budget.recommended_budget_estimated_change_weekly_views": 0, "campaign_budget.reference_count": 1, "campaign_budget.resource_name": "customers/4651612872/campaignBudgets/12516167002", "campaign_budget.status": ["ENABLED"], "campaign_budget.total_amount_micros": 0, "campaign_budget.type": ["STANDARD"], "segments.date": "2023-08-31", "segments.budget_campaign_association_status.campaign": "customers/4651612872/campaigns/19959839954", "segments.budget_campaign_association_status.status": ["ENABLED"], "metrics.all_conversions": 0.0, "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.average_cost": 0.0, "metrics.average_cpc": 0.0, "metrics.average_cpe": 0.0, "metrics.average_cpm": 0.0, "metrics.average_cpv": 0.0, "metrics.clicks": 0, "metrics.conversions": 0.0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 0, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.0, "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "metrics.impressions": 1, "metrics.interaction_event_types": [], "metrics.interaction_rate": 0.0, "metrics.interactions": 0, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0}, "emitted_at": 1697021623272} +{"stream": "campaign_budget", "data": {"customer.id": 4651612872, "campaign.id": 19410069806, "campaign_budget.aligned_bidding_strategy_id": 0, "campaign_budget.amount_micros": 13000000, "campaign_budget.delivery_method": ["STANDARD"], "campaign_budget.explicitly_shared": false, "campaign_budget.has_recommended_budget": true, "campaign_budget.id": 12199001897, "campaign_budget.name": "Brand awareness and reach-Display-1", "campaign_budget.period": ["DAILY"], "campaign_budget.recommended_budget_amount_micros": 45000000, "campaign_budget.recommended_budget_estimated_change_weekly_clicks": 0, "campaign_budget.recommended_budget_estimated_change_weekly_cost_micros": 224000000, "campaign_budget.recommended_budget_estimated_change_weekly_interactions": 371, "campaign_budget.recommended_budget_estimated_change_weekly_views": 0, "campaign_budget.reference_count": 1, "campaign_budget.resource_name": "customers/4651612872/campaignBudgets/12199001897", "campaign_budget.status": ["ENABLED"], "campaign_budget.total_amount_micros": 0, "campaign_budget.type": ["STANDARD"], "segments.date": "2023-09-01", "segments.budget_campaign_association_status.campaign": "customers/4651612872/campaigns/19410069806", "segments.budget_campaign_association_status.status": ["ENABLED"], "metrics.all_conversions": 0.0, "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.average_cost": 438040.6, "metrics.average_cpc": 438040.6, "metrics.average_cpe": 0.0, "metrics.average_cpm": 741060.0575198783, "metrics.average_cpv": 0.0, "metrics.clicks": 30, "metrics.conversions": 0.0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 13141218, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.001691761123329386, "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "metrics.impressions": 17733, "metrics.interaction_event_types": ["InteractionEventType.CLICK"], "metrics.interaction_rate": 0.001691761123329386, "metrics.interactions": 30, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0}, "emitted_at": 1697021623275} +{"stream": "user_location_report", "data": {"segments.date": "2023-08-31", "segments.day_of_week": "THURSDAY", "segments.month": "2023-08-01", "segments.week": "2023-08-28", "segments.quarter": "2023-07-01", "segments.year": 2023, "segments.ad_network_type": "CONTENT", "customer.currency_code": "USD", "customer.id": 4651612872, "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "user_location_view.country_criterion_id": 2040, "user_location_view.targeting_location": false, "user_location_view.resource_name": "customers/4651612872/userLocationViews/2040~false", "campaign.base_campaign": "customers/4651612872/campaigns/19410069806", "campaign.id": 19410069806, "campaign.name": "Brand awareness and reach-Display-1", "campaign.status": "PAUSED", "ad_group.name": "Ad group 1", "ad_group.status": "ENABLED", "ad_group.base_ad_group": "customers/4651612872/adGroups/144799120517", "metrics.all_conversions": 0.0, "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.average_cost": 0.0, "metrics.average_cpc": 0.0, "metrics.average_cpm": 69333.33333333333, "metrics.average_cpv": 0.0, "metrics.clicks": 0, "metrics.conversions": 0.0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 208, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.0, "metrics.impressions": 3, "metrics.interaction_event_types": [], "metrics.interaction_rate": 0.0, "metrics.interactions": 0, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0}, "emitted_at": 1697021624080} +{"stream": "user_location_report", "data": {"segments.date": "2023-08-31", "segments.day_of_week": "THURSDAY", "segments.month": "2023-08-01", "segments.week": "2023-08-28", "segments.quarter": "2023-07-01", "segments.year": 2023, "segments.ad_network_type": "CONTENT", "customer.currency_code": "USD", "customer.id": 4651612872, "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "user_location_view.country_criterion_id": 2124, "user_location_view.targeting_location": false, "user_location_view.resource_name": "customers/4651612872/userLocationViews/2124~false", "campaign.base_campaign": "customers/4651612872/campaigns/19410069806", "campaign.id": 19410069806, "campaign.name": "Brand awareness and reach-Display-1", "campaign.status": "PAUSED", "ad_group.name": "Ad group 1", "ad_group.status": "ENABLED", "ad_group.base_ad_group": "customers/4651612872/adGroups/144799120517", "metrics.all_conversions": 0.0, "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.average_cost": 0.0, "metrics.average_cpc": 0.0, "metrics.average_cpm": 0.0, "metrics.average_cpv": 0.0, "metrics.clicks": 0, "metrics.conversions": 0.0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 0, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.0, "metrics.impressions": 1, "metrics.interaction_event_types": [], "metrics.interaction_rate": 0.0, "metrics.interactions": 0, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0}, "emitted_at": 1697021624081} +{"stream": "user_location_report", "data": {"segments.date": "2023-08-31", "segments.day_of_week": "THURSDAY", "segments.month": "2023-08-01", "segments.week": "2023-08-28", "segments.quarter": "2023-07-01", "segments.year": 2023, "segments.ad_network_type": "CONTENT", "customer.currency_code": "USD", "customer.id": 4651612872, "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "user_location_view.country_criterion_id": 2344, "user_location_view.targeting_location": false, "user_location_view.resource_name": "customers/4651612872/userLocationViews/2344~false", "campaign.base_campaign": "customers/4651612872/campaigns/19410069806", "campaign.id": 19410069806, "campaign.name": "Brand awareness and reach-Display-1", "campaign.status": "PAUSED", "ad_group.name": "Ad group 1", "ad_group.status": "ENABLED", "ad_group.base_ad_group": "customers/4651612872/adGroups/144799120517", "metrics.all_conversions": 0.0, "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.average_cost": 0.0, "metrics.average_cpc": 0.0, "metrics.average_cpm": 612683.3333333333, "metrics.average_cpv": 0.0, "metrics.clicks": 0, "metrics.conversions": 0.0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 36761, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.0, "metrics.impressions": 60, "metrics.interaction_event_types": [], "metrics.interaction_rate": 0.0, "metrics.interactions": 0, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0}, "emitted_at": 1697021624082} +{"stream": "account_performance_report", "data": {"customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "metrics.active_view_cpm": 322678.1115879828, "metrics.active_view_ctr": 0.001430615164520744, "metrics.active_view_impressions": 699, "metrics.active_view_measurability": 1.0, "metrics.active_view_measurable_cost_micros": 225552, "metrics.active_view_measurable_impressions": 868, "metrics.active_view_viewability": 0.8052995391705069, "segments.ad_network_type": "CONTENT", "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.all_conversions": 0.0, "metrics.average_cost": 225552.0, "metrics.average_cpc": 225552.0, "metrics.average_cpe": 0.0, "metrics.average_cpm": 259852.53456221198, "metrics.average_cpv": 0.0, "customer.manager": false, "metrics.clicks": 1, "metrics.content_budget_lost_impression_share": 0.0, "metrics.content_impression_share": 0.0999, "metrics.content_rank_lost_impression_share": 0.9001, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.conversions": 0.0, "metrics.cost_micros": 225552, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.001152073732718894, "segments.date": "2023-08-31", "segments.day_of_week": "THURSDAY", "segments.device": "DESKTOP", "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "customer.id": 4651612872, "metrics.impressions": 868, "metrics.interaction_rate": 0.001152073732718894, "metrics.interaction_event_types": ["InteractionEventType.CLICK"], "metrics.interactions": 1, "customer.auto_tagging_enabled": true, "customer.test_account": false, "segments.month": "2023-08-01", "segments.quarter": "2023-07-01", "metrics.search_budget_lost_impression_share": 0.0, "metrics.search_exact_match_impression_share": 0.0, "metrics.search_impression_share": 0.0, "metrics.search_rank_lost_impression_share": 0.0, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0, "segments.week": "2023-08-28", "segments.year": 2023}, "emitted_at": 1697021624898} +{"stream": "account_performance_report", "data": {"customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "metrics.active_view_cpm": 849618.904224174, "metrics.active_view_ctr": 0.001589293182768716, "metrics.active_view_impressions": 11955, "metrics.active_view_measurability": 1.0, "metrics.active_view_measurable_cost_micros": 10157194, "metrics.active_view_measurable_impressions": 12717, "metrics.active_view_viewability": 0.9400802075961312, "segments.ad_network_type": "CONTENT", "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.all_conversions": 0.0, "metrics.average_cost": 534589.1578947369, "metrics.average_cpc": 534589.1578947369, "metrics.average_cpe": 0.0, "metrics.average_cpm": 798709.915860659, "metrics.average_cpv": 0.0, "customer.manager": false, "metrics.clicks": 19, "metrics.content_budget_lost_impression_share": 0.9001, "metrics.content_impression_share": 0.0999, "metrics.content_rank_lost_impression_share": 0.008972127521976223, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.conversions": 0.0, "metrics.cost_micros": 10157194, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.0014940630651883305, "segments.date": "2023-08-31", "segments.day_of_week": "THURSDAY", "segments.device": "MOBILE", "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "customer.id": 4651612872, "metrics.impressions": 12717, "metrics.interaction_rate": 0.0014940630651883305, "metrics.interaction_event_types": ["InteractionEventType.CLICK"], "metrics.interactions": 19, "customer.auto_tagging_enabled": true, "customer.test_account": false, "segments.month": "2023-08-01", "segments.quarter": "2023-07-01", "metrics.search_budget_lost_impression_share": 0.0, "metrics.search_exact_match_impression_share": 0.0, "metrics.search_impression_share": 0.0, "metrics.search_rank_lost_impression_share": 0.0, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0, "segments.week": "2023-08-28", "segments.year": 2023}, "emitted_at": 1697021624899} +{"stream": "account_performance_report", "data": {"customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "metrics.active_view_cpm": 768549.1573033708, "metrics.active_view_ctr": 0.0, "metrics.active_view_impressions": 712, "metrics.active_view_measurability": 1.0, "metrics.active_view_measurable_cost_micros": 547207, "metrics.active_view_measurable_impressions": 740, "metrics.active_view_viewability": 0.9621621621621622, "segments.ad_network_type": "CONTENT", "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.all_conversions": 0.0, "metrics.average_cost": 0.0, "metrics.average_cpc": 0.0, "metrics.average_cpe": 0.0, "metrics.average_cpm": 739468.9189189189, "metrics.average_cpv": 0.0, "customer.manager": false, "metrics.clicks": 0, "metrics.content_budget_lost_impression_share": 0.9001, "metrics.content_impression_share": 0.0999, "metrics.content_rank_lost_impression_share": 0.002987251805929501, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.conversions": 0.0, "metrics.cost_micros": 547207, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.0, "segments.date": "2023-08-31", "segments.day_of_week": "THURSDAY", "segments.device": "TABLET", "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "customer.id": 4651612872, "metrics.impressions": 740, "metrics.interaction_rate": 0.0, "metrics.interaction_event_types": [], "metrics.interactions": 0, "customer.auto_tagging_enabled": true, "customer.test_account": false, "segments.month": "2023-08-01", "segments.quarter": "2023-07-01", "metrics.search_budget_lost_impression_share": 0.0, "metrics.search_exact_match_impression_share": 0.0, "metrics.search_impression_share": 0.0, "metrics.search_rank_lost_impression_share": 0.0, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0, "segments.week": "2023-08-28", "segments.year": 2023}, "emitted_at": 1697021624901} +{"stream": "display_topics_performance_report", "data": {"topic_view.resource_name": "customers/4651612872/topicViews/144799120517~945751797", "customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "metrics.active_view_cpm": 443457.14285714284, "metrics.active_view_ctr": 0.0, "metrics.active_view_impressions": 35, "metrics.active_view_measurability": 1.0, "metrics.active_view_measurable_cost_micros": 15521, "metrics.active_view_measurable_impressions": 44, "metrics.active_view_viewability": 0.7954545454545454, "ad_group.id": 144799120517, "ad_group.name": "Ad group 1", "ad_group.status": "ENABLED", "segments.ad_network_type": "CONTENT", "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.all_conversions": 0.0, "metrics.average_cost": 0.0, "metrics.average_cpc": 0.0, "metrics.average_cpe": 0.0, "metrics.average_cpm": 352750.0, "metrics.average_cpv": 0.0, "ad_group.base_ad_group": "customers/4651612872/adGroups/144799120517", "campaign.base_campaign": "customers/4651612872/campaigns/19410069806", "ad_group_criterion.bid_modifier": 0.0, "campaign.bidding_strategy": "", "campaign.bidding_strategy_type": "MANUAL_CPM", "campaign.id": 19410069806, "campaign.name": "Brand awareness and reach-Display-1", "campaign.status": "PAUSED", "metrics.clicks": 0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.conversions": 0.0, "metrics.cost_micros": 15521, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "ad_group_criterion.effective_cpc_bid_micros": 10000, "ad_group_criterion.effective_cpc_bid_source": "AD_GROUP", "ad_group_criterion.effective_cpm_bid_micros": 2000000, "ad_group_criterion.effective_cpm_bid_source": "AD_GROUP", "ad_group_criterion.topic.path": ["", "Online Communities"], "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.0, "segments.date": "2023-08-31", "segments.day_of_week": "THURSDAY", "segments.device": "DESKTOP", "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "customer.id": 4651612872, "ad_group_criterion.final_mobile_urls": [], "ad_group_criterion.final_urls": [], "metrics.gmail_forwards": 0, "metrics.gmail_saves": 0, "metrics.gmail_secondary_clicks": 0, "ad_group_criterion.criterion_id": 945751797, "metrics.impressions": 44, "metrics.interaction_rate": 0.0, "metrics.interaction_event_types": [], "metrics.interactions": 0, "ad_group_criterion.negative": false, "ad_group.targeting_setting.target_restrictions": ["targeting_dimension: AGE_RANGE\nbid_only: true\n", "targeting_dimension: GENDER\nbid_only: true\n", "targeting_dimension: PARENTAL_STATUS\nbid_only: true\n", "targeting_dimension: INCOME_RANGE\nbid_only: true\n", "targeting_dimension: TOPIC\nbid_only: true\n"], "segments.month": "2023-08-01", "segments.quarter": "2023-07-01", "ad_group_criterion.status": "ENABLED", "ad_group_criterion.tracking_url_template": "", "ad_group_criterion.url_custom_parameters": [], "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "ad_group_criterion.topic.topic_constant": "topicConstants/299", "metrics.video_quartile_p100_rate": 0.0, "metrics.video_quartile_p25_rate": 0.0, "metrics.video_quartile_p50_rate": 0.0, "metrics.video_quartile_p75_rate": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0, "segments.week": "2023-08-28", "segments.year": 2023}, "emitted_at": 1697021626112} +{"stream": "display_topics_performance_report", "data": {"topic_view.resource_name": "customers/4651612872/topicViews/144799120517~1543464477", "customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "metrics.active_view_cpm": 422666.6666666667, "metrics.active_view_ctr": 0.0, "metrics.active_view_impressions": 3, "metrics.active_view_measurability": 1.0, "metrics.active_view_measurable_cost_micros": 1268, "metrics.active_view_measurable_impressions": 11, "metrics.active_view_viewability": 0.2727272727272727, "ad_group.id": 144799120517, "ad_group.name": "Ad group 1", "ad_group.status": "ENABLED", "segments.ad_network_type": "CONTENT", "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.all_conversions": 0.0, "metrics.average_cost": 0.0, "metrics.average_cpc": 0.0, "metrics.average_cpe": 0.0, "metrics.average_cpm": 115272.72727272726, "metrics.average_cpv": 0.0, "ad_group.base_ad_group": "customers/4651612872/adGroups/144799120517", "campaign.base_campaign": "customers/4651612872/campaigns/19410069806", "ad_group_criterion.bid_modifier": 0.0, "campaign.bidding_strategy": "", "campaign.bidding_strategy_type": "MANUAL_CPM", "campaign.id": 19410069806, "campaign.name": "Brand awareness and reach-Display-1", "campaign.status": "PAUSED", "metrics.clicks": 0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.conversions": 0.0, "metrics.cost_micros": 1268, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "ad_group_criterion.effective_cpc_bid_micros": 10000, "ad_group_criterion.effective_cpc_bid_source": "AD_GROUP", "ad_group_criterion.effective_cpm_bid_micros": 2000000, "ad_group_criterion.effective_cpm_bid_source": "AD_GROUP", "ad_group_criterion.topic.path": ["", "Shopping"], "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.0, "segments.date": "2023-08-31", "segments.day_of_week": "THURSDAY", "segments.device": "DESKTOP", "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "customer.id": 4651612872, "ad_group_criterion.final_mobile_urls": [], "ad_group_criterion.final_urls": [], "metrics.gmail_forwards": 0, "metrics.gmail_saves": 0, "metrics.gmail_secondary_clicks": 0, "ad_group_criterion.criterion_id": 1543464477, "metrics.impressions": 11, "metrics.interaction_rate": 0.0, "metrics.interaction_event_types": [], "metrics.interactions": 0, "ad_group_criterion.negative": false, "ad_group.targeting_setting.target_restrictions": ["targeting_dimension: AGE_RANGE\nbid_only: true\n", "targeting_dimension: GENDER\nbid_only: true\n", "targeting_dimension: PARENTAL_STATUS\nbid_only: true\n", "targeting_dimension: INCOME_RANGE\nbid_only: true\n", "targeting_dimension: TOPIC\nbid_only: true\n"], "segments.month": "2023-08-01", "segments.quarter": "2023-07-01", "ad_group_criterion.status": "ENABLED", "ad_group_criterion.tracking_url_template": "", "ad_group_criterion.url_custom_parameters": [], "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "ad_group_criterion.topic.topic_constant": "topicConstants/18", "metrics.video_quartile_p100_rate": 0.0, "metrics.video_quartile_p25_rate": 0.0, "metrics.video_quartile_p50_rate": 0.0, "metrics.video_quartile_p75_rate": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0, "segments.week": "2023-08-28", "segments.year": 2023}, "emitted_at": 1697021626115} +{"stream": "display_topics_performance_report", "data": {"topic_view.resource_name": "customers/4651612872/topicViews/144799120517~1543465137", "customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "metrics.active_view_cpm": 312102.08816705336, "metrics.active_view_ctr": 0.002320185614849188, "metrics.active_view_impressions": 431, "metrics.active_view_measurability": 1.0, "metrics.active_view_measurable_cost_micros": 134516, "metrics.active_view_measurable_impressions": 509, "metrics.active_view_viewability": 0.8467583497053045, "ad_group.id": 144799120517, "ad_group.name": "Ad group 1", "ad_group.status": "ENABLED", "segments.ad_network_type": "CONTENT", "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.all_conversions": 0.0, "metrics.average_cost": 134516.0, "metrics.average_cpc": 134516.0, "metrics.average_cpe": 0.0, "metrics.average_cpm": 264275.0491159135, "metrics.average_cpv": 0.0, "ad_group.base_ad_group": "customers/4651612872/adGroups/144799120517", "campaign.base_campaign": "customers/4651612872/campaigns/19410069806", "ad_group_criterion.bid_modifier": 0.0, "campaign.bidding_strategy": "", "campaign.bidding_strategy_type": "MANUAL_CPM", "campaign.id": 19410069806, "campaign.name": "Brand awareness and reach-Display-1", "campaign.status": "PAUSED", "metrics.clicks": 1, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.conversions": 0.0, "metrics.cost_micros": 134516, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "ad_group_criterion.effective_cpc_bid_micros": 10000, "ad_group_criterion.effective_cpc_bid_source": "AD_GROUP", "ad_group_criterion.effective_cpm_bid_micros": 2000000, "ad_group_criterion.effective_cpm_bid_source": "AD_GROUP", "ad_group_criterion.topic.path": ["", "Arts & Entertainment"], "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.0019646365422396855, "segments.date": "2023-08-31", "segments.day_of_week": "THURSDAY", "segments.device": "DESKTOP", "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "customer.id": 4651612872, "ad_group_criterion.final_mobile_urls": [], "ad_group_criterion.final_urls": [], "metrics.gmail_forwards": 0, "metrics.gmail_saves": 0, "metrics.gmail_secondary_clicks": 0, "ad_group_criterion.criterion_id": 1543465137, "metrics.impressions": 509, "metrics.interaction_rate": 0.0019646365422396855, "metrics.interaction_event_types": ["InteractionEventType.CLICK"], "metrics.interactions": 1, "ad_group_criterion.negative": false, "ad_group.targeting_setting.target_restrictions": ["targeting_dimension: AGE_RANGE\nbid_only: true\n", "targeting_dimension: GENDER\nbid_only: true\n", "targeting_dimension: PARENTAL_STATUS\nbid_only: true\n", "targeting_dimension: INCOME_RANGE\nbid_only: true\n", "targeting_dimension: TOPIC\nbid_only: true\n"], "segments.month": "2023-08-01", "segments.quarter": "2023-07-01", "ad_group_criterion.status": "ENABLED", "ad_group_criterion.tracking_url_template": "", "ad_group_criterion.url_custom_parameters": [], "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "ad_group_criterion.topic.topic_constant": "topicConstants/3", "metrics.video_quartile_p100_rate": 0.0, "metrics.video_quartile_p25_rate": 0.0, "metrics.video_quartile_p50_rate": 0.0, "metrics.video_quartile_p75_rate": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0, "segments.week": "2023-08-28", "segments.year": 2023}, "emitted_at": 1697021626117} +{"stream": "ad_group_ad_report", "data": {"ad_group_ad.ad.legacy_responsive_display_ad.accent_color": "", "ad_group.id": 144799120517, "customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "metrics.active_view_cpm": 817743.0046386354, "metrics.active_view_ctr": 0.0014963339817447255, "metrics.active_view_impressions": 13366, "metrics.active_view_measurability": 1.0, "metrics.active_view_measurable_cost_micros": 10929953, "metrics.active_view_measurable_impressions": 14325, "metrics.active_view_viewability": 0.9330541012216405, "ad_group_ad.ad_group": "customers/4651612872/adGroups/144799120517", "ad_group.name": "Ad group 1", "ad_group.status": "ENABLED", "segments.ad_network_type": "CONTENT", "ad_group_ad.ad_strength": "AVERAGE", "ad_group_ad.ad.type": "RESPONSIVE_DISPLAY_AD", "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.all_conversions": 0.0, "ad_group_ad.ad.legacy_responsive_display_ad.allow_flexible_color": false, "ad_group_ad.ad.added_by_google_ads": false, "metrics.average_cost": 546497.65, "metrics.average_cpc": 546497.65, "metrics.average_cpe": 0.0, "metrics.average_cpm": 762998.4642233857, "metrics.average_cpv": 0.0, "metrics.average_page_views": 0.0, "metrics.average_time_on_site": 0.0, "ad_group.base_ad_group": "customers/4651612872/adGroups/144799120517", "campaign.base_campaign": "customers/4651612872/campaigns/19410069806", "metrics.bounce_rate": 0.0, "ad_group_ad.ad.legacy_responsive_display_ad.business_name": "", "ad_group_ad.ad.legacy_responsive_display_ad.call_to_action_text": "", "campaign.id": 19410069806, "campaign.name": "Brand awareness and reach-Display-1", "campaign.status": "PAUSED", "metrics.clicks": 20, "ad_group_ad.policy_summary.approval_status": "APPROVED", "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.conversions": 0.0, "metrics.cost_micros": 10929953, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cost_per_current_model_attributed_conversion": 0.0, "ad_group_ad.ad.final_mobile_urls": [], "ad_group_ad.ad.final_urls": ["https://airbyte.com"], "ad_group_ad.ad.tracking_url_template": "", "ad_group_ad.ad.url_custom_parameters": [], "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.0013961605584642235, "metrics.current_model_attributed_conversions_value": 0.0, "metrics.current_model_attributed_conversions": 0.0, "segments.date": "2023-08-31", "segments.day_of_week": "THURSDAY", "ad_group_ad.ad.expanded_text_ad.description": "", "ad_group_ad.ad.text_ad.description1": "", "ad_group_ad.ad.text_ad.description2": "", "ad_group_ad.ad.device_preference": "UNSPECIFIED", "ad_group_ad.ad.display_url": "", "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "ad_group_ad.ad.legacy_responsive_display_ad.logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.marketing_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_marketing_image": "", "ad_group_ad.ad.expanded_dynamic_search_ad.description": "", "ad_group_ad.ad.expanded_text_ad.description2": "", "ad_group_ad.ad.expanded_text_ad.headline_part3": "", "customer.id": 4651612872, "ad_group_ad.ad.legacy_responsive_display_ad.format_setting": "UNSPECIFIED", "metrics.gmail_forwards": 0, "metrics.gmail_saves": 0, "metrics.gmail_secondary_clicks": 0, "ad_group_ad.ad.text_ad.headline": "", "ad_group_ad.ad.expanded_text_ad.headline_part1": "", "ad_group_ad.ad.expanded_text_ad.headline_part2": "", "ad_group_ad.ad.id": 643022056303, "ad_group_ad.ad.image_ad.image_url": "", "ad_group_ad.ad.image_ad.pixel_height": 0, "ad_group_ad.ad.image_ad.pixel_width": 0, "ad_group_ad.ad.image_ad.mime_type": "UNSPECIFIED", "ad_group_ad.ad.image_ad.name": "", "metrics.impressions": 14325, "metrics.interaction_rate": 0.0013961605584642235, "metrics.interaction_event_types": ["InteractionEventType.CLICK"], "metrics.interactions": 20, "ad_group_ad.ad.legacy_responsive_display_ad.long_headline": "", "ad_group_ad.ad.legacy_responsive_display_ad.main_color": "", "segments.month": "2023-08-01", "ad_group_ad.ad.responsive_display_ad.accent_color": "", "ad_group_ad.ad.responsive_display_ad.allow_flexible_color": true, "ad_group_ad.ad.responsive_display_ad.business_name": "c", "ad_group_ad.ad.responsive_display_ad.call_to_action_text": "", "ad_group_ad.ad.responsive_display_ad.descriptions": ["text: \"Airbyte | Open-Source Data Integration Platform | ELT tool\"\n", "text: \"\u30c6\u30ec\u30d3CM\u3067\u8a71\u984c\"\n", "text: \"modern ELT\"\n"], "ad_group_ad.ad.responsive_display_ad.price_prefix": "", "ad_group_ad.ad.responsive_display_ad.promo_text": "", "ad_group_ad.ad.responsive_display_ad.format_setting": "ALL_FORMATS", "ad_group_ad.ad.responsive_display_ad.headlines": ["text: \"ELT\"\n"], "ad_group_ad.ad.responsive_display_ad.logo_images": [], "ad_group_ad.ad.responsive_display_ad.square_logo_images": [], "ad_group_ad.ad.responsive_display_ad.long_headline": "text: \"ELT data portability\"\n", "ad_group_ad.ad.responsive_display_ad.main_color": "", "ad_group_ad.ad.responsive_display_ad.marketing_images": ["asset: \"customers/4651612872/assets/39906715549\"\n", "asset: \"customers/4651612872/assets/40179016327\"\n"], "ad_group_ad.ad.responsive_display_ad.square_marketing_images": ["asset: \"customers/4651612872/assets/39906715552\"\n", "asset: \"customers/4651612872/assets/40179014782\"\n"], "ad_group_ad.ad.responsive_display_ad.youtube_videos": [], "ad_group_ad.ad.expanded_text_ad.path1": "", "ad_group_ad.ad.expanded_text_ad.path2": "", "metrics.percent_new_visitors": 0.0, "ad_group_ad.ad.legacy_responsive_display_ad.price_prefix": "", "ad_group_ad.ad.legacy_responsive_display_ad.promo_text": "", "segments.quarter": "2023-07-01", "ad_group_ad.ad.responsive_search_ad.descriptions": [], "ad_group_ad.ad.responsive_search_ad.headlines": [], "ad_group_ad.ad.responsive_search_ad.path1": "", "ad_group_ad.ad.responsive_search_ad.path2": "", "ad_group_ad.ad.legacy_responsive_display_ad.short_headline": "", "ad_group_ad.status": "ENABLED", "ad_group_ad.ad.system_managed_resource_source": "UNSPECIFIED", "metrics.top_impression_percentage": 0.0, "ad_group_ad.ad.app_ad.descriptions": [], "ad_group_ad.ad.app_ad.headlines": [], "ad_group_ad.ad.app_ad.html5_media_bundles": [], "ad_group_ad.ad.app_ad.images": [], "ad_group_ad.ad.app_ad.mandatory_ad_text": "", "ad_group_ad.ad.app_ad.youtube_videos": [], "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.value_per_current_model_attributed_conversion": 0.0, "metrics.video_quartile_p100_rate": 0.0, "metrics.video_quartile_p25_rate": 0.0, "metrics.video_quartile_p50_rate": 0.0, "metrics.video_quartile_p75_rate": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0, "segments.week": "2023-08-28", "segments.year": 2023}, "emitted_at": 1697021630067} +{"stream": "ad_group_ad_report", "data": {"ad_group_ad.ad.legacy_responsive_display_ad.accent_color": "", "ad_group.id": 144799120517, "customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "metrics.active_view_cpm": 801880.5223334146, "metrics.active_view_ctr": 0.00183060776177691, "metrics.active_view_impressions": 16388, "metrics.active_view_measurability": 1.0, "metrics.active_view_measurable_cost_micros": 13141218, "metrics.active_view_measurable_impressions": 17733, "metrics.active_view_viewability": 0.9241527096373992, "ad_group_ad.ad_group": "customers/4651612872/adGroups/144799120517", "ad_group.name": "Ad group 1", "ad_group.status": "ENABLED", "segments.ad_network_type": "CONTENT", "ad_group_ad.ad_strength": "AVERAGE", "ad_group_ad.ad.type": "RESPONSIVE_DISPLAY_AD", "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.all_conversions": 0.0, "ad_group_ad.ad.legacy_responsive_display_ad.allow_flexible_color": false, "ad_group_ad.ad.added_by_google_ads": false, "metrics.average_cost": 438040.6, "metrics.average_cpc": 438040.6, "metrics.average_cpe": 0.0, "metrics.average_cpm": 741060.0575198783, "metrics.average_cpv": 0.0, "metrics.average_page_views": 0.0, "metrics.average_time_on_site": 0.0, "ad_group.base_ad_group": "customers/4651612872/adGroups/144799120517", "campaign.base_campaign": "customers/4651612872/campaigns/19410069806", "metrics.bounce_rate": 0.0, "ad_group_ad.ad.legacy_responsive_display_ad.business_name": "", "ad_group_ad.ad.legacy_responsive_display_ad.call_to_action_text": "", "campaign.id": 19410069806, "campaign.name": "Brand awareness and reach-Display-1", "campaign.status": "PAUSED", "metrics.clicks": 30, "ad_group_ad.policy_summary.approval_status": "APPROVED", "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.conversions": 0.0, "metrics.cost_micros": 13141218, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cost_per_current_model_attributed_conversion": 0.0, "ad_group_ad.ad.final_mobile_urls": [], "ad_group_ad.ad.final_urls": ["https://airbyte.com"], "ad_group_ad.ad.tracking_url_template": "", "ad_group_ad.ad.url_custom_parameters": [], "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.001691761123329386, "metrics.current_model_attributed_conversions_value": 0.0, "metrics.current_model_attributed_conversions": 0.0, "segments.date": "2023-09-01", "segments.day_of_week": "FRIDAY", "ad_group_ad.ad.expanded_text_ad.description": "", "ad_group_ad.ad.text_ad.description1": "", "ad_group_ad.ad.text_ad.description2": "", "ad_group_ad.ad.device_preference": "UNSPECIFIED", "ad_group_ad.ad.display_url": "", "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "ad_group_ad.ad.legacy_responsive_display_ad.logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.marketing_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_marketing_image": "", "ad_group_ad.ad.expanded_dynamic_search_ad.description": "", "ad_group_ad.ad.expanded_text_ad.description2": "", "ad_group_ad.ad.expanded_text_ad.headline_part3": "", "customer.id": 4651612872, "ad_group_ad.ad.legacy_responsive_display_ad.format_setting": "UNSPECIFIED", "metrics.gmail_forwards": 0, "metrics.gmail_saves": 0, "metrics.gmail_secondary_clicks": 0, "ad_group_ad.ad.text_ad.headline": "", "ad_group_ad.ad.expanded_text_ad.headline_part1": "", "ad_group_ad.ad.expanded_text_ad.headline_part2": "", "ad_group_ad.ad.id": 643022056303, "ad_group_ad.ad.image_ad.image_url": "", "ad_group_ad.ad.image_ad.pixel_height": 0, "ad_group_ad.ad.image_ad.pixel_width": 0, "ad_group_ad.ad.image_ad.mime_type": "UNSPECIFIED", "ad_group_ad.ad.image_ad.name": "", "metrics.impressions": 17733, "metrics.interaction_rate": 0.001691761123329386, "metrics.interaction_event_types": ["InteractionEventType.CLICK"], "metrics.interactions": 30, "ad_group_ad.ad.legacy_responsive_display_ad.long_headline": "", "ad_group_ad.ad.legacy_responsive_display_ad.main_color": "", "segments.month": "2023-09-01", "ad_group_ad.ad.responsive_display_ad.accent_color": "", "ad_group_ad.ad.responsive_display_ad.allow_flexible_color": true, "ad_group_ad.ad.responsive_display_ad.business_name": "c", "ad_group_ad.ad.responsive_display_ad.call_to_action_text": "", "ad_group_ad.ad.responsive_display_ad.descriptions": ["text: \"Airbyte | Open-Source Data Integration Platform | ELT tool\"\n", "text: \"\u30c6\u30ec\u30d3CM\u3067\u8a71\u984c\"\n", "text: \"modern ELT\"\n"], "ad_group_ad.ad.responsive_display_ad.price_prefix": "", "ad_group_ad.ad.responsive_display_ad.promo_text": "", "ad_group_ad.ad.responsive_display_ad.format_setting": "ALL_FORMATS", "ad_group_ad.ad.responsive_display_ad.headlines": ["text: \"ELT\"\n"], "ad_group_ad.ad.responsive_display_ad.logo_images": [], "ad_group_ad.ad.responsive_display_ad.square_logo_images": [], "ad_group_ad.ad.responsive_display_ad.long_headline": "text: \"ELT data portability\"\n", "ad_group_ad.ad.responsive_display_ad.main_color": "", "ad_group_ad.ad.responsive_display_ad.marketing_images": ["asset: \"customers/4651612872/assets/39906715549\"\n", "asset: \"customers/4651612872/assets/40179016327\"\n"], "ad_group_ad.ad.responsive_display_ad.square_marketing_images": ["asset: \"customers/4651612872/assets/39906715552\"\n", "asset: \"customers/4651612872/assets/40179014782\"\n"], "ad_group_ad.ad.responsive_display_ad.youtube_videos": [], "ad_group_ad.ad.expanded_text_ad.path1": "", "ad_group_ad.ad.expanded_text_ad.path2": "", "metrics.percent_new_visitors": 0.0, "ad_group_ad.ad.legacy_responsive_display_ad.price_prefix": "", "ad_group_ad.ad.legacy_responsive_display_ad.promo_text": "", "segments.quarter": "2023-07-01", "ad_group_ad.ad.responsive_search_ad.descriptions": [], "ad_group_ad.ad.responsive_search_ad.headlines": [], "ad_group_ad.ad.responsive_search_ad.path1": "", "ad_group_ad.ad.responsive_search_ad.path2": "", "ad_group_ad.ad.legacy_responsive_display_ad.short_headline": "", "ad_group_ad.status": "ENABLED", "ad_group_ad.ad.system_managed_resource_source": "UNSPECIFIED", "metrics.top_impression_percentage": 0.0, "ad_group_ad.ad.app_ad.descriptions": [], "ad_group_ad.ad.app_ad.headlines": [], "ad_group_ad.ad.app_ad.html5_media_bundles": [], "ad_group_ad.ad.app_ad.images": [], "ad_group_ad.ad.app_ad.mandatory_ad_text": "", "ad_group_ad.ad.app_ad.youtube_videos": [], "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.value_per_current_model_attributed_conversion": 0.0, "metrics.video_quartile_p100_rate": 0.0, "metrics.video_quartile_p25_rate": 0.0, "metrics.video_quartile_p50_rate": 0.0, "metrics.video_quartile_p75_rate": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0, "segments.week": "2023-08-28", "segments.year": 2023}, "emitted_at": 1697021630074} +{"stream": "ad_group_ad_report", "data": {"ad_group_ad.ad.legacy_responsive_display_ad.accent_color": "", "ad_group.id": 144799120517, "customer.currency_code": "USD", "customer.descriptive_name": "Airbyte", "customer.time_zone": "America/Los_Angeles", "metrics.active_view_cpm": 789581.4073226545, "metrics.active_view_ctr": 0.002059496567505721, "metrics.active_view_impressions": 17480, "metrics.active_view_measurability": 1.0, "metrics.active_view_measurable_cost_micros": 13801883, "metrics.active_view_measurable_impressions": 19049, "metrics.active_view_viewability": 0.917633471573311, "ad_group_ad.ad_group": "customers/4651612872/adGroups/144799120517", "ad_group.name": "Ad group 1", "ad_group.status": "ENABLED", "segments.ad_network_type": "CONTENT", "ad_group_ad.ad_strength": "AVERAGE", "ad_group_ad.ad.type": "RESPONSIVE_DISPLAY_AD", "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.all_conversions": 0.0, "ad_group_ad.ad.legacy_responsive_display_ad.allow_flexible_color": false, "ad_group_ad.ad.added_by_google_ads": false, "metrics.average_cost": 383385.6388888889, "metrics.average_cpc": 383385.6388888889, "metrics.average_cpe": 0.0, "metrics.average_cpm": 724546.3278912279, "metrics.average_cpv": 0.0, "metrics.average_page_views": 0.0, "metrics.average_time_on_site": 0.0, "ad_group.base_ad_group": "customers/4651612872/adGroups/144799120517", "campaign.base_campaign": "customers/4651612872/campaigns/19410069806", "metrics.bounce_rate": 0.0, "ad_group_ad.ad.legacy_responsive_display_ad.business_name": "", "ad_group_ad.ad.legacy_responsive_display_ad.call_to_action_text": "", "campaign.id": 19410069806, "campaign.name": "Brand awareness and reach-Display-1", "campaign.status": "PAUSED", "metrics.clicks": 36, "ad_group_ad.policy_summary.approval_status": "APPROVED", "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.conversions": 0.0, "metrics.cost_micros": 13801883, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cost_per_current_model_attributed_conversion": 0.0, "ad_group_ad.ad.final_mobile_urls": [], "ad_group_ad.ad.final_urls": ["https://airbyte.com"], "ad_group_ad.ad.tracking_url_template": "", "ad_group_ad.ad.url_custom_parameters": [], "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.0018898629849335923, "metrics.current_model_attributed_conversions_value": 0.0, "metrics.current_model_attributed_conversions": 0.0, "segments.date": "2023-09-02", "segments.day_of_week": "SATURDAY", "ad_group_ad.ad.expanded_text_ad.description": "", "ad_group_ad.ad.text_ad.description1": "", "ad_group_ad.ad.text_ad.description2": "", "ad_group_ad.ad.device_preference": "UNSPECIFIED", "ad_group_ad.ad.display_url": "", "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "ad_group_ad.ad.legacy_responsive_display_ad.logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_logo_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.marketing_image": "", "ad_group_ad.ad.legacy_responsive_display_ad.square_marketing_image": "", "ad_group_ad.ad.expanded_dynamic_search_ad.description": "", "ad_group_ad.ad.expanded_text_ad.description2": "", "ad_group_ad.ad.expanded_text_ad.headline_part3": "", "customer.id": 4651612872, "ad_group_ad.ad.legacy_responsive_display_ad.format_setting": "UNSPECIFIED", "metrics.gmail_forwards": 0, "metrics.gmail_saves": 0, "metrics.gmail_secondary_clicks": 0, "ad_group_ad.ad.text_ad.headline": "", "ad_group_ad.ad.expanded_text_ad.headline_part1": "", "ad_group_ad.ad.expanded_text_ad.headline_part2": "", "ad_group_ad.ad.id": 643022056303, "ad_group_ad.ad.image_ad.image_url": "", "ad_group_ad.ad.image_ad.pixel_height": 0, "ad_group_ad.ad.image_ad.pixel_width": 0, "ad_group_ad.ad.image_ad.mime_type": "UNSPECIFIED", "ad_group_ad.ad.image_ad.name": "", "metrics.impressions": 19049, "metrics.interaction_rate": 0.0018898629849335923, "metrics.interaction_event_types": ["InteractionEventType.CLICK"], "metrics.interactions": 36, "ad_group_ad.ad.legacy_responsive_display_ad.long_headline": "", "ad_group_ad.ad.legacy_responsive_display_ad.main_color": "", "segments.month": "2023-09-01", "ad_group_ad.ad.responsive_display_ad.accent_color": "", "ad_group_ad.ad.responsive_display_ad.allow_flexible_color": true, "ad_group_ad.ad.responsive_display_ad.business_name": "c", "ad_group_ad.ad.responsive_display_ad.call_to_action_text": "", "ad_group_ad.ad.responsive_display_ad.descriptions": ["text: \"Airbyte | Open-Source Data Integration Platform | ELT tool\"\n", "text: \"\u30c6\u30ec\u30d3CM\u3067\u8a71\u984c\"\n", "text: \"modern ELT\"\n"], "ad_group_ad.ad.responsive_display_ad.price_prefix": "", "ad_group_ad.ad.responsive_display_ad.promo_text": "", "ad_group_ad.ad.responsive_display_ad.format_setting": "ALL_FORMATS", "ad_group_ad.ad.responsive_display_ad.headlines": ["text: \"ELT\"\n"], "ad_group_ad.ad.responsive_display_ad.logo_images": [], "ad_group_ad.ad.responsive_display_ad.square_logo_images": [], "ad_group_ad.ad.responsive_display_ad.long_headline": "text: \"ELT data portability\"\n", "ad_group_ad.ad.responsive_display_ad.main_color": "", "ad_group_ad.ad.responsive_display_ad.marketing_images": ["asset: \"customers/4651612872/assets/39906715549\"\n", "asset: \"customers/4651612872/assets/40179016327\"\n"], "ad_group_ad.ad.responsive_display_ad.square_marketing_images": ["asset: \"customers/4651612872/assets/39906715552\"\n", "asset: \"customers/4651612872/assets/40179014782\"\n"], "ad_group_ad.ad.responsive_display_ad.youtube_videos": [], "ad_group_ad.ad.expanded_text_ad.path1": "", "ad_group_ad.ad.expanded_text_ad.path2": "", "metrics.percent_new_visitors": 0.0, "ad_group_ad.ad.legacy_responsive_display_ad.price_prefix": "", "ad_group_ad.ad.legacy_responsive_display_ad.promo_text": "", "segments.quarter": "2023-07-01", "ad_group_ad.ad.responsive_search_ad.descriptions": [], "ad_group_ad.ad.responsive_search_ad.headlines": [], "ad_group_ad.ad.responsive_search_ad.path1": "", "ad_group_ad.ad.responsive_search_ad.path2": "", "ad_group_ad.ad.legacy_responsive_display_ad.short_headline": "", "ad_group_ad.status": "ENABLED", "ad_group_ad.ad.system_managed_resource_source": "UNSPECIFIED", "metrics.top_impression_percentage": 0.0, "ad_group_ad.ad.app_ad.descriptions": [], "ad_group_ad.ad.app_ad.headlines": [], "ad_group_ad.ad.app_ad.html5_media_bundles": [], "ad_group_ad.ad.app_ad.images": [], "ad_group_ad.ad.app_ad.mandatory_ad_text": "", "ad_group_ad.ad.app_ad.youtube_videos": [], "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.value_per_current_model_attributed_conversion": 0.0, "metrics.video_quartile_p100_rate": 0.0, "metrics.video_quartile_p25_rate": 0.0, "metrics.video_quartile_p50_rate": 0.0, "metrics.video_quartile_p75_rate": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0, "segments.week": "2023-08-28", "segments.year": 2023}, "emitted_at": 1697021630081} +{"stream": "geographic_report", "data": {"customer.id": 4651612872, "customer.descriptive_name": "Airbyte", "geographic_view.country_criterion_id": 2410, "geographic_view.location_type": "AREA_OF_INTEREST", "ad_group.id": 144799120517, "segments.date": "2023-08-31"}, "emitted_at": 1697021630567} +{"stream": "geographic_report", "data": {"customer.id": 4651612872, "customer.descriptive_name": "Airbyte", "geographic_view.country_criterion_id": 2410, "geographic_view.location_type": "LOCATION_OF_PRESENCE", "ad_group.id": 144799120517, "segments.date": "2023-08-31"}, "emitted_at": 1697021630569} +{"stream": "geographic_report", "data": {"customer.id": 4651612872, "customer.descriptive_name": "Airbyte", "geographic_view.country_criterion_id": 2410, "geographic_view.location_type": "AREA_OF_INTEREST", "ad_group.id": 144799120517, "segments.date": "2023-09-01"}, "emitted_at": 1697021630569} +{"stream": "happytable", "data": {"campaign.accessible_bidding_strategy": "", "segments.ad_destination_type": "NOT_APPLICABLE", "campaign.start_date": "2022-12-28", "campaign.end_date": "2037-12-30", "segments.date": "2023-08-31"}, "emitted_at": 1697021632384} +{"stream": "happytable", "data": {"campaign.accessible_bidding_strategy": "", "segments.ad_destination_type": "NOT_APPLICABLE", "campaign.start_date": "2022-12-28", "campaign.end_date": "2037-12-30", "segments.date": "2023-09-01"}, "emitted_at": 1697021632385} +{"stream": "happytable", "data": {"campaign.accessible_bidding_strategy": "", "segments.ad_destination_type": "NOT_APPLICABLE", "campaign.start_date": "2022-12-28", "campaign.end_date": "2037-12-30", "segments.date": "2023-09-02"}, "emitted_at": 1697021632385} +{"stream": "ad_group_custom", "data": {"ad_group.targeting_setting.target_restrictions": ["targeting_dimension: AGE_RANGE\nbid_only: true\n", "targeting_dimension: GENDER\nbid_only: true\n", "targeting_dimension: PARENTAL_STATUS\nbid_only: true\n", "targeting_dimension: INCOME_RANGE\nbid_only: true\n", "targeting_dimension: TOPIC\nbid_only: true\n"], "segments.date": "2023-08-31"}, "emitted_at": 1697021633494} +{"stream": "ad_group_custom", "data": {"ad_group.targeting_setting.target_restrictions": ["targeting_dimension: AGE_RANGE\nbid_only: true\n", "targeting_dimension: GENDER\nbid_only: true\n", "targeting_dimension: PARENTAL_STATUS\nbid_only: true\n", "targeting_dimension: INCOME_RANGE\nbid_only: true\n", "targeting_dimension: TOPIC\nbid_only: true\n"], "segments.date": "2023-09-01"}, "emitted_at": 1697021633495} +{"stream": "ad_group_custom", "data": {"ad_group.targeting_setting.target_restrictions": ["targeting_dimension: AGE_RANGE\nbid_only: true\n", "targeting_dimension: GENDER\nbid_only: true\n", "targeting_dimension: PARENTAL_STATUS\nbid_only: true\n", "targeting_dimension: INCOME_RANGE\nbid_only: true\n", "targeting_dimension: TOPIC\nbid_only: true\n"], "segments.date": "2023-09-02"}, "emitted_at": 1697021633496} +{"stream": "custom_audience", "data": {"custom_audience.description": "", "custom_audience.name": "Airbyet", "custom_audience.id": 523469909, "custom_audience.members": ["member_type: KEYWORD\nkeyword: \"etl elt\"\n", "member_type: KEYWORD\nkeyword: \"cloud data management and analytics\"\n", "member_type: KEYWORD\nkeyword: \"data integration\"\n", "member_type: KEYWORD\nkeyword: \"big data analytics database\"\n", "member_type: KEYWORD\nkeyword: \"data\"\n", "member_type: KEYWORD\nkeyword: \"data sherid nada\"\n", "member_type: KEYWORD\nkeyword: \"airbyteforeveryone\"\n", "member_type: KEYWORD\nkeyword: \"Airbyte\"\n"], "custom_audience.resource_name": "customers/4651612872/customAudiences/523469909", "custom_audience.status": "ENABLED", "custom_audience.type": "AUTO"}, "emitted_at": 1697021634259} diff --git a/airbyte-integrations/connectors/source-google-sheets/Dockerfile b/airbyte-integrations/connectors/source-google-sheets/Dockerfile index 2ff3953d0556..25ed3e4c5077 100644 --- a/airbyte-integrations/connectors/source-google-sheets/Dockerfile +++ b/airbyte-integrations/connectors/source-google-sheets/Dockerfile @@ -37,5 +37,5 @@ COPY source_google_sheets ./source_google_sheets ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=0.3.9 +LABEL io.airbyte.version=0.3.10 LABEL io.airbyte.name=airbyte/source-google-sheets diff --git a/airbyte-integrations/connectors/source-google-sheets/metadata.yaml b/airbyte-integrations/connectors/source-google-sheets/metadata.yaml index 672006b805bb..f7903c364cb2 100644 --- a/airbyte-integrations/connectors/source-google-sheets/metadata.yaml +++ b/airbyte-integrations/connectors/source-google-sheets/metadata.yaml @@ -5,7 +5,7 @@ data: connectorSubtype: file connectorType: source definitionId: 71607ba1-c0ac-4799-8049-7f4b90dd50f7 - dockerImageTag: 0.3.9 + dockerImageTag: 0.3.10 dockerRepository: airbyte/source-google-sheets githubIssueLabel: source-google-sheets icon: google-sheets.svg diff --git a/airbyte-integrations/connectors/source-google-sheets/source_google_sheets/client.py b/airbyte-integrations/connectors/source-google-sheets/source_google_sheets/client.py index cbc988ca70ba..1a521ae2467f 100644 --- a/airbyte-integrations/connectors/source-google-sheets/source_google_sheets/client.py +++ b/airbyte-integrations/connectors/source-google-sheets/source_google_sheets/client.py @@ -33,7 +33,7 @@ def give_up(error): def __init__(self, credentials: Dict[str, str], scopes: List[str] = SCOPES): self.client = Helpers.get_authenticated_sheets_client(credentials, scopes) - def create_range(self, sheet, row_cursor): + def _create_range(self, sheet, row_cursor): range = f"{sheet}!{row_cursor}:{row_cursor + self.Backoff.row_batch_size}" return range @@ -47,7 +47,9 @@ def create(self, **kwargs): @backoff.on_exception(backoff.expo, errors.HttpError, max_time=120, giveup=Backoff.give_up, on_backoff=Backoff.increase_row_batch_size) def get_values(self, **kwargs): - return self.client.values().batchGet(**kwargs).execute() + range = self._create_range(kwargs.pop("sheet"), kwargs.pop("row_cursor")) + logger.info(f"Fetching range {range}") + return self.client.values().batchGet(ranges=range, **kwargs).execute() @backoff.on_exception(backoff.expo, errors.HttpError, max_time=120, giveup=Backoff.give_up, on_backoff=Backoff.increase_row_batch_size) def update_values(self, **kwargs): diff --git a/airbyte-integrations/connectors/source-google-sheets/source_google_sheets/source.py b/airbyte-integrations/connectors/source-google-sheets/source_google_sheets/source.py index cf7416a48276..8b7e8faa303e 100644 --- a/airbyte-integrations/connectors/source-google-sheets/source_google_sheets/source.py +++ b/airbyte-integrations/connectors/source-google-sheets/source_google_sheets/source.py @@ -171,10 +171,13 @@ def _read( # if the last row of the interval goes outside the sheet - this is normal, we will return # only the real data of the sheet and in the next iteration we will loop out. while row_cursor <= sheet_row_counts[sheet]: - range = client.create_range(sheet, row_cursor) - logger.info(f"Fetching range {range}") row_batch = SpreadsheetValues.parse_obj( - client.get_values(spreadsheetId=spreadsheet_id, ranges=range, majorDimension="ROWS") + client.get_values( + sheet=sheet, + row_cursor=row_cursor, + spreadsheetId=spreadsheet_id, + majorDimension="ROWS", + ) ) row_cursor += client.Backoff.row_batch_size + 1 diff --git a/airbyte-integrations/connectors/source-google-sheets/unit_tests/test_client.py b/airbyte-integrations/connectors/source-google-sheets/unit_tests/test_client.py index f1bb1b514bdd..f4c3ed88dfaf 100644 --- a/airbyte-integrations/connectors/source-google-sheets/unit_tests/test_client.py +++ b/airbyte-integrations/connectors/source-google-sheets/unit_tests/test_client.py @@ -1,6 +1,7 @@ # # Copyright (c) 2023 Airbyte, Inc., all rights reserved. # +from unittest.mock import MagicMock import pytest import requests @@ -14,12 +15,54 @@ def test_backoff_give_up(status, need_give_up, mocker): assert need_give_up is GoogleSheetsClient.Backoff.give_up(e) -def test_backoff_increase_row_batch_size(mocker): - assert GoogleSheetsClient.Backoff.row_batch_size == 200 +def test_backoff_increase_row_batch_size(): + client = GoogleSheetsClient( + {"auth_type": "Client", "client_id": "fake_client_id", "client_secret": "fake_client_secret", "refresh_token": "fake_refresh_token"} + ) + assert client.Backoff.row_batch_size == 200 + assert client._create_range("spreadsheet_id", 0) == "spreadsheet_id!0:200" e = requests.HTTPError("error") e.status_code = 429 - GoogleSheetsClient.Backoff.increase_row_batch_size({"exception": e}) - assert GoogleSheetsClient.Backoff.row_batch_size == 210 - GoogleSheetsClient.Backoff.row_batch_size = 1000 - GoogleSheetsClient.Backoff.increase_row_batch_size({"exception": e}) - assert GoogleSheetsClient.Backoff.row_batch_size == 1000 + client.Backoff.increase_row_batch_size({"exception": e}) + assert client.Backoff.row_batch_size == 210 + assert client._create_range("spreadsheet_id", 0) == "spreadsheet_id!0:210" + client.Backoff.row_batch_size = 1000 + client.Backoff.increase_row_batch_size({"exception": e}) + assert client.Backoff.row_batch_size == 1000 + assert client._create_range("spreadsheet_id", 0) == "spreadsheet_id!0:1000" + + +def test_client_get_values_on_backoff(caplog): + client_google_sheets = GoogleSheetsClient( + { + "auth_type": "Client", + "client_id": "fake_client_id", + "client_secret": "fake_client_secret", + "refresh_token": "fake_refresh_token", + }, + ) + client_google_sheets.Backoff.row_batch_size = 210 + client_google_sheets.client.values = MagicMock(return_value=MagicMock(batchGet=MagicMock())) + + assert client_google_sheets.Backoff.row_batch_size == 210 + client_google_sheets.get_values( + sheet="sheet", + row_cursor=0, + spreadsheetId="spreadsheet_id", + majorDimension="ROWS", + ) + + assert "Fetching range sheet!0:210" in caplog.text + assert client_google_sheets.Backoff.row_batch_size == 210 + e = requests.HTTPError("error") + e.status_code = 429 + client_google_sheets.Backoff.increase_row_batch_size({"exception": e}) + assert client_google_sheets.Backoff.row_batch_size == 220 + client_google_sheets.get_values( + sheet="sheet", + row_cursor=0, + spreadsheetId="spreadsheet_id", + majorDimension="ROWS", + ) + + assert "Fetching range sheet!0:220" in caplog.text diff --git a/airbyte-integrations/connectors/source-jira/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-jira/integration_tests/expected_records.jsonl index ef6957c9847c..10591cfa20fe 100644 --- a/airbyte-integrations/connectors/source-jira/integration_tests/expected_records.jsonl +++ b/airbyte-integrations/connectors/source-jira/integration_tests/expected_records.jsonl @@ -1,163 +1,160 @@ -{"stream":"application_roles","data":{"key":"jira-servicedesk","groups":["jira-administrators","jira-software-users","jira-users","Test group 1","Test group 0","atlassian-addons-admin","integration-test-group","jira-servicemanagement-users-airbyteio","jira-admins-airbyteio","site-admins","Test group 10","administrators"],"groupDetails":[{"name":"jira-software-users","groupId":"4452b254-035d-469a-a422-1f4666dce50e","self":"https://airbyteio.atlassian.net/rest/api/3/group?groupId=4452b254-035d-469a-a422-1f4666dce50e"},{"name":"Test group 0","groupId":"ee8d15d1-6462-406a-b0a6-8065b7e4cdd7","self":"https://airbyteio.atlassian.net/rest/api/3/group?groupId=ee8d15d1-6462-406a-b0a6-8065b7e4cdd7"},{"name":"administrators","groupId":"0ca6e087-7a61-4986-a269-98fe268854a1","self":"https://airbyteio.atlassian.net/rest/api/3/group?groupId=0ca6e087-7a61-4986-a269-98fe268854a1"},{"name":"integration-test-group","groupId":"5f1ec851-f8da-4f90-ab42-8dc50a9f99d8","self":"https://airbyteio.atlassian.net/rest/api/3/group?groupId=5f1ec851-f8da-4f90-ab42-8dc50a9f99d8"},{"name":"jira-users","groupId":"2513da2e-08cf-4415-9bcd-cbbd32fa227d","self":"https://airbyteio.atlassian.net/rest/api/3/group?groupId=2513da2e-08cf-4415-9bcd-cbbd32fa227d"},{"name":"atlassian-addons-admin","groupId":"90b9ffb1-ed26-4b5e-af59-8f684900ce83","self":"https://airbyteio.atlassian.net/rest/api/3/group?groupId=90b9ffb1-ed26-4b5e-af59-8f684900ce83"},{"name":"jira-servicemanagement-users-airbyteio","groupId":"aab99a7c-3ce3-4123-b580-e4e00460754d","self":"https://airbyteio.atlassian.net/rest/api/3/group?groupId=aab99a7c-3ce3-4123-b580-e4e00460754d"},{"name":"jira-admins-airbyteio","groupId":"2d55cbe0-4cab-46a4-853e-ec31162ab9a3","self":"https://airbyteio.atlassian.net/rest/api/3/group?groupId=2d55cbe0-4cab-46a4-853e-ec31162ab9a3"},{"name":"jira-administrators","groupId":"58582f33-a5a6-43b9-92a6-ff0bbacb49ae","self":"https://airbyteio.atlassian.net/rest/api/3/group?groupId=58582f33-a5a6-43b9-92a6-ff0bbacb49ae"},{"name":"Test group 1","groupId":"bda1faf1-1a1a-42d1-82e4-a428c8b8f67c","self":"https://airbyteio.atlassian.net/rest/api/3/group?groupId=bda1faf1-1a1a-42d1-82e4-a428c8b8f67c"},{"name":"site-admins","groupId":"76dad095-fc1a-467a-88b4-fde534220985","self":"https://airbyteio.atlassian.net/rest/api/3/group?groupId=76dad095-fc1a-467a-88b4-fde534220985"},{"name":"Test group 10","groupId":"e9f74708-e33c-4158-919d-6457f50c6e74","self":"https://airbyteio.atlassian.net/rest/api/3/group?groupId=e9f74708-e33c-4158-919d-6457f50c6e74"}],"name":"Jira Service Desk","defaultGroups":["jira-servicemanagement-users-airbyteio"],"defaultGroupsDetails":[{"name":"jira-servicemanagement-users-airbyteio","groupId":"aab99a7c-3ce3-4123-b580-e4e00460754d","self":"https://airbyteio.atlassian.net/rest/api/3/group?groupId=aab99a7c-3ce3-4123-b580-e4e00460754d"}],"selectedByDefault":false,"defined":true,"numberOfSeats":35000,"remainingSeats":34995,"userCount":5,"userCountDescription":"agents","hasUnlimitedSeats":false,"platform":false},"emitted_at":1685635876760} -{"stream":"application_roles","data":{"key":"jira-software","groups":["jira-users","Test group 1","Test group 0","system-administrators","atlassian-addons-admin","jira-servicemanagement-users-airbyteio","jira-admins-airbyteio","site-admins","jira-administrators","jira-software-users","integration-test-group","Test group 10","administrators"],"groupDetails":[{"name":"administrators","groupId":"0ca6e087-7a61-4986-a269-98fe268854a1","self":"https://airbyteio.atlassian.net/rest/api/3/group?groupId=0ca6e087-7a61-4986-a269-98fe268854a1"},{"name":"jira-users","groupId":"2513da2e-08cf-4415-9bcd-cbbd32fa227d","self":"https://airbyteio.atlassian.net/rest/api/3/group?groupId=2513da2e-08cf-4415-9bcd-cbbd32fa227d"},{"name":"jira-administrators","groupId":"58582f33-a5a6-43b9-92a6-ff0bbacb49ae","self":"https://airbyteio.atlassian.net/rest/api/3/group?groupId=58582f33-a5a6-43b9-92a6-ff0bbacb49ae"},{"name":"Test group 1","groupId":"bda1faf1-1a1a-42d1-82e4-a428c8b8f67c","self":"https://airbyteio.atlassian.net/rest/api/3/group?groupId=bda1faf1-1a1a-42d1-82e4-a428c8b8f67c"},{"name":"system-administrators","groupId":"ed0ab3a1-afa4-4ff5-a878-fc90c1574818","self":"https://airbyteio.atlassian.net/rest/api/3/group?groupId=ed0ab3a1-afa4-4ff5-a878-fc90c1574818"},{"name":"site-admins","groupId":"76dad095-fc1a-467a-88b4-fde534220985","self":"https://airbyteio.atlassian.net/rest/api/3/group?groupId=76dad095-fc1a-467a-88b4-fde534220985"},{"name":"jira-software-users","groupId":"4452b254-035d-469a-a422-1f4666dce50e","self":"https://airbyteio.atlassian.net/rest/api/3/group?groupId=4452b254-035d-469a-a422-1f4666dce50e"},{"name":"Test group 0","groupId":"ee8d15d1-6462-406a-b0a6-8065b7e4cdd7","self":"https://airbyteio.atlassian.net/rest/api/3/group?groupId=ee8d15d1-6462-406a-b0a6-8065b7e4cdd7"},{"name":"integration-test-group","groupId":"5f1ec851-f8da-4f90-ab42-8dc50a9f99d8","self":"https://airbyteio.atlassian.net/rest/api/3/group?groupId=5f1ec851-f8da-4f90-ab42-8dc50a9f99d8"},{"name":"atlassian-addons-admin","groupId":"90b9ffb1-ed26-4b5e-af59-8f684900ce83","self":"https://airbyteio.atlassian.net/rest/api/3/group?groupId=90b9ffb1-ed26-4b5e-af59-8f684900ce83"},{"name":"jira-admins-airbyteio","groupId":"2d55cbe0-4cab-46a4-853e-ec31162ab9a3","self":"https://airbyteio.atlassian.net/rest/api/3/group?groupId=2d55cbe0-4cab-46a4-853e-ec31162ab9a3"},{"name":"jira-servicemanagement-users-airbyteio","groupId":"aab99a7c-3ce3-4123-b580-e4e00460754d","self":"https://airbyteio.atlassian.net/rest/api/3/group?groupId=aab99a7c-3ce3-4123-b580-e4e00460754d"},{"name":"Test group 10","groupId":"e9f74708-e33c-4158-919d-6457f50c6e74","self":"https://airbyteio.atlassian.net/rest/api/3/group?groupId=e9f74708-e33c-4158-919d-6457f50c6e74"}],"name":"Jira Software","defaultGroups":["jira-software-users"],"defaultGroupsDetails":[{"name":"jira-software-users","groupId":"4452b254-035d-469a-a422-1f4666dce50e","self":"https://airbyteio.atlassian.net/rest/api/3/group?groupId=4452b254-035d-469a-a422-1f4666dce50e"}],"selectedByDefault":false,"defined":true,"numberOfSeats":10,"remainingSeats":5,"userCount":5,"userCountDescription":"users","hasUnlimitedSeats":false,"platform":false},"emitted_at":1685635876761} -{"stream": "avatars", "data": {"id": "10300", "isSystemAvatar": true, "isSelected": false, "isDeletable": false, "urls": {"16x16": "/secure/useravatar?size=xsmall&avatarId=10300", "24x24": "/secure/useravatar?size=small&avatarId=10300", "32x32": "/secure/useravatar?size=medium&avatarId=10300", "48x48": "/secure/useravatar?avatarId=10300"}}, "emitted_at": 1685112891085} -{"stream": "avatars", "data": {"id": "10303", "isSystemAvatar": true, "isSelected": false, "isDeletable": false, "urls": {"16x16": "/secure/useravatar?size=xsmall&avatarId=10303", "24x24": "/secure/useravatar?size=small&avatarId=10303", "32x32": "/secure/useravatar?size=medium&avatarId=10303", "48x48": "/secure/useravatar?avatarId=10303"}}, "emitted_at": 1685112891086} -{"stream": "avatars", "data": {"id": "10304", "isSystemAvatar": true, "isSelected": false, "isDeletable": false, "urls": {"16x16": "/secure/useravatar?size=xsmall&avatarId=10304", "24x24": "/secure/useravatar?size=small&avatarId=10304", "32x32": "/secure/useravatar?size=medium&avatarId=10304", "48x48": "/secure/useravatar?avatarId=10304"}}, "emitted_at": 1685112891086} -{"stream": "boards", "data": {"id": 1, "self": "https://airbyteio.atlassian.net/rest/agile/1.0/board/1", "name": "IT board", "type": "scrum", "location": {"projectId": 10000, "displayName": "integration-tests (IT)", "projectName": "integration-tests", "projectKey": "IT", "projectTypeKey": "software", "avatarURI": "https://airbyteio.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10424?size=small", "name": "integration-tests (IT)"}, "projectId": "10000", "projectKey": "IT"}, "emitted_at": 1685112893105} -{"stream": "boards", "data": {"id": 17, "self": "https://airbyteio.atlassian.net/rest/agile/1.0/board/17", "name": "TESTKEY13 board", "type": "scrum", "location": {"projectId": 10016, "displayName": "Test project 13 (TESTKEY13)", "projectName": "Test project 13", "projectKey": "TESTKEY13", "projectTypeKey": "software", "avatarURI": "https://airbyteio.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=small", "name": "Test project 13 (TESTKEY13)"}, "projectId": "10016", "projectKey": "TESTKEY13"}, "emitted_at": 1685112893106} -{"stream": "board_issues", "data": {"expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields", "id": "10012", "self": "https://airbyteio.atlassian.net/rest/agile/1.0/issue/10012", "key": "IT-6", "fields": {"updated": "2022-05-17T04:26:21.613000-07:00", "created": "2021-03-11T06:14:18.085-0800"}, "boardId": 1, "created": "2021-03-11T06:14:18.085000-08:00", "updated": "2022-05-17T04:26:21.613000-07:00"}, "emitted_at": 1694789275524} -{"stream": "board_issues", "data": {"expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields", "id": "10019", "self": "https://airbyteio.atlassian.net/rest/agile/1.0/issue/10019", "key": "IT-9", "fields": {"updated": "2023-04-05T04:57:18.118000-07:00", "created": "2021-03-11T06:14:24.791-0800"}, "boardId": 1, "created": "2021-03-11T06:14:24.791000-08:00", "updated": "2023-04-05T04:57:18.118000-07:00"}, "emitted_at": 1694789275527} -{"stream": "board_issues", "data": {"expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields", "id": "10000", "self": "https://airbyteio.atlassian.net/rest/agile/1.0/issue/10000", "key": "IT-1", "fields": {"updated": "2022-05-17T04:26:28.885000-07:00", "created": "2020-12-07T06:12:17.863-0800"}, "boardId": 1, "created": "2020-12-07T06:12:17.863000-08:00", "updated": "2022-05-17T04:26:28.885000-07:00"}, "emitted_at": 1694789275527} -{"stream": "dashboards", "data": {"id": "10000", "isFavourite": false, "name": "Default dashboard", "popularity": 0, "self": "https://airbyteio.atlassian.net/rest/api/3/dashboard/10000", "sharePermissions": [{"id": 10000, "type": "global"}], "editPermissions": [], "view": "/jira/dashboards/10000", "isWritable": true, "systemDashboard": true}, "emitted_at": 1696412883455} -{"stream": "dashboards", "data": {"description": "A dashboard to help auditors identify sample of issues to check.", "id": "10002", "isFavourite": true, "name": "Test dashboard 1", "owner": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "displayName": "integration test", "active": true, "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}}, "popularity": 1, "rank": 1, "self": "https://airbyteio.atlassian.net/rest/api/3/dashboard/10002", "sharePermissions": [], "editPermissions": [], "view": "/jira/dashboards/10002", "isWritable": true, "systemDashboard": false}, "emitted_at": 1696412883456} -{"stream": "dashboards", "data": {"description": "A dashboard to help auditors identify sample of issues to check.", "id": "10011", "isFavourite": true, "name": "Test dashboard 10", "owner": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "displayName": "integration test", "active": true, "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}}, "popularity": 1, "rank": 10, "self": "https://airbyteio.atlassian.net/rest/api/3/dashboard/10011", "sharePermissions": [], "editPermissions": [], "view": "/jira/dashboards/10011", "isWritable": true, "systemDashboard": false}, "emitted_at": 1696412883456} -{"stream": "filters", "data": {"expand": "description,owner,jql,viewUrl,searchUrl,favourite,favouritedCount,sharePermissions,editPermissions,isWritable,subscriptions", "self": "https://airbyteio.atlassian.net/rest/api/3/filter/10003", "id": "10003", "name": "Filter for EX board", "owner": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "jql": "project = EX ORDER BY Rank ASC", "viewUrl": "https://airbyteio.atlassian.net/issues/?filter=10003", "searchUrl": "https://airbyteio.atlassian.net/rest/api/3/search?jql=project+%3D+EX+ORDER+BY+Rank+ASC", "favourite": false, "favouritedCount": 0, "sharePermissions": [{"id": 10004, "type": "project", "project": {"self": "https://airbyteio.atlassian.net/rest/api/3/project/10003", "id": "10003", "key": "EX", "assigneeType": "PROJECT_LEAD", "name": "Example", "roles": {}, "avatarUrls": {"48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10406", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10406?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10406?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10406?size=medium"}, "projectTypeKey": "software", "simplified": false, "style": "classic", "properties": {}}}], "isWritable": true, "subscriptions": []}, "emitted_at": 1685112898295} -{"stream": "filters", "data": {"expand": "description,owner,jql,viewUrl,searchUrl,favourite,favouritedCount,sharePermissions,editPermissions,isWritable,subscriptions", "self": "https://airbyteio.atlassian.net/rest/api/3/filter/10000", "id": "10000", "name": "Filter for IT board", "owner": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "jql": "project = IT ORDER BY Rank ASC", "viewUrl": "https://airbyteio.atlassian.net/issues/?filter=10000", "searchUrl": "https://airbyteio.atlassian.net/rest/api/3/search?jql=project+%3D+IT+ORDER+BY+Rank+ASC", "favourite": false, "favouritedCount": 0, "sharePermissions": [{"id": 10058, "type": "group", "group": {"name": "Test group 2", "groupId": "5ddb26f1-2d31-414a-ac34-b2d6de38805d", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=5ddb26f1-2d31-414a-ac34-b2d6de38805d"}}, {"id": 10059, "type": "group", "group": {"name": "Test group 0", "groupId": "ee8d15d1-6462-406a-b0a6-8065b7e4cdd7", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=ee8d15d1-6462-406a-b0a6-8065b7e4cdd7"}}, {"id": 10057, "type": "project", "project": {"self": "https://airbyteio.atlassian.net/rest/api/3/project/10000", "id": "10000", "key": "IT", "assigneeType": "PROJECT_LEAD", "name": "integration-tests", "roles": {}, "avatarUrls": {"48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=medium"}, "projectCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/projectCategory/10004", "id": "10004", "name": "Test category 2", "description": "Test Project Category 2"}, "projectTypeKey": "software", "simplified": false, "style": "classic", "properties": {}}}], "isWritable": true, "subscriptions": []}, "emitted_at": 1685112898296} -{"stream": "filters", "data": {"expand": "description,owner,jql,viewUrl,searchUrl,favourite,favouritedCount,sharePermissions,editPermissions,isWritable,subscriptions", "self": "https://airbyteio.atlassian.net/rest/api/3/filter/10001", "id": "10001", "name": "Filter for P2 board", "owner": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "jql": "project = P2 ORDER BY Rank ASC", "viewUrl": "https://airbyteio.atlassian.net/issues/?filter=10001", "searchUrl": "https://airbyteio.atlassian.net/rest/api/3/search?jql=project+%3D+P2+ORDER+BY+Rank+ASC", "favourite": false, "favouritedCount": 0, "sharePermissions": [{"id": 10063, "type": "group", "group": {"name": "Test group 0", "groupId": "ee8d15d1-6462-406a-b0a6-8065b7e4cdd7", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=ee8d15d1-6462-406a-b0a6-8065b7e4cdd7"}}, {"id": 10064, "type": "group", "group": {"name": "Test group 1", "groupId": "bda1faf1-1a1a-42d1-82e4-a428c8b8f67c", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=bda1faf1-1a1a-42d1-82e4-a428c8b8f67c"}}, {"id": 10062, "type": "project", "project": {"self": "https://airbyteio.atlassian.net/rest/api/3/project/10001", "id": "10001", "key": "P2", "assigneeType": "PROJECT_LEAD", "name": "project-2", "roles": {}, "avatarUrls": {"48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10411", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10411?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10411?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10411?size=medium"}, "projectTypeKey": "software", "simplified": false, "style": "classic", "properties": {}}}], "isWritable": true, "subscriptions": []}, "emitted_at": 1685112898296} -{"stream": "filter_sharing", "data": {"id": 10004, "type": "project", "project": {"self": "https://airbyteio.atlassian.net/rest/api/3/project/10003", "id": "10003", "key": "EX", "assigneeType": "PROJECT_LEAD", "name": "Example", "roles": {}, "avatarUrls": {"48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10406", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10406?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10406?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10406?size=medium"}, "projectTypeKey": "software", "simplified": false, "style": "classic", "properties": {}}, "filterId": "10003"}, "emitted_at": 1695149257978} -{"stream": "filter_sharing", "data": {"id": 10058, "type": "group", "group": {"name": "Test group 2", "groupId": "5ddb26f1-2d31-414a-ac34-b2d6de38805d", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=5ddb26f1-2d31-414a-ac34-b2d6de38805d"}, "filterId": "10000"}, "emitted_at": 1695149258583} -{"stream": "filter_sharing", "data": {"id": 10059, "type": "group", "group": {"name": "Test group 0", "groupId": "ee8d15d1-6462-406a-b0a6-8065b7e4cdd7", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=ee8d15d1-6462-406a-b0a6-8065b7e4cdd7"}, "filterId": "10000"}, "emitted_at": 1695149258584} -{"stream": "groups", "data": {"name": "Test group 17", "groupId": "022bc924-ac57-442d-80c9-df042b73ad87"}, "emitted_at": 1685112927902} -{"stream": "groups", "data": {"name": "administrators", "groupId": "0ca6e087-7a61-4986-a269-98fe268854a1"}, "emitted_at": 1685112927903} -{"stream": "groups", "data": {"name": "jira-users", "groupId": "2513da2e-08cf-4415-9bcd-cbbd32fa227d"}, "emitted_at": 1685112927903} -{"stream": "issues", "data": {"expand": "customfield_10030.properties,operations,versionedRepresentations,editmeta,changelog,customfield_10029.properties,customfield_10010.requestTypePractice,transitions,renderedFields,customfield_10229.properties", "id": "10627", "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10627", "key": "TESTKEY13-1", "renderedFields": {"statuscategorychangedate": "09/Jun/22 4:29 PM", "issuetype": null, "timespent": null, "customfield_10030": null, "project": null, "fixVersions": null, "aggregatetimespent": null, "resolution": null, "customfield_10225": null, "customfield_10226": null, "customfield_10227": null, "customfield_10029": null, "customfield_10228": null, "customfield_10229": null, "resolutiondate": null, "workratio": null, "watches": null, "issuerestriction": null, "lastViewed": "19/Sep/23 4:46 AM", "customfield_10181": null, "created": "09/Jun/22 4:29 PM", "customfield_10020": null, "customfield_10021": null, "customfield_10220": null, "customfield_10022": null, "customfield_10023": null, "customfield_10221": null, "priority": null, "customfield_10222": null, "customfield_10024": null, "customfield_10223": null, "customfield_10025": null, "customfield_10026": null, "customfield_10224": null, "labels": null, "customfield_10214": null, "customfield_10016": null, "customfield_10215": null, "customfield_10017": "dark_orange", "customfield_10018": null, "customfield_10216": null, "customfield_10019": null, "customfield_10217": null, "customfield_10218": null, "timeestimate": null, "aggregatetimeoriginalestimate": null, "customfield_10219": null, "versions": null, "issuelinks": null, "assignee": null, "updated": "04/Apr/23 4:36 AM", "status": null, "components": null, "timeoriginalestimate": null, "description": "

Test issue

", "customfield_10010": null, "customfield_10011": "EPIC NAME TEXT", "customfield_10012": null, "customfield_10210": null, "customfield_10013": "ghx-label-14", "customfield_10211": null, "customfield_10212": null, "customfield_10014": null, "timetracking": {}, "customfield_10213": null, "customfield_10015": null, "customfield_10005": null, "customfield_10006": null, "security": null, "customfield_10007": null, "customfield_10008": null, "customfield_10009": "09/Dec/22 12:00 AM", "aggregatetimeestimate": null, "attachment": [], "customfield_10209": null, "summary": null, "creator": null, "subtasks": null, "reporter": null, "aggregateprogress": null, "customfield_10001": null, "customfield_10002": null, "customfield_10003": null, "customfield_10047": null, "customfield_10004": null, "environment": "", "duedate": null, "progress": null, "votes": null, "comment": {"comments": [], "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10627/comment", "maxResults": 0, "total": 0, "startAt": 0}, "worklog": {"startAt": 0, "maxResults": 20, "total": 0, "worklogs": []}}, "transitions": [{"id": "11", "name": "To Do", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}, {"id": "21", "name": "In Progress", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/3", "description": "This issue is being actively worked on at the moment by the assignee.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/statuses/inprogress.png", "name": "In Progress", "id": "3", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/4", "id": 4, "key": "indeterminate", "colorName": "yellow", "name": "In Progress"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}, {"id": "31", "name": "Done", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10001", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "Done", "id": "10001", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/3", "id": 3, "key": "done", "colorName": "green", "name": "Done"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}], "changelog": {"startAt": 0, "maxResults": 6, "total": 6, "histories": [{"id": "15149", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2023-04-04T04:36:21.197-0700", "items": [{"field": "Fix Version", "fieldtype": "jira", "fieldId": "fixVersions", "from": null, "fromString": null, "to": "10066", "toString": "New Version 1"}]}, {"id": "15148", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2023-04-04T04:36:18.232-0700", "items": [{"field": "Sprint", "fieldtype": "custom", "fieldId": "customfield_10020", "from": "", "fromString": "", "to": "2", "toString": "IT Sprint 1"}]}, {"id": "15147", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2023-04-04T04:36:15.985-0700", "items": [{"field": "Story Points", "fieldtype": "custom", "fieldId": "customfield_10026", "from": null, "fromString": null, "to": null, "toString": "3"}]}, {"id": "15135", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2022-12-08T02:22:18.892-0800", "items": [{"field": "Change completion date", "fieldtype": "custom", "fieldId": "customfield_10009", "from": null, "fromString": null, "to": "2022-12-09T00:00:00-0800", "toString": "09/Dec/22 12:00 AM"}]}, {"id": "15134", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2022-12-08T02:21:56.729-0800", "items": [{"field": "Approvers", "fieldtype": "custom", "fieldId": "customfield_10003", "from": null, "fromString": null, "to": "[5fc9e78d2730d800760becc4]", "toString": "[integration test]"}]}, {"id": "15133", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2022-12-08T02:17:15.289-0800", "items": [{"field": "description", "fieldtype": "jira", "fieldId": "description", "from": null, "fromString": null, "to": null, "toString": "Test issue"}]}]}, "fields": {"statuscategorychangedate": "2022-06-09T16:29:32.382-0700", "issuetype": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10000", "id": "10000", "description": "A big user story that needs to be broken down. Created by Jira Software - do not edit or delete.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/issuetypes/epic.svg", "name": "Epic", "subtask": false, "hierarchyLevel": 1}, "timespent": null, "customfield_10030": null, "project": {"self": "https://airbyteio.atlassian.net/rest/api/3/project/10016", "id": "10016", "key": "TESTKEY13", "name": "Test project 13", "projectTypeKey": "software", "simplified": false, "avatarUrls": {"48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10425", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10425?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10425?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10425?size=medium"}, "projectCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/projectCategory/10000", "id": "10000", "description": "Category 1", "name": "Category 1"}}, "fixVersions": [{"self": "https://airbyteio.atlassian.net/rest/api/3/version/10066", "id": "10066", "description": "An excellent version", "name": "New Version 1", "archived": false, "released": true, "releaseDate": "2010-07-06"}], "aggregatetimespent": null, "resolution": null, "customfield_10225": null, "customfield_10226": null, "customfield_10227": null, "customfield_10029": null, "customfield_10228": null, "customfield_10229": null, "resolutiondate": null, "workratio": -1, "watches": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/TESTKEY13-1/watchers", "watchCount": 1, "isWatching": true}, "issuerestriction": {"issuerestrictions": {}, "shouldDisplay": false}, "lastViewed": "2023-09-19T04:46:19.750-0700", "customfield_10181": null, "created": "2022-06-09T16:29:31.871000-07:00", "customfield_10020": [{"id": 2, "name": "IT Sprint 1", "state": "active", "boardId": 1, "goal": "Deliver results", "startDate": "2022-05-17T11:25:59.072Z", "endDate": "2022-05-31T11:25:00.000Z"}], "customfield_10021": null, "customfield_10220": null, "customfield_10022": null, "customfield_10023": null, "customfield_10221": null, "priority": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/4", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/low.svg", "name": "Low", "id": "4"}, "customfield_10222": null, "customfield_10024": null, "customfield_10223": null, "customfield_10025": null, "customfield_10026": 3.0, "customfield_10224": null, "labels": ["test"], "customfield_10214": null, "customfield_10016": null, "customfield_10215": null, "customfield_10017": "dark_orange", "customfield_10018": {"hasEpicLinkFieldDependency": false, "showField": false, "nonEditableReason": {"reason": "PLUGIN_LICENSE_ERROR", "message": "The Parent Link is only available to Jira Premium users."}}, "customfield_10216": null, "customfield_10019": "0|i0077b:", "customfield_10217": [], "customfield_10218": null, "timeestimate": null, "aggregatetimeoriginalestimate": null, "customfield_10219": null, "versions": [], "issuelinks": [], "assignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updated": "2023-04-04T04:36:21.195000-07:00", "status": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "components": [{"self": "https://airbyteio.atlassian.net/rest/api/3/component/10065", "id": "10065", "name": "Component 0", "description": "This is a Jira component"}], "timeoriginalestimate": null, "description": {"version": 1, "type": "doc", "content": [{"type": "paragraph", "content": [{"type": "text", "text": "Test issue"}]}]}, "customfield_10010": null, "customfield_10011": "EPIC NAME TEXT", "customfield_10012": {"self": "https://airbyteio.atlassian.net/rest/api/3/customFieldOption/10016", "value": "To Do", "id": "10016"}, "customfield_10210": null, "customfield_10013": "ghx-label-14", "customfield_10211": null, "customfield_10212": null, "customfield_10014": null, "timetracking": {}, "customfield_10213": null, "customfield_10015": null, "customfield_10005": null, "customfield_10006": null, "security": null, "customfield_10007": null, "customfield_10008": null, "customfield_10009": "2022-12-09T00:00:00.000-0800", "aggregatetimeestimate": null, "attachment": [], "customfield_10209": null, "summary": "My Summary", "creator": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "subtasks": [], "reporter": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "aggregateprogress": {"progress": 0, "total": 0}, "customfield_10001": null, "customfield_10002": null, "customfield_10003": [{"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}], "customfield_10047": null, "customfield_10004": null, "environment": null, "duedate": null, "progress": {"progress": 0, "total": 0}, "votes": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/TESTKEY13-1/votes", "votes": 0, "hasVoted": false}, "comment": {"comments": [], "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10627/comment", "maxResults": 0, "total": 0, "startAt": 0}, "worklog": {"startAt": 0, "maxResults": 20, "total": 0, "worklogs": []}}, "projectId": "10016", "projectKey": "TESTKEY13", "created": "2022-06-09T16:29:31.871000-07:00", "updated": "2023-04-04T04:36:21.195000-07:00"}, "emitted_at": 1695733240015} -{"stream": "issues", "data": {"expand": "customfield_10030.properties,operations,versionedRepresentations,editmeta,changelog,customfield_10029.properties,customfield_10010.requestTypePractice,transitions,renderedFields,customfield_10229.properties", "id": "10626", "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10626", "key": "IT-26", "renderedFields": {"statuscategorychangedate": "17/May/22 4:28 AM", "issuetype": null, "timespent": "1 day", "customfield_10030": null, "project": null, "fixVersions": null, "aggregatetimespent": "1 day", "resolution": null, "customfield_10225": null, "customfield_10226": null, "customfield_10029": null, "customfield_10227": null, "customfield_10228": null, "customfield_10229": null, "resolutiondate": null, "workratio": null, "issuerestriction": null, "lastViewed": "13/Sep/23 3:21 AM", "watches": null, "customfield_10181": null, "created": "17/May/22 4:28 AM", "customfield_10020": null, "customfield_10021": null, "customfield_10220": null, "customfield_10022": null, "customfield_10023": null, "priority": null, "customfield_10221": null, "customfield_10222": null, "customfield_10024": null, "customfield_10025": null, "customfield_10223": null, "customfield_10224": null, "customfield_10026": null, "labels": null, "customfield_10016": null, "customfield_10214": null, "customfield_10215": null, "customfield_10017": "dark_yellow", "customfield_10216": null, "customfield_10018": null, "customfield_10217": null, "customfield_10019": null, "customfield_10218": null, "timeestimate": null, "aggregatetimeoriginalestimate": null, "versions": null, "customfield_10219": null, "issuelinks": null, "assignee": null, "updated": "05/Apr/23 5:08 AM", "status": null, "components": null, "timeoriginalestimate": null, "description": "

Implement OAUth

", "customfield_10010": null, "customfield_10011": "Test 2", "customfield_10210": null, "customfield_10012": null, "customfield_10013": "ghx-label-2", "customfield_10211": null, "customfield_10014": null, "customfield_10212": null, "timetracking": {"timeSpent": "1 day", "timeSpentSeconds": 28800}, "customfield_10015": null, "customfield_10213": null, "customfield_10005": null, "customfield_10006": null, "customfield_10007": null, "security": null, "customfield_10008": null, "attachment": [], "customfield_10009": null, "aggregatetimeestimate": null, "customfield_10209": null, "summary": null, "creator": null, "subtasks": null, "reporter": null, "aggregateprogress": null, "customfield_10001": null, "customfield_10002": null, "customfield_10047": null, "customfield_10003": null, "customfield_10004": null, "environment": "", "duedate": null, "progress": null, "votes": null, "comment": {"comments": [], "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10626/comment", "maxResults": 0, "total": 0, "startAt": 0}, "worklog": {"startAt": 0, "maxResults": 20, "total": 1, "worklogs": [{"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10626/worklog/11820", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=557058%3A295406f3-a1fc-4733-b906-dd15d021bd79", "accountId": "557058:295406f3-a1fc-4733-b906-dd15d021bd79", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "24x24": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "16x16": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "32x32": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png"}, "displayName": "Tempo Timesheets", "active": true, "timeZone": "America/Los_Angeles", "accountType": "app"}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=557058%3A295406f3-a1fc-4733-b906-dd15d021bd79", "accountId": "557058:295406f3-a1fc-4733-b906-dd15d021bd79", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "24x24": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "16x16": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "32x32": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png"}, "displayName": "Tempo Timesheets", "active": true, "timeZone": "America/Los_Angeles", "accountType": "app"}, "created": "05/Apr/23 5:08 AM", "updated": "05/Apr/23 5:08 AM", "started": "05/Apr/23 1:00 AM", "timeSpent": "1 day", "id": "11820", "issueId": "10626"}]}}, "transitions": [{"id": "11", "name": "To Do", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}, {"id": "21", "name": "In Progress", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/3", "description": "This issue is being actively worked on at the moment by the assignee.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/statuses/inprogress.png", "name": "In Progress", "id": "3", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/4", "id": 4, "key": "indeterminate", "colorName": "yellow", "name": "In Progress"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}, {"id": "31", "name": "Done", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10001", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "Done", "id": "10001", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/3", "id": 3, "key": "done", "colorName": "green", "name": "Done"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}, {"id": "41", "name": "Approved", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10005", "description": "This was auto-generated by Jira Service Management during workflow import", "iconUrl": "https://airbyteio.atlassian.net/images/icons/status_generic.gif", "name": "Approved", "id": "10005", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/3", "id": 3, "key": "done", "colorName": "green", "name": "Done"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}, {"id": "51", "name": "In review", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10004", "description": "This was auto-generated by Jira Service Management during workflow import", "iconUrl": "https://airbyteio.atlassian.net/images/icons/status_generic.gif", "name": "In review", "id": "10004", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/4", "id": 4, "key": "indeterminate", "colorName": "yellow", "name": "In Progress"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}, {"id": "61", "name": "Reopened", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/4", "description": "This issue was once resolved, but the resolution was deemed incorrect. From here issues are either marked assigned or resolved.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/statuses/reopened.png", "name": "Reopened", "id": "4", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}, {"id": "71", "name": "Declined", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10002", "description": "This was auto-generated by Jira Service Management during workflow import", "iconUrl": "https://airbyteio.atlassian.net/images/icons/statuses/generic.png", "name": "Declined", "id": "10002", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/3", "id": 3, "key": "done", "colorName": "green", "name": "Done"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}, {"id": "81", "name": "Open", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/1", "description": "The issue is open and ready for the assignee to start work on it.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/statuses/open.png", "name": "Open", "id": "1", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}, {"id": "91", "name": "Pending", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10003", "description": "This was auto-generated by Jira Service Management during workflow import", "iconUrl": "https://airbyteio.atlassian.net/images/icons/status_generic.gif", "name": "Pending", "id": "10003", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/4", "id": 4, "key": "indeterminate", "colorName": "yellow", "name": "In Progress"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}, {"id": "101", "name": "Closed", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/6", "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/statuses/closed.png", "name": "Closed", "id": "6", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/3", "id": 3, "key": "done", "colorName": "green", "name": "Done"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}], "changelog": {"startAt": 0, "maxResults": 2, "total": 2, "histories": [{"id": "15186", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=557058%3A295406f3-a1fc-4733-b906-dd15d021bd79", "accountId": "557058:295406f3-a1fc-4733-b906-dd15d021bd79", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "24x24": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "16x16": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "32x32": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png"}, "displayName": "Tempo Timesheets", "active": true, "timeZone": "America/Los_Angeles", "accountType": "app"}, "created": "2023-04-05T05:08:50.115-0700", "items": [{"field": "timespent", "fieldtype": "jira", "fieldId": "timespent", "from": null, "fromString": null, "to": "28800", "toString": "28800"}, {"field": "WorklogId", "fieldtype": "jira", "from": null, "fromString": null, "to": "11820", "toString": "11820"}]}, {"id": "15128", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2022-05-17T04:28:19.837-0700", "items": [{"field": "Link", "fieldtype": "jira", "from": null, "fromString": null, "to": "IT-25", "toString": "This issue clones IT-25"}]}]}, "fields": {"statuscategorychangedate": "2022-05-17T04:28:19.775-0700", "issuetype": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10000", "id": "10000", "description": "A big user story that needs to be broken down. Created by Jira Software - do not edit or delete.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/issuetypes/epic.svg", "name": "Epic", "subtask": false, "hierarchyLevel": 1}, "timespent": 28800, "customfield_10030": null, "project": {"self": "https://airbyteio.atlassian.net/rest/api/3/project/10000", "id": "10000", "key": "IT", "name": "integration-tests", "projectTypeKey": "software", "simplified": false, "avatarUrls": {"48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=medium"}, "projectCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/projectCategory/10004", "id": "10004", "description": "Test Project Category 2", "name": "Test category 2"}}, "fixVersions": [], "aggregatetimespent": 28800, "resolution": null, "customfield_10225": null, "customfield_10226": null, "customfield_10029": null, "customfield_10227": null, "customfield_10228": null, "customfield_10229": null, "resolutiondate": null, "workratio": -1, "issuerestriction": {"issuerestrictions": {}, "shouldDisplay": false}, "lastViewed": "2023-09-13T03:21:43.199-0700", "watches": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-26/watchers", "watchCount": 1, "isWatching": true}, "customfield_10181": null, "created": "2022-05-17T04:28:19.523000-07:00", "customfield_10020": null, "customfield_10021": null, "customfield_10220": null, "customfield_10022": null, "customfield_10023": null, "priority": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/4", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/low.svg", "name": "Low", "id": "4"}, "customfield_10221": null, "customfield_10222": null, "customfield_10024": null, "customfield_10025": null, "customfield_10223": null, "customfield_10224": null, "customfield_10026": null, "labels": [], "customfield_10016": null, "customfield_10214": null, "customfield_10215": null, "customfield_10017": "dark_yellow", "customfield_10216": null, "customfield_10018": {"hasEpicLinkFieldDependency": false, "showField": false, "nonEditableReason": {"reason": "PLUGIN_LICENSE_ERROR", "message": "The Parent Link is only available to Jira Premium users."}}, "customfield_10217": [], "customfield_10019": "0|i00773:", "customfield_10218": null, "timeestimate": null, "aggregatetimeoriginalestimate": null, "versions": [], "customfield_10219": null, "issuelinks": [{"id": "10263", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLink/10263", "type": {"id": "10001", "name": "Cloners", "inward": "is cloned by", "outward": "clones", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLinkType/10001"}, "outwardIssue": {"id": "10625", "key": "IT-25", "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10625", "fields": {"summary": "Aggregate issues", "status": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "priority": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/4", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/low.svg", "name": "Low", "id": "4"}, "issuetype": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10000", "id": "10000", "description": "A big user story that needs to be broken down. Created by Jira Software - do not edit or delete.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/issuetypes/epic.svg", "name": "Epic", "subtask": false, "hierarchyLevel": 1}}}}], "assignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updated": "2023-04-05T05:08:50.112000-07:00", "status": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "components": [{"self": "https://airbyteio.atlassian.net/rest/api/3/component/10049", "id": "10049", "name": "Component 3", "description": "This is a Jira component"}], "timeoriginalestimate": null, "description": {"version": 1, "type": "doc", "content": [{"type": "paragraph", "content": [{"type": "text", "text": "Implement OAUth"}]}]}, "customfield_10010": null, "customfield_10011": "Test 2", "customfield_10210": null, "customfield_10012": {"self": "https://airbyteio.atlassian.net/rest/api/3/customFieldOption/10016", "value": "To Do", "id": "10016"}, "customfield_10013": "ghx-label-2", "customfield_10211": null, "customfield_10014": null, "customfield_10212": null, "timetracking": {"timeSpent": "1d", "timeSpentSeconds": 28800}, "customfield_10015": null, "customfield_10213": null, "customfield_10005": null, "customfield_10006": null, "customfield_10007": null, "security": null, "customfield_10008": null, "attachment": [], "customfield_10009": null, "aggregatetimeestimate": null, "customfield_10209": null, "summary": "CLONE - Aggregate issues", "creator": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "subtasks": [], "reporter": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "aggregateprogress": {"progress": 28800, "total": 28800, "percent": 100}, "customfield_10001": null, "customfield_10002": null, "customfield_10047": null, "customfield_10003": null, "customfield_10004": null, "environment": null, "duedate": null, "progress": {"progress": 28800, "total": 28800, "percent": 100}, "votes": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-26/votes", "votes": 0, "hasVoted": false}, "comment": {"comments": [], "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10626/comment", "maxResults": 0, "total": 0, "startAt": 0}, "worklog": {"startAt": 0, "maxResults": 20, "total": 1, "worklogs": [{"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10626/worklog/11820", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=557058%3A295406f3-a1fc-4733-b906-dd15d021bd79", "accountId": "557058:295406f3-a1fc-4733-b906-dd15d021bd79", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "24x24": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "16x16": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "32x32": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png"}, "displayName": "Tempo Timesheets", "active": true, "timeZone": "America/Los_Angeles", "accountType": "app"}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=557058%3A295406f3-a1fc-4733-b906-dd15d021bd79", "accountId": "557058:295406f3-a1fc-4733-b906-dd15d021bd79", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "24x24": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "16x16": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "32x32": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png"}, "displayName": "Tempo Timesheets", "active": true, "timeZone": "America/Los_Angeles", "accountType": "app"}, "comment": {"version": 1, "type": "doc", "content": [{"type": "paragraph", "content": [{"type": "text", "text": "time-tracking"}]}]}, "created": "2023-04-05T05:08:50.033-0700", "updated": "2023-04-05T05:08:50.033-0700", "started": "2023-04-05T01:00:00.000-0700", "timeSpent": "1d", "timeSpentSeconds": 28800, "id": "11820", "issueId": "10626"}]}}, "projectId": "10000", "projectKey": "IT", "created": "2022-05-17T04:28:19.523000-07:00", "updated": "2023-04-05T05:08:50.112000-07:00"}, "emitted_at": 1695733239210} -{"stream": "issue_comments", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10625/comment/10755", "id": "10755", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "body": {"version": 1, "type": "doc", "content": [{"type": "paragraph", "content": [{"type": "text", "text": "Closed"}]}]}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2022-05-17T04:06:55.076000-07:00", "updated": "2022-05-17T04:06:55.076000-07:00", "jsdPublic": true, "issueId": "IT-25"}, "emitted_at": 1695150028732} -{"stream": "issue_comments", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/comment/10521", "id": "10521", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "body": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque eget venenatis elit. Duis eu justo eget augue iaculis fermentum. Sed semper quam laoreet nisi egestas at posuere augue semper.", "type": "text"}]}]}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-14T14:32:43.099000-07:00", "updated": "2021-04-14T14:32:43.099000-07:00", "jsdPublic": true, "issueId": "IT-23"}, "emitted_at": 1695150029553} -{"stream": "issue_comments", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/comment/10639", "id": "10639", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "body": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "Linked related issue!", "type": "text"}]}]}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-15T00:08:48.998000-07:00", "updated": "2021-04-15T00:08:48.998000-07:00", "jsdPublic": true, "issueId": "IT-23"}, "emitted_at": 1695150029555} -{"stream": "issue_fields", "data": {"id": "statuscategorychangedate", "key": "statuscategorychangedate", "name": "Status Category Changed", "custom": false, "orderable": false, "navigable": true, "searchable": true, "clauseNames": ["statusCategoryChangedDate"], "schema": {"type": "datetime", "system": "statuscategorychangedate"}}, "emitted_at": 1685112945817} -{"stream": "issue_fields", "data": {"id": "parent", "key": "parent", "name": "Parent", "custom": false, "orderable": false, "navigable": true, "searchable": false, "clauseNames": ["parent"]}, "emitted_at": 1685112945818} -{"stream": "issue_fields", "data": {"id": "issuetype", "key": "issuetype", "name": "Issue Type", "custom": false, "orderable": true, "navigable": true, "searchable": true, "clauseNames": ["issuetype", "type"], "schema": {"type": "issuetype", "system": "issuetype"}}, "emitted_at": 1685112945818} -{"stream": "issue_field_configurations", "data": {"id": 10000, "name": "Default Field Configuration", "description": "The default field configuration", "isDefault": true}, "emitted_at": 1685112946538} -{"stream": "issue_field_configurations", "data": {"id": 10001, "name": "Field Config 1", "description": "Field Config 1 test"}, "emitted_at": 1685112946539} -{"stream": "issue_field_configurations", "data": {"id": 10002, "name": "Field Config 2", "description": "Field Config 2 test"}, "emitted_at": 1685112946539} -{"stream":"issue_custom_field_contexts","data":{"id":"10130","name":"Default Configuration Scheme for Account","description":"Default configuration scheme generated by Jira","isGlobalContext":true,"isAnyIssueType":true,"fieldId":"customfield_10030","fieldType":"option2"},"emitted_at":1695743764806} -{"stream":"issue_custom_field_contexts","data":{"id":"10382","name":"Default Configuration Scheme for Time to first response","description":"Default configuration scheme generated by Jira","isGlobalContext":true,"isAnyIssueType":true,"fieldId":"customfield_10225","fieldType":"sd-servicelevelagreement"},"emitted_at":1695743765181} -{"stream":"issue_custom_field_contexts","data":{"id":"10384","name":"Default Configuration Scheme for Time to done","description":"Default configuration scheme generated by Jira","isGlobalContext":true,"isAnyIssueType":true,"fieldId":"customfield_10226","fieldType":"sd-servicelevelagreement"},"emitted_at":1695743765557} -{"stream":"issue_custom_field_options","data":{"id":"10014","value":"New functionality","disabled":false,"fieldId":"customfield_10007","contextId":"10107"},"emitted_at":1695743210192} -{"stream":"issue_custom_field_options","data":{"id":"10015","value":"Other","disabled":false,"fieldId":"customfield_10007","contextId":"10107"},"emitted_at":1695743210192} -{"stream":"issue_custom_field_options","data":{"id":"10000","value":"Extensive / Widespread","disabled":false,"fieldId":"customfield_10004","contextId":"10104"},"emitted_at":1695743213432} -{"stream":"issue_custom_field_options","data":{"id":"10018","value":"Done","disabled":false,"fieldId":"customfield_10012","contextId":"10112"},"emitted_at":1695743206224} -{"stream": "issue_link_types", "data": {"id": "10000", "name": "Blocks", "inward": "is blocked by", "outward": "blocks", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLinkType/10000"}, "emitted_at": 1685112962538} -{"stream": "issue_link_types", "data": {"id": "10001", "name": "Cloners", "inward": "is cloned by", "outward": "clones", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLinkType/10001"}, "emitted_at": 1685112962539} -{"stream": "issue_link_types", "data": {"id": "10002", "name": "Duplicate", "inward": "is duplicated by", "outward": "duplicates", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLinkType/10002"}, "emitted_at": 1685112962539} -{"stream": "issue_navigator_settings", "data": {"label": "Issue Type", "value": "issuetype"}, "emitted_at": 1685112963331} -{"stream": "issue_navigator_settings", "data": {"label": "Key", "value": "issuekey"}, "emitted_at": 1685112963332} -{"stream": "issue_navigator_settings", "data": {"label": "Summary", "value": "summary"}, "emitted_at": 1685112963332} -{"stream": "issue_notification_schemes", "data": {"expand": "notificationSchemeEvents,user,group,projectRole,field,all", "id": 10000, "self": "https://airbyteio.atlassian.net/rest/api/3/notificationscheme/10000", "name": "Default Notification Scheme"}, "emitted_at": 1685112963963} -{"stream": "issue_notification_schemes", "data": {"expand": "notificationSchemeEvents,user,group,projectRole,field,all", "id": 10001, "self": "https://airbyteio.atlassian.net/rest/api/3/notificationscheme/10001", "name": "Notification Scheme 1", "description": "Notification Scheme 1 test"}, "emitted_at": 1685112963964} -{"stream": "issue_notification_schemes", "data": {"expand": "notificationSchemeEvents,user,group,projectRole,field,all", "id": 10002, "self": "https://airbyteio.atlassian.net/rest/api/3/notificationscheme/10002", "name": "Notification Scheme 2", "description": "Notification Scheme 2 test"}, "emitted_at": 1685112963964} -{"stream": "issue_priorities", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/1", "statusColor": "#d04437", "description": "This problem will block progress.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/highest.svg", "name": "Highest", "id": "1", "isDefault": false}, "emitted_at": 1685112964545} -{"stream": "issue_priorities", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/2", "statusColor": "#f15C75", "description": "Serious problem that could block progress.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/high.svg", "name": "High", "id": "2", "isDefault": false}, "emitted_at": 1685112964546} -{"stream": "issue_priorities", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/3", "statusColor": "#f79232", "description": "Has the potential to affect progress.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/medium.svg", "name": "Medium", "id": "3", "isDefault": false}, "emitted_at": 1685112964547} -{"stream": "issue_properties", "data": {"key": "myProperty", "value": {"owner": "admin", "weight": 100}, "issueId": "IT-16"}, "emitted_at": 1695150401974} -{"stream": "issue_properties", "data": {"key": "myProperty1", "value": {"owner": "admin", "weight": 100}, "issueId": "IT-16"}, "emitted_at": 1695150402322} -{"stream": "issue_properties", "data": {"key": "myProperty2", "value": {"owner": "admin", "weight": 100}, "issueId": "IT-16"}, "emitted_at": 1695150402689} -{"stream": "issue_remote_links", "data": {"id": 10046, "self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-24/remotelink/10046", "globalId": "system=https://www.mycompany.com/support&id=1", "application": {"type": "com.acme.tracker", "name": "My Acme Tracker"}, "relationship": "causes", "object": {"url": "https://www.mycompany.com/support?id=1", "title": "TSTSUP-111", "summary": "Customer support issue", "icon": {"url16x16": "https://www.mycompany.com/support/ticket.png", "title": "Support Ticket"}, "status": {"resolved": true, "icon": {"url16x16": "https://www.mycompany.com/support/resolved.png", "title": "Case Closed", "link": "https://www.mycompany.com/support?id=1&details=closed"}}}, "issueId": "IT-24"}, "emitted_at": 1695150559362} -{"stream": "issue_remote_links", "data": {"id": 10047, "self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-23/remotelink/10047", "globalId": "system=https://www.mycompany.com/support&id=1", "application": {"type": "com.acme.tracker", "name": "My Acme Tracker"}, "relationship": "causes", "object": {"url": "https://www.mycompany.com/support?id=1", "title": "TSTSUP-111", "summary": "Customer support issue", "icon": {"url16x16": "https://www.mycompany.com/support/ticket.png", "title": "Support Ticket"}, "status": {"resolved": true, "icon": {"url16x16": "https://www.mycompany.com/support/resolved.png", "title": "Case Closed", "link": "https://www.mycompany.com/support?id=1&details=closed"}}}, "issueId": "IT-23"}, "emitted_at": 1695150559737} -{"stream": "issue_remote_links", "data": {"id": 10048, "self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-22/remotelink/10048", "globalId": "system=https://www.mycompany.com/support&id=1", "application": {"type": "com.acme.tracker", "name": "My Acme Tracker"}, "relationship": "causes", "object": {"url": "https://www.mycompany.com/support?id=1", "title": "TSTSUP-111", "summary": "Customer support issue", "icon": {"url16x16": "https://www.mycompany.com/support/ticket.png", "title": "Support Ticket"}, "status": {"resolved": true, "icon": {"url16x16": "https://www.mycompany.com/support/resolved.png", "title": "Case Closed", "link": "https://www.mycompany.com/support?id=1&details=closed"}}}, "issueId": "IT-22"}, "emitted_at": 1695150560183} -{"stream": "issue_resolutions", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/resolution/10000", "id": "10000", "description": "Work has been completed on this issue.", "name": "Done", "isDefault": false}, "emitted_at": 1685112998451} -{"stream": "issue_resolutions", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/resolution/10001", "id": "10001", "description": "This issue won't be actioned.", "name": "Won't Do", "isDefault": false}, "emitted_at": 1685112998452} -{"stream": "issue_resolutions", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/resolution/10002", "id": "10002", "description": "The problem is a duplicate of an existing issue.", "name": "Duplicate", "isDefault": false}, "emitted_at": 1685112998452} -{"stream": "issue_security_schemes", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuesecurityschemes/10001", "id": 10001, "name": "Security scheme 2", "description": "Security scheme 2"}, "emitted_at": 1685112999194} -{"stream": "issue_security_schemes", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuesecurityschemes/10000", "id": 10000, "name": "Security scheme 1", "description": "Security scheme 1", "defaultSecurityLevelId": 10002}, "emitted_at": 1685112999195} -{"stream": "issue_security_schemes", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuesecurityschemes/10002", "id": 10002, "name": "Security scheme 3", "description": "Security scheme 3 test", "defaultSecurityLevelId": 10003}, "emitted_at": 1685112999195} -{"stream":"issue_transitions","data":{"id":"11","name":"To Do","to":{"self":"https://airbyteio.atlassian.net/rest/api/3/status/10000","description":"","iconUrl":"https://airbyteio.atlassian.net/","name":"To Do","id":"10000","statusCategory":{"self":"https://airbyteio.atlassian.net/rest/api/3/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To Do"}},"hasScreen":false,"isGlobal":true,"isInitial":false,"isAvailable":true,"isConditional":false,"isLooped":false,"issueId":"IT-26"},"emitted_at":1694797618551} -{"stream":"issue_transitions","data":{"id":"21","name":"In Progress","to":{"self":"https://airbyteio.atlassian.net/rest/api/3/status/3","description":"This issue is being actively worked on at the moment by the assignee.","iconUrl":"https://airbyteio.atlassian.net/images/icons/statuses/inprogress.png","name":"In Progress","id":"3","statusCategory":{"self":"https://airbyteio.atlassian.net/rest/api/3/statuscategory/4","id":4,"key":"indeterminate","colorName":"yellow","name":"In Progress"}},"hasScreen":false,"isGlobal":true,"isInitial":false,"isAvailable":true,"isConditional":false,"isLooped":false,"issueId":"IT-26"},"emitted_at":1694797618551} -{"stream":"issue_transitions","data":{"id":"31","name":"Done","to":{"self":"https://airbyteio.atlassian.net/rest/api/3/status/10001","description":"","iconUrl":"https://airbyteio.atlassian.net/","name":"Done","id":"10001","statusCategory":{"self":"https://airbyteio.atlassian.net/rest/api/3/statuscategory/3","id":3,"key":"done","colorName":"green","name":"Done"}},"hasScreen":false,"isGlobal":true,"isInitial":false,"isAvailable":true,"isConditional":false,"isLooped":false,"issueId":"IT-26"},"emitted_at":1694797618551} -{"stream":"issue_transitions","data":{"id":"101","name":"Closed","to":{"self":"https://airbyteio.atlassian.net/rest/api/3/status/6","description":"The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.","iconUrl":"https://airbyteio.atlassian.net/images/icons/statuses/closed.png","name":"Closed","id":"6","statusCategory":{"self":"https://airbyteio.atlassian.net/rest/api/3/statuscategory/3","id":3,"key":"done","colorName":"green","name":"Done"}},"hasScreen":false,"isGlobal":true,"isInitial":false,"isAvailable":true,"isConditional":false,"isLooped":false,"issueId":"IT-1"},"emitted_at":1694797626847} -{"stream":"issue_transitions","data":{"id":"11","name":"To Do","to":{"self":"https://airbyteio.atlassian.net/rest/api/3/status/10000","description":"","iconUrl":"https://airbyteio.atlassian.net/","name":"To Do","id":"10000","statusCategory":{"self":"https://airbyteio.atlassian.net/rest/api/3/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To Do"}},"hasScreen":false,"isGlobal":true,"isInitial":false,"isAvailable":true,"isConditional":false,"isLooped":false,"issueId":"TESTKEY13-2"},"emitted_at":1694797627727} -{"stream":"issue_transitions","data":{"id":"21","name":"In Progress","to":{"self":"https://airbyteio.atlassian.net/rest/api/3/status/3","description":"This issue is being actively worked on at the moment by the assignee.","iconUrl":"https://airbyteio.atlassian.net/images/icons/statuses/inprogress.png","name":"In Progress","id":"3","statusCategory":{"self":"https://airbyteio.atlassian.net/rest/api/3/statuscategory/4","id":4,"key":"indeterminate","colorName":"yellow","name":"In Progress"}},"hasScreen":false,"isGlobal":true,"isInitial":false,"isAvailable":true,"isConditional":false,"isLooped":false,"issueId":"TESTKEY13-2"},"emitted_at":1694797627728} -{"stream":"issue_transitions","data":{"id":"31","name":"Done","to":{"self":"https://airbyteio.atlassian.net/rest/api/3/status/10001","description":"","iconUrl":"https://airbyteio.atlassian.net/","name":"Done","id":"10001","statusCategory":{"self":"https://airbyteio.atlassian.net/rest/api/3/statuscategory/3","id":3,"key":"done","colorName":"green","name":"Done"}},"hasScreen":false,"isGlobal":true,"isInitial":false,"isAvailable":true,"isConditional":false,"isLooped":false,"issueId":"TESTKEY13-2"},"emitted_at":1694797627728} -{"stream": "issue_type_schemes", "data": {"id": "10000", "name": "Default Issue Type Scheme", "description": "Default issue type scheme is the list of global issue types. All newly created issue types will automatically be added to this scheme.", "isDefault": true}, "emitted_at": 1685112999823} -{"stream": "issue_type_schemes", "data": {"id": "10126", "name": "IT: Scrum Issue Type Scheme", "defaultIssueTypeId": "10001"}, "emitted_at": 1685112999824} -{"stream": "issue_type_schemes", "data": {"id": "10128", "name": "P2: Scrum Issue Type Scheme", "defaultIssueTypeId": "10001"}, "emitted_at": 1685112999824} -{"stream": "issue_type_screen_schemes", "data": {"id": "1", "name": "Default Issue Type Screen Scheme", "description": "The default issue type screen scheme"}, "emitted_at": 1685113000857} -{"stream": "issue_type_screen_schemes", "data": {"id": "10000", "name": "IT: Scrum Issue Type Screen Scheme", "description": ""}, "emitted_at": 1685113000858} -{"stream": "issue_type_screen_schemes", "data": {"id": "10001", "name": "P2: Scrum Issue Type Screen Scheme", "description": ""}, "emitted_at": 1685113000859} -{"stream":"issue_types","data":{"self":"https://airbyteio.atlassian.net/rest/api/3/issuetype/10013","id":"10013","description":"Want to kick off a new marketing campaign? Submit a request here.","iconUrl":"https://airbyteio.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10553?size=medium","name":"Request a campaign","untranslatedName":"Request a campaign","subtask":false,"avatarId":10553,"hierarchyLevel":0},"emitted_at":1695728384173} -{"stream":"issue_types","data":{"self":"https://airbyteio.atlassian.net/rest/api/3/issuetype/10019","id":"10019","description":"Stories track functionality or features expressed as user goals.","iconUrl":"https://airbyteio.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10315?size=medium","name":"Story","untranslatedName":"Story","subtask":false,"avatarId":10315,"hierarchyLevel":0,"scope":{"type":"PROJECT","project":{"id":"10064"}}},"emitted_at":1695728384173} -{"stream":"issue_types","data":{"self":"https://airbyteio.atlassian.net/rest/api/3/issuetype/10014","id":"10014","description":"Need help to review or improve content? Submit a request here.","iconUrl":"https://airbyteio.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10554?size=medium","name":"Request a content review","untranslatedName":"Request a content review","subtask":false,"avatarId":10554,"hierarchyLevel":0},"emitted_at":1695728384174} -{"stream": "issue_votes", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-2/votes", "votes": 1, "hasVoted": true, "voters": [{"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}], "issueId": "IT-2"}, "emitted_at": 1695150792011} -{"stream": "issue_votes", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-1/votes", "votes": 1, "hasVoted": true, "voters": [{"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}], "issueId": "IT-1"}, "emitted_at": 1695150792394} -{"stream": "issue_votes", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/TESTKEY13-2/votes", "votes": 0, "hasVoted": false, "voters": [], "issueId": "TESTKEY13-2"}, "emitted_at": 1695150793261} -{"stream": "issue_watchers", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-2/watchers", "isWatching": true, "watchCount": 1, "watchers": [{"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}], "issueId": "IT-2"}, "emitted_at": 1695150944803} -{"stream": "issue_watchers", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-1/watchers", "isWatching": true, "watchCount": 1, "watchers": [{"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}], "issueId": "IT-1"}, "emitted_at": 1695150945205} -{"stream": "issue_watchers", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/TESTKEY13-2/watchers", "isWatching": true, "watchCount": 1, "watchers": [{"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}], "issueId": "TESTKEY13-2"}, "emitted_at": 1695150946421} -{"stream": "issue_worklogs", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10626/worklog/11820", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=557058%3A295406f3-a1fc-4733-b906-dd15d021bd79", "accountId": "557058:295406f3-a1fc-4733-b906-dd15d021bd79", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "24x24": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "16x16": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "32x32": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png"}, "displayName": "Tempo Timesheets", "active": true, "timeZone": "America/Los_Angeles", "accountType": "app"}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=557058%3A295406f3-a1fc-4733-b906-dd15d021bd79", "accountId": "557058:295406f3-a1fc-4733-b906-dd15d021bd79", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "24x24": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "16x16": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "32x32": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png"}, "displayName": "Tempo Timesheets", "active": true, "timeZone": "America/Los_Angeles", "accountType": "app"}, "comment": {"version": 1, "type": "doc", "content": [{"type": "paragraph", "content": [{"type": "text", "text": "time-tracking"}]}]}, "created": "2023-04-05T05:08:50.033000-07:00", "updated": "2023-04-05T05:08:50.033000-07:00", "started": "2023-04-05T01:00:00-07:00", "timeSpent": "1d", "timeSpentSeconds": 28800, "id": "11820", "issueId": "10626"}, "emitted_at": 1695027059886} -{"stream": "issue_worklogs", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10080/worklog/11708", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "comment": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "I did some work here. 0", "type": "text"}]}]}, "created": "2021-04-15T11:39:46.574000-07:00", "updated": "2021-04-15T11:39:46.574000-07:00", "started": "2021-04-14T18:48:52.747000-07:00", "timeSpent": "2h 21m", "timeSpentSeconds": 8460, "id": "11708", "issueId": "10080"}, "emitted_at": 1695027060600} -{"stream": "issue_worklogs", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10080/worklog/11709", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "comment": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "I did some work here. 1", "type": "text"}]}]}, "created": "2021-04-15T11:39:47.215000-07:00", "updated": "2021-04-15T11:39:47.215000-07:00", "started": "2021-04-14T18:48:52.747000-07:00", "timeSpent": "37m", "timeSpentSeconds": 2220, "id": "11709", "issueId": "10080"}, "emitted_at": 1695027060603} -{"stream": "issue_worklogs", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10080/worklog/11710", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "comment": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "I did some work here. 2", "type": "text"}]}]}, "created": "2021-04-15T11:39:47.834000-07:00", "updated": "2021-04-15T11:39:47.834000-07:00", "started": "2021-04-14T18:48:52.747000-07:00", "timeSpent": "2h 50m", "timeSpentSeconds": 10200, "id": "11710", "issueId": "10080"}, "emitted_at": 1695027060603} -{"stream": "jira_settings", "data": {"id": "jira.issuenav.criteria.autoupdate", "key": "jira.issuenav.criteria.autoupdate", "value": "true", "name": "Auto Update Criteria", "desc": "Turn on to update search results automatically", "type": "boolean"}, "emitted_at": 1685113041270} -{"stream": "jira_settings", "data": {"id": "jira.clone.prefix", "key": "jira.clone.prefix", "value": "CLONE -", "name": "The prefix added to the Summary field of cloned issues", "type": "string"}, "emitted_at": 1685113041271} -{"stream": "jira_settings", "data": {"id": "jira.date.picker.java.format", "key": "jira.date.picker.java.format", "value": "d/MMM/yy", "name": "Date Picker Format (Java)", "desc": "This part is only for the Java (server side) generated dates. Note that this should correspond to the javascript date picker format (jira.date.picker.javascript.format) setting.", "type": "string"}, "emitted_at": 1685113041271} -{"stream": "labels", "data": {"label": "Label10"}, "emitted_at": 1685113042126} -{"stream": "labels", "data": {"label": "Label3"}, "emitted_at": 1685113042127} -{"stream": "labels", "data": {"label": "Label4"}, "emitted_at": 1685113042127} -{"stream": "permissions", "data": {"key": "ADD_COMMENTS", "name": "Add Comments", "type": "PROJECT", "description": "Ability to comment on issues."}, "emitted_at": 1685113042849} -{"stream": "permissions", "data": {"key": "ADMINISTER", "name": "Administer Jira", "type": "GLOBAL", "description": "Create and administer projects, issue types, fields, workflows, and schemes for all projects. Users with this permission can perform most administration tasks, except: managing users, importing data, and editing system email settings."}, "emitted_at": 1685113042850} -{"stream": "permissions", "data": {"key": "ADMINISTER_PROJECTS", "name": "Administer Projects", "type": "PROJECT", "description": "Ability to administer a project in Jira."}, "emitted_at": 1685113042851} -{"stream": "permission_schemes", "data": {"expand": "permissions,user,group,projectRole,field,all", "id": 10056, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056", "name": "CAW software permission scheme", "description": "The permission scheme for Jira Software Free. In Free, any registered user can access and administer this project.", "permissions": [{"id": 14200, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14200", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ADD_COMMENTS"}, {"id": 14201, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14201", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ADMINISTER_PROJECTS"}, {"id": 14202, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14202", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ASSIGNABLE_USER"}, {"id": 14203, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14203", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ASSIGN_ISSUES"}, {"id": 14204, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14204", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "BROWSE_PROJECTS"}, {"id": 14205, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14205", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "CLOSE_ISSUES"}, {"id": 14206, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14206", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "CREATE_ATTACHMENTS"}, {"id": 14207, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14207", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "CREATE_ISSUES"}, {"id": 14208, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14208", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ALL_ATTACHMENTS"}, {"id": 14209, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14209", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ALL_COMMENTS"}, {"id": 14210, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14210", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ALL_WORKLOGS"}, {"id": 14211, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14211", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ISSUES"}, {"id": 14212, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14212", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_OWN_ATTACHMENTS"}, {"id": 14213, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14213", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_OWN_COMMENTS"}, {"id": 14214, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14214", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_OWN_WORKLOGS"}, {"id": 14215, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14215", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_ALL_COMMENTS"}, {"id": 14216, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14216", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_ALL_WORKLOGS"}, {"id": 14217, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14217", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_ISSUES"}, {"id": 14218, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14218", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_OWN_COMMENTS"}, {"id": 14219, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14219", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_OWN_WORKLOGS"}, {"id": 14220, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14220", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "LINK_ISSUES"}, {"id": 14221, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14221", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MANAGE_SPRINTS_PERMISSION"}, {"id": 14222, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14222", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MANAGE_WATCHERS"}, {"id": 14223, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14223", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MODIFY_REPORTER"}, {"id": 14224, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14224", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MOVE_ISSUES"}, {"id": 14225, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14225", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "RESOLVE_ISSUES"}, {"id": 14226, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14226", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "SCHEDULE_ISSUES"}, {"id": 14227, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14227", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "TRANSITION_ISSUES"}, {"id": 14228, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14228", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_DEV_TOOLS"}, {"id": 14229, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14229", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_READONLY_WORKFLOW"}, {"id": 14230, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14230", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_VOTERS_AND_WATCHERS"}, {"id": 14231, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14231", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "WORK_ON_ISSUES"}, {"id": 14232, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14232", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__log-work-for-others"}, {"id": 14233, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14233", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__set-billable-hours"}, {"id": 14234, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14234", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__view-all-worklogs"}, {"id": 14235, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14235", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__view-issue-hours"}, {"id": 14236, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14236", "holder": {"type": "applicationRole"}, "permission": "ADMINISTER_PROJECTS"}, {"id": 14237, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14237", "holder": {"type": "applicationRole"}, "permission": "BROWSE_PROJECTS"}, {"id": 14238, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14238", "holder": {"type": "applicationRole"}, "permission": "MANAGE_SPRINTS_PERMISSION"}, {"id": 14239, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14239", "holder": {"type": "applicationRole"}, "permission": "VIEW_DEV_TOOLS"}, {"id": 14240, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14240", "holder": {"type": "applicationRole"}, "permission": "VIEW_READONLY_WORKFLOW"}, {"id": 14241, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14241", "holder": {"type": "applicationRole"}, "permission": "ASSIGNABLE_USER"}, {"id": 14242, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14242", "holder": {"type": "applicationRole"}, "permission": "CLOSE_ISSUES"}, {"id": 14243, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14243", "holder": {"type": "applicationRole"}, "permission": "CREATE_ISSUES"}, {"id": 14244, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14244", "holder": {"type": "applicationRole"}, "permission": "DELETE_ISSUES"}, {"id": 14245, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14245", "holder": {"type": "applicationRole"}, "permission": "EDIT_ISSUES"}, {"id": 14246, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14246", "holder": {"type": "applicationRole"}, "permission": "LINK_ISSUES"}, {"id": 14247, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14247", "holder": {"type": "applicationRole"}, "permission": "MODIFY_REPORTER"}, {"id": 14248, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14248", "holder": {"type": "applicationRole"}, "permission": "MOVE_ISSUES"}, {"id": 14249, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14249", "holder": {"type": "applicationRole"}, "permission": "RESOLVE_ISSUES"}, {"id": 14250, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14250", "holder": {"type": "applicationRole"}, "permission": "SCHEDULE_ISSUES"}, {"id": 14251, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14251", "holder": {"type": "applicationRole"}, "permission": "TRANSITION_ISSUES"}, {"id": 14252, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14252", "holder": {"type": "applicationRole"}, "permission": "MANAGE_WATCHERS"}, {"id": 14253, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14253", "holder": {"type": "applicationRole"}, "permission": "VIEW_VOTERS_AND_WATCHERS"}, {"id": 14254, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14254", "holder": {"type": "applicationRole"}, "permission": "ADD_COMMENTS"}, {"id": 14255, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14255", "holder": {"type": "applicationRole"}, "permission": "DELETE_ALL_COMMENTS"}, {"id": 14256, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14256", "holder": {"type": "applicationRole"}, "permission": "DELETE_OWN_COMMENTS"}, {"id": 14257, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14257", "holder": {"type": "applicationRole"}, "permission": "EDIT_ALL_COMMENTS"}, {"id": 14258, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14258", "holder": {"type": "applicationRole"}, "permission": "EDIT_OWN_COMMENTS"}, {"id": 14259, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14259", "holder": {"type": "applicationRole"}, "permission": "CREATE_ATTACHMENTS"}, {"id": 14260, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14260", "holder": {"type": "applicationRole"}, "permission": "DELETE_ALL_ATTACHMENTS"}, {"id": 14261, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14261", "holder": {"type": "applicationRole"}, "permission": "DELETE_OWN_ATTACHMENTS"}, {"id": 14262, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14262", "holder": {"type": "applicationRole"}, "permission": "DELETE_ALL_WORKLOGS"}, {"id": 14263, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14263", "holder": {"type": "applicationRole"}, "permission": "DELETE_OWN_WORKLOGS"}, {"id": 14264, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14264", "holder": {"type": "applicationRole"}, "permission": "EDIT_ALL_WORKLOGS"}, {"id": 14265, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14265", "holder": {"type": "applicationRole"}, "permission": "EDIT_OWN_WORKLOGS"}, {"id": 14266, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14266", "holder": {"type": "applicationRole"}, "permission": "WORK_ON_ISSUES"}, {"id": 14267, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14267", "holder": {"type": "applicationRole"}, "permission": "ASSIGN_ISSUES"}, {"id": 14404, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14404", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "SET_ISSUE_SECURITY"}, {"id": 14481, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14481", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_AGGREGATED_DATA"}, {"id": 14542, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14542", "holder": {"type": "applicationRole"}, "permission": "VIEW_AGGREGATED_DATA"}, {"id": 14714, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14714", "holder": {"type": "applicationRole"}, "permission": "VIEW_PROJECTS"}, {"id": 14715, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14715", "holder": {"type": "applicationRole"}, "permission": "VIEW_ISSUES"}, {"id": 14836, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14836", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_PROJECTS"}, {"id": 14837, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14837", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_ISSUES"}, {"id": 15117, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/15117", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "SERVICEDESK_AGENT"}]}, "emitted_at": 1685113044013} -{"stream": "permission_schemes", "data": {"expand": "permissions,user,group,projectRole,field,all", "id": 10055, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055", "name": "CLK software permission scheme", "description": "The permission scheme for Jira Software Free. In Free, any registered user can access and administer this project.", "permissions": [{"id": 14132, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14132", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ADD_COMMENTS"}, {"id": 14133, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14133", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ADMINISTER_PROJECTS"}, {"id": 14134, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14134", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ASSIGNABLE_USER"}, {"id": 14135, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14135", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ASSIGN_ISSUES"}, {"id": 14136, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14136", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "BROWSE_PROJECTS"}, {"id": 14137, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14137", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "CLOSE_ISSUES"}, {"id": 14138, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14138", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "CREATE_ATTACHMENTS"}, {"id": 14139, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14139", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "CREATE_ISSUES"}, {"id": 14140, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14140", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ALL_ATTACHMENTS"}, {"id": 14141, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14141", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ALL_COMMENTS"}, {"id": 14142, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14142", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ALL_WORKLOGS"}, {"id": 14143, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14143", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ISSUES"}, {"id": 14144, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14144", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_OWN_ATTACHMENTS"}, {"id": 14145, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14145", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_OWN_COMMENTS"}, {"id": 14146, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14146", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_OWN_WORKLOGS"}, {"id": 14147, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14147", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_ALL_COMMENTS"}, {"id": 14148, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14148", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_ALL_WORKLOGS"}, {"id": 14149, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14149", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_ISSUES"}, {"id": 14150, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14150", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_OWN_COMMENTS"}, {"id": 14151, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14151", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_OWN_WORKLOGS"}, {"id": 14152, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14152", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "LINK_ISSUES"}, {"id": 14153, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14153", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MANAGE_SPRINTS_PERMISSION"}, {"id": 14154, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14154", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MANAGE_WATCHERS"}, {"id": 14155, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14155", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MODIFY_REPORTER"}, {"id": 14156, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14156", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MOVE_ISSUES"}, {"id": 14157, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14157", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "RESOLVE_ISSUES"}, {"id": 14158, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14158", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "SCHEDULE_ISSUES"}, {"id": 14159, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14159", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "TRANSITION_ISSUES"}, {"id": 14160, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14160", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_DEV_TOOLS"}, {"id": 14161, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14161", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_READONLY_WORKFLOW"}, {"id": 14162, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14162", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_VOTERS_AND_WATCHERS"}, {"id": 14163, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14163", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "WORK_ON_ISSUES"}, {"id": 14164, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14164", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__log-work-for-others"}, {"id": 14165, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14165", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__set-billable-hours"}, {"id": 14166, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14166", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__view-all-worklogs"}, {"id": 14167, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14167", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__view-issue-hours"}, {"id": 14168, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14168", "holder": {"type": "applicationRole"}, "permission": "ADMINISTER_PROJECTS"}, {"id": 14169, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14169", "holder": {"type": "applicationRole"}, "permission": "BROWSE_PROJECTS"}, {"id": 14170, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14170", "holder": {"type": "applicationRole"}, "permission": "MANAGE_SPRINTS_PERMISSION"}, {"id": 14171, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14171", "holder": {"type": "applicationRole"}, "permission": "VIEW_DEV_TOOLS"}, {"id": 14172, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14172", "holder": {"type": "applicationRole"}, "permission": "VIEW_READONLY_WORKFLOW"}, {"id": 14173, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14173", "holder": {"type": "applicationRole"}, "permission": "ASSIGNABLE_USER"}, {"id": 14174, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14174", "holder": {"type": "applicationRole"}, "permission": "CLOSE_ISSUES"}, {"id": 14175, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14175", "holder": {"type": "applicationRole"}, "permission": "CREATE_ISSUES"}, {"id": 14176, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14176", "holder": {"type": "applicationRole"}, "permission": "DELETE_ISSUES"}, {"id": 14177, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14177", "holder": {"type": "applicationRole"}, "permission": "EDIT_ISSUES"}, {"id": 14178, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14178", "holder": {"type": "applicationRole"}, "permission": "LINK_ISSUES"}, {"id": 14179, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14179", "holder": {"type": "applicationRole"}, "permission": "MODIFY_REPORTER"}, {"id": 14180, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14180", "holder": {"type": "applicationRole"}, "permission": "MOVE_ISSUES"}, {"id": 14181, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14181", "holder": {"type": "applicationRole"}, "permission": "RESOLVE_ISSUES"}, {"id": 14182, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14182", "holder": {"type": "applicationRole"}, "permission": "SCHEDULE_ISSUES"}, {"id": 14183, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14183", "holder": {"type": "applicationRole"}, "permission": "TRANSITION_ISSUES"}, {"id": 14184, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14184", "holder": {"type": "applicationRole"}, "permission": "MANAGE_WATCHERS"}, {"id": 14185, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14185", "holder": {"type": "applicationRole"}, "permission": "VIEW_VOTERS_AND_WATCHERS"}, {"id": 14186, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14186", "holder": {"type": "applicationRole"}, "permission": "ADD_COMMENTS"}, {"id": 14187, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14187", "holder": {"type": "applicationRole"}, "permission": "DELETE_ALL_COMMENTS"}, {"id": 14188, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14188", "holder": {"type": "applicationRole"}, "permission": "DELETE_OWN_COMMENTS"}, {"id": 14189, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14189", "holder": {"type": "applicationRole"}, "permission": "EDIT_ALL_COMMENTS"}, {"id": 14190, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14190", "holder": {"type": "applicationRole"}, "permission": "EDIT_OWN_COMMENTS"}, {"id": 14191, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14191", "holder": {"type": "applicationRole"}, "permission": "CREATE_ATTACHMENTS"}, {"id": 14192, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14192", "holder": {"type": "applicationRole"}, "permission": "DELETE_ALL_ATTACHMENTS"}, {"id": 14193, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14193", "holder": {"type": "applicationRole"}, "permission": "DELETE_OWN_ATTACHMENTS"}, {"id": 14194, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14194", "holder": {"type": "applicationRole"}, "permission": "DELETE_ALL_WORKLOGS"}, {"id": 14195, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14195", "holder": {"type": "applicationRole"}, "permission": "DELETE_OWN_WORKLOGS"}, {"id": 14196, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14196", "holder": {"type": "applicationRole"}, "permission": "EDIT_ALL_WORKLOGS"}, {"id": 14197, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14197", "holder": {"type": "applicationRole"}, "permission": "EDIT_OWN_WORKLOGS"}, {"id": 14198, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14198", "holder": {"type": "applicationRole"}, "permission": "WORK_ON_ISSUES"}, {"id": 14199, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14199", "holder": {"type": "applicationRole"}, "permission": "ASSIGN_ISSUES"}, {"id": 14405, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14405", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "SET_ISSUE_SECURITY"}, {"id": 14482, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14482", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_AGGREGATED_DATA"}, {"id": 14543, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14543", "holder": {"type": "applicationRole"}, "permission": "VIEW_AGGREGATED_DATA"}, {"id": 14712, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14712", "holder": {"type": "applicationRole"}, "permission": "VIEW_PROJECTS"}, {"id": 14713, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14713", "holder": {"type": "applicationRole"}, "permission": "VIEW_ISSUES"}, {"id": 14834, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14834", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_PROJECTS"}, {"id": 14835, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14835", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_ISSUES"}, {"id": 15118, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/15118", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "SERVICEDESK_AGENT"}]}, "emitted_at": 1685113044015} -{"stream": "permission_schemes", "data": {"expand": "permissions,user,group,projectRole,field,all", "id": 0, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0", "name": "Default Permission Scheme", "description": "This is the default Permission Scheme. Any new projects that are created will be assigned this scheme.", "permissions": [{"id": 10004, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10004", "holder": {"type": "projectRole", "parameter": "10002", "value": "10002", "expand": "projectRole"}, "permission": "ADMINISTER_PROJECTS"}, {"id": 10005, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10005", "holder": {"type": "applicationRole"}, "permission": "BROWSE_PROJECTS"}, {"id": 10006, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10006", "holder": {"type": "applicationRole"}, "permission": "CREATE_ISSUES"}, {"id": 10007, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10007", "holder": {"type": "applicationRole"}, "permission": "ADD_COMMENTS"}, {"id": 10008, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10008", "holder": {"type": "applicationRole"}, "permission": "CREATE_ATTACHMENTS"}, {"id": 10009, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10009", "holder": {"type": "applicationRole"}, "permission": "ASSIGN_ISSUES"}, {"id": 10010, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10010", "holder": {"type": "applicationRole"}, "permission": "ASSIGNABLE_USER"}, {"id": 10011, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10011", "holder": {"type": "applicationRole"}, "permission": "RESOLVE_ISSUES"}, {"id": 10012, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10012", "holder": {"type": "applicationRole"}, "permission": "LINK_ISSUES"}, {"id": 10013, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10013", "holder": {"type": "applicationRole"}, "permission": "EDIT_ISSUES"}, {"id": 10014, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10014", "holder": {"type": "projectRole", "parameter": "10002", "value": "10002", "expand": "projectRole"}, "permission": "DELETE_ISSUES"}, {"id": 10015, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10015", "holder": {"type": "applicationRole"}, "permission": "CLOSE_ISSUES"}, {"id": 10016, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10016", "holder": {"type": "applicationRole"}, "permission": "MOVE_ISSUES"}, {"id": 10017, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10017", "holder": {"type": "applicationRole"}, "permission": "SCHEDULE_ISSUES"}, {"id": 10018, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10018", "holder": {"type": "projectRole", "parameter": "10002", "value": "10002", "expand": "projectRole"}, "permission": "MODIFY_REPORTER"}, {"id": 10019, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10019", "holder": {"type": "applicationRole"}, "permission": "WORK_ON_ISSUES"}, {"id": 10020, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10020", "holder": {"type": "projectRole", "parameter": "10002", "value": "10002", "expand": "projectRole"}, "permission": "DELETE_ALL_WORKLOGS"}, {"id": 10021, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10021", "holder": {"type": "applicationRole"}, "permission": "DELETE_OWN_WORKLOGS"}, {"id": 10022, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10022", "holder": {"type": "projectRole", "parameter": "10002", "value": "10002", "expand": "projectRole"}, "permission": "EDIT_ALL_WORKLOGS"}, {"id": 10023, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10023", "holder": {"type": "applicationRole"}, "permission": "EDIT_OWN_WORKLOGS"}, {"id": 10024, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10024", "holder": {"type": "applicationRole"}, "permission": "VIEW_VOTERS_AND_WATCHERS"}, {"id": 10025, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10025", "holder": {"type": "projectRole", "parameter": "10002", "value": "10002", "expand": "projectRole"}, "permission": "MANAGE_WATCHERS"}, {"id": 10026, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10026", "holder": {"type": "projectRole", "parameter": "10002", "value": "10002", "expand": "projectRole"}, "permission": "EDIT_ALL_COMMENTS"}, {"id": 10027, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10027", "holder": {"type": "applicationRole"}, "permission": "EDIT_OWN_COMMENTS"}, {"id": 10028, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10028", "holder": {"type": "projectRole", "parameter": "10002", "value": "10002", "expand": "projectRole"}, "permission": "DELETE_ALL_COMMENTS"}, {"id": 10029, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10029", "holder": {"type": "applicationRole"}, "permission": "DELETE_OWN_COMMENTS"}, {"id": 10030, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10030", "holder": {"type": "projectRole", "parameter": "10002", "value": "10002", "expand": "projectRole"}, "permission": "DELETE_ALL_ATTACHMENTS"}, {"id": 10031, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10031", "holder": {"type": "applicationRole"}, "permission": "DELETE_OWN_ATTACHMENTS"}, {"id": 10033, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10033", "holder": {"type": "applicationRole"}, "permission": "VIEW_DEV_TOOLS"}, {"id": 10200, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10200", "holder": {"type": "applicationRole"}, "permission": "VIEW_READONLY_WORKFLOW"}, {"id": 10300, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10300", "holder": {"type": "applicationRole"}, "permission": "TRANSITION_ISSUES"}, {"id": 10301, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10301", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ADD_COMMENTS"}, {"id": 10302, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10302", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ADMINISTER_PROJECTS"}, {"id": 10303, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10303", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ASSIGNABLE_USER"}, {"id": 10304, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10304", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ASSIGN_ISSUES"}, {"id": 10305, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10305", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "BROWSE_PROJECTS"}, {"id": 10306, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10306", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "CLOSE_ISSUES"}, {"id": 10307, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10307", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "CREATE_ATTACHMENTS"}, {"id": 10308, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10308", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "CREATE_ISSUES"}, {"id": 10309, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10309", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ALL_ATTACHMENTS"}, {"id": 10310, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10310", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ALL_COMMENTS"}, {"id": 10311, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10311", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ALL_WORKLOGS"}, {"id": 10312, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10312", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ISSUES"}, {"id": 10313, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10313", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_OWN_ATTACHMENTS"}, {"id": 10314, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10314", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_OWN_COMMENTS"}, {"id": 10315, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10315", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_OWN_WORKLOGS"}, {"id": 10316, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10316", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_ALL_COMMENTS"}, {"id": 10317, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10317", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_ALL_WORKLOGS"}, {"id": 10318, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10318", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_ISSUES"}, {"id": 10319, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10319", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_OWN_COMMENTS"}, {"id": 10320, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10320", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_OWN_WORKLOGS"}, {"id": 10321, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10321", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "LINK_ISSUES"}, {"id": 10322, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10322", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MANAGE_SPRINTS_PERMISSION"}, {"id": 10323, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10323", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MANAGE_WATCHERS"}, {"id": 10324, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10324", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MODIFY_REPORTER"}, {"id": 10325, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10325", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MOVE_ISSUES"}, {"id": 10326, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10326", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "RESOLVE_ISSUES"}, {"id": 10327, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10327", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "SCHEDULE_ISSUES"}, {"id": 10328, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10328", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "SET_ISSUE_SECURITY"}, {"id": 10329, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10329", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "TRANSITION_ISSUES"}, {"id": 10330, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10330", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_DEV_TOOLS"}, {"id": 10331, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10331", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_READONLY_WORKFLOW"}, {"id": 10332, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10332", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_VOTERS_AND_WATCHERS"}, {"id": 10333, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10333", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "WORK_ON_ISSUES"}, {"id": 10464, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10464", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__log-work-for-others"}, {"id": 10465, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10465", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__set-billable-hours"}, {"id": 10466, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10466", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__view-all-worklogs"}, {"id": 10467, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10467", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__view-issue-hours"}, {"id": 14538, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/14538", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_AGGREGATED_DATA"}, {"id": 14599, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/14599", "holder": {"type": "applicationRole"}, "permission": "VIEW_AGGREGATED_DATA"}, {"id": 14600, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/14600", "holder": {"type": "applicationRole"}, "permission": "VIEW_PROJECTS"}, {"id": 14601, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/14601", "holder": {"type": "applicationRole"}, "permission": "VIEW_ISSUES"}, {"id": 14722, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/14722", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_PROJECTS"}, {"id": 14723, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/14723", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_ISSUES"}, {"id": 15119, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/15119", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "SERVICEDESK_AGENT"}]}, "emitted_at": 1685113044017} -{"stream": "projects", "data": {"expand": "description,lead,issueTypes,url,projectKeys,permissions,insight", "self": "https://airbyteio.atlassian.net/rest/api/3/project/10000", "id": "10000", "key": "IT", "description": "Test", "lead": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "accountType": "atlassian", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "name": "integration-tests", "avatarUrls": {"48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=medium"}, "projectCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/projectCategory/10004", "id": "10004", "name": "Test category 2", "description": "Test Project Category 2"}, "projectTypeKey": "software", "simplified": false, "style": "classic", "isPrivate": false, "properties": {}}, "emitted_at": 1686153767914} -{"stream": "projects", "data": {"expand": "description,lead,issueTypes,url,projectKeys,permissions,insight", "self": "https://airbyteio.atlassian.net/rest/api/3/project/10016", "id": "10016", "key": "TESTKEY13", "description": "Test project 13 description", "lead": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "accountType": "atlassian", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "name": "Test project 13", "avatarUrls": {"48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10425", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10425?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10425?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10425?size=medium"}, "projectCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/projectCategory/10000", "id": "10000", "name": "Category 1", "description": "Category 1"}, "projectTypeKey": "software", "simplified": false, "style": "classic", "isPrivate": false, "properties": {}}, "emitted_at": 1686153767915} -{"stream": "project_avatars", "data": {"id": "10400", "isSystemAvatar": true, "isSelected": false, "isDeletable": false, "urls": {"16x16": "/secure/viewavatar?size=xsmall&avatarId=10400&avatarType=project", "24x24": "/secure/viewavatar?size=small&avatarId=10400&avatarType=project", "32x32": "/secure/viewavatar?size=medium&avatarId=10400&avatarType=project", "48x48": "/secure/viewavatar?avatarId=10400&avatarType=project"}, "projectId": "IT"}, "emitted_at": 1695151077809} -{"stream": "project_avatars", "data": {"id": "10401", "isSystemAvatar": true, "isSelected": false, "isDeletable": false, "urls": {"16x16": "/secure/viewavatar?size=xsmall&avatarId=10401&avatarType=project", "24x24": "/secure/viewavatar?size=small&avatarId=10401&avatarType=project", "32x32": "/secure/viewavatar?size=medium&avatarId=10401&avatarType=project", "48x48": "/secure/viewavatar?avatarId=10401&avatarType=project"}, "projectId": "IT"}, "emitted_at": 1695151077810} -{"stream": "project_avatars", "data": {"id": "10402", "isSystemAvatar": true, "isSelected": false, "isDeletable": false, "urls": {"16x16": "/secure/viewavatar?size=xsmall&avatarId=10402&avatarType=project", "24x24": "/secure/viewavatar?size=small&avatarId=10402&avatarType=project", "32x32": "/secure/viewavatar?size=medium&avatarId=10402&avatarType=project", "48x48": "/secure/viewavatar?avatarId=10402&avatarType=project"}, "projectId": "IT"}, "emitted_at": 1695151077811} -{"stream": "project_categories", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/projectCategory/10000", "id": "10000", "description": "Category 1", "name": "Category 1"}, "emitted_at": 1685113046251} -{"stream": "project_categories", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/projectCategory/10001", "id": "10001", "description": "Category 2", "name": "Category 2"}, "emitted_at": 1685113046252} -{"stream": "project_categories", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/projectCategory/10002", "id": "10002", "description": "Test Project Category 0", "name": "Test category 0"}, "emitted_at": 1685113046253} -{"stream": "project_components", "data": {"componentBean": {"self": "https://airbyteio.atlassian.net/rest/api/3/component/10047", "id": "10047", "name": "Component 0", "description": "This is a Jira component", "lead": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "assigneeType": "PROJECT_LEAD", "assignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "realAssigneeType": "PROJECT_LEAD", "realAssignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "isAssigneeTypeValid": true, "project": "IT", "projectId": 10000}, "issueCount": 0, "realAssignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "isAssigneeTypeValid": true, "realAssigneeType": "PROJECT_LEAD", "description": "This is a Jira component", "name": "Component 0", "id": "10047", "projectId": 10000, "project": "IT", "assignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "assigneeType": "PROJECT_LEAD", "lead": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "self": "https://airbyteio.atlassian.net/rest/api/3/component/10047"}, "emitted_at": 1685113046991} -{"stream": "project_components", "data": {"componentBean": {"self": "https://airbyteio.atlassian.net/rest/api/3/component/10000", "id": "10000", "name": "Component 1", "description": "Component 1", "lead": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "assigneeType": "PROJECT_DEFAULT", "assignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "realAssigneeType": "PROJECT_DEFAULT", "realAssignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "isAssigneeTypeValid": true, "project": "IT", "projectId": 10000}, "issueCount": 0, "realAssignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "isAssigneeTypeValid": true, "realAssigneeType": "PROJECT_DEFAULT", "description": "Component 1", "name": "Component 1", "id": "10000", "projectId": 10000, "project": "IT", "assignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "assigneeType": "PROJECT_DEFAULT", "lead": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "self": "https://airbyteio.atlassian.net/rest/api/3/component/10000"}, "emitted_at": 1685113046992} -{"stream": "project_components", "data": {"componentBean": {"self": "https://airbyteio.atlassian.net/rest/api/3/component/10048", "id": "10048", "name": "Component 2", "description": "This is a Jira component", "lead": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "assigneeType": "PROJECT_LEAD", "assignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "realAssigneeType": "PROJECT_LEAD", "realAssignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "isAssigneeTypeValid": true, "project": "IT", "projectId": 10000}, "issueCount": 0, "realAssignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "isAssigneeTypeValid": true, "realAssigneeType": "PROJECT_LEAD", "description": "This is a Jira component", "name": "Component 2", "id": "10048", "projectId": 10000, "project": "IT", "assignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "assigneeType": "PROJECT_LEAD", "lead": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "self": "https://airbyteio.atlassian.net/rest/api/3/component/10048"}, "emitted_at": 1685113046993} -{"stream": "project_email", "data": {"emailAddress": "jira@airbyteio.atlassian.net", "projectId": "10000"}, "emitted_at": 1685113048530} -{"stream": "project_email", "data": {"emailAddress": "jira@airbyteio.atlassian.net", "projectId": "10016"}, "emitted_at": 1685113049055} -{"stream":"project_roles","data":{"self":"https://airbyteio.atlassian.net/rest/api/3/role/10037","name":"Member","id":10037,"description":"Members are part of the team, and can add, edit, and collaborate on all work.","scope":{"type":"PROJECT","project":{"id":"10065"}}},"emitted_at":1695730974840} -{"stream":"project_roles","data":{"self":"https://airbyteio.atlassian.net/rest/api/3/role/10038","name":"Viewer","id":10038,"description":"Viewers can search through, view, and comment on your team's work, but not much else.","scope":{"type":"PROJECT","project":{"id":"10065"}}},"emitted_at":1695730974840} -{"stream":"project_roles","data":{"self":"https://airbyteio.atlassian.net/rest/api/3/role/10002","name":"Administrators","id":10002,"description":"A project role that represents administrators in a project"},"emitted_at":1695730974840} -{"stream":"project_roles","data":{"self":"https://airbyteio.atlassian.net/rest/api/3/role/10003","name":"atlassian-addons-project-access","id":10003,"description":"A project role that represents Connect add-ons declaring a scope that requires more than read issue permissions","actors":[{"id":10002,"displayName":"Slack","type":"atlassian-user-role-actor","actorUser":{"accountId":"557058:0867a421-a9ee-4659-801a-bc0ee4a4487e"}},{"id":10759,"displayName":"Proforma Migrator","type":"atlassian-user-role-actor","actorUser":{"accountId":"63a22fb348b367d78a14c15b"}},{"id":10004,"displayName":"Alert Integration","type":"atlassian-user-role-actor","actorUser":{"accountId":"5dd64082af96bc0efbe55103"}},{"id":10006,"displayName":"Statuspage for Jira","type":"atlassian-user-role-actor","actorUser":{"accountId":"5b6c7b3afbc68529c6c47967"}},{"id":10024,"displayName":"Tempo Base plugin","type":"atlassian-user-role-actor","actorUser":{"accountId":"557058:4bf913be-d3b6-4a41-8b7f-01c7da1964ab"}},{"id":10003,"displayName":"Jira Service Management Widget","type":"atlassian-user-role-actor","actorUser":{"accountId":"557058:950f9f5b-3d6d-4e1d-954a-21367ae9ac75"}},{"id":10005,"displayName":"Trello","type":"atlassian-user-role-actor","actorUser":{"accountId":"557058:214cdd6a-ff93-4d8b-838b-62dfcf1a2a71"}},{"id":10000,"displayName":"Automation for Jira","type":"atlassian-user-role-actor","actorUser":{"accountId":"557058:f58131cb-b67d-43c7-b30d-6b58d40bd077"}},{"id":10550,"displayName":"Atlassian Assist","type":"atlassian-user-role-actor","actorUser":{"accountId":"5cb4ae0e4b97ab11a18e00c7"}},{"id":10679,"displayName":"Microsoft Teams for Jira Cloud","type":"atlassian-user-role-actor","actorUser":{"accountId":"60e5a86a471e61006a4c51fd"}},{"id":10840,"displayName":"Time to SLA","type":"atlassian-user-role-actor","actorUser":{"accountId":"5ec305d24084d90c32d1cbba"}},{"id":10990,"displayName":"Atlas for Jira Cloud","type":"atlassian-user-role-actor","actorUser":{"accountId":"630db2cd9796033b256bc349"}},{"id":10027,"displayName":"Tempo Timesheets","type":"atlassian-user-role-actor","actorUser":{"accountId":"557058:295406f3-a1fc-4733-b906-dd15d021bd79"}},{"id":10899,"displayName":"Timesheet tracking for Jira","type":"atlassian-user-role-actor","actorUser":{"accountId":"5d94abbf56bb950dd648f744"}},{"id":10001,"displayName":"Jira Outlook","type":"atlassian-user-role-actor","actorUser":{"accountId":"5d53f3cbc6b9320d9ea5bdc2"}},{"id":10007,"displayName":"Jira Spreadsheets","type":"atlassian-user-role-actor","actorUser":{"accountId":"5cf112d31552030f1e3a5905"}}]},"emitted_at":1695730974840} -{"stream": "project_types", "data": {"key": "product_discovery", "formattedKey": "Product Discovery", "descriptionI18nKey": "jira.project.type.polaris.description", "icon": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE4LjEuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgdmlld0JveD0iMCAwIDMwMCAzMDAiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMwMCAzMDA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnIGlkPSJMYXllcl8yIj4NCgk8cGF0aCBzdHlsZT0iZmlsbDojRjc5MjMyOyIgZD0iTTE1MCwwQzY2LjY2NywwLDAsNjYuNjY3LDAsMTUwczY2LjY2NywxNTAsMTUwLDE1MHMxNTAtNjYuNjY3LDE1MC0xNTBTMjMzLjMzMywwLDE1MCwweg0KCQkgTTEzNi42NjcsMTc4LjMzM0wxMjUsMTkwbC00MS42NjctNDBMOTUsMTM4LjMzM2wzMC0zMEwxMzYuNjY3LDEyMGwtMzAsMzBMMTM2LjY2NywxNzguMzMzeiBNMjA1LDE2MS42NjdsLTMwLDMwTDE2My4zMzMsMTgwDQoJCWwzMC0zMGwtMzAtMzBMMTc1LDEwOC4zMzNMMjE2LjY2NywxNTBMMjA1LDE2MS42Njd6Ii8+DQo8L2c+DQo8Zz4NCgk8cG9seWdvbiBzdHlsZT0iZmlsbDojRkZGRkZGOyIgcG9pbnRzPSIxNzUsMTkxLjY2NyAyMDUsMTYxLjY2NyAyMTYuNjY3LDE1MCAxNzUsMTA4LjMzMyAxNjMuMzMzLDEyMCAxOTMuMzMzLDE1MCAxNjMuMzMzLDE4MCAJIi8+DQoJPHBvbHlnb24gc3R5bGU9ImZpbGw6I0ZGRkZGRjsiIHBvaW50cz0iMTI1LDEwOC4zMzMgOTUsMTM4LjMzMyA4My4zMzMsMTUwIDEyNSwxOTAgMTM2LjY2NywxNzguMzMzIDEwNi42NjcsMTUwIDEzNi42NjcsMTIwIAkiLz4NCjwvZz4NCjwvc3ZnPg0K", "color": "#F5A623"}, "emitted_at": 1685113053300} -{"stream": "project_types", "data": {"key": "software", "formattedKey": "Software", "descriptionI18nKey": "jira.project.type.software.description", "icon": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE4LjEuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgdmlld0JveD0iMCAwIDMwMCAzMDAiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMwMCAzMDA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnIGlkPSJMYXllcl8yIj4NCgk8cGF0aCBzdHlsZT0iZmlsbDojRjc5MjMyOyIgZD0iTTE1MCwwQzY2LjY2NywwLDAsNjYuNjY3LDAsMTUwczY2LjY2NywxNTAsMTUwLDE1MHMxNTAtNjYuNjY3LDE1MC0xNTBTMjMzLjMzMywwLDE1MCwweg0KCQkgTTEzNi42NjcsMTc4LjMzM0wxMjUsMTkwbC00MS42NjctNDBMOTUsMTM4LjMzM2wzMC0zMEwxMzYuNjY3LDEyMGwtMzAsMzBMMTM2LjY2NywxNzguMzMzeiBNMjA1LDE2MS42NjdsLTMwLDMwTDE2My4zMzMsMTgwDQoJCWwzMC0zMGwtMzAtMzBMMTc1LDEwOC4zMzNMMjE2LjY2NywxNTBMMjA1LDE2MS42Njd6Ii8+DQo8L2c+DQo8Zz4NCgk8cG9seWdvbiBzdHlsZT0iZmlsbDojRkZGRkZGOyIgcG9pbnRzPSIxNzUsMTkxLjY2NyAyMDUsMTYxLjY2NyAyMTYuNjY3LDE1MCAxNzUsMTA4LjMzMyAxNjMuMzMzLDEyMCAxOTMuMzMzLDE1MCAxNjMuMzMzLDE4MCAJIi8+DQoJPHBvbHlnb24gc3R5bGU9ImZpbGw6I0ZGRkZGRjsiIHBvaW50cz0iMTI1LDEwOC4zMzMgOTUsMTM4LjMzMyA4My4zMzMsMTUwIDEyNSwxOTAgMTM2LjY2NywxNzguMzMzIDEwNi42NjcsMTUwIDEzNi42NjcsMTIwIAkiLz4NCjwvZz4NCjwvc3ZnPg0K", "color": "#F5A623"}, "emitted_at": 1685113053300} -{"stream": "project_types", "data": {"key": "service_desk", "formattedKey": "Service Desk", "descriptionI18nKey": "jira.project.type.servicedesk.description.jsm", "icon": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE4LjEuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgdmlld0JveD0iMCAwIDMwMCAzMDAiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMwMCAzMDA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnIGlkPSJMYXllcl8yIj4NCgk8Zz4NCgkJPHJlY3QgeD0iMTAwIiB5PSIxMDAiIHN0eWxlPSJmaWxsOiM2N0FCNDk7IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjY2LjY2NyIvPg0KCQk8cGF0aCBzdHlsZT0iZmlsbDojNjdBQjQ5OyIgZD0iTTE1MCwwQzY2LjY2NywwLDAsNjYuNjY3LDAsMTUwczY2LjY2NywxNTAsMTUwLDE1MHMxNTAtNjYuNjY3LDE1MC0xNTBTMjMzLjMzMywwLDE1MCwweg0KCQkJIE0yMTYuNjY3LDEwMHY2Ni42Njd2MTYuNjY3aC01MFYyMDBIMjAwdjE2LjY2N0gxMDBWMjAwaDMzLjMzM3YtMTYuNjY3aC01MHYtMTYuNjY3VjEwMFY4My4zMzNoMTMzLjMzM1YxMDB6Ii8+DQoJPC9nPg0KPC9nPg0KPHBhdGggc3R5bGU9ImZpbGw6I0ZGRkZGRjsiIGQ9Ik0yMTYuNjY3LDE4My4zMzN2LTE2LjY2N1YxMDBWODMuMzMzSDgzLjMzM1YxMDB2NjYuNjY3djE2LjY2N2g1MFYyMDBIMTAwdjE2LjY2N2gxMDBWMjAwaC0zMy4zMzMNCgl2LTE2LjY2N0gyMTYuNjY3eiBNMTAwLDE2Ni42NjdWMTAwaDEwMHY2Ni42NjdIMTAweiIvPg0KPC9zdmc+DQo=", "color": "#67AB49"}, "emitted_at": 1685113053300} -{"stream": "project_versions", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/version/10000", "id": "10000", "description": "Version 1", "name": "Version 1", "archived": false, "released": false, "startDate": "2021-02-18", "releaseDate": "2021-02-25", "overdue": true, "userStartDate": "17/Feb/21", "userReleaseDate": "24/Feb/21", "projectId": 10000}, "emitted_at": 1685113053916} -{"stream": "project_versions", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/version/10040", "id": "10040", "description": "An excellent version", "name": "New Version 0", "archived": false, "released": true, "releaseDate": "2010-07-06", "userReleaseDate": "05/Jul/10", "projectId": 10000}, "emitted_at": 1685113053917} -{"stream": "project_versions", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/version/10041", "id": "10041", "description": "An excellent version", "name": "New Version 1", "archived": false, "released": true, "releaseDate": "2010-07-06", "userReleaseDate": "05/Jul/10", "projectId": 10000}, "emitted_at": 1685113053917} -{"stream": "screens", "data": {"id": 1, "name": "Default Screen", "description": "Allows to update all system fields."}, "emitted_at": 1685113054887} -{"stream": "screens", "data": {"id": 2, "name": "Workflow Screen", "description": "This screen is used in the workflow and enables you to assign issues"}, "emitted_at": 1685113054888} -{"stream": "screens", "data": {"id": 3, "name": "Resolve Issue Screen", "description": "Allows to set resolution, change fix versions and assign an issue."}, "emitted_at": 1685113054888} -{"stream": "screen_tabs", "data": {"id": 10000, "name": "Field Tab", "screenId": 1}, "emitted_at": 1695151195178} -{"stream": "screen_tabs", "data": {"id": 10148, "name": "Tab1", "screenId": 1}, "emitted_at": 1695151195178} -{"stream": "screen_tabs", "data": {"id": 10149, "name": "Tab2", "screenId": 1}, "emitted_at": 1695151195178} -{"stream": "screen_tab_fields", "data": {"id": "summary", "name": "Summary", "screenId": 1, "tabId": 10000}, "emitted_at": 1695151394752} -{"stream": "screen_tab_fields", "data": {"id": "issuetype", "name": "Issue Type", "screenId": 1, "tabId": 10000}, "emitted_at": 1695151394753} -{"stream": "screen_tab_fields", "data": {"id": "security", "name": "Security Level", "screenId": 1, "tabId": 10000}, "emitted_at": 1695151394754} -{"stream": "screen_schemes", "data": {"id": 1, "name": "Default Screen Scheme", "description": "Default Screen Scheme", "screens": {"default": 1}}, "emitted_at": 1685113161369} -{"stream": "screen_schemes", "data": {"id": 10000, "name": "IT: Scrum Default Screen Scheme", "description": "", "screens": {"default": 10000}}, "emitted_at": 1685113161370} -{"stream": "screen_schemes", "data": {"id": 10001, "name": "IT: Scrum Bug Screen Scheme", "description": "", "screens": {"default": 10001}}, "emitted_at": 1685113161371} -{"stream": "sprints", "data": {"id": 2, "self": "https://airbyteio.atlassian.net/rest/agile/1.0/sprint/2", "state": "active", "name": "IT Sprint 1", "startDate": "2022-05-17T11:25:59.072000+00:00", "endDate": "2022-05-31T11:25:00+00:00", "createdDate": "2022-05-17T11:24:12.933000+00:00", "originBoardId": 1, "goal": "Deliver results", "boardId": 1}, "emitted_at": 1695725547954} -{"stream": "sprints", "data": {"id": 3, "self": "https://airbyteio.atlassian.net/rest/agile/1.0/sprint/3", "state": "future", "name": "IT Sprint 2", "startDate": "2022-05-31T11:25:59.072000+00:00", "endDate": "2022-06-14T11:25:00+00:00", "createdDate": "2023-04-05T11:57:09.557000+00:00", "originBoardId": 1, "boardId": 1}, "emitted_at": 1695725547957} -{"stream": "sprints", "data": {"id": 4, "self": "https://airbyteio.atlassian.net/rest/agile/1.0/sprint/4", "state": "future", "name": "IT Sprint 3", "startDate": "2022-06-14T11:25:59.072000+00:00", "endDate": "2022-06-28T11:25:00+00:00", "createdDate": "2023-04-05T11:57:30.379000+00:00", "originBoardId": 1, "boardId": 1}, "emitted_at": 1695725547957} -{"stream": "sprint_issues", "data": {"expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields", "id": "2-10012", "self": "https://airbyteio.atlassian.net/rest/agile/1.0/issue/10012", "key": "IT-6", "fields": {"customfield_10016": null, "updated": "2022-05-17T04:26:21.613000-07:00", "created": "2021-03-11T06:14:18.085-0800", "status": {"self": "https://airbyteio.atlassian.net/rest/api/2/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/2/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}}, "issueId": "10012", "sprintId": 2, "created": "2021-03-11T06:14:18.085000-08:00", "updated": "2022-05-17T04:26:21.613000-07:00"}, "emitted_at": 1695027194537} -{"stream": "sprint_issues", "data": {"expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields", "id": "2-10019", "self": "https://airbyteio.atlassian.net/rest/agile/1.0/issue/10019", "key": "IT-9", "fields": {"customfield_10016": null, "updated": "2023-04-05T04:57:18.118000-07:00", "created": "2021-03-11T06:14:24.791-0800", "status": {"self": "https://airbyteio.atlassian.net/rest/api/2/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/2/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}}, "issueId": "10019", "sprintId": 2, "created": "2021-03-11T06:14:24.791000-08:00", "updated": "2023-04-05T04:57:18.118000-07:00"}, "emitted_at": 1695027194539} -{"stream": "sprint_issues", "data": {"expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields", "id": "2-10000", "self": "https://airbyteio.atlassian.net/rest/agile/1.0/issue/10000", "key": "IT-1", "fields": {"customfield_10016": null, "updated": "2022-05-17T04:26:28.885000-07:00", "created": "2020-12-07T06:12:17.863-0800", "status": {"self": "https://airbyteio.atlassian.net/rest/api/2/status/10001", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "Done", "id": "10001", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/2/statuscategory/3", "id": 3, "key": "done", "colorName": "green", "name": "Done"}}, "customfield_10026": null}, "issueId": "10000", "sprintId": 2, "created": "2020-12-07T06:12:17.863000-08:00", "updated": "2022-05-17T04:26:28.885000-07:00"}, "emitted_at": 1695027194539} -{"stream": "time_tracking", "data": {"key": "JIRA", "name": "JIRA provided time tracking"}, "emitted_at": 1685113169776} -{"stream": "time_tracking", "data": {"key": "is.origo.jira.tempo-plugin__timetracking-provider", "name": "Tempo Timesheets"}, "emitted_at": 1685113169777} -{"stream": "users", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "accountType": "atlassian", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "locale": "en_US"}, "emitted_at": 1685113170166} -{"stream": "users", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=557058:f58131cb-b67d-43c7-b30d-6b58d40bd077", "accountId": "557058:f58131cb-b67d-43c7-b30d-6b58d40bd077", "accountType": "app", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/600529a9c8bfef89daa848e6db28ed2d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FAJ-0.png", "24x24": "https://secure.gravatar.com/avatar/600529a9c8bfef89daa848e6db28ed2d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FAJ-0.png", "16x16": "https://secure.gravatar.com/avatar/600529a9c8bfef89daa848e6db28ed2d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FAJ-0.png", "32x32": "https://secure.gravatar.com/avatar/600529a9c8bfef89daa848e6db28ed2d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FAJ-0.png"}, "displayName": "Automation for Jira", "active": true}, "emitted_at": 1685113170167} -{"stream": "users", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5d53f3cbc6b9320d9ea5bdc2", "accountId": "5d53f3cbc6b9320d9ea5bdc2", "accountType": "app", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/40cff14f727dbf6d865576d575c6bdd2?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJO-4.png", "24x24": "https://secure.gravatar.com/avatar/40cff14f727dbf6d865576d575c6bdd2?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJO-4.png", "16x16": "https://secure.gravatar.com/avatar/40cff14f727dbf6d865576d575c6bdd2?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJO-4.png", "32x32": "https://secure.gravatar.com/avatar/40cff14f727dbf6d865576d575c6bdd2?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJO-4.png"}, "displayName": "Jira Outlook", "active": true}, "emitted_at": 1685113170167} -{"stream": "users_groups_detailed", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "accountType": "atlassian", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "locale": "en_US", "groups": {"size": 30, "items": [{"name": "administrators", "groupId": "0ca6e087-7a61-4986-a269-98fe268854a1", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=0ca6e087-7a61-4986-a269-98fe268854a1"}, {"name": "confluence-users", "groupId": "38d808e9-113f-45c4-817b-099e953b687a", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=38d808e9-113f-45c4-817b-099e953b687a"}, {"name": "integration-test-group", "groupId": "5f1ec851-f8da-4f90-ab42-8dc50a9f99d8", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=5f1ec851-f8da-4f90-ab42-8dc50a9f99d8"}, {"name": "jira-administrators", "groupId": "58582f33-a5a6-43b9-92a6-ff0bbacb49ae", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=58582f33-a5a6-43b9-92a6-ff0bbacb49ae"}, {"name": "jira-admins-airbyteio", "groupId": "2d55cbe0-4cab-46a4-853e-ec31162ab9a3", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=2d55cbe0-4cab-46a4-853e-ec31162ab9a3"}, {"name": "jira-servicemanagement-customers-airbyteio", "groupId": "125680d3-7e85-41ad-a662-892b6590272e", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=125680d3-7e85-41ad-a662-892b6590272e"}, {"name": "jira-servicemanagement-users-airbyteio", "groupId": "aab99a7c-3ce3-4123-b580-e4e00460754d", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=aab99a7c-3ce3-4123-b580-e4e00460754d"}, {"name": "jira-software-users", "groupId": "4452b254-035d-469a-a422-1f4666dce50e", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=4452b254-035d-469a-a422-1f4666dce50e"}, {"name": "jira-users", "groupId": "2513da2e-08cf-4415-9bcd-cbbd32fa227d", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=2513da2e-08cf-4415-9bcd-cbbd32fa227d"}, {"name": "site-admins", "groupId": "76dad095-fc1a-467a-88b4-fde534220985", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=76dad095-fc1a-467a-88b4-fde534220985"}, {"name": "Test group 0", "groupId": "ee8d15d1-6462-406a-b0a6-8065b7e4cdd7", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=ee8d15d1-6462-406a-b0a6-8065b7e4cdd7"}, {"name": "Test group 1", "groupId": "bda1faf1-1a1a-42d1-82e4-a428c8b8f67c", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=bda1faf1-1a1a-42d1-82e4-a428c8b8f67c"}, {"name": "Test group 10", "groupId": "e9f74708-e33c-4158-919d-6457f50c6e74", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=e9f74708-e33c-4158-919d-6457f50c6e74"}, {"name": "Test group 11", "groupId": "b0e6d76f-701a-4208-a88d-4478f242edde", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=b0e6d76f-701a-4208-a88d-4478f242edde"}, {"name": "Test group 12", "groupId": "dddc24a0-ef00-407e-abef-5a660b6f55cf", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=dddc24a0-ef00-407e-abef-5a660b6f55cf"}, {"name": "Test group 13", "groupId": "dbe4af74-8387-4b08-843b-86af78dd738e", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=dbe4af74-8387-4b08-843b-86af78dd738e"}, {"name": "Test group 14", "groupId": "d4570a20-38d8-44cc-a63b-0924d0d0d0ff", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=d4570a20-38d8-44cc-a63b-0924d0d0d0ff"}, {"name": "Test group 15", "groupId": "87bde5c0-7231-44a7-88b5-421da2ab8052", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=87bde5c0-7231-44a7-88b5-421da2ab8052"}, {"name": "Test group 16", "groupId": "538b6aa2-bf57-402f-93c0-c2e2d68b7155", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=538b6aa2-bf57-402f-93c0-c2e2d68b7155"}, {"name": "Test group 17", "groupId": "022bc924-ac57-442d-80c9-df042b73ad87", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=022bc924-ac57-442d-80c9-df042b73ad87"}, {"name": "Test group 18", "groupId": "bbfc6fc9-96db-4e66-88f4-c55b08298272", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=bbfc6fc9-96db-4e66-88f4-c55b08298272"}, {"name": "Test group 19", "groupId": "3c4fef5d-9721-4f20-9a68-346d222de3cf", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=3c4fef5d-9721-4f20-9a68-346d222de3cf"}, {"name": "Test group 2", "groupId": "5ddb26f1-2d31-414a-ac34-b2d6de38805d", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=5ddb26f1-2d31-414a-ac34-b2d6de38805d"}, {"name": "Test group 3", "groupId": "638aa1ad-8707-4d56-9361-f5959b6c4785", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=638aa1ad-8707-4d56-9361-f5959b6c4785"}, {"name": "Test group 4", "groupId": "532554e0-43be-4eca-9186-b417dcf38547", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=532554e0-43be-4eca-9186-b417dcf38547"}, {"name": "Test group 5", "groupId": "6b663734-85b6-4185-8fb2-9ac27709b3aa", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=6b663734-85b6-4185-8fb2-9ac27709b3aa"}, {"name": "Test group 6", "groupId": "2d4af5cf-cd34-4e78-9445-abc000cdd5cc", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=2d4af5cf-cd34-4e78-9445-abc000cdd5cc"}, {"name": "Test group 7", "groupId": "e8a97909-d807-4f79-8548-1f2c156ae6f0", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=e8a97909-d807-4f79-8548-1f2c156ae6f0"}, {"name": "Test group 8", "groupId": "3ee851e7-6688-495a-a6f6-737e85a23878", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=3ee851e7-6688-495a-a6f6-737e85a23878"}, {"name": "Test group 9", "groupId": "af27d0b1-4378-443f-9a6d-f878848b144a", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=af27d0b1-4378-443f-9a6d-f878848b144a"}]}, "applicationRoles": {"size": 2, "items": [{"key": "jira-servicedesk", "name": "Jira Service Desk"}, {"key": "jira-software", "name": "Jira Software"}]}, "expand": "groups,applicationRoles"}, "emitted_at": 1688723244956} -{"stream": "users_groups_detailed", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=557058:f58131cb-b67d-43c7-b30d-6b58d40bd077", "accountId": "557058:f58131cb-b67d-43c7-b30d-6b58d40bd077", "accountType": "app", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/600529a9c8bfef89daa848e6db28ed2d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FAJ-0.png", "24x24": "https://secure.gravatar.com/avatar/600529a9c8bfef89daa848e6db28ed2d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FAJ-0.png", "16x16": "https://secure.gravatar.com/avatar/600529a9c8bfef89daa848e6db28ed2d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FAJ-0.png", "32x32": "https://secure.gravatar.com/avatar/600529a9c8bfef89daa848e6db28ed2d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FAJ-0.png"}, "displayName": "Automation for Jira", "active": true, "timeZone": "America/Los_Angeles", "locale": "en_US", "groups": {"size": 3, "items": [{"name": "atlassian-addons-admin", "groupId": "90b9ffb1-ed26-4b5e-af59-8f684900ce83", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=90b9ffb1-ed26-4b5e-af59-8f684900ce83"}, {"name": "jira-servicemanagement-users-airbyteio", "groupId": "aab99a7c-3ce3-4123-b580-e4e00460754d", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=aab99a7c-3ce3-4123-b580-e4e00460754d"}, {"name": "jira-software-users", "groupId": "4452b254-035d-469a-a422-1f4666dce50e", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=4452b254-035d-469a-a422-1f4666dce50e"}]}, "applicationRoles": {"size": 2, "items": [{"key": "jira-servicedesk", "name": "Jira Service Desk"}, {"key": "jira-software", "name": "Jira Software"}]}, "expand": "groups,applicationRoles"}, "emitted_at": 1688723245241} -{"stream": "users_groups_detailed", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5d53f3cbc6b9320d9ea5bdc2", "accountId": "5d53f3cbc6b9320d9ea5bdc2", "accountType": "app", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/40cff14f727dbf6d865576d575c6bdd2?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJO-4.png", "24x24": "https://secure.gravatar.com/avatar/40cff14f727dbf6d865576d575c6bdd2?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJO-4.png", "16x16": "https://secure.gravatar.com/avatar/40cff14f727dbf6d865576d575c6bdd2?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJO-4.png", "32x32": "https://secure.gravatar.com/avatar/40cff14f727dbf6d865576d575c6bdd2?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJO-4.png"}, "displayName": "Jira Outlook", "active": true, "timeZone": "America/Los_Angeles", "locale": "en_US", "groups": {"size": 1, "items": [{"name": "jira-software-users", "groupId": "4452b254-035d-469a-a422-1f4666dce50e", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=4452b254-035d-469a-a422-1f4666dce50e"}]}, "applicationRoles": {"size": 2, "items": [{"key": "jira-servicedesk", "name": "Jira Service Desk"}, {"key": "jira-software", "name": "Jira Software"}]}, "expand": "groups,applicationRoles"}, "emitted_at": 1688723245508} -{"stream": "workflows", "data": {"id": {"name": "Builds Workflow", "entityId": "Builds Workflow"}, "description": "Builds Workflow", "created": "1969-12-31T16:00:00-08:00", "updated": "1969-12-31T16:00:00-08:00"}, "emitted_at": 1695027219014} -{"stream": "workflows", "data": {"id": {"name": "classic default workflow", "entityId": "385bb764-dfb6-89a7-2e43-a25bdd0cbaf4"}, "description": "The classic JIRA default workflow", "created": "2020-12-03T23:41:38.951000-08:00", "updated": "2023-06-30T02:33:48.808000-07:00"}, "emitted_at": 1695027219016} -{"stream": "workflows", "data": {"id": {"name": "jira", "entityId": "jira"}, "description": "The default Jira workflow.", "created": "1969-12-31T16:00:00-08:00", "updated": "1969-12-31T16:00:00-08:00"}, "emitted_at": 1695027219018} -{"stream": "workflow_schemes", "data": {"id": 10000, "name": "classic", "description": "classic", "defaultWorkflow": "classic default workflow", "issueTypeMappings": {}, "self": "https://airbyteio.atlassian.net/rest/api/3/workflowscheme/10000"}, "emitted_at": 1685113186843} -{"stream": "workflow_schemes", "data": {"id": 10001, "name": "IT: Software Simplified Workflow Scheme", "description": "Generated by JIRA Software version 1001.0.0-SNAPSHOT. This workflow scheme is managed internally by Jira Software. Do not manually modify this workflow scheme.", "defaultWorkflow": "Software Simplified Workflow for Project IT", "issueTypeMappings": {}, "self": "https://airbyteio.atlassian.net/rest/api/3/workflowscheme/10001"}, "emitted_at": 1685113186844} -{"stream": "workflow_schemes", "data": {"id": 10002, "name": "P2: Software Simplified Workflow Scheme", "description": "Generated by JIRA Software version 1001.0.0-SNAPSHOT. This workflow scheme is managed internally by Jira Software. Do not manually modify this workflow scheme.", "defaultWorkflow": "Software Simplified Workflow for Project P2", "issueTypeMappings": {}, "self": "https://airbyteio.atlassian.net/rest/api/3/workflowscheme/10002"}, "emitted_at": 1685113186844} -{"stream": "workflow_statuses", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/1", "description": "The issue is open and ready for the assignee to start work on it.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/statuses/open.png", "name": "Open", "untranslatedName": "Open", "id": "1", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "emitted_at": 1685113187861} -{"stream": "workflow_statuses", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/3", "description": "This issue is being actively worked on at the moment by the assignee.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/statuses/inprogress.png", "name": "In Progress", "untranslatedName": "In Progress", "id": "3", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/4", "id": 4, "key": "indeterminate", "colorName": "yellow", "name": "In Progress"}}, "emitted_at": 1685113187862} -{"stream": "workflow_statuses", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/4", "description": "This issue was once resolved, but the resolution was deemed incorrect. From here issues are either marked assigned or resolved.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/statuses/reopened.png", "name": "Reopened", "untranslatedName": "Reopened", "id": "4", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "emitted_at": 1685113187862} -{"stream": "workflow_status_categories", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/1", "id": 1, "key": "undefined", "colorName": "medium-gray", "name": "No Category"}, "emitted_at": 1685113188477} -{"stream": "workflow_status_categories", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}, "emitted_at": 1685113188478} -{"stream": "workflow_status_categories", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/4", "id": 4, "key": "indeterminate", "colorName": "yellow", "name": "In Progress"}, "emitted_at": 1685113188479} +{"stream": "application_roles", "data": {"key": "jira-servicedesk", "groups": ["jira-administrators", "jira-software-users", "jira-users", "Test group 1", "Test group 0", "atlassian-addons-admin", "integration-test-group", "jira-servicemanagement-users-airbyteio", "jira-admins-airbyteio", "site-admins", "Test group 10", "administrators"], "groupDetails": [{"name": "jira-software-users", "groupId": "4452b254-035d-469a-a422-1f4666dce50e", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=4452b254-035d-469a-a422-1f4666dce50e"}, {"name": "Test group 0", "groupId": "ee8d15d1-6462-406a-b0a6-8065b7e4cdd7", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=ee8d15d1-6462-406a-b0a6-8065b7e4cdd7"}, {"name": "administrators", "groupId": "0ca6e087-7a61-4986-a269-98fe268854a1", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=0ca6e087-7a61-4986-a269-98fe268854a1"}, {"name": "integration-test-group", "groupId": "5f1ec851-f8da-4f90-ab42-8dc50a9f99d8", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=5f1ec851-f8da-4f90-ab42-8dc50a9f99d8"}, {"name": "jira-users", "groupId": "2513da2e-08cf-4415-9bcd-cbbd32fa227d", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=2513da2e-08cf-4415-9bcd-cbbd32fa227d"}, {"name": "atlassian-addons-admin", "groupId": "90b9ffb1-ed26-4b5e-af59-8f684900ce83", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=90b9ffb1-ed26-4b5e-af59-8f684900ce83"}, {"name": "jira-servicemanagement-users-airbyteio", "groupId": "aab99a7c-3ce3-4123-b580-e4e00460754d", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=aab99a7c-3ce3-4123-b580-e4e00460754d"}, {"name": "jira-admins-airbyteio", "groupId": "2d55cbe0-4cab-46a4-853e-ec31162ab9a3", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=2d55cbe0-4cab-46a4-853e-ec31162ab9a3"}, {"name": "jira-administrators", "groupId": "58582f33-a5a6-43b9-92a6-ff0bbacb49ae", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=58582f33-a5a6-43b9-92a6-ff0bbacb49ae"}, {"name": "Test group 1", "groupId": "bda1faf1-1a1a-42d1-82e4-a428c8b8f67c", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=bda1faf1-1a1a-42d1-82e4-a428c8b8f67c"}, {"name": "site-admins", "groupId": "76dad095-fc1a-467a-88b4-fde534220985", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=76dad095-fc1a-467a-88b4-fde534220985"}, {"name": "Test group 10", "groupId": "e9f74708-e33c-4158-919d-6457f50c6e74", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=e9f74708-e33c-4158-919d-6457f50c6e74"}], "name": "Jira Service Desk", "defaultGroups": ["jira-servicemanagement-users-airbyteio"], "defaultGroupsDetails": [{"name": "jira-servicemanagement-users-airbyteio", "groupId": "aab99a7c-3ce3-4123-b580-e4e00460754d", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=aab99a7c-3ce3-4123-b580-e4e00460754d"}], "selectedByDefault": false, "defined": true, "numberOfSeats": 35000, "remainingSeats": 34995, "userCount": 5, "userCountDescription": "agents", "hasUnlimitedSeats": false, "platform": false}, "emitted_at": 1697022643391} +{"stream": "application_roles", "data": {"key": "jira-software", "groups": ["jira-users", "Test group 1", "Test group 0", "system-administrators", "atlassian-addons-admin", "jira-servicemanagement-users-airbyteio", "jira-admins-airbyteio", "site-admins", "jira-administrators", "jira-software-users", "integration-test-group", "Test group 10", "administrators"], "groupDetails": [{"name": "administrators", "groupId": "0ca6e087-7a61-4986-a269-98fe268854a1", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=0ca6e087-7a61-4986-a269-98fe268854a1"}, {"name": "jira-users", "groupId": "2513da2e-08cf-4415-9bcd-cbbd32fa227d", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=2513da2e-08cf-4415-9bcd-cbbd32fa227d"}, {"name": "jira-administrators", "groupId": "58582f33-a5a6-43b9-92a6-ff0bbacb49ae", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=58582f33-a5a6-43b9-92a6-ff0bbacb49ae"}, {"name": "Test group 1", "groupId": "bda1faf1-1a1a-42d1-82e4-a428c8b8f67c", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=bda1faf1-1a1a-42d1-82e4-a428c8b8f67c"}, {"name": "system-administrators", "groupId": "ed0ab3a1-afa4-4ff5-a878-fc90c1574818", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=ed0ab3a1-afa4-4ff5-a878-fc90c1574818"}, {"name": "site-admins", "groupId": "76dad095-fc1a-467a-88b4-fde534220985", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=76dad095-fc1a-467a-88b4-fde534220985"}, {"name": "jira-software-users", "groupId": "4452b254-035d-469a-a422-1f4666dce50e", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=4452b254-035d-469a-a422-1f4666dce50e"}, {"name": "Test group 0", "groupId": "ee8d15d1-6462-406a-b0a6-8065b7e4cdd7", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=ee8d15d1-6462-406a-b0a6-8065b7e4cdd7"}, {"name": "integration-test-group", "groupId": "5f1ec851-f8da-4f90-ab42-8dc50a9f99d8", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=5f1ec851-f8da-4f90-ab42-8dc50a9f99d8"}, {"name": "atlassian-addons-admin", "groupId": "90b9ffb1-ed26-4b5e-af59-8f684900ce83", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=90b9ffb1-ed26-4b5e-af59-8f684900ce83"}, {"name": "jira-admins-airbyteio", "groupId": "2d55cbe0-4cab-46a4-853e-ec31162ab9a3", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=2d55cbe0-4cab-46a4-853e-ec31162ab9a3"}, {"name": "jira-servicemanagement-users-airbyteio", "groupId": "aab99a7c-3ce3-4123-b580-e4e00460754d", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=aab99a7c-3ce3-4123-b580-e4e00460754d"}, {"name": "Test group 10", "groupId": "e9f74708-e33c-4158-919d-6457f50c6e74", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=e9f74708-e33c-4158-919d-6457f50c6e74"}], "name": "Jira Software", "defaultGroups": ["jira-software-users"], "defaultGroupsDetails": [{"name": "jira-software-users", "groupId": "4452b254-035d-469a-a422-1f4666dce50e", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=4452b254-035d-469a-a422-1f4666dce50e"}], "selectedByDefault": false, "defined": true, "numberOfSeats": 10, "remainingSeats": 5, "userCount": 5, "userCountDescription": "users", "hasUnlimitedSeats": false, "platform": false}, "emitted_at": 1697022643392} +{"stream": "avatars", "data": {"id": "10300", "isSystemAvatar": true, "isSelected": false, "isDeletable": false, "urls": {"16x16": "/secure/useravatar?size=xsmall&avatarId=10300", "24x24": "/secure/useravatar?size=small&avatarId=10300", "32x32": "/secure/useravatar?size=medium&avatarId=10300", "48x48": "/secure/useravatar?avatarId=10300"}}, "emitted_at": 1697022644091} +{"stream": "avatars", "data": {"id": "10303", "isSystemAvatar": true, "isSelected": false, "isDeletable": false, "urls": {"16x16": "/secure/useravatar?size=xsmall&avatarId=10303", "24x24": "/secure/useravatar?size=small&avatarId=10303", "32x32": "/secure/useravatar?size=medium&avatarId=10303", "48x48": "/secure/useravatar?avatarId=10303"}}, "emitted_at": 1697022644093} +{"stream": "avatars", "data": {"id": "10304", "isSystemAvatar": true, "isSelected": false, "isDeletable": false, "urls": {"16x16": "/secure/useravatar?size=xsmall&avatarId=10304", "24x24": "/secure/useravatar?size=small&avatarId=10304", "32x32": "/secure/useravatar?size=medium&avatarId=10304", "48x48": "/secure/useravatar?avatarId=10304"}}, "emitted_at": 1697022644093} +{"stream": "boards", "data": {"id": 1, "self": "https://airbyteio.atlassian.net/rest/agile/1.0/board/1", "name": "IT board", "type": "scrum", "location": {"projectId": 10000, "displayName": "integration-tests (IT)", "projectName": "integration-tests", "projectKey": "IT", "projectTypeKey": "software", "avatarURI": "https://airbyteio.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10424?size=small", "name": "integration-tests (IT)"}, "projectId": "10000", "projectKey": "IT"}, "emitted_at": 1697022645435} +{"stream": "boards", "data": {"id": 17, "self": "https://airbyteio.atlassian.net/rest/agile/1.0/board/17", "name": "TESTKEY13 board", "type": "scrum", "location": {"projectId": 10016, "displayName": "Test project 13 (TESTKEY13)", "projectName": "Test project 13", "projectKey": "TESTKEY13", "projectTypeKey": "software", "avatarURI": "https://airbyteio.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=small", "name": "Test project 13 (TESTKEY13)"}, "projectId": "10016", "projectKey": "TESTKEY13"}, "emitted_at": 1697022645437} +{"stream": "boards", "data": {"id": 58, "self": "https://airbyteio.atlassian.net/rest/agile/1.0/board/58", "name": "TTMP2 board", "type": "simple", "location": {"projectId": 10064, "displayName": "Test Team Managed Project 2 (TTMP2)", "projectName": "Test Team Managed Project 2", "projectKey": "TTMP2", "projectTypeKey": "software", "avatarURI": "https://airbyteio.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10412?size=small", "name": "Test Team Managed Project 2 (TTMP2)"}, "projectId": "10064", "projectKey": "TTMP2"}, "emitted_at": 1697022645774} +{"stream": "board_issues", "data": {"expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields", "id": "10012", "self": "https://airbyteio.atlassian.net/rest/agile/1.0/issue/10012", "key": "IT-6", "fields": {"updated": "2022-05-17T04:26:21.613000-07:00", "created": "2021-03-11T06:14:18.085-0800"}, "boardId": 1, "created": "2021-03-11T06:14:18.085000-08:00", "updated": "2022-05-17T04:26:21.613000-07:00"}, "emitted_at": 1697022647493} +{"stream": "board_issues", "data": {"expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields", "id": "10019", "self": "https://airbyteio.atlassian.net/rest/agile/1.0/issue/10019", "key": "IT-9", "fields": {"updated": "2023-04-05T04:57:18.118000-07:00", "created": "2021-03-11T06:14:24.791-0800"}, "boardId": 1, "created": "2021-03-11T06:14:24.791000-08:00", "updated": "2023-04-05T04:57:18.118000-07:00"}, "emitted_at": 1697022647497} +{"stream": "board_issues", "data": {"expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields", "id": "10000", "self": "https://airbyteio.atlassian.net/rest/agile/1.0/issue/10000", "key": "IT-1", "fields": {"updated": "2022-05-17T04:26:28.885000-07:00", "created": "2020-12-07T06:12:17.863-0800"}, "boardId": 1, "created": "2020-12-07T06:12:17.863000-08:00", "updated": "2022-05-17T04:26:28.885000-07:00"}, "emitted_at": 1697022647498} +{"stream": "dashboards", "data": {"id": "10000", "isFavourite": false, "name": "Default dashboard", "popularity": 0, "self": "https://airbyteio.atlassian.net/rest/api/3/dashboard/10000", "sharePermissions": [{"id": 10000, "type": "global"}], "editPermissions": [], "view": "/jira/dashboards/10000", "isWritable": true, "systemDashboard": true}, "emitted_at": 1697022649855} +{"stream": "dashboards", "data": {"description": "A dashboard to help auditors identify sample of issues to check.", "id": "10002", "isFavourite": true, "name": "Test dashboard 1", "owner": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "displayName": "integration test", "active": true, "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}}, "popularity": 1, "rank": 0, "self": "https://airbyteio.atlassian.net/rest/api/3/dashboard/10002", "sharePermissions": [], "editPermissions": [], "view": "/jira/dashboards/10002", "isWritable": true, "systemDashboard": false}, "emitted_at": 1697022649856} +{"stream": "dashboards", "data": {"description": "A dashboard to help auditors identify sample of issues to check.", "id": "10011", "isFavourite": true, "name": "Test dashboard 10", "owner": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "displayName": "integration test", "active": true, "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}}, "popularity": 1, "rank": 9, "self": "https://airbyteio.atlassian.net/rest/api/3/dashboard/10011", "sharePermissions": [], "editPermissions": [], "view": "/jira/dashboards/10011", "isWritable": true, "systemDashboard": false}, "emitted_at": 1697022649856} +{"stream": "filters", "data": {"expand": "description,owner,jql,viewUrl,searchUrl,favourite,favouritedCount,sharePermissions,editPermissions,isWritable,subscriptions", "self": "https://airbyteio.atlassian.net/rest/api/3/filter/10003", "id": "10003", "name": "Filter for EX board", "owner": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "jql": "project = EX ORDER BY Rank ASC", "viewUrl": "https://airbyteio.atlassian.net/issues/?filter=10003", "searchUrl": "https://airbyteio.atlassian.net/rest/api/3/search?jql=project+%3D+EX+ORDER+BY+Rank+ASC", "favourite": false, "favouritedCount": 0, "sharePermissions": [{"id": 10004, "type": "project", "project": {"self": "https://airbyteio.atlassian.net/rest/api/3/project/10003", "id": "10003", "key": "EX", "assigneeType": "PROJECT_LEAD", "name": "Example", "roles": {}, "avatarUrls": {"48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10406", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10406?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10406?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10406?size=medium"}, "projectTypeKey": "software", "simplified": false, "style": "classic", "properties": {}}}], "isWritable": true, "subscriptions": []}, "emitted_at": 1697022651097} +{"stream": "filters", "data": {"expand": "description,owner,jql,viewUrl,searchUrl,favourite,favouritedCount,sharePermissions,editPermissions,isWritable,subscriptions", "self": "https://airbyteio.atlassian.net/rest/api/3/filter/10000", "id": "10000", "name": "Filter for IT board", "owner": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "jql": "project = IT ORDER BY Rank ASC", "viewUrl": "https://airbyteio.atlassian.net/issues/?filter=10000", "searchUrl": "https://airbyteio.atlassian.net/rest/api/3/search?jql=project+%3D+IT+ORDER+BY+Rank+ASC", "favourite": false, "favouritedCount": 0, "sharePermissions": [{"id": 10058, "type": "group", "group": {"name": "Test group 2", "groupId": "5ddb26f1-2d31-414a-ac34-b2d6de38805d", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=5ddb26f1-2d31-414a-ac34-b2d6de38805d"}}, {"id": 10059, "type": "group", "group": {"name": "Test group 0", "groupId": "ee8d15d1-6462-406a-b0a6-8065b7e4cdd7", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=ee8d15d1-6462-406a-b0a6-8065b7e4cdd7"}}, {"id": 10057, "type": "project", "project": {"self": "https://airbyteio.atlassian.net/rest/api/3/project/10000", "id": "10000", "key": "IT", "assigneeType": "PROJECT_LEAD", "name": "integration-tests", "roles": {}, "avatarUrls": {"48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=medium"}, "projectCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/projectCategory/10004", "id": "10004", "name": "Test category 2", "description": "Test Project Category 2"}, "projectTypeKey": "software", "simplified": false, "style": "classic", "properties": {}}}], "isWritable": true, "subscriptions": []}, "emitted_at": 1697022651098} +{"stream": "filters", "data": {"expand": "description,owner,jql,viewUrl,searchUrl,favourite,favouritedCount,sharePermissions,editPermissions,isWritable,subscriptions", "self": "https://airbyteio.atlassian.net/rest/api/3/filter/10001", "id": "10001", "name": "Filter for P2 board", "owner": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "jql": "project = P2 ORDER BY Rank ASC", "viewUrl": "https://airbyteio.atlassian.net/issues/?filter=10001", "searchUrl": "https://airbyteio.atlassian.net/rest/api/3/search?jql=project+%3D+P2+ORDER+BY+Rank+ASC", "favourite": false, "favouritedCount": 0, "sharePermissions": [{"id": 10063, "type": "group", "group": {"name": "Test group 0", "groupId": "ee8d15d1-6462-406a-b0a6-8065b7e4cdd7", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=ee8d15d1-6462-406a-b0a6-8065b7e4cdd7"}}, {"id": 10064, "type": "group", "group": {"name": "Test group 1", "groupId": "bda1faf1-1a1a-42d1-82e4-a428c8b8f67c", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=bda1faf1-1a1a-42d1-82e4-a428c8b8f67c"}}, {"id": 10062, "type": "project", "project": {"self": "https://airbyteio.atlassian.net/rest/api/3/project/10001", "id": "10001", "key": "P2", "assigneeType": "PROJECT_LEAD", "name": "project-2", "roles": {}, "avatarUrls": {"48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10411", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10411?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10411?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10411?size=medium"}, "projectTypeKey": "software", "simplified": false, "style": "classic", "properties": {}}}], "isWritable": true, "subscriptions": []}, "emitted_at": 1697022651099} +{"stream": "filter_sharing", "data": {"id": 10004, "type": "project", "project": {"self": "https://airbyteio.atlassian.net/rest/api/3/project/10003", "id": "10003", "key": "EX", "assigneeType": "PROJECT_LEAD", "name": "Example", "roles": {}, "avatarUrls": {"48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10406", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10406?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10406?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10406?size=medium"}, "projectTypeKey": "software", "simplified": false, "style": "classic", "properties": {}}, "filterId": "10003"}, "emitted_at": 1697022652413} +{"stream": "filter_sharing", "data": {"id": 10058, "type": "group", "group": {"name": "Test group 2", "groupId": "5ddb26f1-2d31-414a-ac34-b2d6de38805d", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=5ddb26f1-2d31-414a-ac34-b2d6de38805d"}, "filterId": "10000"}, "emitted_at": 1697022652808} +{"stream": "filter_sharing", "data": {"id": 10059, "type": "group", "group": {"name": "Test group 0", "groupId": "ee8d15d1-6462-406a-b0a6-8065b7e4cdd7", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=ee8d15d1-6462-406a-b0a6-8065b7e4cdd7"}, "filterId": "10000"}, "emitted_at": 1697022652809} +{"stream": "groups", "data": {"name": "Test group 17", "groupId": "022bc924-ac57-442d-80c9-df042b73ad87"}, "emitted_at": 1697022683800} +{"stream": "groups", "data": {"name": "administrators", "groupId": "0ca6e087-7a61-4986-a269-98fe268854a1"}, "emitted_at": 1697022683801} +{"stream": "groups", "data": {"name": "jira-servicemanagement-customers-airbyteio", "groupId": "125680d3-7e85-41ad-a662-892b6590272e"}, "emitted_at": 1697022683802} +{"stream": "issues", "data": {"expand": "customfield_10030.properties,operations,versionedRepresentations,editmeta,changelog,customfield_10029.properties,customfield_10010.requestTypePractice,transitions,renderedFields,customfield_10229.properties", "id": "10626", "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10626", "key": "IT-26", "renderedFields": {"statuscategorychangedate": "17/May/22 4:28 AM", "issuetype": null, "timespent": "1 day", "customfield_10030": null, "project": null, "fixVersions": null, "aggregatetimespent": "1 day", "resolution": null, "customfield_10225": null, "customfield_10226": null, "customfield_10029": null, "customfield_10227": null, "customfield_10228": null, "customfield_10229": null, "resolutiondate": null, "workratio": null, "lastViewed": "13/Sep/23 3:21 AM", "watches": null, "issuerestriction": null, "customfield_10181": null, "created": "17/May/22 4:28 AM", "customfield_10020": null, "customfield_10021": null, "customfield_10220": null, "customfield_10022": null, "customfield_10221": null, "customfield_10023": null, "priority": null, "customfield_10024": null, "customfield_10222": null, "customfield_10223": null, "customfield_10025": null, "labels": null, "customfield_10224": null, "customfield_10026": null, "customfield_10214": null, "customfield_10016": null, "customfield_10017": "dark_yellow", "customfield_10215": null, "customfield_10018": null, "customfield_10216": null, "customfield_10217": null, "customfield_10019": null, "aggregatetimeoriginalestimate": null, "customfield_10218": null, "timeestimate": null, "customfield_10219": null, "versions": null, "issuelinks": null, "assignee": null, "updated": "05/Apr/23 5:08 AM", "status": null, "components": null, "timeoriginalestimate": null, "description": "

Implement OAUth

", "customfield_10010": null, "customfield_10011": "Test 2", "customfield_10012": null, "customfield_10210": null, "customfield_10013": "ghx-label-2", "customfield_10211": null, "customfield_10212": null, "customfield_10014": null, "timetracking": {"timeSpent": "1 day", "timeSpentSeconds": 28800}, "customfield_10015": null, "customfield_10213": null, "customfield_10005": null, "customfield_10006": null, "security": null, "customfield_10007": null, "customfield_10008": null, "attachment": [], "aggregatetimeestimate": null, "customfield_10009": null, "customfield_10209": null, "summary": null, "creator": null, "subtasks": null, "reporter": null, "aggregateprogress": null, "customfield_10001": null, "customfield_10002": null, "customfield_10003": null, "customfield_10047": null, "customfield_10004": null, "environment": "", "duedate": null, "progress": null, "votes": null, "comment": {"comments": [], "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10626/comment", "maxResults": 0, "total": 0, "startAt": 0}, "worklog": {"startAt": 0, "maxResults": 20, "total": 1, "worklogs": [{"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10626/worklog/11820", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=557058%3A295406f3-a1fc-4733-b906-dd15d021bd79", "accountId": "557058:295406f3-a1fc-4733-b906-dd15d021bd79", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "24x24": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "16x16": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "32x32": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png"}, "displayName": "Tempo Timesheets", "active": true, "timeZone": "America/Los_Angeles", "accountType": "app"}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=557058%3A295406f3-a1fc-4733-b906-dd15d021bd79", "accountId": "557058:295406f3-a1fc-4733-b906-dd15d021bd79", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "24x24": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "16x16": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "32x32": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png"}, "displayName": "Tempo Timesheets", "active": true, "timeZone": "America/Los_Angeles", "accountType": "app"}, "created": "05/Apr/23 5:08 AM", "updated": "05/Apr/23 5:08 AM", "started": "05/Apr/23 1:00 AM", "timeSpent": "1 day", "id": "11820", "issueId": "10626"}]}}, "transitions": [{"id": "11", "name": "To Do", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}, {"id": "21", "name": "In Progress", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/3", "description": "This issue is being actively worked on at the moment by the assignee.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/statuses/inprogress.png", "name": "In Progress", "id": "3", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/4", "id": 4, "key": "indeterminate", "colorName": "yellow", "name": "In Progress"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}, {"id": "31", "name": "Done", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10001", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "Done", "id": "10001", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/3", "id": 3, "key": "done", "colorName": "green", "name": "Done"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}, {"id": "41", "name": "Approved", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10005", "description": "This was auto-generated by Jira Service Management during workflow import", "iconUrl": "https://airbyteio.atlassian.net/images/icons/status_generic.gif", "name": "Approved", "id": "10005", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/3", "id": 3, "key": "done", "colorName": "green", "name": "Done"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}, {"id": "51", "name": "In review", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10004", "description": "This was auto-generated by Jira Service Management during workflow import", "iconUrl": "https://airbyteio.atlassian.net/images/icons/status_generic.gif", "name": "In review", "id": "10004", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/4", "id": 4, "key": "indeterminate", "colorName": "yellow", "name": "In Progress"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}, {"id": "61", "name": "Reopened", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/4", "description": "This issue was once resolved, but the resolution was deemed incorrect. From here issues are either marked assigned or resolved.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/statuses/reopened.png", "name": "Reopened", "id": "4", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}, {"id": "71", "name": "Declined", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10002", "description": "This was auto-generated by Jira Service Management during workflow import", "iconUrl": "https://airbyteio.atlassian.net/images/icons/statuses/generic.png", "name": "Declined", "id": "10002", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/3", "id": 3, "key": "done", "colorName": "green", "name": "Done"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}, {"id": "81", "name": "Open", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/1", "description": "The issue is open and ready for the assignee to start work on it.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/statuses/open.png", "name": "Open", "id": "1", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}, {"id": "91", "name": "Pending", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10003", "description": "This was auto-generated by Jira Service Management during workflow import", "iconUrl": "https://airbyteio.atlassian.net/images/icons/status_generic.gif", "name": "Pending", "id": "10003", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/4", "id": 4, "key": "indeterminate", "colorName": "yellow", "name": "In Progress"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}, {"id": "101", "name": "Closed", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/6", "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/statuses/closed.png", "name": "Closed", "id": "6", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/3", "id": 3, "key": "done", "colorName": "green", "name": "Done"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}], "changelog": {"startAt": 0, "maxResults": 2, "total": 2, "histories": [{"id": "15186", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=557058%3A295406f3-a1fc-4733-b906-dd15d021bd79", "accountId": "557058:295406f3-a1fc-4733-b906-dd15d021bd79", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "24x24": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "16x16": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "32x32": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png"}, "displayName": "Tempo Timesheets", "active": true, "timeZone": "America/Los_Angeles", "accountType": "app"}, "created": "2023-04-05T05:08:50.115-0700", "items": [{"field": "timespent", "fieldtype": "jira", "fieldId": "timespent", "from": null, "fromString": null, "to": "28800", "toString": "28800"}, {"field": "WorklogId", "fieldtype": "jira", "from": null, "fromString": null, "to": "11820", "toString": "11820"}]}, {"id": "15128", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2022-05-17T04:28:19.837-0700", "items": [{"field": "Link", "fieldtype": "jira", "from": null, "fromString": null, "to": "IT-25", "toString": "This issue clones IT-25"}]}]}, "fields": {"statuscategorychangedate": "2022-05-17T04:28:19.775-0700", "issuetype": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10000", "id": "10000", "description": "A big user story that needs to be broken down. Created by Jira Software - do not edit or delete.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/issuetypes/epic.svg", "name": "Epic", "subtask": false, "hierarchyLevel": 1}, "timespent": 28800, "customfield_10030": null, "project": {"self": "https://airbyteio.atlassian.net/rest/api/3/project/10000", "id": "10000", "key": "IT", "name": "integration-tests", "projectTypeKey": "software", "simplified": false, "avatarUrls": {"48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=medium"}, "projectCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/projectCategory/10004", "id": "10004", "description": "Test Project Category 2", "name": "Test category 2"}}, "fixVersions": [], "aggregatetimespent": 28800, "resolution": null, "customfield_10225": null, "customfield_10226": null, "customfield_10029": null, "customfield_10227": null, "customfield_10228": null, "customfield_10229": null, "resolutiondate": null, "workratio": -1, "lastViewed": "2023-09-13T03:21:43.199-0700", "watches": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-26/watchers", "watchCount": 1, "isWatching": true}, "issuerestriction": {"issuerestrictions": {}, "shouldDisplay": false}, "customfield_10181": null, "created": "2022-05-17T04:28:19.523000-07:00", "customfield_10020": null, "customfield_10021": null, "customfield_10220": null, "customfield_10022": null, "customfield_10221": null, "customfield_10023": null, "priority": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/4", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/low.svg", "name": "Low", "id": "4"}, "customfield_10024": null, "customfield_10222": null, "customfield_10223": null, "customfield_10025": null, "labels": [], "customfield_10224": null, "customfield_10026": null, "customfield_10214": null, "customfield_10016": null, "customfield_10017": "dark_yellow", "customfield_10215": null, "customfield_10018": {"hasEpicLinkFieldDependency": false, "showField": false, "nonEditableReason": {"reason": "PLUGIN_LICENSE_ERROR", "message": "The Parent Link is only available to Jira Premium users."}}, "customfield_10216": null, "customfield_10217": [], "customfield_10019": "0|i00773:", "aggregatetimeoriginalestimate": null, "customfield_10218": null, "timeestimate": null, "customfield_10219": null, "versions": [], "issuelinks": [{"id": "10263", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLink/10263", "type": {"id": "10001", "name": "Cloners", "inward": "is cloned by", "outward": "clones", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLinkType/10001"}, "outwardIssue": {"id": "10625", "key": "IT-25", "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10625", "fields": {"summary": "Aggregate issues", "status": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "priority": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/4", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/low.svg", "name": "Low", "id": "4"}, "issuetype": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10000", "id": "10000", "description": "A big user story that needs to be broken down. Created by Jira Software - do not edit or delete.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/issuetypes/epic.svg", "name": "Epic", "subtask": false, "hierarchyLevel": 1}}}}], "assignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updated": "2023-04-05T05:08:50.112000-07:00", "status": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "components": [{"self": "https://airbyteio.atlassian.net/rest/api/3/component/10049", "id": "10049", "name": "Component 3", "description": "This is a Jira component"}], "timeoriginalestimate": null, "description": {"version": 1, "type": "doc", "content": [{"type": "paragraph", "content": [{"type": "text", "text": "Implement OAUth"}]}]}, "customfield_10010": null, "customfield_10011": "Test 2", "customfield_10012": {"self": "https://airbyteio.atlassian.net/rest/api/3/customFieldOption/10016", "value": "To Do", "id": "10016"}, "customfield_10210": null, "customfield_10013": "ghx-label-2", "customfield_10211": null, "customfield_10212": null, "customfield_10014": null, "timetracking": {"timeSpent": "1d", "timeSpentSeconds": 28800}, "customfield_10015": null, "customfield_10213": null, "customfield_10005": null, "customfield_10006": null, "security": null, "customfield_10007": null, "customfield_10008": null, "attachment": [], "aggregatetimeestimate": null, "customfield_10009": null, "customfield_10209": null, "summary": "CLONE - Aggregate issues", "creator": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "subtasks": [], "reporter": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "aggregateprogress": {"progress": 28800, "total": 28800, "percent": 100}, "customfield_10001": null, "customfield_10002": null, "customfield_10003": null, "customfield_10047": null, "customfield_10004": null, "environment": null, "duedate": null, "progress": {"progress": 28800, "total": 28800, "percent": 100}, "votes": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-26/votes", "votes": 0, "hasVoted": false}, "comment": {"comments": [], "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10626/comment", "maxResults": 0, "total": 0, "startAt": 0}, "worklog": {"startAt": 0, "maxResults": 20, "total": 1, "worklogs": [{"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10626/worklog/11820", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=557058%3A295406f3-a1fc-4733-b906-dd15d021bd79", "accountId": "557058:295406f3-a1fc-4733-b906-dd15d021bd79", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "24x24": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "16x16": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "32x32": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png"}, "displayName": "Tempo Timesheets", "active": true, "timeZone": "America/Los_Angeles", "accountType": "app"}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=557058%3A295406f3-a1fc-4733-b906-dd15d021bd79", "accountId": "557058:295406f3-a1fc-4733-b906-dd15d021bd79", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "24x24": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "16x16": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "32x32": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png"}, "displayName": "Tempo Timesheets", "active": true, "timeZone": "America/Los_Angeles", "accountType": "app"}, "comment": {"version": 1, "type": "doc", "content": [{"type": "paragraph", "content": [{"type": "text", "text": "time-tracking"}]}]}, "created": "2023-04-05T05:08:50.033-0700", "updated": "2023-04-05T05:08:50.033-0700", "started": "2023-04-05T01:00:00.000-0700", "timeSpent": "1d", "timeSpentSeconds": 28800, "id": "11820", "issueId": "10626"}]}}, "projectId": "10000", "projectKey": "IT", "created": "2022-05-17T04:28:19.523000-07:00", "updated": "2023-04-05T05:08:50.112000-07:00"}, "emitted_at": 1697022687602} +{"stream": "issues", "data": {"expand": "customfield_10030.properties,operations,versionedRepresentations,editmeta,changelog,customfield_10029.properties,customfield_10010.requestTypePractice,transitions,renderedFields,customfield_10229.properties", "id": "10625", "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10625", "key": "IT-25", "renderedFields": {"statuscategorychangedate": "17/May/22 4:06 AM", "issuetype": null, "timespent": null, "customfield_10030": null, "project": null, "fixVersions": null, "aggregatetimespent": null, "resolution": null, "customfield_10225": null, "customfield_10226": null, "customfield_10029": null, "customfield_10227": null, "customfield_10228": null, "customfield_10229": null, "resolutiondate": null, "workratio": null, "watches": null, "lastViewed": null, "issuerestriction": null, "customfield_10181": null, "created": "17/May/22 4:06 AM", "customfield_10020": null, "customfield_10021": null, "customfield_10022": null, "customfield_10220": null, "customfield_10023": null, "priority": null, "customfield_10221": null, "customfield_10024": null, "customfield_10222": null, "customfield_10223": null, "customfield_10025": null, "customfield_10026": null, "customfield_10224": null, "labels": null, "customfield_10016": null, "customfield_10214": null, "customfield_10215": null, "customfield_10017": "dark_yellow", "customfield_10018": null, "customfield_10216": null, "customfield_10019": null, "customfield_10217": null, "aggregatetimeoriginalestimate": null, "customfield_10218": null, "timeestimate": null, "versions": null, "customfield_10219": null, "issuelinks": null, "assignee": null, "updated": "17/May/22 4:28 AM", "status": null, "components": null, "timeoriginalestimate": null, "description": "

Implement OAUth

", "customfield_10010": null, "customfield_10011": "Test 2", "customfield_10012": null, "customfield_10210": null, "customfield_10211": null, "customfield_10013": "ghx-label-2", "customfield_10014": null, "customfield_10212": null, "customfield_10213": null, "customfield_10015": null, "timetracking": {}, "customfield_10005": null, "customfield_10006": null, "security": null, "customfield_10007": null, "customfield_10008": null, "attachment": [], "aggregatetimeestimate": null, "customfield_10009": null, "customfield_10209": null, "summary": null, "creator": null, "subtasks": null, "reporter": null, "aggregateprogress": null, "customfield_10001": null, "customfield_10002": null, "customfield_10047": null, "customfield_10003": null, "customfield_10004": null, "environment": "", "duedate": null, "progress": null, "comment": {"comments": [{"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10625/comment/10755", "id": "10755", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "body": {"version": 1, "type": "doc", "content": [{"type": "paragraph", "content": [{"type": "text", "text": "Closed"}]}]}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "17/May/22 4:06 AM", "updated": "17/May/22 4:06 AM", "jsdPublic": true}], "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10625/comment", "maxResults": 1, "total": 1, "startAt": 0}, "votes": null, "worklog": {"startAt": 0, "maxResults": 20, "total": 0, "worklogs": []}}, "transitions": [{"id": "11", "name": "To Do", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}, {"id": "21", "name": "In Progress", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/3", "description": "This issue is being actively worked on at the moment by the assignee.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/statuses/inprogress.png", "name": "In Progress", "id": "3", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/4", "id": 4, "key": "indeterminate", "colorName": "yellow", "name": "In Progress"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}, {"id": "31", "name": "Done", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10001", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "Done", "id": "10001", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/3", "id": 3, "key": "done", "colorName": "green", "name": "Done"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}, {"id": "41", "name": "Approved", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10005", "description": "This was auto-generated by Jira Service Management during workflow import", "iconUrl": "https://airbyteio.atlassian.net/images/icons/status_generic.gif", "name": "Approved", "id": "10005", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/3", "id": 3, "key": "done", "colorName": "green", "name": "Done"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}, {"id": "51", "name": "In review", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10004", "description": "This was auto-generated by Jira Service Management during workflow import", "iconUrl": "https://airbyteio.atlassian.net/images/icons/status_generic.gif", "name": "In review", "id": "10004", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/4", "id": 4, "key": "indeterminate", "colorName": "yellow", "name": "In Progress"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}, {"id": "61", "name": "Reopened", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/4", "description": "This issue was once resolved, but the resolution was deemed incorrect. From here issues are either marked assigned or resolved.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/statuses/reopened.png", "name": "Reopened", "id": "4", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}, {"id": "71", "name": "Declined", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10002", "description": "This was auto-generated by Jira Service Management during workflow import", "iconUrl": "https://airbyteio.atlassian.net/images/icons/statuses/generic.png", "name": "Declined", "id": "10002", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/3", "id": 3, "key": "done", "colorName": "green", "name": "Done"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}, {"id": "81", "name": "Open", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/1", "description": "The issue is open and ready for the assignee to start work on it.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/statuses/open.png", "name": "Open", "id": "1", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}, {"id": "91", "name": "Pending", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10003", "description": "This was auto-generated by Jira Service Management during workflow import", "iconUrl": "https://airbyteio.atlassian.net/images/icons/status_generic.gif", "name": "Pending", "id": "10003", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/4", "id": 4, "key": "indeterminate", "colorName": "yellow", "name": "In Progress"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}, {"id": "101", "name": "Closed", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/6", "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/statuses/closed.png", "name": "Closed", "id": "6", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/3", "id": 3, "key": "done", "colorName": "green", "name": "Done"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}], "changelog": {"startAt": 0, "maxResults": 1, "total": 1, "histories": [{"id": "15129", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2022-05-17T04:28:19.880-0700", "items": [{"field": "Link", "fieldtype": "jira", "from": null, "fromString": null, "to": "IT-26", "toString": "This issue is cloned by IT-26"}]}]}, "fields": {"statuscategorychangedate": "2022-05-17T04:06:24.675-0700", "issuetype": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10000", "id": "10000", "description": "A big user story that needs to be broken down. Created by Jira Software - do not edit or delete.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/issuetypes/epic.svg", "name": "Epic", "subtask": false, "hierarchyLevel": 1}, "timespent": null, "customfield_10030": null, "project": {"self": "https://airbyteio.atlassian.net/rest/api/3/project/10000", "id": "10000", "key": "IT", "name": "integration-tests", "projectTypeKey": "software", "simplified": false, "avatarUrls": {"48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=medium"}, "projectCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/projectCategory/10004", "id": "10004", "description": "Test Project Category 2", "name": "Test category 2"}}, "fixVersions": [], "aggregatetimespent": null, "resolution": null, "customfield_10225": null, "customfield_10226": null, "customfield_10029": null, "customfield_10227": null, "customfield_10228": null, "customfield_10229": null, "resolutiondate": null, "workratio": -1, "watches": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-25/watchers", "watchCount": 1, "isWatching": true}, "lastViewed": null, "issuerestriction": {"issuerestrictions": {}, "shouldDisplay": false}, "customfield_10181": null, "created": "2022-05-17T04:06:24.048000-07:00", "customfield_10020": null, "customfield_10021": null, "customfield_10022": null, "customfield_10220": null, "customfield_10023": null, "priority": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/4", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/low.svg", "name": "Low", "id": "4"}, "customfield_10221": null, "customfield_10024": null, "customfield_10222": null, "customfield_10223": null, "customfield_10025": null, "customfield_10026": null, "customfield_10224": null, "labels": [], "customfield_10016": null, "customfield_10214": null, "customfield_10215": null, "customfield_10017": "dark_yellow", "customfield_10018": {"hasEpicLinkFieldDependency": false, "showField": false, "nonEditableReason": {"reason": "PLUGIN_LICENSE_ERROR", "message": "The Parent Link is only available to Jira Premium users."}}, "customfield_10216": null, "customfield_10019": "0|i0076v:", "customfield_10217": [], "aggregatetimeoriginalestimate": null, "customfield_10218": null, "timeestimate": null, "versions": [], "customfield_10219": null, "issuelinks": [{"id": "10263", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLink/10263", "type": {"id": "10001", "name": "Cloners", "inward": "is cloned by", "outward": "clones", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLinkType/10001"}, "inwardIssue": {"id": "10626", "key": "IT-26", "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10626", "fields": {"summary": "CLONE - Aggregate issues", "status": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "priority": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/4", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/low.svg", "name": "Low", "id": "4"}, "issuetype": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10000", "id": "10000", "description": "A big user story that needs to be broken down. Created by Jira Software - do not edit or delete.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/issuetypes/epic.svg", "name": "Epic", "subtask": false, "hierarchyLevel": 1}}}}], "assignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updated": "2022-05-17T04:28:19.876000-07:00", "status": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "components": [{"self": "https://airbyteio.atlassian.net/rest/api/3/component/10049", "id": "10049", "name": "Component 3", "description": "This is a Jira component"}], "timeoriginalestimate": null, "description": {"version": 1, "type": "doc", "content": [{"type": "paragraph", "content": [{"type": "text", "text": "Implement OAUth"}]}]}, "customfield_10010": null, "customfield_10011": "Test 2", "customfield_10012": {"self": "https://airbyteio.atlassian.net/rest/api/3/customFieldOption/10016", "value": "To Do", "id": "10016"}, "customfield_10210": null, "customfield_10211": null, "customfield_10013": "ghx-label-2", "customfield_10014": null, "customfield_10212": null, "customfield_10213": null, "customfield_10015": null, "timetracking": {}, "customfield_10005": null, "customfield_10006": null, "security": null, "customfield_10007": null, "customfield_10008": null, "attachment": [], "aggregatetimeestimate": null, "customfield_10009": null, "customfield_10209": null, "summary": "Aggregate issues", "creator": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "subtasks": [], "reporter": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "aggregateprogress": {"progress": 0, "total": 0}, "customfield_10001": null, "customfield_10002": null, "customfield_10047": null, "customfield_10003": null, "customfield_10004": null, "environment": null, "duedate": null, "progress": {"progress": 0, "total": 0}, "comment": {"comments": [{"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10625/comment/10755", "id": "10755", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "body": {"version": 1, "type": "doc", "content": [{"type": "paragraph", "content": [{"type": "text", "text": "Closed"}]}]}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2022-05-17T04:06:55.076-0700", "updated": "2022-05-17T04:06:55.076-0700", "jsdPublic": true}], "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10625/comment", "maxResults": 1, "total": 1, "startAt": 0}, "votes": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-25/votes", "votes": 0, "hasVoted": false}, "worklog": {"startAt": 0, "maxResults": 20, "total": 0, "worklogs": []}}, "projectId": "10000", "projectKey": "IT", "created": "2022-05-17T04:06:24.048000-07:00", "updated": "2022-05-17T04:28:19.876000-07:00"}, "emitted_at": 1697022687608} +{"stream": "issues", "data": {"expand": "customfield_10030.properties,operations,versionedRepresentations,editmeta,changelog,customfield_10029.properties,customfield_10010.requestTypePractice,transitions,renderedFields,customfield_10229.properties", "id": "10080", "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10080", "key": "IT-24", "renderedFields": {"statuscategorychangedate": "11/Mar/21 6:17 AM", "issuetype": null, "timespent": "5 hours, 48 minutes", "customfield_10030": null, "project": null, "fixVersions": null, "aggregatetimespent": "5 hours, 48 minutes", "resolution": null, "customfield_10225": null, "customfield_10226": null, "customfield_10227": null, "customfield_10029": null, "customfield_10228": null, "customfield_10229": null, "resolutiondate": null, "workratio": null, "watches": null, "issuerestriction": null, "lastViewed": null, "customfield_10181": null, "created": "11/Mar/21 6:17 AM", "customfield_10020": null, "customfield_10021": null, "customfield_10022": null, "customfield_10220": null, "customfield_10023": null, "priority": null, "customfield_10221": null, "customfield_10024": null, "customfield_10222": null, "customfield_10025": null, "customfield_10223": null, "customfield_10224": null, "labels": null, "customfield_10214": null, "customfield_10016": null, "customfield_10215": null, "customfield_10017": "", "customfield_10216": null, "customfield_10018": null, "customfield_10019": null, "customfield_10217": null, "timeestimate": "0 minutes", "aggregatetimeoriginalestimate": null, "customfield_10218": null, "customfield_10219": null, "versions": null, "issuelinks": null, "assignee": null, "updated": "05/Apr/23 4:58 AM", "status": null, "components": null, "timeoriginalestimate": null, "description": "

Test description 74

", "customfield_10010": null, "customfield_10210": null, "customfield_10211": null, "customfield_10014": null, "customfield_10212": null, "customfield_10015": null, "customfield_10213": null, "timetracking": {"remainingEstimate": "0 minutes", "timeSpent": "5 hours, 48 minutes", "remainingEstimateSeconds": 0, "timeSpentSeconds": 20880}, "customfield_10005": null, "customfield_10006": null, "customfield_10007": null, "security": null, "customfield_10008": null, "aggregatetimeestimate": "0 minutes", "attachment": [{"self": "https://airbyteio.atlassian.net/rest/api/3/attachment/10123", "id": "10123", "filename": "demo.xlsx", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "14/Apr/21 2:11 PM", "size": "7 kB", "content": "https://airbyteio.atlassian.net/rest/api/3/attachment/content/10123"}], "customfield_10009": null, "customfield_10209": null, "summary": null, "creator": null, "subtasks": null, "reporter": null, "aggregateprogress": null, "customfield_10001": null, "customfield_10002": null, "customfield_10003": null, "customfield_10047": null, "customfield_10004": null, "environment": "", "duedate": null, "progress": null, "votes": null, "comment": {"comments": [], "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10080/comment", "maxResults": 0, "total": 0, "startAt": 0}, "worklog": {"startAt": 0, "maxResults": 20, "total": 3, "worklogs": [{"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10080/worklog/11708", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "15/Apr/21 11:39 AM", "updated": "15/Apr/21 11:39 AM", "started": "14/Apr/21 6:48 PM", "timeSpent": "2 hours, 21 minutes", "id": "11708", "issueId": "10080"}, {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10080/worklog/11709", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "15/Apr/21 11:39 AM", "updated": "15/Apr/21 11:39 AM", "started": "14/Apr/21 6:48 PM", "timeSpent": "37 minutes", "id": "11709", "issueId": "10080"}, {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10080/worklog/11710", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "15/Apr/21 11:39 AM", "updated": "15/Apr/21 11:39 AM", "started": "14/Apr/21 6:48 PM", "timeSpent": "2 hours, 50 minutes", "id": "11710", "issueId": "10080"}]}}, "transitions": [{"id": "11", "name": "To Do", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}, {"id": "21", "name": "In Progress", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/3", "description": "This issue is being actively worked on at the moment by the assignee.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/statuses/inprogress.png", "name": "In Progress", "id": "3", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/4", "id": 4, "key": "indeterminate", "colorName": "yellow", "name": "In Progress"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}, {"id": "31", "name": "Done", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10001", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "Done", "id": "10001", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/3", "id": 3, "key": "done", "colorName": "green", "name": "Done"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}, {"id": "41", "name": "Approved", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10005", "description": "This was auto-generated by Jira Service Management during workflow import", "iconUrl": "https://airbyteio.atlassian.net/images/icons/status_generic.gif", "name": "Approved", "id": "10005", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/3", "id": 3, "key": "done", "colorName": "green", "name": "Done"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}, {"id": "51", "name": "In review", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10004", "description": "This was auto-generated by Jira Service Management during workflow import", "iconUrl": "https://airbyteio.atlassian.net/images/icons/status_generic.gif", "name": "In review", "id": "10004", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/4", "id": 4, "key": "indeterminate", "colorName": "yellow", "name": "In Progress"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}, {"id": "61", "name": "Reopened", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/4", "description": "This issue was once resolved, but the resolution was deemed incorrect. From here issues are either marked assigned or resolved.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/statuses/reopened.png", "name": "Reopened", "id": "4", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}, {"id": "71", "name": "Declined", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10002", "description": "This was auto-generated by Jira Service Management during workflow import", "iconUrl": "https://airbyteio.atlassian.net/images/icons/statuses/generic.png", "name": "Declined", "id": "10002", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/3", "id": 3, "key": "done", "colorName": "green", "name": "Done"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}, {"id": "81", "name": "Open", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/1", "description": "The issue is open and ready for the assignee to start work on it.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/statuses/open.png", "name": "Open", "id": "1", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}, {"id": "91", "name": "Pending", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10003", "description": "This was auto-generated by Jira Service Management during workflow import", "iconUrl": "https://airbyteio.atlassian.net/images/icons/status_generic.gif", "name": "Pending", "id": "10003", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/4", "id": 4, "key": "indeterminate", "colorName": "yellow", "name": "In Progress"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}, {"id": "101", "name": "Closed", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/6", "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/statuses/closed.png", "name": "Closed", "id": "6", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/3", "id": 3, "key": "done", "colorName": "green", "name": "Done"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false}], "changelog": {"startAt": 0, "maxResults": 8, "total": 8, "histories": [{"id": "15179", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2023-04-05T04:58:35.333-0700", "items": [{"field": "Sprint", "fieldtype": "custom", "fieldId": "customfield_10020", "from": "", "fromString": "", "to": "10", "toString": "IT Sprint 9"}]}, {"id": "14989", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-15T11:39:47.917-0700", "items": [{"field": "timeestimate", "fieldtype": "jira", "fieldId": "timeestimate", "from": "0", "fromString": "0", "to": "0", "toString": "0"}, {"field": "timespent", "fieldtype": "jira", "fieldId": "timespent", "from": "10680", "fromString": "10680", "to": "20880", "toString": "20880"}, {"field": "WorklogId", "fieldtype": "jira", "from": null, "fromString": null, "to": "11710", "toString": "11710"}]}, {"id": "14988", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-15T11:39:47.314-0700", "items": [{"field": "timeestimate", "fieldtype": "jira", "fieldId": "timeestimate", "from": "0", "fromString": "0", "to": "0", "toString": "0"}, {"field": "timespent", "fieldtype": "jira", "fieldId": "timespent", "from": "8460", "fromString": "8460", "to": "10680", "toString": "10680"}, {"field": "WorklogId", "fieldtype": "jira", "from": null, "fromString": null, "to": "11709", "toString": "11709"}]}, {"id": "14987", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-15T11:39:46.691-0700", "items": [{"field": "timeestimate", "fieldtype": "jira", "fieldId": "timeestimate", "from": null, "fromString": null, "to": "0", "toString": "0"}, {"field": "timespent", "fieldtype": "jira", "fieldId": "timespent", "from": null, "fromString": null, "to": "8460", "toString": "8460"}, {"field": "WorklogId", "fieldtype": "jira", "from": null, "fromString": null, "to": "11708", "toString": "11708"}]}, {"id": "14800", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-15T07:18:07.884-0700", "items": [{"field": "RemoteIssueLink", "fieldtype": "jira", "from": null, "fromString": null, "to": "10046", "toString": "This issue links to \"TSTSUP-111 (My Acme Tracker)\""}]}, {"id": "14718", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-15T00:08:54.455-0700", "items": [{"field": "Link", "fieldtype": "jira", "from": null, "fromString": null, "to": "IT-22", "toString": "This issue is duplicated by IT-22"}]}, {"id": "14716", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-15T00:08:48.880-0700", "items": [{"field": "Link", "fieldtype": "jira", "from": null, "fromString": null, "to": "IT-23", "toString": "This issue is duplicated by IT-23"}]}, {"id": "14596", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-14T14:11:01.899-0700", "items": [{"field": "Attachment", "fieldtype": "jira", "fieldId": "attachment", "from": null, "fromString": null, "to": "10123", "toString": "demo.xlsx"}]}]}, "fields": {"statuscategorychangedate": "2021-03-11T06:17:33.483-0800", "issuetype": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10004", "id": "10004", "description": "A problem or error.", "iconUrl": "https://airbyteio.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10303?size=medium", "name": "Bug", "subtask": false, "avatarId": 10303, "hierarchyLevel": 0}, "timespent": 20880, "customfield_10030": null, "project": {"self": "https://airbyteio.atlassian.net/rest/api/3/project/10000", "id": "10000", "key": "IT", "name": "integration-tests", "projectTypeKey": "software", "simplified": false, "avatarUrls": {"48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=medium"}, "projectCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/projectCategory/10004", "id": "10004", "description": "Test Project Category 2", "name": "Test category 2"}}, "fixVersions": [], "aggregatetimespent": 20880, "resolution": null, "customfield_10225": null, "customfield_10226": null, "customfield_10227": null, "customfield_10029": null, "customfield_10228": null, "customfield_10229": null, "resolutiondate": null, "workratio": -1, "watches": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-24/watchers", "watchCount": 1, "isWatching": true}, "issuerestriction": {"issuerestrictions": {}, "shouldDisplay": false}, "lastViewed": null, "customfield_10181": null, "created": "2021-03-11T06:17:33.169000-08:00", "customfield_10020": [{"id": 10, "name": "IT Sprint 9", "state": "future", "boardId": 1, "startDate": "2022-09-06T11:25:59.072Z", "endDate": "2022-09-20T11:25:00.000Z"}], "customfield_10021": null, "customfield_10022": null, "customfield_10220": null, "customfield_10023": null, "priority": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/3", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/medium.svg", "name": "Medium", "id": "3"}, "customfield_10221": null, "customfield_10024": null, "customfield_10222": null, "customfield_10025": null, "customfield_10223": null, "customfield_10224": null, "labels": [], "customfield_10214": null, "customfield_10016": null, "customfield_10215": null, "customfield_10017": null, "customfield_10216": null, "customfield_10018": {"hasEpicLinkFieldDependency": false, "showField": false, "nonEditableReason": {"reason": "PLUGIN_LICENSE_ERROR", "message": "The Parent Link is only available to Jira Premium users."}}, "customfield_10019": "0|i000hr:", "customfield_10217": [], "timeestimate": 0, "aggregatetimeoriginalestimate": null, "customfield_10218": null, "customfield_10219": null, "versions": [], "issuelinks": [{"id": "10244", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLink/10244", "type": {"id": "10002", "name": "Duplicate", "inward": "is duplicated by", "outward": "duplicates", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLinkType/10002"}, "inwardIssue": {"id": "10069", "key": "IT-22", "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10069", "fields": {"summary": "Test 63", "status": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "priority": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/3", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/medium.svg", "name": "Medium", "id": "3"}, "issuetype": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10000", "id": "10000", "description": "A big user story that needs to be broken down. Created by Jira Software - do not edit or delete.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/issuetypes/epic.svg", "name": "Epic", "subtask": false, "hierarchyLevel": 1}}}}, {"id": "10243", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLink/10243", "type": {"id": "10002", "name": "Duplicate", "inward": "is duplicated by", "outward": "duplicates", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLinkType/10002"}, "inwardIssue": {"id": "10075", "key": "IT-23", "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075", "fields": {"summary": "Test 69", "status": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "priority": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/3", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/medium.svg", "name": "Medium", "id": "3"}, "issuetype": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10004", "id": "10004", "description": "A problem or error.", "iconUrl": "https://airbyteio.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10303?size=medium", "name": "Bug", "subtask": false, "avatarId": 10303, "hierarchyLevel": 0}}}}], "assignee": null, "updated": "2023-04-05T04:58:35.329000-07:00", "status": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "components": [], "timeoriginalestimate": null, "description": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"type": "text", "text": "Test description 74"}]}]}, "customfield_10010": null, "customfield_10210": null, "customfield_10211": null, "customfield_10014": null, "customfield_10212": null, "customfield_10015": null, "customfield_10213": null, "timetracking": {"remainingEstimate": "0m", "timeSpent": "5h 48m", "remainingEstimateSeconds": 0, "timeSpentSeconds": 20880}, "customfield_10005": null, "customfield_10006": null, "customfield_10007": null, "security": null, "customfield_10008": null, "aggregatetimeestimate": 0, "attachment": [{"self": "https://airbyteio.atlassian.net/rest/api/3/attachment/10123", "id": "10123", "filename": "demo.xlsx", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-14T14:11:01.652-0700", "size": 7360, "content": "https://airbyteio.atlassian.net/rest/api/3/attachment/content/10123"}], "customfield_10009": null, "customfield_10209": null, "summary": "Test 74", "creator": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "subtasks": [], "reporter": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "aggregateprogress": {"progress": 20880, "total": 20880, "percent": 100}, "customfield_10001": null, "customfield_10002": null, "customfield_10003": null, "customfield_10047": null, "customfield_10004": null, "environment": null, "duedate": null, "progress": {"progress": 20880, "total": 20880, "percent": 100}, "votes": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-24/votes", "votes": 1, "hasVoted": true}, "comment": {"comments": [], "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10080/comment", "maxResults": 0, "total": 0, "startAt": 0}, "worklog": {"startAt": 0, "maxResults": 20, "total": 3, "worklogs": [{"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10080/worklog/11708", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "comment": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "I did some work here. 0", "type": "text"}]}]}, "created": "2021-04-15T11:39:46.574-0700", "updated": "2021-04-15T11:39:46.574-0700", "started": "2021-04-14T18:48:52.747-0700", "timeSpent": "2h 21m", "timeSpentSeconds": 8460, "id": "11708", "issueId": "10080"}, {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10080/worklog/11709", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "comment": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "I did some work here. 1", "type": "text"}]}]}, "created": "2021-04-15T11:39:47.215-0700", "updated": "2021-04-15T11:39:47.215-0700", "started": "2021-04-14T18:48:52.747-0700", "timeSpent": "37m", "timeSpentSeconds": 2220, "id": "11709", "issueId": "10080"}, {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10080/worklog/11710", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "comment": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "I did some work here. 2", "type": "text"}]}]}, "created": "2021-04-15T11:39:47.834-0700", "updated": "2021-04-15T11:39:47.834-0700", "started": "2021-04-14T18:48:52.747-0700", "timeSpent": "2h 50m", "timeSpentSeconds": 10200, "id": "11710", "issueId": "10080"}]}}, "projectId": "10000", "projectKey": "IT", "created": "2021-03-11T06:17:33.169000-08:00", "updated": "2023-04-05T04:58:35.329000-07:00"}, "emitted_at": 1697022687613} +{"stream": "issue_comments", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10625/comment/10755", "id": "10755", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "body": {"version": 1, "type": "doc", "content": [{"type": "paragraph", "content": [{"type": "text", "text": "Closed"}]}]}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2022-05-17T04:06:55.076000-07:00", "updated": "2022-05-17T04:06:55.076000-07:00", "jsdPublic": true, "issueId": "IT-25"}, "emitted_at": 1697022690977} +{"stream": "issue_comments", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/comment/10521", "id": "10521", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "body": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque eget venenatis elit. Duis eu justo eget augue iaculis fermentum. Sed semper quam laoreet nisi egestas at posuere augue semper.", "type": "text"}]}]}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-14T14:32:43.099000-07:00", "updated": "2021-04-14T14:32:43.099000-07:00", "jsdPublic": true, "issueId": "IT-23"}, "emitted_at": 1697022691618} +{"stream": "issue_comments", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/comment/10639", "id": "10639", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "body": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "Linked related issue!", "type": "text"}]}]}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-15T00:08:48.998000-07:00", "updated": "2021-04-15T00:08:48.998000-07:00", "jsdPublic": true, "issueId": "IT-23"}, "emitted_at": 1697022691619} +{"stream": "issue_fields", "data": {"id": "statuscategorychangedate", "key": "statuscategorychangedate", "name": "Status Category Changed", "custom": false, "orderable": false, "navigable": true, "searchable": true, "clauseNames": ["statusCategoryChangedDate"], "schema": {"type": "datetime", "system": "statuscategorychangedate"}}, "emitted_at": 1697022701667} +{"stream": "issue_fields", "data": {"id": "parent", "key": "parent", "name": "Parent", "custom": false, "orderable": false, "navigable": true, "searchable": false, "clauseNames": ["parent"]}, "emitted_at": 1697022701668} +{"stream": "issue_fields", "data": {"id": "issuetype", "key": "issuetype", "name": "Issue Type", "custom": false, "orderable": true, "navigable": true, "searchable": true, "clauseNames": ["issuetype", "type"], "schema": {"type": "issuetype", "system": "issuetype"}}, "emitted_at": 1697022701668} +{"stream": "issue_field_configurations", "data": {"id": 10000, "name": "Default Field Configuration", "description": "The default field configuration", "isDefault": true}, "emitted_at": 1697022702351} +{"stream": "issue_field_configurations", "data": {"id": 10001, "name": "Field Config 1", "description": "Field Config 1 test"}, "emitted_at": 1697022702353} +{"stream": "issue_field_configurations", "data": {"id": 10002, "name": "Field Config 2", "description": "Field Config 2 test"}, "emitted_at": 1697022702353} +{"stream": "issue_custom_field_contexts", "data": {"id": "10130", "name": "Default Configuration Scheme for Account", "description": "Default configuration scheme generated by Jira", "isGlobalContext": true, "isAnyIssueType": true, "fieldId": "customfield_10030", "fieldType": "option2"}, "emitted_at": 1697022702792} +{"stream": "issue_custom_field_contexts", "data": {"id": "10382", "name": "Default Configuration Scheme for Time to first response", "description": "Default configuration scheme generated by Jira", "isGlobalContext": true, "isAnyIssueType": true, "fieldId": "customfield_10225", "fieldType": "sd-servicelevelagreement"}, "emitted_at": 1697022703603} +{"stream": "issue_custom_field_contexts", "data": {"id": "10384", "name": "Default Configuration Scheme for Time to done", "description": "Default configuration scheme generated by Jira", "isGlobalContext": true, "isAnyIssueType": true, "fieldId": "customfield_10226", "fieldType": "sd-servicelevelagreement"}, "emitted_at": 1697022703910} +{"stream": "issue_custom_field_options", "data": {"id": "10016", "value": "To Do", "disabled": false, "fieldId": "customfield_10012", "contextId": "10112"}, "emitted_at": 1697022721263} +{"stream": "issue_custom_field_options", "data": {"id": "10017", "value": "In Progress", "disabled": false, "fieldId": "customfield_10012", "contextId": "10112"}, "emitted_at": 1697022721264} +{"stream": "issue_custom_field_options", "data": {"id": "10018", "value": "Done", "disabled": false, "fieldId": "customfield_10012", "contextId": "10112"}, "emitted_at": 1697022721264} +{"stream": "issue_link_types", "data": {"id": "10000", "name": "Blocks", "inward": "is blocked by", "outward": "blocks", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLinkType/10000"}, "emitted_at": 1697022723467} +{"stream": "issue_link_types", "data": {"id": "10001", "name": "Cloners", "inward": "is cloned by", "outward": "clones", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLinkType/10001"}, "emitted_at": 1697022723468} +{"stream": "issue_link_types", "data": {"id": "10002", "name": "Duplicate", "inward": "is duplicated by", "outward": "duplicates", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLinkType/10002"}, "emitted_at": 1697022723469} +{"stream": "issue_navigator_settings", "data": {"label": "Issue Type", "value": "issuetype"}, "emitted_at": 1697022724245} +{"stream": "issue_navigator_settings", "data": {"label": "Key", "value": "issuekey"}, "emitted_at": 1697022724246} +{"stream": "issue_navigator_settings", "data": {"label": "Summary", "value": "summary"}, "emitted_at": 1697022724246} +{"stream": "issue_notification_schemes", "data": {"expand": "notificationSchemeEvents,user,group,projectRole,field,all", "id": 10000, "self": "https://airbyteio.atlassian.net/rest/api/3/notificationscheme/10000", "name": "Default Notification Scheme"}, "emitted_at": 1697022725081} +{"stream": "issue_notification_schemes", "data": {"expand": "notificationSchemeEvents,user,group,projectRole,field,all", "id": 10001, "self": "https://airbyteio.atlassian.net/rest/api/3/notificationscheme/10001", "name": "Notification Scheme 1", "description": "Notification Scheme 1 test"}, "emitted_at": 1697022725082} +{"stream": "issue_notification_schemes", "data": {"expand": "notificationSchemeEvents,user,group,projectRole,field,all", "id": 10002, "self": "https://airbyteio.atlassian.net/rest/api/3/notificationscheme/10002", "name": "Notification Scheme 2", "description": "Notification Scheme 2 test"}, "emitted_at": 1697022725083} +{"stream": "issue_priorities", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/1", "statusColor": "#d04437", "description": "This problem will block progress.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/highest.svg", "name": "Highest", "id": "1", "isDefault": false}, "emitted_at": 1697022725818} +{"stream": "issue_priorities", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/2", "statusColor": "#f15C75", "description": "Serious problem that could block progress.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/high.svg", "name": "High", "id": "2", "isDefault": false}, "emitted_at": 1697022725819} +{"stream": "issue_priorities", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/3", "statusColor": "#f79232", "description": "Has the potential to affect progress.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/medium.svg", "name": "Medium", "id": "3", "isDefault": false}, "emitted_at": 1697022725820} +{"stream": "issue_properties", "data": {"key": "myProperty", "value": {"owner": "admin", "weight": 100}, "issueId": "IT-16"}, "emitted_at": 1697022729890} +{"stream": "issue_properties", "data": {"key": "myProperty1", "value": {"owner": "admin", "weight": 100}, "issueId": "IT-16"}, "emitted_at": 1697022730184} +{"stream": "issue_properties", "data": {"key": "myProperty2", "value": {"owner": "admin", "weight": 100}, "issueId": "IT-16"}, "emitted_at": 1697022730467} +{"stream": "issue_remote_links", "data": {"id": 10046, "self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-24/remotelink/10046", "globalId": "system=https://www.mycompany.com/support&id=1", "application": {"type": "com.acme.tracker", "name": "My Acme Tracker"}, "relationship": "causes", "object": {"url": "https://www.mycompany.com/support?id=1", "title": "TSTSUP-111", "summary": "Customer support issue", "icon": {"url16x16": "https://www.mycompany.com/support/ticket.png", "title": "Support Ticket"}, "status": {"resolved": true, "icon": {"url16x16": "https://www.mycompany.com/support/resolved.png", "title": "Case Closed", "link": "https://www.mycompany.com/support?id=1&details=closed"}}}, "issueId": "IT-24"}, "emitted_at": 1697022744767} +{"stream": "issue_remote_links", "data": {"id": 10047, "self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-23/remotelink/10047", "globalId": "system=https://www.mycompany.com/support&id=1", "application": {"type": "com.acme.tracker", "name": "My Acme Tracker"}, "relationship": "causes", "object": {"url": "https://www.mycompany.com/support?id=1", "title": "TSTSUP-111", "summary": "Customer support issue", "icon": {"url16x16": "https://www.mycompany.com/support/ticket.png", "title": "Support Ticket"}, "status": {"resolved": true, "icon": {"url16x16": "https://www.mycompany.com/support/resolved.png", "title": "Case Closed", "link": "https://www.mycompany.com/support?id=1&details=closed"}}}, "issueId": "IT-23"}, "emitted_at": 1697022745072} +{"stream": "issue_remote_links", "data": {"id": 10048, "self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-22/remotelink/10048", "globalId": "system=https://www.mycompany.com/support&id=1", "application": {"type": "com.acme.tracker", "name": "My Acme Tracker"}, "relationship": "causes", "object": {"url": "https://www.mycompany.com/support?id=1", "title": "TSTSUP-111", "summary": "Customer support issue", "icon": {"url16x16": "https://www.mycompany.com/support/ticket.png", "title": "Support Ticket"}, "status": {"resolved": true, "icon": {"url16x16": "https://www.mycompany.com/support/resolved.png", "title": "Case Closed", "link": "https://www.mycompany.com/support?id=1&details=closed"}}}, "issueId": "IT-22"}, "emitted_at": 1697022745379} +{"stream": "issue_resolutions", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/resolution/10000", "id": "10000", "description": "Work has been completed on this issue.", "name": "Done", "isDefault": false}, "emitted_at": 1697022753965} +{"stream": "issue_resolutions", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/resolution/10001", "id": "10001", "description": "This issue won't be actioned.", "name": "Won't Do", "isDefault": false}, "emitted_at": 1697022753966} +{"stream": "issue_resolutions", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/resolution/10002", "id": "10002", "description": "The problem is a duplicate of an existing issue.", "name": "Duplicate", "isDefault": false}, "emitted_at": 1697022753966} +{"stream": "issue_security_schemes", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuesecurityschemes/10001", "id": 10001, "name": "Security scheme 2", "description": "Security scheme 2"}, "emitted_at": 1697022754675} +{"stream": "issue_security_schemes", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuesecurityschemes/10000", "id": 10000, "name": "Security scheme 1", "description": "Security scheme 1", "defaultSecurityLevelId": 10002}, "emitted_at": 1697022754676} +{"stream": "issue_security_schemes", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuesecurityschemes/10002", "id": 10002, "name": "Security scheme 3", "description": "Security scheme 3 test", "defaultSecurityLevelId": 10003}, "emitted_at": 1697022754676} +{"stream": "issue_transitions", "data": {"id": "11", "name": "To Do", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false, "issueId": "IT-26"}, "emitted_at": 1697022758136} +{"stream": "issue_transitions", "data": {"id": "21", "name": "In Progress", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/3", "description": "This issue is being actively worked on at the moment by the assignee.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/statuses/inprogress.png", "name": "In Progress", "id": "3", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/4", "id": 4, "key": "indeterminate", "colorName": "yellow", "name": "In Progress"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false, "issueId": "IT-26"}, "emitted_at": 1697022758138} +{"stream": "issue_transitions", "data": {"id": "31", "name": "Done", "to": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10001", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "Done", "id": "10001", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/3", "id": 3, "key": "done", "colorName": "green", "name": "Done"}}, "hasScreen": false, "isGlobal": true, "isInitial": false, "isAvailable": true, "isConditional": false, "isLooped": false, "issueId": "IT-26"}, "emitted_at": 1697022758138} +{"stream": "issue_type_schemes", "data": {"id": "10000", "name": "Default Issue Type Scheme", "description": "Default issue type scheme is the list of global issue types. All newly created issue types will automatically be added to this scheme.", "isDefault": true}, "emitted_at": 1697022770778} +{"stream": "issue_type_schemes", "data": {"id": "10126", "name": "IT: Scrum Issue Type Scheme", "defaultIssueTypeId": "10001"}, "emitted_at": 1697022770779} +{"stream": "issue_type_schemes", "data": {"id": "10128", "name": "P2: Scrum Issue Type Scheme", "defaultIssueTypeId": "10001"}, "emitted_at": 1697022770779} +{"stream": "issue_types", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10023", "id": "10023", "description": "Subtasks track small pieces of work that are part of a larger task.", "iconUrl": "https://airbyteio.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10316?size=medium", "name": "Subtask", "untranslatedName": "Subtask", "subtask": true, "avatarId": 10316, "hierarchyLevel": -1, "scope": {"type": "PROJECT", "project": {"id": "10064"}}}, "emitted_at": 1697022771874} +{"stream": "issue_types", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10026", "id": "10026", "description": "Subtasks track small pieces of work that are part of a larger task.", "iconUrl": "https://airbyteio.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10316?size=medium", "name": "Subtask", "untranslatedName": "Subtask", "subtask": true, "avatarId": 10316, "hierarchyLevel": -1, "scope": {"type": "PROJECT", "project": {"id": "10065"}}}, "emitted_at": 1697022771883} +{"stream": "issue_types", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10003", "id": "10003", "description": "A small piece of work that's part of a larger task.", "iconUrl": "https://airbyteio.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10316?size=medium", "name": "Sub-task", "untranslatedName": "Sub-task", "subtask": true, "avatarId": 10316, "hierarchyLevel": -1}, "emitted_at": 1697022771884} +{"stream": "issue_type_screen_schemes", "data": {"id": "1", "name": "Default Issue Type Screen Scheme", "description": "The default issue type screen scheme"}, "emitted_at": 1697022772601} +{"stream": "issue_type_screen_schemes", "data": {"id": "10000", "name": "IT: Scrum Issue Type Screen Scheme", "description": ""}, "emitted_at": 1697022772602} +{"stream": "issue_type_screen_schemes", "data": {"id": "10001", "name": "P2: Scrum Issue Type Screen Scheme", "description": ""}, "emitted_at": 1697022772602} +{"stream": "issue_votes", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-26/votes", "votes": 0, "hasVoted": false, "voters": [], "issueId": "IT-26"}, "emitted_at": 1697022773748} +{"stream": "issue_votes", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-25/votes", "votes": 0, "hasVoted": false, "voters": [], "issueId": "IT-25"}, "emitted_at": 1697022774154} +{"stream": "issue_votes", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-24/votes", "votes": 1, "hasVoted": true, "voters": [{"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}], "issueId": "IT-24"}, "emitted_at": 1697022774471} +{"stream": "issue_watchers", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-26/watchers", "isWatching": true, "watchCount": 1, "watchers": [{"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}], "issueId": "IT-26"}, "emitted_at": 1697022783672} +{"stream": "issue_watchers", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-25/watchers", "isWatching": true, "watchCount": 1, "watchers": [{"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}], "issueId": "IT-25"}, "emitted_at": 1697022783967} +{"stream": "issue_watchers", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-24/watchers", "isWatching": true, "watchCount": 1, "watchers": [{"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}], "issueId": "IT-24"}, "emitted_at": 1697022784327} +{"stream": "issue_worklogs", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10626/worklog/11820", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=557058%3A295406f3-a1fc-4733-b906-dd15d021bd79", "accountId": "557058:295406f3-a1fc-4733-b906-dd15d021bd79", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "24x24": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "16x16": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "32x32": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png"}, "displayName": "Tempo Timesheets", "active": true, "timeZone": "America/Los_Angeles", "accountType": "app"}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=557058%3A295406f3-a1fc-4733-b906-dd15d021bd79", "accountId": "557058:295406f3-a1fc-4733-b906-dd15d021bd79", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "24x24": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "16x16": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png", "32x32": "https://secure.gravatar.com/avatar/182fc208a1a2e6cc41393ab6c9363d9c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FTT-6.png"}, "displayName": "Tempo Timesheets", "active": true, "timeZone": "America/Los_Angeles", "accountType": "app"}, "comment": {"version": 1, "type": "doc", "content": [{"type": "paragraph", "content": [{"type": "text", "text": "time-tracking"}]}]}, "created": "2023-04-05T05:08:50.033000-07:00", "updated": "2023-04-05T05:08:50.033000-07:00", "started": "2023-04-05T01:00:00-07:00", "timeSpent": "1d", "timeSpentSeconds": 28800, "id": "11820", "issueId": "10626"}, "emitted_at": 1697022793684} +{"stream": "issue_worklogs", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10080/worklog/11708", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "comment": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "I did some work here. 0", "type": "text"}]}]}, "created": "2021-04-15T11:39:46.574000-07:00", "updated": "2021-04-15T11:39:46.574000-07:00", "started": "2021-04-14T18:48:52.747000-07:00", "timeSpent": "2h 21m", "timeSpentSeconds": 8460, "id": "11708", "issueId": "10080"}, "emitted_at": 1697022794332} +{"stream": "issue_worklogs", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10080/worklog/11709", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "comment": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "I did some work here. 1", "type": "text"}]}]}, "created": "2021-04-15T11:39:47.215000-07:00", "updated": "2021-04-15T11:39:47.215000-07:00", "started": "2021-04-14T18:48:52.747000-07:00", "timeSpent": "37m", "timeSpentSeconds": 2220, "id": "11709", "issueId": "10080"}, "emitted_at": 1697022794334} +{"stream": "jira_settings", "data": {"id": "jira.issuenav.criteria.autoupdate", "key": "jira.issuenav.criteria.autoupdate", "value": "true", "name": "Auto Update Criteria", "desc": "Turn on to update search results automatically", "type": "boolean"}, "emitted_at": 1697022803768} +{"stream": "jira_settings", "data": {"id": "jira.clone.prefix", "key": "jira.clone.prefix", "value": "CLONE -", "name": "The prefix added to the Summary field of cloned issues", "type": "string"}, "emitted_at": 1697022803769} +{"stream": "jira_settings", "data": {"id": "jira.date.picker.java.format", "key": "jira.date.picker.java.format", "value": "d/MMM/yy", "name": "Date Picker Format (Java)", "desc": "This part is only for the Java (server side) generated dates. Note that this should correspond to the javascript date picker format (jira.date.picker.javascript.format) setting.", "type": "string"}, "emitted_at": 1697022803770} +{"stream": "labels", "data": {"label": "Label10"}, "emitted_at": 1697022804687} +{"stream": "labels", "data": {"label": "Label3"}, "emitted_at": 1697022804688} +{"stream": "labels", "data": {"label": "Label4"}, "emitted_at": 1697022804688} +{"stream": "permissions", "data": {"key": "ADD_COMMENTS", "name": "Add Comments", "type": "PROJECT", "description": "Ability to comment on issues."}, "emitted_at": 1697022805513} +{"stream": "permissions", "data": {"key": "ADMINISTER", "name": "Administer Jira", "type": "GLOBAL", "description": "Create and administer projects, issue types, fields, workflows, and schemes for all projects. Users with this permission can perform most administration tasks, except: managing users, importing data, and editing system email settings."}, "emitted_at": 1697022805514} +{"stream": "permissions", "data": {"key": "ADMINISTER_PROJECTS", "name": "Administer Projects", "type": "PROJECT", "description": "Ability to administer a project in Jira."}, "emitted_at": 1697022805514} +{"stream": "permission_schemes", "data": {"expand": "permissions,user,group,projectRole,field,all", "id": 10056, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056", "name": "CAW software permission scheme", "description": "The permission scheme for Jira Software Free. In Free, any registered user can access and administer this project.", "permissions": [{"id": 14200, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14200", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ADD_COMMENTS"}, {"id": 14201, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14201", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ADMINISTER_PROJECTS"}, {"id": 14202, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14202", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ASSIGNABLE_USER"}, {"id": 14203, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14203", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ASSIGN_ISSUES"}, {"id": 14204, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14204", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "BROWSE_PROJECTS"}, {"id": 14205, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14205", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "CLOSE_ISSUES"}, {"id": 14206, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14206", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "CREATE_ATTACHMENTS"}, {"id": 14207, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14207", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "CREATE_ISSUES"}, {"id": 14208, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14208", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ALL_ATTACHMENTS"}, {"id": 14209, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14209", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ALL_COMMENTS"}, {"id": 14210, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14210", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ALL_WORKLOGS"}, {"id": 14211, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14211", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ISSUES"}, {"id": 14212, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14212", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_OWN_ATTACHMENTS"}, {"id": 14213, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14213", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_OWN_COMMENTS"}, {"id": 14214, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14214", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_OWN_WORKLOGS"}, {"id": 14215, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14215", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_ALL_COMMENTS"}, {"id": 14216, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14216", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_ALL_WORKLOGS"}, {"id": 14217, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14217", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_ISSUES"}, {"id": 14218, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14218", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_OWN_COMMENTS"}, {"id": 14219, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14219", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_OWN_WORKLOGS"}, {"id": 14220, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14220", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "LINK_ISSUES"}, {"id": 14221, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14221", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MANAGE_SPRINTS_PERMISSION"}, {"id": 14222, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14222", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MANAGE_WATCHERS"}, {"id": 14223, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14223", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MODIFY_REPORTER"}, {"id": 14224, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14224", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MOVE_ISSUES"}, {"id": 14225, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14225", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "RESOLVE_ISSUES"}, {"id": 14226, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14226", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "SCHEDULE_ISSUES"}, {"id": 14227, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14227", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "TRANSITION_ISSUES"}, {"id": 14228, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14228", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_DEV_TOOLS"}, {"id": 14229, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14229", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_READONLY_WORKFLOW"}, {"id": 14230, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14230", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_VOTERS_AND_WATCHERS"}, {"id": 14231, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14231", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "WORK_ON_ISSUES"}, {"id": 14232, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14232", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__log-work-for-others"}, {"id": 14233, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14233", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__set-billable-hours"}, {"id": 14234, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14234", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__view-all-worklogs"}, {"id": 14235, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14235", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__view-issue-hours"}, {"id": 14236, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14236", "holder": {"type": "applicationRole"}, "permission": "ADMINISTER_PROJECTS"}, {"id": 14237, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14237", "holder": {"type": "applicationRole"}, "permission": "BROWSE_PROJECTS"}, {"id": 14238, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14238", "holder": {"type": "applicationRole"}, "permission": "MANAGE_SPRINTS_PERMISSION"}, {"id": 14239, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14239", "holder": {"type": "applicationRole"}, "permission": "VIEW_DEV_TOOLS"}, {"id": 14240, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14240", "holder": {"type": "applicationRole"}, "permission": "VIEW_READONLY_WORKFLOW"}, {"id": 14241, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14241", "holder": {"type": "applicationRole"}, "permission": "ASSIGNABLE_USER"}, {"id": 14242, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14242", "holder": {"type": "applicationRole"}, "permission": "CLOSE_ISSUES"}, {"id": 14243, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14243", "holder": {"type": "applicationRole"}, "permission": "CREATE_ISSUES"}, {"id": 14244, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14244", "holder": {"type": "applicationRole"}, "permission": "DELETE_ISSUES"}, {"id": 14245, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14245", "holder": {"type": "applicationRole"}, "permission": "EDIT_ISSUES"}, {"id": 14246, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14246", "holder": {"type": "applicationRole"}, "permission": "LINK_ISSUES"}, {"id": 14247, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14247", "holder": {"type": "applicationRole"}, "permission": "MODIFY_REPORTER"}, {"id": 14248, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14248", "holder": {"type": "applicationRole"}, "permission": "MOVE_ISSUES"}, {"id": 14249, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14249", "holder": {"type": "applicationRole"}, "permission": "RESOLVE_ISSUES"}, {"id": 14250, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14250", "holder": {"type": "applicationRole"}, "permission": "SCHEDULE_ISSUES"}, {"id": 14251, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14251", "holder": {"type": "applicationRole"}, "permission": "TRANSITION_ISSUES"}, {"id": 14252, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14252", "holder": {"type": "applicationRole"}, "permission": "MANAGE_WATCHERS"}, {"id": 14253, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14253", "holder": {"type": "applicationRole"}, "permission": "VIEW_VOTERS_AND_WATCHERS"}, {"id": 14254, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14254", "holder": {"type": "applicationRole"}, "permission": "ADD_COMMENTS"}, {"id": 14255, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14255", "holder": {"type": "applicationRole"}, "permission": "DELETE_ALL_COMMENTS"}, {"id": 14256, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14256", "holder": {"type": "applicationRole"}, "permission": "DELETE_OWN_COMMENTS"}, {"id": 14257, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14257", "holder": {"type": "applicationRole"}, "permission": "EDIT_ALL_COMMENTS"}, {"id": 14258, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14258", "holder": {"type": "applicationRole"}, "permission": "EDIT_OWN_COMMENTS"}, {"id": 14259, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14259", "holder": {"type": "applicationRole"}, "permission": "CREATE_ATTACHMENTS"}, {"id": 14260, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14260", "holder": {"type": "applicationRole"}, "permission": "DELETE_ALL_ATTACHMENTS"}, {"id": 14261, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14261", "holder": {"type": "applicationRole"}, "permission": "DELETE_OWN_ATTACHMENTS"}, {"id": 14262, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14262", "holder": {"type": "applicationRole"}, "permission": "DELETE_ALL_WORKLOGS"}, {"id": 14263, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14263", "holder": {"type": "applicationRole"}, "permission": "DELETE_OWN_WORKLOGS"}, {"id": 14264, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14264", "holder": {"type": "applicationRole"}, "permission": "EDIT_ALL_WORKLOGS"}, {"id": 14265, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14265", "holder": {"type": "applicationRole"}, "permission": "EDIT_OWN_WORKLOGS"}, {"id": 14266, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14266", "holder": {"type": "applicationRole"}, "permission": "WORK_ON_ISSUES"}, {"id": 14267, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14267", "holder": {"type": "applicationRole"}, "permission": "ASSIGN_ISSUES"}, {"id": 14404, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14404", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "SET_ISSUE_SECURITY"}, {"id": 14481, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14481", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_AGGREGATED_DATA"}, {"id": 14542, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14542", "holder": {"type": "applicationRole"}, "permission": "VIEW_AGGREGATED_DATA"}, {"id": 14714, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14714", "holder": {"type": "applicationRole"}, "permission": "VIEW_PROJECTS"}, {"id": 14715, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14715", "holder": {"type": "applicationRole"}, "permission": "VIEW_ISSUES"}, {"id": 14836, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14836", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_PROJECTS"}, {"id": 14837, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14837", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_ISSUES"}, {"id": 15117, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/15117", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "SERVICEDESK_AGENT"}]}, "emitted_at": 1697022806679} +{"stream": "permission_schemes", "data": {"expand": "permissions,user,group,projectRole,field,all", "id": 10055, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055", "name": "CLK software permission scheme", "description": "The permission scheme for Jira Software Free. In Free, any registered user can access and administer this project.", "permissions": [{"id": 14132, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14132", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ADD_COMMENTS"}, {"id": 14133, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14133", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ADMINISTER_PROJECTS"}, {"id": 14134, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14134", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ASSIGNABLE_USER"}, {"id": 14135, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14135", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ASSIGN_ISSUES"}, {"id": 14136, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14136", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "BROWSE_PROJECTS"}, {"id": 14137, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14137", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "CLOSE_ISSUES"}, {"id": 14138, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14138", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "CREATE_ATTACHMENTS"}, {"id": 14139, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14139", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "CREATE_ISSUES"}, {"id": 14140, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14140", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ALL_ATTACHMENTS"}, {"id": 14141, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14141", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ALL_COMMENTS"}, {"id": 14142, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14142", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ALL_WORKLOGS"}, {"id": 14143, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14143", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ISSUES"}, {"id": 14144, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14144", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_OWN_ATTACHMENTS"}, {"id": 14145, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14145", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_OWN_COMMENTS"}, {"id": 14146, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14146", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_OWN_WORKLOGS"}, {"id": 14147, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14147", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_ALL_COMMENTS"}, {"id": 14148, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14148", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_ALL_WORKLOGS"}, {"id": 14149, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14149", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_ISSUES"}, {"id": 14150, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14150", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_OWN_COMMENTS"}, {"id": 14151, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14151", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_OWN_WORKLOGS"}, {"id": 14152, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14152", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "LINK_ISSUES"}, {"id": 14153, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14153", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MANAGE_SPRINTS_PERMISSION"}, {"id": 14154, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14154", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MANAGE_WATCHERS"}, {"id": 14155, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14155", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MODIFY_REPORTER"}, {"id": 14156, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14156", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MOVE_ISSUES"}, {"id": 14157, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14157", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "RESOLVE_ISSUES"}, {"id": 14158, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14158", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "SCHEDULE_ISSUES"}, {"id": 14159, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14159", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "TRANSITION_ISSUES"}, {"id": 14160, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14160", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_DEV_TOOLS"}, {"id": 14161, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14161", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_READONLY_WORKFLOW"}, {"id": 14162, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14162", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_VOTERS_AND_WATCHERS"}, {"id": 14163, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14163", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "WORK_ON_ISSUES"}, {"id": 14164, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14164", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__log-work-for-others"}, {"id": 14165, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14165", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__set-billable-hours"}, {"id": 14166, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14166", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__view-all-worklogs"}, {"id": 14167, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14167", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__view-issue-hours"}, {"id": 14168, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14168", "holder": {"type": "applicationRole"}, "permission": "ADMINISTER_PROJECTS"}, {"id": 14169, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14169", "holder": {"type": "applicationRole"}, "permission": "BROWSE_PROJECTS"}, {"id": 14170, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14170", "holder": {"type": "applicationRole"}, "permission": "MANAGE_SPRINTS_PERMISSION"}, {"id": 14171, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14171", "holder": {"type": "applicationRole"}, "permission": "VIEW_DEV_TOOLS"}, {"id": 14172, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14172", "holder": {"type": "applicationRole"}, "permission": "VIEW_READONLY_WORKFLOW"}, {"id": 14173, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14173", "holder": {"type": "applicationRole"}, "permission": "ASSIGNABLE_USER"}, {"id": 14174, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14174", "holder": {"type": "applicationRole"}, "permission": "CLOSE_ISSUES"}, {"id": 14175, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14175", "holder": {"type": "applicationRole"}, "permission": "CREATE_ISSUES"}, {"id": 14176, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14176", "holder": {"type": "applicationRole"}, "permission": "DELETE_ISSUES"}, {"id": 14177, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14177", "holder": {"type": "applicationRole"}, "permission": "EDIT_ISSUES"}, {"id": 14178, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14178", "holder": {"type": "applicationRole"}, "permission": "LINK_ISSUES"}, {"id": 14179, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14179", "holder": {"type": "applicationRole"}, "permission": "MODIFY_REPORTER"}, {"id": 14180, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14180", "holder": {"type": "applicationRole"}, "permission": "MOVE_ISSUES"}, {"id": 14181, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14181", "holder": {"type": "applicationRole"}, "permission": "RESOLVE_ISSUES"}, {"id": 14182, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14182", "holder": {"type": "applicationRole"}, "permission": "SCHEDULE_ISSUES"}, {"id": 14183, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14183", "holder": {"type": "applicationRole"}, "permission": "TRANSITION_ISSUES"}, {"id": 14184, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14184", "holder": {"type": "applicationRole"}, "permission": "MANAGE_WATCHERS"}, {"id": 14185, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14185", "holder": {"type": "applicationRole"}, "permission": "VIEW_VOTERS_AND_WATCHERS"}, {"id": 14186, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14186", "holder": {"type": "applicationRole"}, "permission": "ADD_COMMENTS"}, {"id": 14187, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14187", "holder": {"type": "applicationRole"}, "permission": "DELETE_ALL_COMMENTS"}, {"id": 14188, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14188", "holder": {"type": "applicationRole"}, "permission": "DELETE_OWN_COMMENTS"}, {"id": 14189, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14189", "holder": {"type": "applicationRole"}, "permission": "EDIT_ALL_COMMENTS"}, {"id": 14190, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14190", "holder": {"type": "applicationRole"}, "permission": "EDIT_OWN_COMMENTS"}, {"id": 14191, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14191", "holder": {"type": "applicationRole"}, "permission": "CREATE_ATTACHMENTS"}, {"id": 14192, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14192", "holder": {"type": "applicationRole"}, "permission": "DELETE_ALL_ATTACHMENTS"}, {"id": 14193, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14193", "holder": {"type": "applicationRole"}, "permission": "DELETE_OWN_ATTACHMENTS"}, {"id": 14194, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14194", "holder": {"type": "applicationRole"}, "permission": "DELETE_ALL_WORKLOGS"}, {"id": 14195, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14195", "holder": {"type": "applicationRole"}, "permission": "DELETE_OWN_WORKLOGS"}, {"id": 14196, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14196", "holder": {"type": "applicationRole"}, "permission": "EDIT_ALL_WORKLOGS"}, {"id": 14197, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14197", "holder": {"type": "applicationRole"}, "permission": "EDIT_OWN_WORKLOGS"}, {"id": 14198, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14198", "holder": {"type": "applicationRole"}, "permission": "WORK_ON_ISSUES"}, {"id": 14199, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14199", "holder": {"type": "applicationRole"}, "permission": "ASSIGN_ISSUES"}, {"id": 14405, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14405", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "SET_ISSUE_SECURITY"}, {"id": 14482, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14482", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_AGGREGATED_DATA"}, {"id": 14543, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14543", "holder": {"type": "applicationRole"}, "permission": "VIEW_AGGREGATED_DATA"}, {"id": 14712, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14712", "holder": {"type": "applicationRole"}, "permission": "VIEW_PROJECTS"}, {"id": 14713, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14713", "holder": {"type": "applicationRole"}, "permission": "VIEW_ISSUES"}, {"id": 14834, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14834", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_PROJECTS"}, {"id": 14835, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14835", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_ISSUES"}, {"id": 15118, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/15118", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "SERVICEDESK_AGENT"}]}, "emitted_at": 1697022806685} +{"stream": "permission_schemes", "data": {"expand": "permissions,user,group,projectRole,field,all", "id": 0, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0", "name": "Default Permission Scheme", "description": "This is the default Permission Scheme. Any new projects that are created will be assigned this scheme.", "permissions": [{"id": 10004, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10004", "holder": {"type": "projectRole", "parameter": "10002", "value": "10002", "expand": "projectRole"}, "permission": "ADMINISTER_PROJECTS"}, {"id": 10005, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10005", "holder": {"type": "applicationRole"}, "permission": "BROWSE_PROJECTS"}, {"id": 10006, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10006", "holder": {"type": "applicationRole"}, "permission": "CREATE_ISSUES"}, {"id": 10007, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10007", "holder": {"type": "applicationRole"}, "permission": "ADD_COMMENTS"}, {"id": 10008, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10008", "holder": {"type": "applicationRole"}, "permission": "CREATE_ATTACHMENTS"}, {"id": 10009, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10009", "holder": {"type": "applicationRole"}, "permission": "ASSIGN_ISSUES"}, {"id": 10010, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10010", "holder": {"type": "applicationRole"}, "permission": "ASSIGNABLE_USER"}, {"id": 10011, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10011", "holder": {"type": "applicationRole"}, "permission": "RESOLVE_ISSUES"}, {"id": 10012, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10012", "holder": {"type": "applicationRole"}, "permission": "LINK_ISSUES"}, {"id": 10013, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10013", "holder": {"type": "applicationRole"}, "permission": "EDIT_ISSUES"}, {"id": 10014, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10014", "holder": {"type": "projectRole", "parameter": "10002", "value": "10002", "expand": "projectRole"}, "permission": "DELETE_ISSUES"}, {"id": 10015, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10015", "holder": {"type": "applicationRole"}, "permission": "CLOSE_ISSUES"}, {"id": 10016, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10016", "holder": {"type": "applicationRole"}, "permission": "MOVE_ISSUES"}, {"id": 10017, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10017", "holder": {"type": "applicationRole"}, "permission": "SCHEDULE_ISSUES"}, {"id": 10018, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10018", "holder": {"type": "projectRole", "parameter": "10002", "value": "10002", "expand": "projectRole"}, "permission": "MODIFY_REPORTER"}, {"id": 10019, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10019", "holder": {"type": "applicationRole"}, "permission": "WORK_ON_ISSUES"}, {"id": 10020, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10020", "holder": {"type": "projectRole", "parameter": "10002", "value": "10002", "expand": "projectRole"}, "permission": "DELETE_ALL_WORKLOGS"}, {"id": 10021, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10021", "holder": {"type": "applicationRole"}, "permission": "DELETE_OWN_WORKLOGS"}, {"id": 10022, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10022", "holder": {"type": "projectRole", "parameter": "10002", "value": "10002", "expand": "projectRole"}, "permission": "EDIT_ALL_WORKLOGS"}, {"id": 10023, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10023", "holder": {"type": "applicationRole"}, "permission": "EDIT_OWN_WORKLOGS"}, {"id": 10024, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10024", "holder": {"type": "applicationRole"}, "permission": "VIEW_VOTERS_AND_WATCHERS"}, {"id": 10025, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10025", "holder": {"type": "projectRole", "parameter": "10002", "value": "10002", "expand": "projectRole"}, "permission": "MANAGE_WATCHERS"}, {"id": 10026, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10026", "holder": {"type": "projectRole", "parameter": "10002", "value": "10002", "expand": "projectRole"}, "permission": "EDIT_ALL_COMMENTS"}, {"id": 10027, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10027", "holder": {"type": "applicationRole"}, "permission": "EDIT_OWN_COMMENTS"}, {"id": 10028, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10028", "holder": {"type": "projectRole", "parameter": "10002", "value": "10002", "expand": "projectRole"}, "permission": "DELETE_ALL_COMMENTS"}, {"id": 10029, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10029", "holder": {"type": "applicationRole"}, "permission": "DELETE_OWN_COMMENTS"}, {"id": 10030, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10030", "holder": {"type": "projectRole", "parameter": "10002", "value": "10002", "expand": "projectRole"}, "permission": "DELETE_ALL_ATTACHMENTS"}, {"id": 10031, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10031", "holder": {"type": "applicationRole"}, "permission": "DELETE_OWN_ATTACHMENTS"}, {"id": 10033, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10033", "holder": {"type": "applicationRole"}, "permission": "VIEW_DEV_TOOLS"}, {"id": 10200, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10200", "holder": {"type": "applicationRole"}, "permission": "VIEW_READONLY_WORKFLOW"}, {"id": 10300, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10300", "holder": {"type": "applicationRole"}, "permission": "TRANSITION_ISSUES"}, {"id": 10301, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10301", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ADD_COMMENTS"}, {"id": 10302, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10302", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ADMINISTER_PROJECTS"}, {"id": 10303, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10303", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ASSIGNABLE_USER"}, {"id": 10304, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10304", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ASSIGN_ISSUES"}, {"id": 10305, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10305", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "BROWSE_PROJECTS"}, {"id": 10306, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10306", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "CLOSE_ISSUES"}, {"id": 10307, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10307", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "CREATE_ATTACHMENTS"}, {"id": 10308, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10308", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "CREATE_ISSUES"}, {"id": 10309, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10309", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ALL_ATTACHMENTS"}, {"id": 10310, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10310", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ALL_COMMENTS"}, {"id": 10311, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10311", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ALL_WORKLOGS"}, {"id": 10312, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10312", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ISSUES"}, {"id": 10313, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10313", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_OWN_ATTACHMENTS"}, {"id": 10314, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10314", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_OWN_COMMENTS"}, {"id": 10315, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10315", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_OWN_WORKLOGS"}, {"id": 10316, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10316", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_ALL_COMMENTS"}, {"id": 10317, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10317", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_ALL_WORKLOGS"}, {"id": 10318, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10318", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_ISSUES"}, {"id": 10319, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10319", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_OWN_COMMENTS"}, {"id": 10320, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10320", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_OWN_WORKLOGS"}, {"id": 10321, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10321", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "LINK_ISSUES"}, {"id": 10322, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10322", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MANAGE_SPRINTS_PERMISSION"}, {"id": 10323, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10323", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MANAGE_WATCHERS"}, {"id": 10324, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10324", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MODIFY_REPORTER"}, {"id": 10325, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10325", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MOVE_ISSUES"}, {"id": 10326, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10326", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "RESOLVE_ISSUES"}, {"id": 10327, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10327", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "SCHEDULE_ISSUES"}, {"id": 10328, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10328", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "SET_ISSUE_SECURITY"}, {"id": 10329, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10329", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "TRANSITION_ISSUES"}, {"id": 10330, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10330", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_DEV_TOOLS"}, {"id": 10331, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10331", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_READONLY_WORKFLOW"}, {"id": 10332, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10332", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_VOTERS_AND_WATCHERS"}, {"id": 10333, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10333", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "WORK_ON_ISSUES"}, {"id": 10464, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10464", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__log-work-for-others"}, {"id": 10465, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10465", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__set-billable-hours"}, {"id": 10466, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10466", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__view-all-worklogs"}, {"id": 10467, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10467", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__view-issue-hours"}, {"id": 14538, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/14538", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_AGGREGATED_DATA"}, {"id": 14599, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/14599", "holder": {"type": "applicationRole"}, "permission": "VIEW_AGGREGATED_DATA"}, {"id": 14600, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/14600", "holder": {"type": "applicationRole"}, "permission": "VIEW_PROJECTS"}, {"id": 14601, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/14601", "holder": {"type": "applicationRole"}, "permission": "VIEW_ISSUES"}, {"id": 14722, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/14722", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_PROJECTS"}, {"id": 14723, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/14723", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_ISSUES"}, {"id": 15119, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/15119", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "SERVICEDESK_AGENT"}]}, "emitted_at": 1697022806692} +{"stream": "projects", "data": {"expand": "description,lead,issueTypes,url,projectKeys,permissions,insight", "self": "https://airbyteio.atlassian.net/rest/api/3/project/10000", "id": "10000", "key": "IT", "description": "Test", "lead": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "accountType": "atlassian", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "name": "integration-tests", "avatarUrls": {"48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=medium"}, "projectCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/projectCategory/10004", "id": "10004", "name": "Test category 2", "description": "Test Project Category 2"}, "projectTypeKey": "software", "simplified": false, "style": "classic", "isPrivate": false, "properties": {}}, "emitted_at": 1697022807020} +{"stream": "projects", "data": {"expand": "description,lead,issueTypes,url,projectKeys,permissions,insight", "self": "https://airbyteio.atlassian.net/rest/api/3/project/10016", "id": "10016", "key": "TESTKEY13", "description": "Test project 13 description", "lead": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "accountType": "atlassian", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "name": "Test project 13", "avatarUrls": {"48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10425", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10425?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10425?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10425?size=medium"}, "projectCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/projectCategory/10000", "id": "10000", "name": "Category 1", "description": "Category 1"}, "projectTypeKey": "software", "simplified": false, "style": "classic", "isPrivate": false, "properties": {}}, "emitted_at": 1697022807021} +{"stream": "projects", "data": {"expand": "description,lead,issueTypes,url,projectKeys,permissions,insight", "self": "https://airbyteio.atlassian.net/rest/api/3/project/10064", "id": "10064", "key": "TTMP2", "description": "", "lead": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "accountType": "atlassian", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "name": "Test Team Managed Project 2", "avatarUrls": {"48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10412", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10412?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10412?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10412?size=medium"}, "projectCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/projectCategory/10000", "id": "10000", "name": "Category 1", "description": "Category 1"}, "projectTypeKey": "software", "simplified": true, "style": "next-gen", "isPrivate": false, "properties": {}, "entityId": "6fc48839-dfa5-487d-ad8f-8b540f1748d7", "uuid": "6fc48839-dfa5-487d-ad8f-8b540f1748d7"}, "emitted_at": 1697022807024} +{"stream": "project_roles", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/role/10032", "name": "Administrator", "id": 10032, "description": "Admins can do most things, like update settings and add other admins.", "scope": {"type": "PROJECT", "project": {"id": "10064"}}}, "emitted_at": 1697022808065} +{"stream": "project_roles", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/role/10035", "name": "atlassian-addons-project-access", "id": 10035, "description": "A project role that represents Connect add-ons declaring a scope that requires more than read issue permissions", "scope": {"type": "PROJECT", "project": {"id": "10064"}}}, "emitted_at": 1697022808066} +{"stream": "project_roles", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/role/10033", "name": "Member", "id": 10033, "description": "Members are part of the team, and can add, edit, and collaborate on all work.", "scope": {"type": "PROJECT", "project": {"id": "10064"}}}, "emitted_at": 1697022808066} +{"stream": "project_avatars", "data": {"id": "10400", "isSystemAvatar": true, "isSelected": false, "isDeletable": false, "urls": {"16x16": "/secure/viewavatar?size=xsmall&avatarId=10400&avatarType=project", "24x24": "/secure/viewavatar?size=small&avatarId=10400&avatarType=project", "32x32": "/secure/viewavatar?size=medium&avatarId=10400&avatarType=project", "48x48": "/secure/viewavatar?avatarId=10400&avatarType=project"}, "projectId": "IT"}, "emitted_at": 1697022808835} +{"stream": "project_avatars", "data": {"id": "10401", "isSystemAvatar": true, "isSelected": false, "isDeletable": false, "urls": {"16x16": "/secure/viewavatar?size=xsmall&avatarId=10401&avatarType=project", "24x24": "/secure/viewavatar?size=small&avatarId=10401&avatarType=project", "32x32": "/secure/viewavatar?size=medium&avatarId=10401&avatarType=project", "48x48": "/secure/viewavatar?avatarId=10401&avatarType=project"}, "projectId": "IT"}, "emitted_at": 1697022808836} +{"stream": "project_avatars", "data": {"id": "10402", "isSystemAvatar": true, "isSelected": false, "isDeletable": false, "urls": {"16x16": "/secure/viewavatar?size=xsmall&avatarId=10402&avatarType=project", "24x24": "/secure/viewavatar?size=small&avatarId=10402&avatarType=project", "32x32": "/secure/viewavatar?size=medium&avatarId=10402&avatarType=project", "48x48": "/secure/viewavatar?avatarId=10402&avatarType=project"}, "projectId": "IT"}, "emitted_at": 1697022808836} +{"stream": "project_categories", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/projectCategory/10000", "id": "10000", "description": "Category 1", "name": "Category 1"}, "emitted_at": 1697022810214} +{"stream": "project_categories", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/projectCategory/10001", "id": "10001", "description": "Category 2", "name": "Category 2"}, "emitted_at": 1697022810215} +{"stream": "project_categories", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/projectCategory/10002", "id": "10002", "description": "Test Project Category 0", "name": "Test category 0"}, "emitted_at": 1697022810216} +{"stream": "project_components", "data": {"componentBean": {"self": "https://airbyteio.atlassian.net/rest/api/3/component/10047", "id": "10047", "name": "Component 0", "description": "This is a Jira component", "lead": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "assigneeType": "PROJECT_LEAD", "assignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "realAssigneeType": "PROJECT_LEAD", "realAssignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "isAssigneeTypeValid": true, "project": "IT", "projectId": 10000}, "issueCount": 0, "realAssignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "isAssigneeTypeValid": true, "realAssigneeType": "PROJECT_LEAD", "self": "https://airbyteio.atlassian.net/rest/api/3/component/10047", "description": "This is a Jira component", "projectId": 10000, "project": "IT", "assignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "assigneeType": "PROJECT_LEAD", "lead": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "name": "Component 0", "id": "10047"}, "emitted_at": 1697022810918} +{"stream": "project_components", "data": {"componentBean": {"self": "https://airbyteio.atlassian.net/rest/api/3/component/10000", "id": "10000", "name": "Component 1", "description": "Component 1", "lead": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "assigneeType": "PROJECT_DEFAULT", "assignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "realAssigneeType": "PROJECT_DEFAULT", "realAssignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "isAssigneeTypeValid": true, "project": "IT", "projectId": 10000}, "issueCount": 0, "realAssignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "isAssigneeTypeValid": true, "realAssigneeType": "PROJECT_DEFAULT", "self": "https://airbyteio.atlassian.net/rest/api/3/component/10000", "description": "Component 1", "projectId": 10000, "project": "IT", "assignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "assigneeType": "PROJECT_DEFAULT", "lead": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "name": "Component 1", "id": "10000"}, "emitted_at": 1697022810920} +{"stream": "project_components", "data": {"componentBean": {"self": "https://airbyteio.atlassian.net/rest/api/3/component/10048", "id": "10048", "name": "Component 2", "description": "This is a Jira component", "lead": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "assigneeType": "PROJECT_LEAD", "assignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "realAssigneeType": "PROJECT_LEAD", "realAssignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "isAssigneeTypeValid": true, "project": "IT", "projectId": 10000}, "issueCount": 0, "realAssignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "isAssigneeTypeValid": true, "realAssigneeType": "PROJECT_LEAD", "self": "https://airbyteio.atlassian.net/rest/api/3/component/10048", "description": "This is a Jira component", "projectId": 10000, "project": "IT", "assignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "assigneeType": "PROJECT_LEAD", "lead": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "name": "Component 2", "id": "10048"}, "emitted_at": 1697022810920} +{"stream": "project_email", "data": {"emailAddress": "jira@airbyteio.atlassian.net", "projectId": "10000"}, "emitted_at": 1697022812217} +{"stream": "project_email", "data": {"emailAddress": "jira@airbyteio.atlassian.net", "projectId": "10016"}, "emitted_at": 1697022812499} +{"stream": "project_email", "data": {"emailAddress": "jira@airbyteio.atlassian.net", "projectId": "10064"}, "emitted_at": 1697022812794} +{"stream": "project_types", "data": {"key": "product_discovery", "formattedKey": "Product Discovery", "descriptionI18nKey": "jira.project.type.polaris.description", "icon": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE4LjEuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgdmlld0JveD0iMCAwIDMwMCAzMDAiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMwMCAzMDA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnIGlkPSJMYXllcl8yIj4NCgk8cGF0aCBzdHlsZT0iZmlsbDojRjc5MjMyOyIgZD0iTTE1MCwwQzY2LjY2NywwLDAsNjYuNjY3LDAsMTUwczY2LjY2NywxNTAsMTUwLDE1MHMxNTAtNjYuNjY3LDE1MC0xNTBTMjMzLjMzMywwLDE1MCwweg0KCQkgTTEzNi42NjcsMTc4LjMzM0wxMjUsMTkwbC00MS42NjctNDBMOTUsMTM4LjMzM2wzMC0zMEwxMzYuNjY3LDEyMGwtMzAsMzBMMTM2LjY2NywxNzguMzMzeiBNMjA1LDE2MS42NjdsLTMwLDMwTDE2My4zMzMsMTgwDQoJCWwzMC0zMGwtMzAtMzBMMTc1LDEwOC4zMzNMMjE2LjY2NywxNTBMMjA1LDE2MS42Njd6Ii8+DQo8L2c+DQo8Zz4NCgk8cG9seWdvbiBzdHlsZT0iZmlsbDojRkZGRkZGOyIgcG9pbnRzPSIxNzUsMTkxLjY2NyAyMDUsMTYxLjY2NyAyMTYuNjY3LDE1MCAxNzUsMTA4LjMzMyAxNjMuMzMzLDEyMCAxOTMuMzMzLDE1MCAxNjMuMzMzLDE4MCAJIi8+DQoJPHBvbHlnb24gc3R5bGU9ImZpbGw6I0ZGRkZGRjsiIHBvaW50cz0iMTI1LDEwOC4zMzMgOTUsMTM4LjMzMyA4My4zMzMsMTUwIDEyNSwxOTAgMTM2LjY2NywxNzguMzMzIDEwNi42NjcsMTUwIDEzNi42NjcsMTIwIAkiLz4NCjwvZz4NCjwvc3ZnPg0K", "color": "#F5A623"}, "emitted_at": 1697022815375} +{"stream": "project_types", "data": {"key": "software", "formattedKey": "Software", "descriptionI18nKey": "jira.project.type.software.description", "icon": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE4LjEuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgdmlld0JveD0iMCAwIDMwMCAzMDAiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMwMCAzMDA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnIGlkPSJMYXllcl8yIj4NCgk8cGF0aCBzdHlsZT0iZmlsbDojRjc5MjMyOyIgZD0iTTE1MCwwQzY2LjY2NywwLDAsNjYuNjY3LDAsMTUwczY2LjY2NywxNTAsMTUwLDE1MHMxNTAtNjYuNjY3LDE1MC0xNTBTMjMzLjMzMywwLDE1MCwweg0KCQkgTTEzNi42NjcsMTc4LjMzM0wxMjUsMTkwbC00MS42NjctNDBMOTUsMTM4LjMzM2wzMC0zMEwxMzYuNjY3LDEyMGwtMzAsMzBMMTM2LjY2NywxNzguMzMzeiBNMjA1LDE2MS42NjdsLTMwLDMwTDE2My4zMzMsMTgwDQoJCWwzMC0zMGwtMzAtMzBMMTc1LDEwOC4zMzNMMjE2LjY2NywxNTBMMjA1LDE2MS42Njd6Ii8+DQo8L2c+DQo8Zz4NCgk8cG9seWdvbiBzdHlsZT0iZmlsbDojRkZGRkZGOyIgcG9pbnRzPSIxNzUsMTkxLjY2NyAyMDUsMTYxLjY2NyAyMTYuNjY3LDE1MCAxNzUsMTA4LjMzMyAxNjMuMzMzLDEyMCAxOTMuMzMzLDE1MCAxNjMuMzMzLDE4MCAJIi8+DQoJPHBvbHlnb24gc3R5bGU9ImZpbGw6I0ZGRkZGRjsiIHBvaW50cz0iMTI1LDEwOC4zMzMgOTUsMTM4LjMzMyA4My4zMzMsMTUwIDEyNSwxOTAgMTM2LjY2NywxNzguMzMzIDEwNi42NjcsMTUwIDEzNi42NjcsMTIwIAkiLz4NCjwvZz4NCjwvc3ZnPg0K", "color": "#F5A623"}, "emitted_at": 1697022815376} +{"stream": "project_types", "data": {"key": "service_desk", "formattedKey": "Service Desk", "descriptionI18nKey": "jira.project.type.servicedesk.description.jsm", "icon": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE4LjEuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgdmlld0JveD0iMCAwIDMwMCAzMDAiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMwMCAzMDA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnIGlkPSJMYXllcl8yIj4NCgk8Zz4NCgkJPHJlY3QgeD0iMTAwIiB5PSIxMDAiIHN0eWxlPSJmaWxsOiM2N0FCNDk7IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjY2LjY2NyIvPg0KCQk8cGF0aCBzdHlsZT0iZmlsbDojNjdBQjQ5OyIgZD0iTTE1MCwwQzY2LjY2NywwLDAsNjYuNjY3LDAsMTUwczY2LjY2NywxNTAsMTUwLDE1MHMxNTAtNjYuNjY3LDE1MC0xNTBTMjMzLjMzMywwLDE1MCwweg0KCQkJIE0yMTYuNjY3LDEwMHY2Ni42Njd2MTYuNjY3aC01MFYyMDBIMjAwdjE2LjY2N0gxMDBWMjAwaDMzLjMzM3YtMTYuNjY3aC01MHYtMTYuNjY3VjEwMFY4My4zMzNoMTMzLjMzM1YxMDB6Ii8+DQoJPC9nPg0KPC9nPg0KPHBhdGggc3R5bGU9ImZpbGw6I0ZGRkZGRjsiIGQ9Ik0yMTYuNjY3LDE4My4zMzN2LTE2LjY2N1YxMDBWODMuMzMzSDgzLjMzM1YxMDB2NjYuNjY3djE2LjY2N2g1MFYyMDBIMTAwdjE2LjY2N2gxMDBWMjAwaC0zMy4zMzMNCgl2LTE2LjY2N0gyMTYuNjY3eiBNMTAwLDE2Ni42NjdWMTAwaDEwMHY2Ni42NjdIMTAweiIvPg0KPC9zdmc+DQo=", "color": "#67AB49"}, "emitted_at": 1697022815376} +{"stream": "project_versions", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/version/10000", "id": "10000", "description": "Version 1", "name": "Version 1", "archived": false, "released": false, "startDate": "2021-02-18", "releaseDate": "2021-02-25", "overdue": true, "userStartDate": "17/Feb/21", "userReleaseDate": "24/Feb/21", "projectId": 10000}, "emitted_at": 1697022816048} +{"stream": "project_versions", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/version/10040", "id": "10040", "description": "An excellent version", "name": "New Version 0", "archived": false, "released": true, "releaseDate": "2010-07-06", "userReleaseDate": "05/Jul/10", "projectId": 10000}, "emitted_at": 1697022816049} +{"stream": "project_versions", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/version/10041", "id": "10041", "description": "An excellent version", "name": "New Version 1", "archived": false, "released": true, "releaseDate": "2010-07-06", "userReleaseDate": "05/Jul/10", "projectId": 10000}, "emitted_at": 1697022816049} +{"stream": "screens", "data": {"id": 1, "name": "Default Screen", "description": "Allows to update all system fields."}, "emitted_at": 1697022817058} +{"stream": "screens", "data": {"id": 2, "name": "Workflow Screen", "description": "This screen is used in the workflow and enables you to assign issues"}, "emitted_at": 1697022817059} +{"stream": "screens", "data": {"id": 3, "name": "Resolve Issue Screen", "description": "Allows to set resolution, change fix versions and assign an issue."}, "emitted_at": 1697022817060} +{"stream": "screen_tabs", "data": {"id": 10000, "name": "Field Tab", "screenId": 1}, "emitted_at": 1697022818497} +{"stream": "screen_tabs", "data": {"id": 10148, "name": "Tab1", "screenId": 1}, "emitted_at": 1697022818498} +{"stream": "screen_tabs", "data": {"id": 10149, "name": "Tab2", "screenId": 1}, "emitted_at": 1697022818498} +{"stream": "screen_tab_fields", "data": {"id": "summary", "name": "Summary", "screenId": 1, "tabId": 10000}, "emitted_at": 1697022864970} +{"stream": "screen_tab_fields", "data": {"id": "issuetype", "name": "Issue Type", "screenId": 1, "tabId": 10000}, "emitted_at": 1697022864971} +{"stream": "screen_tab_fields", "data": {"id": "security", "name": "Security Level", "screenId": 1, "tabId": 10000}, "emitted_at": 1697022864971} +{"stream": "screen_schemes", "data": {"id": 1, "name": "Default Screen Scheme", "description": "Default Screen Scheme", "screens": {"default": 1}}, "emitted_at": 1697022917056} +{"stream": "screen_schemes", "data": {"id": 10000, "name": "IT: Scrum Default Screen Scheme", "description": "", "screens": {"default": 10000}}, "emitted_at": 1697022917057} +{"stream": "screen_schemes", "data": {"id": 10001, "name": "IT: Scrum Bug Screen Scheme", "description": "", "screens": {"default": 10001}}, "emitted_at": 1697022917058} +{"stream": "sprints", "data": {"id": 2, "self": "https://airbyteio.atlassian.net/rest/agile/1.0/sprint/2", "state": "active", "name": "IT Sprint 1", "startDate": "2022-05-17T11:25:59.072000+00:00", "endDate": "2022-05-31T11:25:00+00:00", "createdDate": "2022-05-17T11:24:12.933000+00:00", "originBoardId": 1, "goal": "Deliver results", "boardId": 1}, "emitted_at": 1697022918347} +{"stream": "sprints", "data": {"id": 3, "self": "https://airbyteio.atlassian.net/rest/agile/1.0/sprint/3", "state": "future", "name": "IT Sprint 2", "startDate": "2022-05-31T11:25:59.072000+00:00", "endDate": "2022-06-14T11:25:00+00:00", "createdDate": "2023-04-05T11:57:09.557000+00:00", "originBoardId": 1, "boardId": 1}, "emitted_at": 1697022918348} +{"stream": "sprints", "data": {"id": 4, "self": "https://airbyteio.atlassian.net/rest/agile/1.0/sprint/4", "state": "future", "name": "IT Sprint 3", "startDate": "2022-06-14T11:25:59.072000+00:00", "endDate": "2022-06-28T11:25:00+00:00", "createdDate": "2023-04-05T11:57:30.379000+00:00", "originBoardId": 1, "boardId": 1}, "emitted_at": 1697022918349} +{"stream": "sprint_issues", "data": {"expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields", "id": "2-10012", "self": "https://airbyteio.atlassian.net/rest/agile/1.0/issue/10012", "key": "IT-6", "fields": {"customfield_10016": null, "updated": "2022-05-17T04:26:21.613000-07:00", "created": "2021-03-11T06:14:18.085-0800", "status": {"self": "https://airbyteio.atlassian.net/rest/api/2/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/2/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}}, "issueId": "10012", "sprintId": 2, "created": "2021-03-11T06:14:18.085000-08:00", "updated": "2022-05-17T04:26:21.613000-07:00"}, "emitted_at": 1697022920402} +{"stream": "sprint_issues", "data": {"expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields", "id": "2-10019", "self": "https://airbyteio.atlassian.net/rest/agile/1.0/issue/10019", "key": "IT-9", "fields": {"customfield_10016": null, "updated": "2023-04-05T04:57:18.118000-07:00", "created": "2021-03-11T06:14:24.791-0800", "status": {"self": "https://airbyteio.atlassian.net/rest/api/2/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/2/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}}, "issueId": "10019", "sprintId": 2, "created": "2021-03-11T06:14:24.791000-08:00", "updated": "2023-04-05T04:57:18.118000-07:00"}, "emitted_at": 1697022920404} +{"stream": "sprint_issues", "data": {"expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields", "id": "2-10000", "self": "https://airbyteio.atlassian.net/rest/agile/1.0/issue/10000", "key": "IT-1", "fields": {"customfield_10016": null, "updated": "2022-05-17T04:26:28.885000-07:00", "created": "2020-12-07T06:12:17.863-0800", "status": {"self": "https://airbyteio.atlassian.net/rest/api/2/status/10001", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "Done", "id": "10001", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/2/statuscategory/3", "id": 3, "key": "done", "colorName": "green", "name": "Done"}}, "customfield_10026": null}, "issueId": "10000", "sprintId": 2, "created": "2020-12-07T06:12:17.863000-08:00", "updated": "2022-05-17T04:26:28.885000-07:00"}, "emitted_at": 1697022920404} +{"stream": "time_tracking", "data": {"key": "JIRA", "name": "JIRA provided time tracking"}, "emitted_at": 1697022927552} +{"stream": "time_tracking", "data": {"key": "is.origo.jira.tempo-plugin__timetracking-provider", "name": "Tempo Timesheets"}, "emitted_at": 1697022927553} +{"stream": "users", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "accountType": "atlassian", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "locale": "en_US"}, "emitted_at": 1697022928076} +{"stream": "users", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=557058:f58131cb-b67d-43c7-b30d-6b58d40bd077", "accountId": "557058:f58131cb-b67d-43c7-b30d-6b58d40bd077", "accountType": "app", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/600529a9c8bfef89daa848e6db28ed2d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FAJ-0.png", "24x24": "https://secure.gravatar.com/avatar/600529a9c8bfef89daa848e6db28ed2d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FAJ-0.png", "16x16": "https://secure.gravatar.com/avatar/600529a9c8bfef89daa848e6db28ed2d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FAJ-0.png", "32x32": "https://secure.gravatar.com/avatar/600529a9c8bfef89daa848e6db28ed2d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FAJ-0.png"}, "displayName": "Automation for Jira", "active": true}, "emitted_at": 1697022928077} +{"stream": "users", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5d53f3cbc6b9320d9ea5bdc2", "accountId": "5d53f3cbc6b9320d9ea5bdc2", "accountType": "app", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/40cff14f727dbf6d865576d575c6bdd2?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJO-4.png", "24x24": "https://secure.gravatar.com/avatar/40cff14f727dbf6d865576d575c6bdd2?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJO-4.png", "16x16": "https://secure.gravatar.com/avatar/40cff14f727dbf6d865576d575c6bdd2?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJO-4.png", "32x32": "https://secure.gravatar.com/avatar/40cff14f727dbf6d865576d575c6bdd2?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJO-4.png"}, "displayName": "Jira Outlook", "active": true}, "emitted_at": 1697022928078} +{"stream": "users_groups_detailed", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "accountType": "atlassian", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "locale": "en_US", "groups": {"size": 30, "items": [{"name": "administrators", "groupId": "0ca6e087-7a61-4986-a269-98fe268854a1", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=0ca6e087-7a61-4986-a269-98fe268854a1"}, {"name": "confluence-users", "groupId": "38d808e9-113f-45c4-817b-099e953b687a", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=38d808e9-113f-45c4-817b-099e953b687a"}, {"name": "integration-test-group", "groupId": "5f1ec851-f8da-4f90-ab42-8dc50a9f99d8", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=5f1ec851-f8da-4f90-ab42-8dc50a9f99d8"}, {"name": "jira-administrators", "groupId": "58582f33-a5a6-43b9-92a6-ff0bbacb49ae", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=58582f33-a5a6-43b9-92a6-ff0bbacb49ae"}, {"name": "jira-admins-airbyteio", "groupId": "2d55cbe0-4cab-46a4-853e-ec31162ab9a3", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=2d55cbe0-4cab-46a4-853e-ec31162ab9a3"}, {"name": "jira-servicemanagement-customers-airbyteio", "groupId": "125680d3-7e85-41ad-a662-892b6590272e", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=125680d3-7e85-41ad-a662-892b6590272e"}, {"name": "jira-servicemanagement-users-airbyteio", "groupId": "aab99a7c-3ce3-4123-b580-e4e00460754d", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=aab99a7c-3ce3-4123-b580-e4e00460754d"}, {"name": "jira-software-users", "groupId": "4452b254-035d-469a-a422-1f4666dce50e", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=4452b254-035d-469a-a422-1f4666dce50e"}, {"name": "jira-users", "groupId": "2513da2e-08cf-4415-9bcd-cbbd32fa227d", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=2513da2e-08cf-4415-9bcd-cbbd32fa227d"}, {"name": "site-admins", "groupId": "76dad095-fc1a-467a-88b4-fde534220985", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=76dad095-fc1a-467a-88b4-fde534220985"}, {"name": "Test group 0", "groupId": "ee8d15d1-6462-406a-b0a6-8065b7e4cdd7", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=ee8d15d1-6462-406a-b0a6-8065b7e4cdd7"}, {"name": "Test group 1", "groupId": "bda1faf1-1a1a-42d1-82e4-a428c8b8f67c", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=bda1faf1-1a1a-42d1-82e4-a428c8b8f67c"}, {"name": "Test group 10", "groupId": "e9f74708-e33c-4158-919d-6457f50c6e74", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=e9f74708-e33c-4158-919d-6457f50c6e74"}, {"name": "Test group 11", "groupId": "b0e6d76f-701a-4208-a88d-4478f242edde", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=b0e6d76f-701a-4208-a88d-4478f242edde"}, {"name": "Test group 12", "groupId": "dddc24a0-ef00-407e-abef-5a660b6f55cf", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=dddc24a0-ef00-407e-abef-5a660b6f55cf"}, {"name": "Test group 13", "groupId": "dbe4af74-8387-4b08-843b-86af78dd738e", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=dbe4af74-8387-4b08-843b-86af78dd738e"}, {"name": "Test group 14", "groupId": "d4570a20-38d8-44cc-a63b-0924d0d0d0ff", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=d4570a20-38d8-44cc-a63b-0924d0d0d0ff"}, {"name": "Test group 15", "groupId": "87bde5c0-7231-44a7-88b5-421da2ab8052", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=87bde5c0-7231-44a7-88b5-421da2ab8052"}, {"name": "Test group 16", "groupId": "538b6aa2-bf57-402f-93c0-c2e2d68b7155", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=538b6aa2-bf57-402f-93c0-c2e2d68b7155"}, {"name": "Test group 17", "groupId": "022bc924-ac57-442d-80c9-df042b73ad87", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=022bc924-ac57-442d-80c9-df042b73ad87"}, {"name": "Test group 18", "groupId": "bbfc6fc9-96db-4e66-88f4-c55b08298272", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=bbfc6fc9-96db-4e66-88f4-c55b08298272"}, {"name": "Test group 19", "groupId": "3c4fef5d-9721-4f20-9a68-346d222de3cf", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=3c4fef5d-9721-4f20-9a68-346d222de3cf"}, {"name": "Test group 2", "groupId": "5ddb26f1-2d31-414a-ac34-b2d6de38805d", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=5ddb26f1-2d31-414a-ac34-b2d6de38805d"}, {"name": "Test group 3", "groupId": "638aa1ad-8707-4d56-9361-f5959b6c4785", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=638aa1ad-8707-4d56-9361-f5959b6c4785"}, {"name": "Test group 4", "groupId": "532554e0-43be-4eca-9186-b417dcf38547", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=532554e0-43be-4eca-9186-b417dcf38547"}, {"name": "Test group 5", "groupId": "6b663734-85b6-4185-8fb2-9ac27709b3aa", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=6b663734-85b6-4185-8fb2-9ac27709b3aa"}, {"name": "Test group 6", "groupId": "2d4af5cf-cd34-4e78-9445-abc000cdd5cc", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=2d4af5cf-cd34-4e78-9445-abc000cdd5cc"}, {"name": "Test group 7", "groupId": "e8a97909-d807-4f79-8548-1f2c156ae6f0", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=e8a97909-d807-4f79-8548-1f2c156ae6f0"}, {"name": "Test group 8", "groupId": "3ee851e7-6688-495a-a6f6-737e85a23878", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=3ee851e7-6688-495a-a6f6-737e85a23878"}, {"name": "Test group 9", "groupId": "af27d0b1-4378-443f-9a6d-f878848b144a", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=af27d0b1-4378-443f-9a6d-f878848b144a"}]}, "applicationRoles": {"size": 2, "items": [{"key": "jira-servicedesk", "name": "Jira Service Desk"}, {"key": "jira-software", "name": "Jira Software"}]}, "expand": "groups,applicationRoles"}, "emitted_at": 1697022929502} +{"stream": "users_groups_detailed", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=557058:f58131cb-b67d-43c7-b30d-6b58d40bd077", "accountId": "557058:f58131cb-b67d-43c7-b30d-6b58d40bd077", "accountType": "app", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/600529a9c8bfef89daa848e6db28ed2d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FAJ-0.png", "24x24": "https://secure.gravatar.com/avatar/600529a9c8bfef89daa848e6db28ed2d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FAJ-0.png", "16x16": "https://secure.gravatar.com/avatar/600529a9c8bfef89daa848e6db28ed2d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FAJ-0.png", "32x32": "https://secure.gravatar.com/avatar/600529a9c8bfef89daa848e6db28ed2d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FAJ-0.png"}, "displayName": "Automation for Jira", "active": true, "timeZone": "America/Los_Angeles", "locale": "en_US", "groups": {"size": 3, "items": [{"name": "atlassian-addons-admin", "groupId": "90b9ffb1-ed26-4b5e-af59-8f684900ce83", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=90b9ffb1-ed26-4b5e-af59-8f684900ce83"}, {"name": "jira-servicemanagement-users-airbyteio", "groupId": "aab99a7c-3ce3-4123-b580-e4e00460754d", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=aab99a7c-3ce3-4123-b580-e4e00460754d"}, {"name": "jira-software-users", "groupId": "4452b254-035d-469a-a422-1f4666dce50e", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=4452b254-035d-469a-a422-1f4666dce50e"}]}, "applicationRoles": {"size": 2, "items": [{"key": "jira-servicedesk", "name": "Jira Service Desk"}, {"key": "jira-software", "name": "Jira Software"}]}, "expand": "groups,applicationRoles"}, "emitted_at": 1697022929804} +{"stream": "users_groups_detailed", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5d53f3cbc6b9320d9ea5bdc2", "accountId": "5d53f3cbc6b9320d9ea5bdc2", "accountType": "app", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/40cff14f727dbf6d865576d575c6bdd2?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJO-4.png", "24x24": "https://secure.gravatar.com/avatar/40cff14f727dbf6d865576d575c6bdd2?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJO-4.png", "16x16": "https://secure.gravatar.com/avatar/40cff14f727dbf6d865576d575c6bdd2?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJO-4.png", "32x32": "https://secure.gravatar.com/avatar/40cff14f727dbf6d865576d575c6bdd2?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJO-4.png"}, "displayName": "Jira Outlook", "active": true, "timeZone": "America/Los_Angeles", "locale": "en_US", "groups": {"size": 1, "items": [{"name": "jira-software-users", "groupId": "4452b254-035d-469a-a422-1f4666dce50e", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=4452b254-035d-469a-a422-1f4666dce50e"}]}, "applicationRoles": {"size": 2, "items": [{"key": "jira-servicedesk", "name": "Jira Service Desk"}, {"key": "jira-software", "name": "Jira Software"}]}, "expand": "groups,applicationRoles"}, "emitted_at": 1697022930214} +{"stream": "workflows", "data": {"id": {"name": "Builds Workflow", "entityId": "Builds Workflow"}, "description": "Builds Workflow", "created": "1969-12-31T16:00:00-08:00", "updated": "1969-12-31T16:00:00-08:00"}, "emitted_at": 1697022946909} +{"stream": "workflows", "data": {"id": {"name": "classic default workflow", "entityId": "385bb764-dfb6-89a7-2e43-a25bdd0cbaf4"}, "description": "The classic JIRA default workflow", "created": "2020-12-03T23:41:38.951000-08:00", "updated": "2023-06-30T02:33:48.808000-07:00"}, "emitted_at": 1697022946910} +{"stream": "workflows", "data": {"id": {"name": "jira", "entityId": "jira"}, "description": "The default Jira workflow.", "created": "1969-12-31T16:00:00-08:00", "updated": "1969-12-31T16:00:00-08:00"}, "emitted_at": 1697022946911} +{"stream": "workflow_schemes", "data": {"id": 10000, "name": "classic", "description": "classic", "defaultWorkflow": "classic default workflow", "issueTypeMappings": {}, "self": "https://airbyteio.atlassian.net/rest/api/3/workflowscheme/10000"}, "emitted_at": 1697022947966} +{"stream": "workflow_schemes", "data": {"id": 10001, "name": "IT: Software Simplified Workflow Scheme", "description": "Generated by JIRA Software version 1001.0.0-SNAPSHOT. This workflow scheme is managed internally by Jira Software. Do not manually modify this workflow scheme.", "defaultWorkflow": "Software Simplified Workflow for Project IT", "issueTypeMappings": {}, "self": "https://airbyteio.atlassian.net/rest/api/3/workflowscheme/10001"}, "emitted_at": 1697022947967} +{"stream": "workflow_schemes", "data": {"id": 10002, "name": "P2: Software Simplified Workflow Scheme", "description": "Generated by JIRA Software version 1001.0.0-SNAPSHOT. This workflow scheme is managed internally by Jira Software. Do not manually modify this workflow scheme.", "defaultWorkflow": "Software Simplified Workflow for Project P2", "issueTypeMappings": {}, "self": "https://airbyteio.atlassian.net/rest/api/3/workflowscheme/10002"}, "emitted_at": 1697022947967} +{"stream": "workflow_statuses", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/1", "description": "The issue is open and ready for the assignee to start work on it.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/statuses/open.png", "name": "Open", "untranslatedName": "Open", "id": "1", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "emitted_at": 1697022949161} +{"stream": "workflow_statuses", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/3", "description": "This issue is being actively worked on at the moment by the assignee.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/statuses/inprogress.png", "name": "In Progress", "untranslatedName": "In Progress", "id": "3", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/4", "id": 4, "key": "indeterminate", "colorName": "yellow", "name": "In Progress"}}, "emitted_at": 1697022949162} +{"stream": "workflow_statuses", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/4", "description": "This issue was once resolved, but the resolution was deemed incorrect. From here issues are either marked assigned or resolved.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/statuses/reopened.png", "name": "Reopened", "untranslatedName": "Reopened", "id": "4", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "emitted_at": 1697022949163} +{"stream": "workflow_status_categories", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/1", "id": 1, "key": "undefined", "colorName": "medium-gray", "name": "No Category"}, "emitted_at": 1697022949791} +{"stream": "workflow_status_categories", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}, "emitted_at": 1697022949793} +{"stream": "workflow_status_categories", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/4", "id": 4, "key": "indeterminate", "colorName": "yellow", "name": "In Progress"}, "emitted_at": 1697022949793} diff --git a/airbyte-integrations/connectors/source-linkedin-ads/Dockerfile b/airbyte-integrations/connectors/source-linkedin-ads/Dockerfile index 6790451bf0b1..375e02ed0447 100644 --- a/airbyte-integrations/connectors/source-linkedin-ads/Dockerfile +++ b/airbyte-integrations/connectors/source-linkedin-ads/Dockerfile @@ -33,5 +33,5 @@ COPY source_linkedin_ads ./source_linkedin_ads ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=0.6.1 +LABEL io.airbyte.version=0.6.2 LABEL io.airbyte.name=airbyte/source-linkedin-ads diff --git a/airbyte-integrations/connectors/source-linkedin-ads/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-linkedin-ads/integration_tests/expected_records.jsonl index 5602b6e35ba3..c10071c8546b 100644 --- a/airbyte-integrations/connectors/source-linkedin-ads/integration_tests/expected_records.jsonl +++ b/airbyte-integrations/connectors/source-linkedin-ads/integration_tests/expected_records.jsonl @@ -23,17 +23,17 @@ {"stream":"conversions","data":{"postClickAttributionWindowSize":30,"viewThroughAttributionWindowSize":7,"created":1629376903467,"imagePixelTag":"\"\"","type":"AD_VIEW","enabled":true,"associatedCampaigns":[{"associatedAt":1692167555159,"campaign":"urn:li:sponsoredCampaign:251861596","conversion":"urn:lla:llaPartnerConversion:4677476"},{"associatedAt":1629376986791,"campaign":"urn:li:sponsoredCampaign:168387646","conversion":"urn:lla:llaPartnerConversion:4677476"}],"campaigns":["urn:li:sponsoredCampaign:251861596","urn:li:sponsoredCampaign:168387646"],"name":"Test Conversion","urlMatchRuleExpression":[[{"matchValue":"www.aibyte.io","matchType":"STARTS_WITH"}]],"lastModified":1629380909048,"id":4677476,"attributionType":"LAST_TOUCH_BY_CAMPAIGN","urlRules":[],"value":{"currencyCode":"USD","amount":"0"},"account":"urn:li:sponsoredAccount:508720451"},"emitted_at":1695807152666} {"stream":"conversions","data":{"postClickAttributionWindowSize":1,"viewThroughAttributionWindowSize":1,"created":1629888666093,"imagePixelTag":"\"\"","type":"SIGN_UP","enabled":true,"associatedCampaigns":[{"associatedAt":1629888749778,"campaign":"urn:li:sponsoredCampaign:169185036","conversion":"urn:lla:llaPartnerConversion:4620028"}],"campaigns":["urn:li:sponsoredCampaign:169185036"],"name":"Test Conversion 3","urlMatchRuleExpression":[[{"matchValue":"https://airbyte.io","matchType":"STARTS_WITH"}]],"lastModified":1629888698401,"id":4620028,"attributionType":"LAST_TOUCH_BY_CAMPAIGN","urlRules":[],"value":{"currencyCode":"USD","amount":"15"},"account":"urn:li:sponsoredAccount:508774356"},"emitted_at":1695807153174} {"stream":"conversions","data":{"postClickAttributionWindowSize":1,"viewThroughAttributionWindowSize":1,"created":1629664605296,"imagePixelTag":"\"\"","type":"KEY_PAGE_VIEW","enabled":true,"associatedCampaigns":[{"associatedAt":1629664638873,"campaign":"urn:li:sponsoredCampaign:169037246","conversion":"urn:lla:llaPartnerConversion:4604364"}],"campaigns":["urn:li:sponsoredCampaign:169037246"],"name":"Test Conversion 2","urlMatchRuleExpression":[[{"matchValue":"https://airbyte.io","matchType":"STARTS_WITH"}]],"lastModified":1629664630274,"id":4604364,"attributionType":"LAST_TOUCH_BY_CAMPAIGN","urlRules":[],"value":{"currencyCode":"USD","amount":"15"},"account":"urn:li:sponsoredAccount:508777244"},"emitted_at":1695807153600} -{"stream":"ad_campaign_analytics","data":{"documentFirstQuartileCompletions":0.0,"actionClicks":0.0,"comments":0.0,"costInUsd":-2E-18,"commentLikes":0.0,"adUnitClicks":0.0,"companyPageClicks":0.0,"costInLocalCurrency":-2E-18,"conversionValueInLocalCurrency":0.0,"documentThirdQuartileCompletions":0.0,"externalWebsiteConversions":0.0,"cardImpressions":0.0,"documentCompletions":0.0,"clicks":0.0,"cardClicks":0.0,"approximateUniqueImpressions":0.0,"documentMidpointCompletions":0.0,"downloadClicks":0.0,"start_date":"2023-08-26","end_date":"2023-08-26","pivotValue":"urn:li:sponsoredCampaign:252074216","externalWebsitePostClickConversions":0.0,"externalWebsitePostViewConversions":0.0,"postClickJobApplyClicks":0.0,"oneClickLeads":0.0,"landingPageClicks":0.0,"fullScreenPlays":0.0,"follows":0.0,"oneClickLeadFormOpens":0.0,"impressions":1.0,"postClickJobApplications":0.0,"otherEngagements":0.0,"jobApplyClicks":0.0,"jobApplications":0.0,"leadGenerationMailContactInfoShares":0.0,"opens":0.0,"leadGenerationMailInterestedClicks":0.0,"pivotValues":["urn:li:sponsoredCampaign:252074216"],"likes":0.0,"postClickRegistrations":0.0},"emitted_at":1695807168614} -{"stream":"ad_campaign_analytics","data":{"documentFirstQuartileCompletions":0.0,"actionClicks":0.0,"comments":0.0,"costInUsd":100.0,"commentLikes":0.0,"adUnitClicks":0.0,"companyPageClicks":0.0,"costInLocalCurrency":100.0,"conversionValueInLocalCurrency":0.0,"documentThirdQuartileCompletions":0.0,"externalWebsiteConversions":0.0,"cardImpressions":0.0,"documentCompletions":0.0,"clicks":106.0,"cardClicks":0.0,"approximateUniqueImpressions":17392.0,"documentMidpointCompletions":0.0,"downloadClicks":0.0,"start_date":"2023-08-25","end_date":"2023-08-25","pivotValue":"urn:li:sponsoredCampaign:252074216","externalWebsitePostClickConversions":0.0,"externalWebsitePostViewConversions":0.0,"postClickJobApplyClicks":0.0,"oneClickLeads":0.0,"landingPageClicks":106.0,"fullScreenPlays":0.0,"follows":0.0,"oneClickLeadFormOpens":0.0,"impressions":19464.0,"postClickJobApplications":0.0,"otherEngagements":0.0,"jobApplyClicks":0.0,"jobApplications":0.0,"leadGenerationMailContactInfoShares":0.0,"opens":0.0,"leadGenerationMailInterestedClicks":0.0,"pivotValues":["urn:li:sponsoredCampaign:252074216"],"likes":0.0,"postClickRegistrations":0.0,"videoCompletions":0.0,"registrations":0.0,"talentLeads":0.0,"viralCardImpressions":0.0,"videoFirstQuartileCompletions":0.0,"textUrlClicks":0.0,"videoStarts":0.0,"postViewJobApplyClicks":0.0,"sends":0.0,"shares":0.0,"videoMidpointCompletions":0.0,"validWorkEmailLeads":0.0,"viralCardClicks":0.0,"postViewRegistrations":0.0,"videoThirdQuartileCompletions":0.0,"totalEngagements":106.0,"reactions":0.0,"postViewJobApplications":0.0,"videoViews":0.0},"emitted_at":1695807168622} -{"stream":"ad_creative_analytics","data":{"documentFirstQuartileCompletions":0.0,"actionClicks":0.0,"comments":0.0,"costInUsd":-2E-18,"commentLikes":0.0,"adUnitClicks":0.0,"companyPageClicks":0.0,"costInLocalCurrency":-2E-18,"conversionValueInLocalCurrency":0.0,"documentThirdQuartileCompletions":0.0,"externalWebsiteConversions":0.0,"cardImpressions":0.0,"documentCompletions":0.0,"clicks":0.0,"cardClicks":0.0,"approximateUniqueImpressions":0.0,"documentMidpointCompletions":0.0,"downloadClicks":0.0,"start_date":"2023-08-26","end_date":"2023-08-26","pivotValue":"urn:li:sponsoredCreative:287513206","externalWebsitePostClickConversions":0.0,"externalWebsitePostViewConversions":0.0,"postClickJobApplyClicks":0.0,"oneClickLeads":0.0,"landingPageClicks":0.0,"fullScreenPlays":0.0,"follows":0.0,"oneClickLeadFormOpens":0.0,"impressions":1.0,"postClickJobApplications":0.0,"otherEngagements":0.0,"jobApplyClicks":0.0,"jobApplications":0.0,"leadGenerationMailContactInfoShares":0.0,"opens":0.0,"leadGenerationMailInterestedClicks":0.0,"pivotValues":["urn:li:sponsoredCreative:287513206"],"likes":0.0,"postClickRegistrations":0.0},"emitted_at":1695807190456} -{"stream":"ad_creative_analytics","data":{"documentFirstQuartileCompletions":0.0,"actionClicks":0.0,"comments":0.0,"costInUsd":100.0,"commentLikes":0.0,"adUnitClicks":0.0,"companyPageClicks":0.0,"costInLocalCurrency":100.0,"conversionValueInLocalCurrency":0.0,"documentThirdQuartileCompletions":0.0,"externalWebsiteConversions":0.0,"cardImpressions":0.0,"documentCompletions":0.0,"clicks":106.0,"cardClicks":0.0,"approximateUniqueImpressions":17392.0,"documentMidpointCompletions":0.0,"downloadClicks":0.0,"start_date":"2023-08-25","end_date":"2023-08-25","pivotValue":"urn:li:sponsoredCreative:287513206","externalWebsitePostClickConversions":0.0,"externalWebsitePostViewConversions":0.0,"postClickJobApplyClicks":0.0,"oneClickLeads":0.0,"landingPageClicks":106.0,"fullScreenPlays":0.0,"follows":0.0,"oneClickLeadFormOpens":0.0,"impressions":19464.0,"postClickJobApplications":0.0,"otherEngagements":0.0,"jobApplyClicks":0.0,"jobApplications":0.0,"leadGenerationMailContactInfoShares":0.0,"opens":0.0,"leadGenerationMailInterestedClicks":0.0,"pivotValues":["urn:li:sponsoredCreative:287513206"],"likes":0.0,"postClickRegistrations":0.0,"videoCompletions":0.0,"registrations":0.0,"talentLeads":0.0,"viralCardImpressions":0.0,"videoFirstQuartileCompletions":0.0,"textUrlClicks":0.0,"videoStarts":0.0,"postViewJobApplyClicks":0.0,"sends":0.0,"shares":0.0,"videoMidpointCompletions":0.0,"validWorkEmailLeads":0.0,"viralCardClicks":0.0,"postViewRegistrations":0.0,"videoThirdQuartileCompletions":0.0,"totalEngagements":106.0,"reactions":0.0,"postViewJobApplications":0.0,"videoViews":0.0},"emitted_at":1695807190465} -{"stream":"ad_impression_device_analytics","data":{"documentFirstQuartileCompletions":0.0,"actionClicks":0.0,"comments":0.0,"costInUsd":60.06999999999999,"commentLikes":0.0,"adUnitClicks":0.0,"companyPageClicks":0.0,"costInLocalCurrency":60.06999999999999,"documentThirdQuartileCompletions":0.0,"externalWebsiteConversions":0.0,"cardImpressions":0.0,"documentCompletions":0.0,"clicks":54.0,"cardClicks":0.0,"documentMidpointCompletions":0.0,"downloadClicks":0.0,"start_date":"2023-08-25","end_date":"2023-08-25","pivotValue":"urn:li:sponsoredCampaign:252074216","oneClickLeads":0.0,"landingPageClicks":54.0,"fullScreenPlays":0.0,"oneClickLeadFormOpens":0.0,"follows":0.0,"impressions":11707.0,"otherEngagements":0.0,"leadGenerationMailContactInfoShares":0.0,"opens":0.0,"leadGenerationMailInterestedClicks":0.0,"pivotValues":["MOBILE_APP"],"likes":0.0,"videoCompletions":0.0,"viralCardImpressions":0.0,"videoFirstQuartileCompletions":0.0,"textUrlClicks":0.0,"videoStarts":0.0,"sends":0.0,"shares":0.0,"videoMidpointCompletions":0.0,"validWorkEmailLeads":0.0,"viralCardClicks":0.0,"videoThirdQuartileCompletions":0.0,"totalEngagements":54.0,"reactions":0.0,"videoViews":0.0},"emitted_at":1695807212931} -{"stream":"ad_impression_device_analytics","data":{"documentFirstQuartileCompletions":0.0,"actionClicks":0.0,"comments":0.0,"costInUsd":-2E-18,"commentLikes":0.0,"adUnitClicks":0.0,"companyPageClicks":0.0,"costInLocalCurrency":-2E-18,"documentThirdQuartileCompletions":0.0,"externalWebsiteConversions":0.0,"cardImpressions":0.0,"documentCompletions":0.0,"clicks":0.0,"cardClicks":0.0,"documentMidpointCompletions":0.0,"downloadClicks":0.0,"start_date":"2023-08-26","end_date":"2023-08-26","pivotValue":"urn:li:sponsoredCampaign:252074216","oneClickLeads":0.0,"landingPageClicks":0.0,"fullScreenPlays":0.0,"oneClickLeadFormOpens":0.0,"follows":0.0,"impressions":1.0,"otherEngagements":0.0,"leadGenerationMailContactInfoShares":0.0,"opens":0.0,"leadGenerationMailInterestedClicks":0.0,"pivotValues":["MOBILE_WEB"],"likes":0.0},"emitted_at":1695807212934} -{"stream":"ad_member_company_size_analytics","data":{"documentFirstQuartileCompletions":0.0,"actionClicks":0.0,"comments":0.0,"costInUsd":25.746165902452592,"commentLikes":0.0,"adUnitClicks":0.0,"companyPageClicks":0.0,"costInLocalCurrency":23.746165902452592,"documentThirdQuartileCompletions":0.0,"externalWebsiteConversions":0.0,"documentCompletions":0.0,"clicks":5.0,"documentMidpointCompletions":0.0,"downloadClicks":0.0,"start_date":"2023-08-25","end_date":"2023-08-25","pivotValue":"urn:li:sponsoredCampaign:252074216","externalWebsitePostClickConversions":0.0,"externalWebsitePostViewConversions":0.0,"oneClickLeads":0.0,"landingPageClicks":5.0,"fullScreenPlays":0.0,"follows":0.0,"oneClickLeadFormOpens":0.0,"impressions":1452.0,"otherEngagements":0.0,"leadGenerationMailContactInfoShares":0.0,"opens":0.0,"leadGenerationMailInterestedClicks":0.0,"pivotValues":["SIZE_51_TO_200"],"likes":0.0,"videoCompletions":0.0,"talentLeads":0.0,"videoFirstQuartileCompletions":0.0,"textUrlClicks":0.0,"videoStarts":0.0,"sends":0.0,"shares":0.0,"videoMidpointCompletions":0.0,"validWorkEmailLeads":0.0,"videoThirdQuartileCompletions":0.0,"totalEngagements":3.0,"reactions":0.0,"videoViews":0.0},"emitted_at":1695807234245} -{"stream":"ad_member_country_analytics","data":{"documentFirstQuartileCompletions":0.0,"actionClicks":0.0,"comments":0.0,"costInUsd":317.93414846943944,"commentLikes":0.0,"adUnitClicks":0.0,"companyPageClicks":0.0,"costInLocalCurrency":318.93414846943944,"documentThirdQuartileCompletions":0.0,"externalWebsiteConversions":0.0,"documentCompletions":0.0,"clicks":110.0,"documentMidpointCompletions":0.0,"downloadClicks":0.0,"start_date":"2023-08-25","end_date":"2023-08-25","pivotValue":"urn:li:sponsoredCampaign:252074216","externalWebsitePostClickConversions":0.0,"externalWebsitePostViewConversions":0.0,"oneClickLeads":0.0,"landingPageClicks":107.0,"fullScreenPlays":0.0,"follows":0.0,"oneClickLeadFormOpens":0.0,"impressions":19464.0,"otherEngagements":0.0,"leadGenerationMailContactInfoShares":0.0,"opens":0.0,"leadGenerationMailInterestedClicks":0.0,"pivotValues":["urn:li:geo:103644278"],"likes":0.0,"videoCompletions":0.0,"talentLeads":0.0,"videoFirstQuartileCompletions":0.0,"textUrlClicks":0.0,"videoStarts":0.0,"sends":0.0,"shares":0.0,"videoMidpointCompletions":0.0,"validWorkEmailLeads":0.0,"videoThirdQuartileCompletions":0.0,"totalEngagements":109.0,"reactions":0.0,"videoViews":0.0},"emitted_at":1695807255073} -{"stream":"ad_member_job_function_analytics","data":{"documentFirstQuartileCompletions":0.0,"actionClicks":0.0,"comments":0.0,"costInUsd":16.428626738541787,"commentLikes":0.0,"adUnitClicks":0.0,"companyPageClicks":0.0,"costInLocalCurrency":16.428626738541787,"documentThirdQuartileCompletions":0.0,"externalWebsiteConversions":0.0,"documentCompletions":0.0,"clicks":7.0,"documentMidpointCompletions":0.0,"downloadClicks":0.0,"start_date":"2023-08-25","end_date":"2023-08-25","pivotValue":"urn:li:sponsoredCampaign:252074216","externalWebsitePostClickConversions":0.0,"externalWebsitePostViewConversions":0.0,"oneClickLeads":0.0,"landingPageClicks":0.0,"fullScreenPlays":0.0,"follows":0.0,"oneClickLeadFormOpens":0.0,"impressions":291.0,"otherEngagements":0.0,"leadGenerationMailContactInfoShares":0.0,"opens":0.0,"leadGenerationMailInterestedClicks":0.0,"pivotValues":["urn:li:function:23"],"likes":0.0,"videoCompletions":0.0,"talentLeads":0.0,"videoFirstQuartileCompletions":0.0,"textUrlClicks":0.0,"videoStarts":0.0,"sends":0.0,"shares":0.0,"videoMidpointCompletions":0.0,"validWorkEmailLeads":0.0,"videoThirdQuartileCompletions":0.0,"totalEngagements":0.0,"reactions":0.0,"videoViews":0.0},"emitted_at":1695807275912} -{"stream":"ad_member_job_title_analytics","data":{"documentFirstQuartileCompletions":0.0,"actionClicks":0.0,"comments":0.0,"costInUsd":13.656450854809513,"commentLikes":0.0,"adUnitClicks":0.0,"companyPageClicks":0.0,"costInLocalCurrency":11.656450854809513,"documentThirdQuartileCompletions":0.0,"externalWebsiteConversions":0.0,"documentCompletions":0.0,"clicks":6.0,"documentMidpointCompletions":0.0,"downloadClicks":0.0,"start_date":"2023-08-25","end_date":"2023-08-25","pivotValue":"urn:li:sponsoredCampaign:252074216","externalWebsitePostClickConversions":0.0,"externalWebsitePostViewConversions":0.0,"oneClickLeads":0.0,"landingPageClicks":0.0,"fullScreenPlays":0.0,"follows":0.0,"oneClickLeadFormOpens":0.0,"impressions":86.0,"otherEngagements":0.0,"leadGenerationMailContactInfoShares":0.0,"opens":0.0,"leadGenerationMailInterestedClicks":0.0,"pivotValues":["urn:li:title:25563"],"likes":0.0,"videoCompletions":0.0,"talentLeads":0.0,"videoFirstQuartileCompletions":0.0,"textUrlClicks":0.0,"videoStarts":0.0,"sends":0.0,"shares":0.0,"videoMidpointCompletions":0.0,"validWorkEmailLeads":0.0,"videoThirdQuartileCompletions":0.0,"totalEngagements":0.0,"reactions":0.0,"videoViews":0.0},"emitted_at":1695807298323} -{"stream":"ad_member_industry_analytics","data":{"documentFirstQuartileCompletions":0.0,"actionClicks":0.0,"comments":0.0,"costInUsd":17.937028301780177,"commentLikes":0.0,"adUnitClicks":0.0,"companyPageClicks":0.0,"costInLocalCurrency":11.937028301780177,"documentThirdQuartileCompletions":0.0,"externalWebsiteConversions":0.0,"documentCompletions":0.0,"clicks":6.0,"documentMidpointCompletions":0.0,"downloadClicks":0.0,"start_date":"2023-08-25","end_date":"2023-08-25","pivotValue":"urn:li:sponsoredCampaign:252074216","externalWebsitePostClickConversions":0.0,"externalWebsitePostViewConversions":0.0,"oneClickLeads":0.0,"landingPageClicks":0.0,"fullScreenPlays":0.0,"follows":0.0,"oneClickLeadFormOpens":0.0,"impressions":392.0,"otherEngagements":0.0,"leadGenerationMailContactInfoShares":0.0,"opens":0.0,"leadGenerationMailInterestedClicks":0.0,"pivotValues":["urn:li:industry:48"],"likes":0.0,"videoCompletions":0.0,"talentLeads":0.0,"videoFirstQuartileCompletions":0.0,"textUrlClicks":0.0,"videoStarts":0.0,"sends":0.0,"shares":0.0,"videoMidpointCompletions":0.0,"validWorkEmailLeads":0.0,"videoThirdQuartileCompletions":0.0,"totalEngagements":0.0,"reactions":0.0,"videoViews":0.0},"emitted_at":1695807319168} -{"stream":"ad_member_seniority_analytics","data":{"documentFirstQuartileCompletions":0.0,"actionClicks":0.0,"comments":0.0,"costInUsd":4.418064605851896,"commentLikes":0.0,"adUnitClicks":0.0,"companyPageClicks":0.0,"costInLocalCurrency":8.418064605851896,"documentThirdQuartileCompletions":0.0,"externalWebsiteConversions":0.0,"documentCompletions":0.0,"clicks":3.0,"documentMidpointCompletions":0.0,"downloadClicks":0.0,"start_date":"2023-08-25","end_date":"2023-08-25","pivotValue":"urn:li:sponsoredCampaign:252074216","externalWebsitePostClickConversions":0.0,"externalWebsitePostViewConversions":0.0,"oneClickLeads":0.0,"landingPageClicks":5.0,"fullScreenPlays":0.0,"follows":0.0,"oneClickLeadFormOpens":0.0,"impressions":568.0,"otherEngagements":0.0,"leadGenerationMailContactInfoShares":0.0,"opens":0.0,"leadGenerationMailInterestedClicks":0.0,"pivotValues":["urn:li:seniority:7"],"likes":0.0,"videoCompletions":0.0,"talentLeads":0.0,"videoFirstQuartileCompletions":0.0,"textUrlClicks":0.0,"videoStarts":0.0,"sends":0.0,"shares":0.0,"videoMidpointCompletions":0.0,"validWorkEmailLeads":0.0,"videoThirdQuartileCompletions":0.0,"totalEngagements":4.0,"reactions":0.0,"videoViews":0.0},"emitted_at":1695807340002} -{"stream":"ad_member_region_analytics","data":{"documentFirstQuartileCompletions":0.0,"actionClicks":0.0,"comments":0.0,"costInUsd":9.074397779070527,"commentLikes":0.0,"adUnitClicks":0.0,"companyPageClicks":0.0,"costInLocalCurrency":10.074397779070527,"documentThirdQuartileCompletions":0.0,"externalWebsiteConversions":0.0,"documentCompletions":0.0,"clicks":4.0,"documentMidpointCompletions":0.0,"downloadClicks":0.0,"start_date":"2023-08-25","end_date":"2023-08-25","pivotValue":"urn:li:sponsoredCampaign:252074216","externalWebsitePostClickConversions":0.0,"externalWebsitePostViewConversions":0.0,"oneClickLeads":0.0,"landingPageClicks":0.0,"fullScreenPlays":0.0,"follows":0.0,"oneClickLeadFormOpens":0.0,"impressions":32.0,"otherEngagements":0.0,"leadGenerationMailContactInfoShares":0.0,"opens":0.0,"leadGenerationMailInterestedClicks":0.0,"pivotValues":["urn:li:geo:90000756"],"likes":0.0,"videoCompletions":0.0,"talentLeads":0.0,"videoFirstQuartileCompletions":0.0,"textUrlClicks":0.0,"videoStarts":0.0,"sends":0.0,"shares":0.0,"videoMidpointCompletions":0.0,"validWorkEmailLeads":0.0,"videoThirdQuartileCompletions":0.0,"totalEngagements":0.0,"reactions":0.0,"videoViews":0.0},"emitted_at":1695807444178} -{"stream":"ad_member_company_analytics","data":{"externalWebsitePostClickConversions":0.0,"externalWebsitePostViewConversions":0.0,"oneClickLeads":0.0,"landingPageClicks":0.0,"fullScreenPlays":0.0,"follows":0.0,"oneClickLeadFormOpens":0.0,"impressions":9.0,"otherEngagements":0.0,"leadGenerationMailContactInfoShares":0.0,"opens":0.0,"leadGenerationMailInterestedClicks":0.0,"pivotValues":["urn:li:organization:3185"],"likes":0.0,"start_date":"2023-08-25","end_date":"2023-08-25","pivotValue":"urn:li:sponsoredCampaign:252074216","videoCompletions":0.0,"talentLeads":0.0,"videoFirstQuartileCompletions":0.0,"textUrlClicks":0.0,"videoStarts":0.0,"sends":0.0,"shares":0.0,"videoMidpointCompletions":0.0,"validWorkEmailLeads":0.0,"videoThirdQuartileCompletions":0.0,"totalEngagements":0.0,"reactions":0.0,"videoViews":0.0},"emitted_at":1695807466590} +{"stream": "ad_campaign_analytics", "data": {"documentFirstQuartileCompletions": 0.0, "actionClicks": 0.0, "comments": 0.0, "costInUsd": -2e-18, "commentLikes": 0.0, "adUnitClicks": 0.0, "companyPageClicks": 0.0, "costInLocalCurrency": -2e-18, "conversionValueInLocalCurrency": 0.0, "documentThirdQuartileCompletions": 0.0, "externalWebsiteConversions": 0.0, "cardImpressions": 0.0, "documentCompletions": 0.0, "clicks": 0.0, "cardClicks": 0.0, "approximateUniqueImpressions": 0.0, "documentMidpointCompletions": 0.0, "downloadClicks": 0.0, "start_date": "2023-08-26", "end_date": "2023-08-26", "pivotValue": "urn:li:sponsoredCampaign:252074216", "externalWebsitePostClickConversions": 0.0, "externalWebsitePostViewConversions": 0.0, "postClickJobApplyClicks": 0.0, "oneClickLeads": 0.0, "landingPageClicks": 0.0, "fullScreenPlays": 0.0, "follows": 0.0, "oneClickLeadFormOpens": 0.0, "impressions": 1.0, "postClickJobApplications": 0.0, "otherEngagements": 0.0, "jobApplyClicks": 0.0, "jobApplications": 0.0, "leadGenerationMailContactInfoShares": 0.0, "opens": 0.0, "leadGenerationMailInterestedClicks": 0.0, "pivotValues": ["urn:li:sponsoredCampaign:252074216"], "likes": 0.0, "postClickRegistrations": 0.0}, "emitted_at": 1696511958409} +{"stream": "ad_campaign_analytics", "data": {"documentFirstQuartileCompletions": 0.0, "actionClicks": 0.0, "comments": 0.0, "costInUsd": 100.0, "commentLikes": 0.0, "adUnitClicks": 0.0, "companyPageClicks": 0.0, "costInLocalCurrency": 100.0, "conversionValueInLocalCurrency": 0.0, "documentThirdQuartileCompletions": 0.0, "externalWebsiteConversions": 0.0, "cardImpressions": 0.0, "documentCompletions": 0.0, "clicks": 106.0, "cardClicks": 0.0, "approximateUniqueImpressions": 17392.0, "documentMidpointCompletions": 0.0, "downloadClicks": 0.0, "start_date": "2023-08-25", "end_date": "2023-08-25", "pivotValue": "urn:li:sponsoredCampaign:252074216", "externalWebsitePostClickConversions": 0.0, "externalWebsitePostViewConversions": 0.0, "postClickJobApplyClicks": 0.0, "oneClickLeads": 0.0, "landingPageClicks": 106.0, "fullScreenPlays": 0.0, "follows": 0.0, "oneClickLeadFormOpens": 0.0, "impressions": 19464.0, "postClickJobApplications": 0.0, "otherEngagements": 0.0, "jobApplyClicks": 0.0, "jobApplications": 0.0, "leadGenerationMailContactInfoShares": 0.0, "opens": 0.0, "leadGenerationMailInterestedClicks": 0.0, "pivotValues": ["urn:li:sponsoredCampaign:252074216"], "likes": 0.0, "postClickRegistrations": 0.0, "videoCompletions": 0.0, "registrations": 0.0, "talentLeads": 0.0, "viralCardImpressions": 0.0, "videoFirstQuartileCompletions": 0.0, "textUrlClicks": 0.0, "videoStarts": 0.0, "postViewJobApplyClicks": 0.0, "sends": 0.0, "shares": 0.0, "videoMidpointCompletions": 0.0, "validWorkEmailLeads": 0.0, "viralCardClicks": 0.0, "postViewRegistrations": 0.0, "videoThirdQuartileCompletions": 0.0, "totalEngagements": 106.0, "reactions": 0.0, "postViewJobApplications": 0.0, "videoViews": 0.0}, "emitted_at": 1696511958426} +{"stream": "ad_creative_analytics", "data": {"documentFirstQuartileCompletions": 0.0, "actionClicks": 0.0, "comments": 0.0, "costInUsd": -2e-18, "commentLikes": 0.0, "adUnitClicks": 0.0, "companyPageClicks": 0.0, "costInLocalCurrency": -2e-18, "conversionValueInLocalCurrency": 0.0, "documentThirdQuartileCompletions": 0.0, "externalWebsiteConversions": 0.0, "cardImpressions": 0.0, "documentCompletions": 0.0, "clicks": 0.0, "cardClicks": 0.0, "approximateUniqueImpressions": 0.0, "documentMidpointCompletions": 0.0, "downloadClicks": 0.0, "start_date": "2023-08-26", "end_date": "2023-08-26", "pivotValue": "urn:li:sponsoredCreative:287513206", "externalWebsitePostClickConversions": 0.0, "externalWebsitePostViewConversions": 0.0, "postClickJobApplyClicks": 0.0, "oneClickLeads": 0.0, "landingPageClicks": 0.0, "fullScreenPlays": 0.0, "follows": 0.0, "oneClickLeadFormOpens": 0.0, "impressions": 1.0, "postClickJobApplications": 0.0, "otherEngagements": 0.0, "jobApplyClicks": 0.0, "jobApplications": 0.0, "leadGenerationMailContactInfoShares": 0.0, "opens": 0.0, "leadGenerationMailInterestedClicks": 0.0, "pivotValues": ["urn:li:sponsoredCreative:287513206"], "likes": 0.0, "postClickRegistrations": 0.0}, "emitted_at": 1696512217372} +{"stream": "ad_creative_analytics", "data": {"documentFirstQuartileCompletions": 0.0, "actionClicks": 0.0, "comments": 0.0, "costInUsd": 100.0, "commentLikes": 0.0, "adUnitClicks": 0.0, "companyPageClicks": 0.0, "costInLocalCurrency": 100.0, "conversionValueInLocalCurrency": 0.0, "documentThirdQuartileCompletions": 0.0, "externalWebsiteConversions": 0.0, "cardImpressions": 0.0, "documentCompletions": 0.0, "clicks": 106.0, "cardClicks": 0.0, "approximateUniqueImpressions": 17392.0, "documentMidpointCompletions": 0.0, "downloadClicks": 0.0, "start_date": "2023-08-25", "end_date": "2023-08-25", "pivotValue": "urn:li:sponsoredCreative:287513206", "externalWebsitePostClickConversions": 0.0, "externalWebsitePostViewConversions": 0.0, "postClickJobApplyClicks": 0.0, "oneClickLeads": 0.0, "landingPageClicks": 106.0, "fullScreenPlays": 0.0, "follows": 0.0, "oneClickLeadFormOpens": 0.0, "impressions": 19464.0, "postClickJobApplications": 0.0, "otherEngagements": 0.0, "jobApplyClicks": 0.0, "jobApplications": 0.0, "leadGenerationMailContactInfoShares": 0.0, "opens": 0.0, "leadGenerationMailInterestedClicks": 0.0, "pivotValues": ["urn:li:sponsoredCreative:287513206"], "likes": 0.0, "postClickRegistrations": 0.0, "videoCompletions": 0.0, "registrations": 0.0, "talentLeads": 0.0, "viralCardImpressions": 0.0, "videoFirstQuartileCompletions": 0.0, "textUrlClicks": 0.0, "videoStarts": 0.0, "postViewJobApplyClicks": 0.0, "sends": 0.0, "shares": 0.0, "videoMidpointCompletions": 0.0, "validWorkEmailLeads": 0.0, "viralCardClicks": 0.0, "postViewRegistrations": 0.0, "videoThirdQuartileCompletions": 0.0, "totalEngagements": 106.0, "reactions": 0.0, "postViewJobApplications": 0.0, "videoViews": 0.0}, "emitted_at": 1696512217376} +{"stream": "ad_impression_device_analytics", "data": {"documentFirstQuartileCompletions": 0.0, "actionClicks": 0.0, "comments": 0.0, "costInUsd": 2.29, "commentLikes": 0.0, "adUnitClicks": 0.0, "companyPageClicks": 0.0, "costInLocalCurrency": 2.29, "documentThirdQuartileCompletions": 0.0, "externalWebsiteConversions": 0.0, "cardImpressions": 0.0, "documentCompletions": 0.0, "clicks": 0.0, "cardClicks": 0.0, "documentMidpointCompletions": 0.0, "downloadClicks": 0.0, "start_date": "2023-08-25", "end_date": "2023-08-25", "pivotValue": "urn:li:sponsoredCampaign:252074216", "oneClickLeads": 0.0, "landingPageClicks": 0.0, "fullScreenPlays": 0.0, "oneClickLeadFormOpens": 0.0, "follows": 0.0, "impressions": 498.0, "otherEngagements": 0.0, "leadGenerationMailContactInfoShares": 0.0, "opens": 0.0, "leadGenerationMailInterestedClicks": 0.0, "pivotValues": ["UNDETECTED"], "likes": 0.0, "videoCompletions": 0.0, "viralCardImpressions": 0.0, "videoFirstQuartileCompletions": 0.0, "textUrlClicks": 0.0, "videoStarts": 0.0, "sends": 0.0, "shares": 0.0, "videoMidpointCompletions": 0.0, "validWorkEmailLeads": 0.0, "viralCardClicks": 0.0, "videoThirdQuartileCompletions": 0.0, "totalEngagements": 20.0, "reactions": 0.0, "videoViews": 0.0}, "emitted_at": 1696431584086} +{"stream": "ad_impression_device_analytics", "data": {"documentFirstQuartileCompletions": 0.0, "actionClicks": 0.0, "comments": 0.0, "costInUsd": -2e-18, "commentLikes": 0.0, "adUnitClicks": 0.0, "companyPageClicks": 0.0, "costInLocalCurrency": -2e-18, "documentThirdQuartileCompletions": 0.0, "externalWebsiteConversions": 0.0, "cardImpressions": 0.0, "documentCompletions": 0.0, "clicks": 0.0, "cardClicks": 0.0, "documentMidpointCompletions": 0.0, "downloadClicks": 0.0, "start_date": "2023-08-26", "end_date": "2023-08-26", "pivotValue": "urn:li:sponsoredCampaign:252074216", "oneClickLeads": 0.0, "landingPageClicks": 0.0, "fullScreenPlays": 0.0, "oneClickLeadFormOpens": 0.0, "follows": 0.0, "impressions": 1.0, "otherEngagements": 0.0, "leadGenerationMailContactInfoShares": 0.0, "opens": 0.0, "leadGenerationMailInterestedClicks": 0.0, "pivotValues": ["MOBILE_WEB"], "likes": 0.0}, "emitted_at": 1696431584090} +{"stream": "ad_member_company_size_analytics", "data": {"documentFirstQuartileCompletions": 0.0, "actionClicks": 0.0, "comments": 0.0, "costInUsd": 24.457317520310493, "commentLikes": 0.0, "adUnitClicks": 0.0, "companyPageClicks": 0.0, "costInLocalCurrency": 24.457317520310493, "documentThirdQuartileCompletions": 0.0, "externalWebsiteConversions": 0.0, "documentCompletions": 0.0, "clicks": 9.0, "documentMidpointCompletions": 0.0, "downloadClicks": 0.0, "start_date": "2023-08-25", "end_date": "2023-08-25", "pivotValue": "urn:li:sponsoredCampaign:252074216", "externalWebsitePostClickConversions": 0.0, "externalWebsitePostViewConversions": 0.0, "oneClickLeads": 0.0, "landingPageClicks": 9.0, "fullScreenPlays": 0.0, "follows": 0.0, "oneClickLeadFormOpens": 0.0, "impressions": 1480.0, "otherEngagements": 0.0, "leadGenerationMailContactInfoShares": 0.0, "opens": 0.0, "leadGenerationMailInterestedClicks": 0.0, "pivotValues": ["SIZE_2_TO_10"], "likes": 0.0, "videoCompletions": 0.0, "talentLeads": 0.0, "videoFirstQuartileCompletions": 0.0, "textUrlClicks": 0.0, "videoStarts": 0.0, "sends": 0.0, "shares": 0.0, "videoMidpointCompletions": 0.0, "validWorkEmailLeads": 0.0, "videoThirdQuartileCompletions": 0.0, "totalEngagements": 8.0, "reactions": 0.0, "videoViews": 0.0}, "emitted_at": 1696431764821} +{"stream": "ad_member_seniority_analytics", "data": {"documentFirstQuartileCompletions": 0.0, "actionClicks": 0.0, "comments": 0.0, "costInUsd": 61.54563022857992, "commentLikes": 0.0, "adUnitClicks": 0.0, "companyPageClicks": 0.0, "costInLocalCurrency": 61.54563022857992, "documentThirdQuartileCompletions": 0.0, "externalWebsiteConversions": 0.0, "documentCompletions": 0.0, "clicks": 25.0, "documentMidpointCompletions": 0.0, "downloadClicks": 0.0, "start_date": "2023-08-25", "end_date": "2023-08-25", "pivotValue": "urn:li:sponsoredCampaign:252074216", "externalWebsitePostClickConversions": 0.0, "externalWebsitePostViewConversions": 0.0, "oneClickLeads": 0.0, "landingPageClicks": 28.0, "fullScreenPlays": 0.0, "follows": 0.0, "oneClickLeadFormOpens": 0.0, "impressions": 3762.0, "otherEngagements": 0.0, "leadGenerationMailContactInfoShares": 0.0, "opens": 0.0, "leadGenerationMailInterestedClicks": 0.0, "pivotValues": ["urn:li:seniority:4"], "likes": 0.0, "videoCompletions": 0.0, "talentLeads": 0.0, "videoFirstQuartileCompletions": 0.0, "textUrlClicks": 0.0, "videoStarts": 0.0, "sends": 0.0, "shares": 0.0, "videoMidpointCompletions": 0.0, "validWorkEmailLeads": 0.0, "videoThirdQuartileCompletions": 0.0, "totalEngagements": 28.0, "reactions": 0.0, "videoViews": 0.0}, "emitted_at": 1696510946282} +{"stream": "ad_member_industry_analytics", "data": {"documentFirstQuartileCompletions": 0.0, "actionClicks": 0.0, "comments": 0.0, "costInUsd": 7.4596902377485215, "commentLikes": 0.0, "adUnitClicks": 0.0, "companyPageClicks": 0.0, "costInLocalCurrency": 7.4596902377485215, "documentThirdQuartileCompletions": 0.0, "externalWebsiteConversions": 0.0, "documentCompletions": 0.0, "clicks": 3.0, "documentMidpointCompletions": 0.0, "downloadClicks": 0.0, "start_date": "2023-08-25", "end_date": "2023-08-25", "pivotValue": "urn:li:sponsoredCampaign:252074216", "externalWebsitePostClickConversions": 0.0, "externalWebsitePostViewConversions": 0.0, "oneClickLeads": 0.0, "landingPageClicks": 0.0, "fullScreenPlays": 0.0, "follows": 0.0, "oneClickLeadFormOpens": 0.0, "impressions": 165.0, "otherEngagements": 0.0, "leadGenerationMailContactInfoShares": 0.0, "opens": 0.0, "leadGenerationMailInterestedClicks": 0.0, "pivotValues": ["urn:li:industry:99"], "likes": 0.0, "videoCompletions": 0.0, "talentLeads": 0.0, "videoFirstQuartileCompletions": 0.0, "textUrlClicks": 0.0, "videoStarts": 0.0, "sends": 0.0, "shares": 0.0, "videoMidpointCompletions": 0.0, "validWorkEmailLeads": 0.0, "videoThirdQuartileCompletions": 0.0, "totalEngagements": 0.0, "reactions": 0.0, "videoViews": 0.0}, "emitted_at": 1696510922939} +{"stream": "ad_member_job_title_analytics", "data": {"documentFirstQuartileCompletions": 0.0, "actionClicks": 0.0, "comments": 0.0, "costInUsd": 13.656450854809513, "commentLikes": 0.0, "adUnitClicks": 0.0, "companyPageClicks": 0.0, "costInLocalCurrency": 11.656450854809513, "documentThirdQuartileCompletions": 0.0, "externalWebsiteConversions": 0.0, "documentCompletions": 0.0, "clicks": 6.0, "documentMidpointCompletions": 0.0, "downloadClicks": 0.0, "start_date": "2023-08-25", "end_date": "2023-08-25", "pivotValue": "urn:li:sponsoredCampaign:252074216", "externalWebsitePostClickConversions": 0.0, "externalWebsitePostViewConversions": 0.0, "oneClickLeads": 0.0, "landingPageClicks": 0.0, "fullScreenPlays": 0.0, "follows": 0.0, "oneClickLeadFormOpens": 0.0, "impressions": 39.0, "otherEngagements": 0.0, "leadGenerationMailContactInfoShares": 0.0, "opens": 0.0, "leadGenerationMailInterestedClicks": 0.0, "pivotValues": ["urn:li:title:68"], "likes": 0.0, "videoCompletions": 0.0, "talentLeads": 0.0, "videoFirstQuartileCompletions": 0.0, "textUrlClicks": 0.0, "videoStarts": 0.0, "sends": 0.0, "shares": 0.0, "videoMidpointCompletions": 0.0, "validWorkEmailLeads": 0.0, "videoThirdQuartileCompletions": 0.0, "totalEngagements": 0.0, "reactions": 0.0, "videoViews": 0.0}, "emitted_at": 1696510898154} +{"stream": "ad_member_company_analytics", "data": {"externalWebsitePostClickConversions": 0.0, "externalWebsitePostViewConversions": 0.0, "oneClickLeads": 0.0, "landingPageClicks": 0.0, "fullScreenPlays": 0.0, "follows": 0.0, "oneClickLeadFormOpens": 0.0, "impressions": 34.0, "otherEngagements": 0.0, "leadGenerationMailContactInfoShares": 0.0, "opens": 0.0, "leadGenerationMailInterestedClicks": 0.0, "pivotValues": ["urn:li:organization:33200573"], "likes": 0.0, "start_date": "2023-08-25", "end_date": "2023-08-25", "pivotValue": "urn:li:sponsoredCampaign:252074216", "videoCompletions": 0.0, "talentLeads": 0.0, "videoFirstQuartileCompletions": 0.0, "textUrlClicks": 0.0, "videoStarts": 0.0, "sends": 0.0, "shares": 0.0, "videoMidpointCompletions": 0.0, "validWorkEmailLeads": 0.0, "videoThirdQuartileCompletions": 0.0, "totalEngagements": 0.0, "reactions": 0.0, "videoViews": 0.0}, "emitted_at": 1696510996767} +{"stream": "ad_member_country_analytics", "data": {"documentFirstQuartileCompletions": 0.0, "actionClicks": 0.0, "comments": 0.0, "costInUsd": 317.93414846943944, "commentLikes": 0.0, "adUnitClicks": 0.0, "companyPageClicks": 0.0, "costInLocalCurrency": 318.93414846943944, "documentThirdQuartileCompletions": 0.0, "externalWebsiteConversions": 0.0, "documentCompletions": 0.0, "clicks": 110.0, "documentMidpointCompletions": 0.0, "downloadClicks": 0.0, "start_date": "2023-08-25", "end_date": "2023-08-25", "pivotValue": "urn:li:sponsoredCampaign:252074216", "externalWebsitePostClickConversions": 0.0, "externalWebsitePostViewConversions": 0.0, "oneClickLeads": 0.0, "landingPageClicks": 107.0, "fullScreenPlays": 0.0, "follows": 0.0, "oneClickLeadFormOpens": 0.0, "impressions": 19464.0, "otherEngagements": 0.0, "leadGenerationMailContactInfoShares": 0.0, "opens": 0.0, "leadGenerationMailInterestedClicks": 0.0, "pivotValues": ["urn:li:geo:103644278"], "likes": 0.0, "videoCompletions": 0.0, "talentLeads": 0.0, "videoFirstQuartileCompletions": 0.0, "textUrlClicks": 0.0, "videoStarts": 0.0, "sends": 0.0, "shares": 0.0, "videoMidpointCompletions": 0.0, "validWorkEmailLeads": 0.0, "videoThirdQuartileCompletions": 0.0, "totalEngagements": 109.0, "reactions": 0.0, "videoViews": 0.0}, "emitted_at": 1696510847869} +{"stream": "ad_member_job_function_analytics", "data": {"documentFirstQuartileCompletions": 0.0, "actionClicks": 0.0, "comments": 0.0, "costInUsd": 16.428626738541787, "commentLikes": 0.0, "adUnitClicks": 0.0, "companyPageClicks": 0.0, "costInLocalCurrency": 16.428626738541787, "documentThirdQuartileCompletions": 0.0, "externalWebsiteConversions": 0.0, "documentCompletions": 0.0, "clicks": 7.0, "documentMidpointCompletions": 0.0, "downloadClicks": 0.0, "start_date": "2023-08-25", "end_date": "2023-08-25", "pivotValue": "urn:li:sponsoredCampaign:252074216", "externalWebsitePostClickConversions": 0.0, "externalWebsitePostViewConversions": 0.0, "oneClickLeads": 0.0, "landingPageClicks": 4.0, "fullScreenPlays": 0.0, "follows": 0.0, "oneClickLeadFormOpens": 0.0, "impressions": 1064.0, "otherEngagements": 0.0, "leadGenerationMailContactInfoShares": 0.0, "opens": 0.0, "leadGenerationMailInterestedClicks": 0.0, "pivotValues": ["urn:li:function:7"], "likes": 0.0, "videoCompletions": 0.0, "talentLeads": 0.0, "videoFirstQuartileCompletions": 0.0, "textUrlClicks": 0.0, "videoStarts": 0.0, "sends": 0.0, "shares": 0.0, "videoMidpointCompletions": 0.0, "validWorkEmailLeads": 0.0, "videoThirdQuartileCompletions": 0.0, "totalEngagements": 4.0, "reactions": 0.0, "videoViews": 0.0}, "emitted_at": 1696510872349} +{"stream": "ad_member_region_analytics", "data": {"documentFirstQuartileCompletions": 0.0, "actionClicks": 0.0, "comments": 0.0, "costInUsd": 12.261068694077421, "commentLikes": 0.0, "adUnitClicks": 0.0, "companyPageClicks": 0.0, "costInLocalCurrency": 11.261068694077421, "documentThirdQuartileCompletions": 0.0, "externalWebsiteConversions": 0.0, "documentCompletions": 0.0, "clicks": 8.0, "documentMidpointCompletions": 0.0, "downloadClicks": 0.0, "start_date": "2023-08-25", "end_date": "2023-08-25", "pivotValue": "urn:li:sponsoredCampaign:252074216", "externalWebsitePostClickConversions": 0.0, "externalWebsitePostViewConversions": 0.0, "oneClickLeads": 0.0, "landingPageClicks": 0.0, "fullScreenPlays": 0.0, "follows": 0.0, "oneClickLeadFormOpens": 0.0, "impressions": 90.0, "otherEngagements": 0.0, "leadGenerationMailContactInfoShares": 0.0, "opens": 0.0, "leadGenerationMailInterestedClicks": 0.0, "pivotValues": ["urn:li:geo:90009446"], "likes": 0.0, "videoCompletions": 0.0, "talentLeads": 0.0, "videoFirstQuartileCompletions": 0.0, "textUrlClicks": 0.0, "videoStarts": 0.0, "sends": 0.0, "shares": 0.0, "videoMidpointCompletions": 0.0, "validWorkEmailLeads": 0.0, "videoThirdQuartileCompletions": 0.0, "totalEngagements": 0.0, "reactions": 0.0, "videoViews": 0.0}, "emitted_at": 1696510971898} diff --git a/airbyte-integrations/connectors/source-linkedin-ads/metadata.yaml b/airbyte-integrations/connectors/source-linkedin-ads/metadata.yaml index b74e5c81af1d..c262e6b173f7 100644 --- a/airbyte-integrations/connectors/source-linkedin-ads/metadata.yaml +++ b/airbyte-integrations/connectors/source-linkedin-ads/metadata.yaml @@ -6,8 +6,8 @@ data: connectorSubtype: api connectorType: source definitionId: 137ece28-5434-455c-8f34-69dc3782f451 - maxSecondsBetweenMessages: 21600 - dockerImageTag: 0.6.1 + maxSecondsBetweenMessages: 86400 + dockerImageTag: 0.6.2 dockerRepository: airbyte/source-linkedin-ads githubIssueLabel: source-linkedin-ads icon: linkedin.svg diff --git a/airbyte-integrations/connectors/source-linkedin-ads/unit_tests/conftest.py b/airbyte-integrations/connectors/source-linkedin-ads/unit_tests/conftest.py new file mode 100644 index 000000000000..3604b32db597 --- /dev/null +++ b/airbyte-integrations/connectors/source-linkedin-ads/unit_tests/conftest.py @@ -0,0 +1,3 @@ +import os + +os.environ["REQUEST_CACHE_PATH"] = "REQUEST_CACHE_PATH" diff --git a/airbyte-integrations/connectors/source-mysql-strict-encrypt/Dockerfile b/airbyte-integrations/connectors/source-mysql-strict-encrypt/Dockerfile index 8abf121b83ea..8e0994cdb5ee 100644 --- a/airbyte-integrations/connectors/source-mysql-strict-encrypt/Dockerfile +++ b/airbyte-integrations/connectors/source-mysql-strict-encrypt/Dockerfile @@ -24,6 +24,6 @@ ENV APPLICATION source-mysql-strict-encrypt COPY --from=build /airbyte /airbyte -LABEL io.airbyte.version=3.1.1 +LABEL io.airbyte.version=3.1.3 LABEL io.airbyte.name=airbyte/source-mysql-strict-encrypt diff --git a/airbyte-integrations/connectors/source-mysql-strict-encrypt/build.gradle b/airbyte-integrations/connectors/source-mysql-strict-encrypt/build.gradle index c2c5bfd7b11a..a517be6255e7 100644 --- a/airbyte-integrations/connectors/source-mysql-strict-encrypt/build.gradle +++ b/airbyte-integrations/connectors/source-mysql-strict-encrypt/build.gradle @@ -4,7 +4,7 @@ plugins { } airbyteJavaConnector { - cdkVersionRequired = '0.1.0' + cdkVersionRequired = '0.1.8' features = ['db-sources'] useLocalCdk = false } diff --git a/airbyte-integrations/connectors/source-mysql-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/source-mysql-strict-encrypt/metadata.yaml index 993d1efcd945..2107cc316f4b 100644 --- a/airbyte-integrations/connectors/source-mysql-strict-encrypt/metadata.yaml +++ b/airbyte-integrations/connectors/source-mysql-strict-encrypt/metadata.yaml @@ -11,7 +11,7 @@ data: connectorSubtype: database connectorType: source definitionId: 435bb9a5-7887-4809-aa58-28c27df0d7ad - dockerImageTag: 3.1.1 + dockerImageTag: 3.1.3 dockerRepository: airbyte/source-mysql-strict-encrypt githubIssueLabel: source-mysql icon: mysql.svg diff --git a/airbyte-integrations/connectors/source-mysql/Dockerfile b/airbyte-integrations/connectors/source-mysql/Dockerfile index 209e2a02ff9e..11abebba89d1 100644 --- a/airbyte-integrations/connectors/source-mysql/Dockerfile +++ b/airbyte-integrations/connectors/source-mysql/Dockerfile @@ -24,6 +24,6 @@ ENV APPLICATION source-mysql COPY --from=build /airbyte /airbyte -LABEL io.airbyte.version=3.1.1 +LABEL io.airbyte.version=3.1.3 LABEL io.airbyte.name=airbyte/source-mysql diff --git a/airbyte-integrations/connectors/source-mysql/build.gradle b/airbyte-integrations/connectors/source-mysql/build.gradle index e5cada93a6b4..61a82e245290 100644 --- a/airbyte-integrations/connectors/source-mysql/build.gradle +++ b/airbyte-integrations/connectors/source-mysql/build.gradle @@ -7,7 +7,7 @@ plugins { } airbyteJavaConnector { - cdkVersionRequired = '0.1.0' + cdkVersionRequired = '0.1.8' features = ['db-sources'] useLocalCdk = false } diff --git a/airbyte-integrations/connectors/source-mysql/metadata.yaml b/airbyte-integrations/connectors/source-mysql/metadata.yaml index 28799a5272e1..891f4f9afaba 100644 --- a/airbyte-integrations/connectors/source-mysql/metadata.yaml +++ b/airbyte-integrations/connectors/source-mysql/metadata.yaml @@ -9,7 +9,7 @@ data: connectorSubtype: database connectorType: source definitionId: 435bb9a5-7887-4809-aa58-28c27df0d7ad - dockerImageTag: 3.1.1 + dockerImageTag: 3.1.3 dockerRepository: airbyte/source-mysql documentationUrl: https://docs.airbyte.com/integrations/sources/mysql githubIssueLabel: source-mysql diff --git a/airbyte-integrations/connectors/source-mysql/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/AbstractMySqlSourceDatatypeTest.java b/airbyte-integrations/connectors/source-mysql/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/AbstractMySqlSourceDatatypeTest.java index 271d2e2fb8c8..1ea69c06ccec 100644 --- a/airbyte-integrations/connectors/source-mysql/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/AbstractMySqlSourceDatatypeTest.java +++ b/airbyte-integrations/connectors/source-mysql/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/AbstractMySqlSourceDatatypeTest.java @@ -232,22 +232,13 @@ protected void initTests() { .addExpectedValues("0.188", null) .build()); - addDataTypeTestData( - TestDataHolder.builder() - .sourceType("decimal") - .airbyteType(JsonSchemaType.NUMBER) - .fullSourceDataType("decimal(19,2)") - .addInsertValues("1700000.01") - .addExpectedValues("1700000.01") - .build()); - addDataTypeTestData( TestDataHolder.builder() .sourceType("decimal") .airbyteType(JsonSchemaType.INTEGER) .fullSourceDataType("decimal(32,0)") - .addInsertValues("1700000.01") - .addExpectedValues("1700000") + .addInsertValues("1700000.01", "123") + .addExpectedValues("1700000", "123") .build()); for (final String type : Set.of("date", "date not null default '0000-00-00'")) { @@ -451,6 +442,7 @@ protected void initTests() { .addExpectedValues(null, "xs,s", "m,xl") .build()); + addDecimalValuesTest(); } protected void addJsonDataTypeTest() { @@ -492,4 +484,15 @@ private String getFileDataInBase64() { return null; } + protected void addDecimalValuesTest() { + addDataTypeTestData( + TestDataHolder.builder() + .sourceType("decimal") + .airbyteType(JsonSchemaType.NUMBER) + .fullSourceDataType("decimal(19,2)") + .addInsertValues("1700000.01", "'123'") + .addExpectedValues("1700000.01", "123.0") + .build()); + } + } diff --git a/airbyte-integrations/connectors/source-mysql/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/CdcBinlogsMySqlSourceDatatypeTest.java b/airbyte-integrations/connectors/source-mysql/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/CdcBinlogsMySqlSourceDatatypeTest.java index 522177b2b6be..1dc469ed3b60 100644 --- a/airbyte-integrations/connectors/source-mysql/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/CdcBinlogsMySqlSourceDatatypeTest.java +++ b/airbyte-integrations/connectors/source-mysql/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/CdcBinlogsMySqlSourceDatatypeTest.java @@ -181,4 +181,16 @@ protected void addJsonDataTypeTest() { .build()); } + @Override + protected void addDecimalValuesTest() { + addDataTypeTestData( + TestDataHolder.builder() + .sourceType("decimal") + .airbyteType(JsonSchemaType.NUMBER) + .fullSourceDataType("decimal(19,2)") + .addInsertValues("1700000.01", "'123'") + .addExpectedValues("1700000.01", "123.00") + .build()); + } + } diff --git a/airbyte-integrations/connectors/source-notion/Dockerfile b/airbyte-integrations/connectors/source-notion/Dockerfile index 71a8dcfd90ad..2600a9cf695d 100644 --- a/airbyte-integrations/connectors/source-notion/Dockerfile +++ b/airbyte-integrations/connectors/source-notion/Dockerfile @@ -34,5 +34,5 @@ COPY source_notion ./source_notion ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=1.1.2 +LABEL io.airbyte.version=2.0.0 LABEL io.airbyte.name=airbyte/source-notion diff --git a/airbyte-integrations/connectors/source-notion/acceptance-test-config.yml b/airbyte-integrations/connectors/source-notion/acceptance-test-config.yml index 332e93b9e646..7853ba8c8d64 100644 --- a/airbyte-integrations/connectors/source-notion/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-notion/acceptance-test-config.yml @@ -17,12 +17,14 @@ acceptance_tests: discovery: tests: - config_path: "secrets/config.json" + backward_compatibility_tests_config: + disable_for_version: 1.3.0 basic_read: tests: - config_path: "secrets/config.json" expect_records: path: "integration_tests/expected_records.jsonl" - fail_on_extra_columns: false + fail_on_extra_columns: true incremental: tests: - config_path: "secrets/config.json" diff --git a/airbyte-integrations/connectors/source-notion/acceptance-test-docker.sh b/airbyte-integrations/connectors/source-notion/acceptance-test-docker.sh old mode 100644 new mode 100755 diff --git a/airbyte-integrations/connectors/source-notion/integration_tests/catalog.json b/airbyte-integrations/connectors/source-notion/integration_tests/catalog.json index 24d5091f961a..3b76e23aa3c9 100644 --- a/airbyte-integrations/connectors/source-notion/integration_tests/catalog.json +++ b/airbyte-integrations/connectors/source-notion/integration_tests/catalog.json @@ -26,6 +26,13 @@ "source_defined_cursor": true, "default_cursor_field": "last_edited_time", "json_schema": {} + }, + { + "name": "comments", + "supported_sync_modes": ["incremental"], + "source_defined_cursor": true, + "default_cursor_field": "page_last_edited_time", + "json_schema": {} } ] } diff --git a/airbyte-integrations/connectors/source-notion/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-notion/integration_tests/configured_catalog.json index 8fccfcd9ab74..d0fa294445a5 100644 --- a/airbyte-integrations/connectors/source-notion/integration_tests/configured_catalog.json +++ b/airbyte-integrations/connectors/source-notion/integration_tests/configured_catalog.json @@ -52,6 +52,20 @@ "cursor_field": ["last_edited_time"], "sync_mode": "incremental", "destination_sync_mode": "append" + }, + { + "stream": { + "name": "comments", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_primary_key": [["id"]], + "default_cursor_field": ["page_last_edited_time"] + }, + "primary_key": [["id"]], + "cursor_field": ["page_last_edited_time"], + "sync_mode": "incremental", + "destination_sync_mode": "append" } ] } diff --git a/airbyte-integrations/connectors/source-notion/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-notion/integration_tests/expected_records.jsonl index 335e3021715c..27bf2dc60ca8 100644 --- a/airbyte-integrations/connectors/source-notion/integration_tests/expected_records.jsonl +++ b/airbyte-integrations/connectors/source-notion/integration_tests/expected_records.jsonl @@ -1,10 +1,15 @@ -{"stream":"pages","data":{"object":"page","id":"00074690-3420-4861-84ae-b1c7498b67f1","created_time":"2021-10-19T13:33:00.000Z","last_edited_time":"2021-10-19T13:33:00.000Z","created_by":{"object":"user","id":"f5ac1fcb-a06b-4dcc-80e5-403c40dfb38a"},"last_edited_by":{"object":"user","id":"f5ac1fcb-a06b-4dcc-80e5-403c40dfb38a"},"cover":null,"icon":null,"parent":{"type":"database_id","database_id":"a1298679-9f79-48a8-a991-834cd72eca17"},"archived":false,"properties":[{"name":"Engineers","value":{"id":"%24v1Q","type":"people","people":[]}},{"name":"Tasks","value":{"id":"6%3Dyp","type":"relation","relation":[],"has_more":false}},{"name":"Type","value":{"id":"9dB%5E","type":"select","select":null}},{"name":"Sprint","value":{"id":"Jz.%40","type":"multi_select","multi_select":[]}},{"name":"Epic","value":{"id":"L%5BK%3C","type":"relation","relation":[],"has_more":false}},{"name":"Timeline","value":{"id":"_G%2Bl","type":"date","date":null}},{"name":"Created","value":{"id":"iwS0","type":"created_time","created_time":"2021-10-19T13:33:00.000Z"}},{"name":"Product Manager","value":{"id":"ma%3AW","type":"people","people":[]}},{"name":"Priority","value":{"id":"%7BMEq","type":"select","select":null}},{"name":"Status","value":{"id":"%7CF4-","type":"select","select":null}},{"name":"Projects","value":{"id":"title","type":"title","title":[{"type":"text","text":{"content":"Project Spec πŸ—Ί","link":null},"annotations":{"bold":false,"italic":false,"strikethrough":false,"underline":false,"code":false,"color":"default"},"plain_text":"Project Spec πŸ—Ί","href":null}]}}],"url":"https://www.notion.so/Project-Spec-000746903420486184aeb1c7498b67f1","public_url":null},"emitted_at":1687166006562} -{"stream":"pages","data":{"object":"page","id":"249f3796-7e81-47b0-9075-00ed2d06439d","created_time":"2021-10-19T13:33:00.000Z","last_edited_time":"2021-10-19T13:33:00.000Z","created_by":{"object":"user","id":"f5ac1fcb-a06b-4dcc-80e5-403c40dfb38a"},"last_edited_by":{"object":"user","id":"f5ac1fcb-a06b-4dcc-80e5-403c40dfb38a"},"cover":null,"icon":null,"parent":{"type":"database_id","database_id":"a1298679-9f79-48a8-a991-834cd72eca17"},"archived":false,"properties":[{"name":"Engineers","value":{"id":"%24v1Q","type":"people","people":[]}},{"name":"Tasks","value":{"id":"6%3Dyp","type":"relation","relation":[],"has_more":false}},{"name":"Type","value":{"id":"9dB%5E","type":"select","select":{"id":"1497e06a-abf3-4c81-a619-debfa0c70621","name":"Bug 🐞","color":"red"}}},{"name":"Sprint","value":{"id":"Jz.%40","type":"multi_select","multi_select":[{"id":"8d033c95-5515-4662-b8f3-60cb7d86487a","name":"Sprint 21","color":"default"}]}},{"name":"Epic","value":{"id":"L%5BK%3C","type":"relation","relation":[],"has_more":false}},{"name":"Timeline","value":{"id":"_G%2Bl","type":"date","date":null}},{"name":"Created","value":{"id":"iwS0","type":"created_time","created_time":"2021-10-19T13:33:00.000Z"}},{"name":"Product Manager","value":{"id":"ma%3AW","type":"people","people":[]}},{"name":"Priority","value":{"id":"%7BMEq","type":"select","select":{"id":"09fy","name":"P1 πŸ”₯","color":"red"}}},{"name":"Status","value":{"id":"%7CF4-","type":"select","select":{"id":"ab7c2b08-ed87-4c04-b30f-fa62440f75d5","name":"In Progress","color":"yellow"}}},{"name":"Projects","value":{"id":"title","type":"title","title":[{"type":"text","text":{"content":"New Emojis Don't Render","link":null},"annotations":{"bold":false,"italic":false,"strikethrough":false,"underline":false,"code":false,"color":"default"},"plain_text":"New Emojis Don't Render","href":null}]}}],"url":"https://www.notion.so/New-Emojis-Don-t-Render-249f37967e8147b0907500ed2d06439d","public_url":null},"emitted_at":1687166006563} -{"stream":"pages","data":{"object":"page","id":"29299296-ef3f-4aff-aef5-02d651a59be3","created_time":"2021-10-19T13:33:00.000Z","last_edited_time":"2021-10-19T13:33:00.000Z","created_by":{"object":"user","id":"f5ac1fcb-a06b-4dcc-80e5-403c40dfb38a"},"last_edited_by":{"object":"user","id":"f5ac1fcb-a06b-4dcc-80e5-403c40dfb38a"},"cover":null,"icon":{"type":"emoji","emoji":"πŸ”Œ"},"parent":{"type":"database_id","database_id":"a1298679-9f79-48a8-a991-834cd72eca17"},"archived":false,"properties":[{"name":"Engineers","value":{"id":"%24v1Q","type":"people","people":[]}},{"name":"Tasks","value":{"id":"6%3Dyp","type":"relation","relation":[],"has_more":false}},{"name":"Type","value":{"id":"9dB%5E","type":"select","select":{"id":"ca62f85e-a4ac-474f-b493-82d2df005dff","name":"Epic ⛰️","color":"green"}}},{"name":"Sprint","value":{"id":"Jz.%40","type":"multi_select","multi_select":[]}},{"name":"Epic","value":{"id":"L%5BK%3C","type":"relation","relation":[],"has_more":false}},{"name":"Timeline","value":{"id":"_G%2Bl","type":"date","date":{"start":"2019-10-17","end":"2019-10-05","time_zone":null}}},{"name":"Created","value":{"id":"iwS0","type":"created_time","created_time":"2021-10-19T13:33:00.000Z"}},{"name":"Product Manager","value":{"id":"ma%3AW","type":"people","people":[]}},{"name":"Priority","value":{"id":"%7BMEq","type":"select","select":null}},{"name":"Status","value":{"id":"%7CF4-","type":"select","select":{"id":"ab7c2b08-ed87-4c04-b30f-fa62440f75d5","name":"In Progress","color":"yellow"}}},{"name":"Projects","value":{"id":"title","type":"title","title":[{"type":"text","text":{"content":"Improve Third Party Integrations","link":null},"annotations":{"bold":false,"italic":false,"strikethrough":false,"underline":false,"code":false,"color":"default"},"plain_text":"Improve Third Party Integrations","href":null}]}}],"url":"https://www.notion.so/Improve-Third-Party-Integrations-29299296ef3f4affaef502d651a59be3","public_url":null},"emitted_at":1687166006564} -{"stream":"blocks","data":{"object":"block","id":"af0bd3c7-9704-44ab-a0af-1a94462f762e","parent":{"type":"page_id","page_id":"00074690-3420-4861-84ae-b1c7498b67f1"},"created_time":"2021-10-19T13:33:00.000Z","last_edited_time":"2021-10-19T13:33:00.000Z","created_by":{"object":"user","id":"f5ac1fcb-a06b-4dcc-80e5-403c40dfb38a"},"last_edited_by":{"object":"user","id":"f5ac1fcb-a06b-4dcc-80e5-403c40dfb38a"},"has_children":false,"archived":false,"type":"heading_1","heading_1":{"rich_text":[{"type":"text","text":{"content":"Overview","link":null},"annotations":{"bold":false,"italic":false,"strikethrough":false,"underline":false,"code":false,"color":"default"},"plain_text":"Overview","href":null}],"is_toggleable":false,"color":"default"}},"emitted_at":1687166008901} -{"stream":"blocks","data":{"object":"block","id":"391f45c4-6d75-4e9e-90db-7457d640f75e","parent":{"type":"page_id","page_id":"00074690-3420-4861-84ae-b1c7498b67f1"},"created_time":"2021-10-19T13:33:00.000Z","last_edited_time":"2021-10-19T13:33:00.000Z","created_by":{"object":"user","id":"f5ac1fcb-a06b-4dcc-80e5-403c40dfb38a"},"last_edited_by":{"object":"user","id":"f5ac1fcb-a06b-4dcc-80e5-403c40dfb38a"},"has_children":false,"archived":false,"type":"heading_2","heading_2":{"rich_text":[{"type":"text","text":{"content":"Problem statement","link":null},"annotations":{"bold":false,"italic":false,"strikethrough":false,"underline":false,"code":false,"color":"default"},"plain_text":"Problem statement","href":null}],"is_toggleable":false,"color":"default"}},"emitted_at":1687166008902} -{"stream":"blocks","data":{"object":"block","id":"d9698116-183d-48c4-81e2-79a882236000","parent":{"type":"page_id","page_id":"00074690-3420-4861-84ae-b1c7498b67f1"},"created_time":"2021-10-19T13:33:00.000Z","last_edited_time":"2021-10-19T13:33:00.000Z","created_by":{"object":"user","id":"f5ac1fcb-a06b-4dcc-80e5-403c40dfb38a"},"last_edited_by":{"object":"user","id":"f5ac1fcb-a06b-4dcc-80e5-403c40dfb38a"},"has_children":false,"archived":false,"type":"paragraph","paragraph":{"rich_text":[{"type":"text","text":{"content":"Describe the problem we're trying to solve by doing this work.","link":null},"annotations":{"bold":false,"italic":false,"strikethrough":false,"underline":false,"code":false,"color":"default"},"plain_text":"Describe the problem we're trying to solve by doing this work.","href":null}],"color":"gray"}},"emitted_at":1687166008903} -{"stream":"users","data":{"object":"user","id":"5612c094-99ec-4ba3-ac7f-df8d84c8d6be","name":"Sherif Nada","avatar_url":"https://s3-us-west-2.amazonaws.com/public.notion-static.com/305f7efc-2862-4342-ba99-5023f3e34717/6246757.png","type":"person","person":{"email":"sherif@airbyte.io"}},"emitted_at":1687166004972} -{"stream":"users","data":{"object":"user","id":"f5ac1fcb-a06b-4dcc-80e5-403c40dfb38a","name":"Airyte","avatar_url":null,"type":"person","person":{"email":"integration-test@airbyte.io"}},"emitted_at":1687166004973} -{"stream":"users","data":{"object":"user","id":"c1ff0160-b2af-497a-aab7-8b61e625e4e3","name":"Gil Cho","avatar_url":"https://lh3.googleusercontent.com/a/ALm5wu0ElXfvy3YfVUyRn-aB9EZy5AZ1ougHuNyCGmO2=s100","type":"person","person":{"email":"gil@airbyte.io"}},"emitted_at":1687166004973} -{"stream":"databases","data":{"object":"database","id":"a1298679-9f79-48a8-a991-834cd72eca17","cover":null,"icon":{"type":"emoji","emoji":"🚘"},"created_time":"2021-10-19T13:33:00.000Z","created_by":{"object":"user","id":"f5ac1fcb-a06b-4dcc-80e5-403c40dfb38a"},"last_edited_by":{"object":"user","id":"f5ac1fcb-a06b-4dcc-80e5-403c40dfb38a"},"last_edited_time":"2023-06-15T09:18:00.000Z","title":[{"type":"text","text":{"content":"Roadmap","link":null},"annotations":{"bold":false,"italic":false,"strikethrough":false,"underline":false,"code":false,"color":"default"},"plain_text":"Roadmap","href":null}],"description":[{"type":"text","text":{"content":"Use this template to track all of your project work.\n\nβ›° ","link":null},"annotations":{"bold":false,"italic":false,"strikethrough":false,"underline":false,"code":false,"color":"default"},"plain_text":"Use this template to track all of your project work.\n\nβ›° ","href":null},{"type":"text","text":{"content":"Epics","link":null},"annotations":{"bold":true,"italic":false,"strikethrough":false,"underline":false,"code":false,"color":"default"},"plain_text":"Epics","href":null},{"type":"text","text":{"content":" are large overarching initiatives.\nπŸƒβ€β™‚οΈ ","link":null},"annotations":{"bold":false,"italic":false,"strikethrough":false,"underline":false,"code":false,"color":"default"},"plain_text":" are large overarching initiatives.\nπŸƒβ€β™‚οΈ ","href":null},{"type":"text","text":{"content":"Sprints","link":null},"annotations":{"bold":true,"italic":false,"strikethrough":false,"underline":false,"code":false,"color":"default"},"plain_text":"Sprints","href":null},{"type":"text","text":{"content":" are time-bounded pushes to complete a set of tasks.\nπŸ”¨ ","link":null},"annotations":{"bold":false,"italic":false,"strikethrough":false,"underline":false,"code":false,"color":"default"},"plain_text":" are time-bounded pushes to complete a set of tasks.\nπŸ”¨ ","href":null},{"type":"text","text":{"content":"Tasks","link":null},"annotations":{"bold":true,"italic":false,"strikethrough":false,"underline":false,"code":false,"color":"default"},"plain_text":"Tasks","href":null},{"type":"text","text":{"content":" are the actions that make up epics.\n🐞 ","link":null},"annotations":{"bold":false,"italic":false,"strikethrough":false,"underline":false,"code":false,"color":"default"},"plain_text":" are the actions that make up epics.\n🐞 ","href":null},{"type":"text","text":{"content":"Bugs","link":null},"annotations":{"bold":true,"italic":false,"strikethrough":false,"underline":false,"code":false,"color":"default"},"plain_text":"Bugs","href":null},{"type":"text","text":{"content":" are tasks to fix things.\n\n","link":null},"annotations":{"bold":false,"italic":false,"strikethrough":false,"underline":false,"code":false,"color":"default"},"plain_text":" are tasks to fix things.\n\n","href":null},{"type":"text","text":{"content":"↓","link":null},"annotations":{"bold":true,"italic":false,"strikethrough":false,"underline":false,"code":false,"color":"default"},"plain_text":"↓","href":null},{"type":"text","text":{"content":" Click ","link":null},"annotations":{"bold":false,"italic":false,"strikethrough":false,"underline":false,"code":false,"color":"default"},"plain_text":" Click ","href":null},{"type":"text","text":{"content":"By Status","link":null},"annotations":{"bold":false,"italic":false,"strikethrough":false,"underline":false,"code":true,"color":"default"},"plain_text":"By Status","href":null},{"type":"text","text":{"content":" to isolate epics, sprints, tasks or bugs. Sort tasks by status, engineer or product manager. Switch to calendar view to see when work is scheduled to be completed.","link":null},"annotations":{"bold":false,"italic":false,"strikethrough":false,"underline":false,"code":false,"color":"default"},"plain_text":" to isolate epics, sprints, tasks or bugs. Sort tasks by status, engineer or product manager. Switch to calendar view to see when work is scheduled to be completed.","href":null}],"is_inline":false,"properties":[{"name":"Engineers","value":{"id":"%24v1Q","name":"Engineers","type":"people","people":{}}},{"name":"Tasks","value":{"id":"6%3Dyp","name":"Tasks","type":"relation","relation":{"database_id":"a1298679-9f79-48a8-a991-834cd72eca17","type":"dual_property","dual_property":{"synced_property_name":"Epic","synced_property_id":"L%5BK%3C"}}}},{"name":"Type","value":{"id":"9dB%5E","name":"Type","type":"select","select":{"options":[{"id":"ca62f85e-a4ac-474f-b493-82d2df005dff","name":"Epic ⛰️","color":"green"},{"id":"3f806034-9c48-4519-871e-60c9c32d73d8","name":"Task πŸ”¨","color":"yellow"},{"id":"1497e06a-abf3-4c81-a619-debfa0c70621","name":"Bug 🐞","color":"red"}]}}},{"name":"Sprint","value":{"id":"Jz.%40","name":"Sprint","type":"multi_select","multi_select":{"options":[{"id":"8d033c95-5515-4662-b8f3-60cb7d86487a","name":"Sprint 21","color":"default"},{"id":"bf3fcc55-aefc-43a8-82a0-2d4ac1e74d30","name":"Sprint 22","color":"default"},{"id":"7d78a5e4-28ef-4b21-8495-998fa6655014","name":"Sprint 23","color":"default"},{"id":"257e46d2-4a27-4298-b8c7-9b9bfb603bbd","name":"Sprint 20","color":"default"},{"id":"fbdb3f96-7979-4027-a461-aab8abda1ca8","name":"Sprint 24","color":"default"}]}}},{"name":"Epic","value":{"id":"L%5BK%3C","name":"Epic","type":"relation","relation":{"database_id":"a1298679-9f79-48a8-a991-834cd72eca17","type":"dual_property","dual_property":{"synced_property_name":"Tasks","synced_property_id":"6%3Dyp"}}}},{"name":"Timeline","value":{"id":"_G%2Bl","name":"Timeline","type":"date","date":{}}},{"name":"Created","value":{"id":"iwS0","name":"Created","type":"created_time","created_time":{}}},{"name":"Product Manager","value":{"id":"ma%3AW","name":"Product Manager","type":"people","people":{}}},{"name":"Priority","value":{"id":"%7BMEq","name":"Priority","type":"select","select":{"options":[{"id":"09fy","name":"P1 πŸ”₯","color":"red"},{"id":"e1b2f058-4989-4dee-a873-4e88f58d4d0a","name":"P2","color":"orange"},{"id":"0bb46e0b-be4f-4b9c-87c2-b990868e9f92","name":"P3","color":"yellow"},{"id":"1a5512c5-39ad-4fb7-959f-68f596849eeb","name":"P4","color":"green"},{"id":"28c7cce9-7163-4407-9569-3f070da82ad1","name":"P5","color":"blue"}]}}},{"name":"Status","value":{"id":"%7CF4-","name":"Status","type":"select","select":{"options":[{"id":"c224a5a5-c284-431e-a65d-90a71712bcac","name":"Not Started","color":"red"},{"id":"ab7c2b08-ed87-4c04-b30f-fa62440f75d5","name":"In Progress","color":"yellow"},{"id":"c410e525-9a47-4ed2-9e72-299abee65575","name":"Complete πŸ™Œ","color":"green"}]}}},{"name":"Projects","value":{"id":"title","name":"Projects","type":"title","title":{}}}],"parent":{"type":"workspace","workspace":true},"url":"https://www.notion.so/a12986799f7948a8a991834cd72eca17","public_url":null,"archived":false},"emitted_at":1687166005743} \ No newline at end of file +{"stream": "users", "data": {"object": "user", "id": "5612c094-99ec-4ba3-ac7f-df8d84c8d6be", "name": "Sherif Nada", "avatar_url": "https://s3-us-west-2.amazonaws.com/public.notion-static.com/305f7efc-2862-4342-ba99-5023f3e34717/6246757.png", "type": "person", "person": {"email": "sherif@airbyte.io"}}, "emitted_at": 1697023279924} +{"stream": "users", "data": {"object": "user", "id": "f5ac1fcb-a06b-4dcc-80e5-403c40dfb38a", "name": "Airyte", "avatar_url": null, "type": "person", "person": {"email": "integration-test@airbyte.io"}}, "emitted_at": 1697023279925} +{"stream": "users", "data": {"object": "user", "id": "c1ff0160-b2af-497a-aab7-8b61e625e4e3", "name": "Gil Cho", "avatar_url": "https://lh3.googleusercontent.com/a/ALm5wu0ElXfvy3YfVUyRn-aB9EZy5AZ1ougHuNyCGmO2=s100", "type": "person", "person": {"email": "gil@airbyte.io"}}, "emitted_at": 1697023279925} +{"stream": "databases", "data": {"object": "database", "id": "b75d2e55-cc80-4afa-a273-c78178ac6b3f", "cover": null, "icon": {"type": "emoji", "emoji": "\ud83d\ude4b"}, "created_time": "2021-10-19T13:33:00.000Z", "created_by": {"object": "user", "id": "f5ac1fcb-a06b-4dcc-80e5-403c40dfb38a"}, "last_edited_by": {"object": "user", "id": "f5ac1fcb-a06b-4dcc-80e5-403c40dfb38a"}, "last_edited_time": "2021-10-19T13:33:00.000Z", "title": [{"type": "text", "text": {"content": "Engineering Directory ", "link": null}, "annotations": {"bold": false, "italic": false, "strikethrough": false, "underline": false, "code": false, "color": "default"}, "plain_text": "Engineering Directory ", "href": null}], "description": [{"type": "text", "text": {"content": "Have a question about part of our codebase?\nFind the most knowledgeable person in this directory.\nLearn more about ", "link": null}, "annotations": {"bold": false, "italic": false, "strikethrough": false, "underline": false, "code": false, "color": "default"}, "plain_text": "Have a question about part of our codebase?\nFind the most knowledgeable person in this directory.\nLearn more about ", "href": null}, {"type": "text", "text": {"content": "Notion databases", "link": {"url": "https://www.notion.so/notion/Database-101-build-and-view-fd8cd2d212f74c50954c11086d85997e"}}, "annotations": {"bold": false, "italic": false, "strikethrough": false, "underline": false, "code": false, "color": "default"}, "plain_text": "Notion databases", "href": "https://www.notion.so/notion/Database-101-build-and-view-fd8cd2d212f74c50954c11086d85997e"}, {"type": "text", "text": {"content": ".", "link": null}, "annotations": {"bold": false, "italic": false, "strikethrough": false, "underline": false, "code": false, "color": "default"}, "plain_text": ".", "href": null}], "is_inline": false, "properties": [{"name": "Date Added", "value": {"id": "%2Fkv%22", "name": "Date Added", "type": "created_time", "created_time": {}}}, {"name": "Notes", "value": {"id": "mq%22D", "name": "Notes", "type": "rich_text", "rich_text": {}}}, {"name": "Person", "value": {"id": "uiZ%26", "name": "Person", "type": "people", "people": {}}}, {"name": "Name", "value": {"id": "title", "name": "Name", "type": "title", "title": {}}}], "parent": {"type": "block_id", "block_id": "b81f8caf-3ec4-4455-9a0b-25c2bd3b60cb"}, "url": "https://www.notion.so/b75d2e55cc804afaa273c78178ac6b3f", "public_url": null, "archived": false}, "emitted_at": 1697023281967} +{"stream": "databases", "data": {"object": "database", "id": "fbff7d4e-eca4-4432-91e6-ec64ba4b5a98", "cover": null, "icon": null, "created_time": "2021-10-19T13:33:00.000Z", "created_by": {"object": "user", "id": "f5ac1fcb-a06b-4dcc-80e5-403c40dfb38a"}, "last_edited_by": {"object": "user", "id": "f5ac1fcb-a06b-4dcc-80e5-403c40dfb38a"}, "last_edited_time": "2021-10-19T13:33:00.000Z", "title": [{"type": "text", "text": {"content": "Questions", "link": null}, "annotations": {"bold": false, "italic": false, "strikethrough": false, "underline": false, "code": false, "color": "default"}, "plain_text": "Questions", "href": null}], "description": [], "is_inline": true, "properties": [{"name": "Difficulty", "value": {"id": "'i6%2F", "name": "Difficulty", "type": "select", "select": {"options": [{"id": "f00068b9-7612-45da-91ad-1a7b1d259375", "name": "Easy", "color": "green"}, {"id": "8e244bfe-d4c7-48c5-9088-ffd6926b4ba0", "name": "Medium", "color": "yellow"}, {"id": "9ab57ef4-eab1-4b20-a502-047610b5c97d", "name": "Hard", "color": "red"}]}}}, {"name": "Skills", "value": {"id": "K%3AtR", "name": "Skills", "type": "multi_select", "multi_select": {"options": [{"id": "72f4d134-a773-48c1-ba3d-b529f55c6818", "name": "Front end", "color": "default"}, {"id": "c20f5d57-3e35-4b39-b556-05071203cc1a", "name": "Backend", "color": "default"}, {"id": "31d5735c-d6ba-4bd7-940f-bdcb36091c02", "name": "Architecture", "color": "default"}, {"id": "0398de54-af68-4c3a-9953-3788e8eaadbf", "name": "Algorithms", "color": "default"}, {"id": "df9dff09-7dea-4409-a10f-b5e2b546ad94", "name": "Data Structures", "color": "default"}]}}}, {"name": "Question Name", "value": {"id": "title", "name": "Question Name", "type": "title", "title": {}}}], "parent": {"type": "page_id", "page_id": "4999109d-1b7b-41a2-abb4-84f6b961ee74"}, "url": "https://www.notion.so/fbff7d4eeca4443291e6ec64ba4b5a98", "public_url": null, "archived": false}, "emitted_at": 1697023281968} +{"stream": "databases", "data": {"object": "database", "id": "9b1ce91e-a93a-437c-8c92-81083cd98540", "cover": null, "icon": {"type": "emoji", "emoji": "\u270f\ufe0f"}, "created_time": "2021-10-19T13:33:00.000Z", "created_by": {"object": "user", "id": "f5ac1fcb-a06b-4dcc-80e5-403c40dfb38a"}, "last_edited_by": {"object": "user", "id": "ec324c09-af75-40f0-b91a-49ded74fdaf5"}, "last_edited_time": "2023-09-13T00:06:00.000Z", "title": [{"type": "text", "text": {"content": "Meeting Notes", "link": null}, "annotations": {"bold": false, "italic": false, "strikethrough": false, "underline": false, "code": false, "color": "default"}, "plain_text": "Meeting Notes", "href": null}], "description": [{"type": "text", "text": {"content": "Use this template to capture notes from all meetings in one accessible spot.\nNotes can be tagged by meeting type to make them easy to find. \nSee when each meeting took place and who was there.\n\n", "link": null}, "annotations": {"bold": false, "italic": false, "strikethrough": false, "underline": false, "code": false, "color": "default"}, "plain_text": "Use this template to capture notes from all meetings in one accessible spot.\nNotes can be tagged by meeting type to make them easy to find. \nSee when each meeting took place and who was there.\n\n", "href": null}, {"type": "text", "text": {"content": "\u2193", "link": null}, "annotations": {"bold": true, "italic": false, "strikethrough": false, "underline": false, "code": false, "color": "default"}, "plain_text": "\u2193", "href": null}, {"type": "text", "text": {"content": " Click ", "link": null}, "annotations": {"bold": false, "italic": false, "strikethrough": false, "underline": false, "code": false, "color": "default"}, "plain_text": " Click ", "href": null}, {"type": "text", "text": {"content": "List View", "link": null}, "annotations": {"bold": false, "italic": false, "strikethrough": false, "underline": false, "code": true, "color": "default"}, "plain_text": "List View", "href": null}, {"type": "text", "text": {"content": " to create and see other views, including a board organized by meeting type.", "link": null}, "annotations": {"bold": false, "italic": false, "strikethrough": false, "underline": false, "code": false, "color": "default"}, "plain_text": " to create and see other views, including a board organized by meeting type.", "href": null}], "is_inline": false, "properties": [{"name": "Last Edited Time", "value": {"id": "0AiB", "name": "Last Edited Time", "type": "last_edited_time", "last_edited_time": {}}}, {"name": "Created By", "value": {"id": "F%5D)%3F", "name": "Created By", "type": "created_by", "created_by": {}}}, {"name": "Created", "value": {"id": "Ird4", "name": "Created", "type": "created_time", "created_time": {}}}, {"name": "Type", "value": {"id": "_%7B%5C7", "name": "Type", "type": "select", "select": {"options": [{"id": "3a8fd64c-899d-4c39-ba97-ac4f565d6e94", "name": "Post-mortem", "color": "red"}, {"id": "28b68013-20d5-4824-b810-45cde8784581", "name": "Standup", "color": "green"}, {"id": "8ee247a9-cb60-430a-9ea6-d5c053253334", "name": "Weekly Sync", "color": "blue"}, {"id": "5fb57c36-999f-49e2-b153-96531d086862", "name": "Sprint Planning", "color": "yellow"}, {"id": "1747fcca-8207-42c8-802f-fd43965c016a", "name": "Ad Hoc", "color": "orange"}]}}}, {"name": "Participants", "value": {"id": "b%3AeA", "name": "Participants", "type": "people", "people": {}}}, {"name": "Name", "value": {"id": "title", "name": "Name", "type": "title", "title": {}}}], "parent": {"type": "workspace", "workspace": true}, "url": "https://www.notion.so/9b1ce91ea93a437c8c9281083cd98540", "public_url": null, "archived": false}, "emitted_at": 1697023281968} +{"stream": "pages", "data": {"object": "page", "id": "39a69b4e-7cc2-4f7a-a656-dd128f3ce855", "created_time": "2021-10-19T13:33:00.000Z", "last_edited_time": "2021-10-19T13:33:00.000Z", "created_by": {"object": "user", "id": "f5ac1fcb-a06b-4dcc-80e5-403c40dfb38a"}, "last_edited_by": {"object": "user", "id": "f5ac1fcb-a06b-4dcc-80e5-403c40dfb38a"}, "cover": null, "icon": null, "parent": {"type": "database_id", "database_id": "9b1ce91e-a93a-437c-8c92-81083cd98540"}, "archived": false, "properties": [{"name": "Last Edited Time", "value": {"id": "0AiB", "type": "last_edited_time", "last_edited_time": "2021-10-19T13:33:00.000Z"}}, {"name": "Created By", "value": {"id": "F%5D)%3F", "type": "created_by", "created_by": {"object": "user", "id": "f5ac1fcb-a06b-4dcc-80e5-403c40dfb38a", "name": "Airyte", "avatar_url": null, "type": "person", "person": {"email": "integration-test@airbyte.io"}}}}, {"name": "Created", "value": {"id": "Ird4", "type": "created_time", "created_time": "2021-10-19T13:33:00.000Z"}}, {"name": "Type", "value": {"id": "_%7B%5C7", "type": "select", "select": {"id": "28b68013-20d5-4824-b810-45cde8784581", "name": "Standup", "color": "green"}}}, {"name": "Participants", "value": {"id": "b%3AeA", "type": "people", "people": []}}, {"name": "Name", "value": {"id": "title", "type": "title", "title": [{"type": "text", "text": {"content": "Daily Standup", "link": null}, "annotations": {"bold": false, "italic": false, "strikethrough": false, "underline": false, "code": false, "color": "default"}, "plain_text": "Daily Standup", "href": null}]}}], "url": "https://www.notion.so/Daily-Standup-39a69b4e7cc24f7aa656dd128f3ce855", "public_url": null}, "emitted_at": 1697023284463} +{"stream": "pages", "data": {"object": "page", "id": "621d3dc4-55fe-46ce-a3ff-83da06e5f9fb", "created_time": "2021-10-19T13:33:00.000Z", "last_edited_time": "2021-10-19T13:33:00.000Z", "created_by": {"object": "user", "id": "f5ac1fcb-a06b-4dcc-80e5-403c40dfb38a"}, "last_edited_by": {"object": "user", "id": "f5ac1fcb-a06b-4dcc-80e5-403c40dfb38a"}, "cover": null, "icon": null, "parent": {"type": "database_id", "database_id": "9b1ce91e-a93a-437c-8c92-81083cd98540"}, "archived": false, "properties": [{"name": "Last Edited Time", "value": {"id": "0AiB", "type": "last_edited_time", "last_edited_time": "2021-10-19T13:33:00.000Z"}}, {"name": "Created By", "value": {"id": "F%5D)%3F", "type": "created_by", "created_by": {"object": "user", "id": "f5ac1fcb-a06b-4dcc-80e5-403c40dfb38a", "name": "Airyte", "avatar_url": null, "type": "person", "person": {"email": "integration-test@airbyte.io"}}}}, {"name": "Created", "value": {"id": "Ird4", "type": "created_time", "created_time": "2021-10-19T13:33:00.000Z"}}, {"name": "Type", "value": {"id": "_%7B%5C7", "type": "select", "select": {"id": "5fb57c36-999f-49e2-b153-96531d086862", "name": "Sprint Planning", "color": "yellow"}}}, {"name": "Participants", "value": {"id": "b%3AeA", "type": "people", "people": []}}, {"name": "Name", "value": {"id": "title", "type": "title", "title": [{"type": "text", "text": {"content": "Sprint Planning ", "link": null}, "annotations": {"bold": false, "italic": false, "strikethrough": false, "underline": false, "code": false, "color": "default"}, "plain_text": "Sprint Planning ", "href": null}]}}], "url": "https://www.notion.so/Sprint-Planning-621d3dc455fe46cea3ff83da06e5f9fb", "public_url": null}, "emitted_at": 1697023284465} +{"stream": "pages", "data": {"object": "page", "id": "6eb2dedc-8b88-486c-8648-d1878bafb106", "created_time": "2021-10-19T13:33:00.000Z", "last_edited_time": "2021-10-19T13:33:00.000Z", "created_by": {"object": "user", "id": "f5ac1fcb-a06b-4dcc-80e5-403c40dfb38a"}, "last_edited_by": {"object": "user", "id": "f5ac1fcb-a06b-4dcc-80e5-403c40dfb38a"}, "cover": null, "icon": null, "parent": {"type": "database_id", "database_id": "9b1ce91e-a93a-437c-8c92-81083cd98540"}, "archived": false, "properties": [{"name": "Last Edited Time", "value": {"id": "0AiB", "type": "last_edited_time", "last_edited_time": "2021-10-19T13:33:00.000Z"}}, {"name": "Created By", "value": {"id": "F%5D)%3F", "type": "created_by", "created_by": {"object": "user", "id": "f5ac1fcb-a06b-4dcc-80e5-403c40dfb38a", "name": "Airyte", "avatar_url": null, "type": "person", "person": {"email": "integration-test@airbyte.io"}}}}, {"name": "Created", "value": {"id": "Ird4", "type": "created_time", "created_time": "2021-10-19T13:33:00.000Z"}}, {"name": "Type", "value": {"id": "_%7B%5C7", "type": "select", "select": {"id": "1747fcca-8207-42c8-802f-fd43965c016a", "name": "Ad Hoc", "color": "orange"}}}, {"name": "Participants", "value": {"id": "b%3AeA", "type": "people", "people": []}}, {"name": "Name", "value": {"id": "title", "type": "title", "title": [{"type": "text", "text": {"content": "Ad Hoc Meeting", "link": null}, "annotations": {"bold": false, "italic": false, "strikethrough": false, "underline": false, "code": false, "color": "default"}, "plain_text": "Ad Hoc Meeting", "href": null}]}}], "url": "https://www.notion.so/Ad-Hoc-Meeting-6eb2dedc8b88486c8648d1878bafb106", "public_url": null}, "emitted_at": 1697023284465} +{"stream": "blocks", "data": {"object": "block", "id": "b54364a0-ff86-45ba-b78e-a32018446a3f", "parent": {"type": "page_id", "page_id": "39a69b4e-7cc2-4f7a-a656-dd128f3ce855"}, "created_time": "2021-10-19T13:33:00.000Z", "last_edited_time": "2021-10-19T13:33:00.000Z", "created_by": {"object": "user", "id": "f5ac1fcb-a06b-4dcc-80e5-403c40dfb38a"}, "last_edited_by": {"object": "user", "id": "f5ac1fcb-a06b-4dcc-80e5-403c40dfb38a"}, "has_children": false, "archived": false, "type": "callout", "callout": {"rich_text": [{"type": "text", "text": {"content": "Change the title to include the date.", "link": null}, "annotations": {"bold": false, "italic": false, "strikethrough": false, "underline": false, "code": false, "color": "default"}, "plain_text": "Change the title to include the date.", "href": null}], "icon": {"type": "emoji", "emoji": "\ud83d\udca1"}, "color": "gray_background"}}, "emitted_at": 1697023288683} +{"stream": "blocks", "data": {"object": "block", "id": "c6608513-db08-4411-8ec6-e343580cbf84", "parent": {"type": "page_id", "page_id": "39a69b4e-7cc2-4f7a-a656-dd128f3ce855"}, "created_time": "2021-10-19T13:33:00.000Z", "last_edited_time": "2021-10-19T13:33:00.000Z", "created_by": {"object": "user", "id": "f5ac1fcb-a06b-4dcc-80e5-403c40dfb38a"}, "last_edited_by": {"object": "user", "id": "f5ac1fcb-a06b-4dcc-80e5-403c40dfb38a"}, "has_children": false, "archived": false, "type": "heading_1", "heading_1": {"rich_text": [{"type": "text", "text": {"content": "What did we do yesterday?", "link": null}, "annotations": {"bold": false, "italic": false, "strikethrough": false, "underline": false, "code": false, "color": "default"}, "plain_text": "What did we do yesterday?", "href": null}], "is_toggleable": false, "color": "default"}}, "emitted_at": 1697023288684} +{"stream": "blocks", "data": {"object": "block", "id": "ffb233aa-59da-4d04-9cc8-e6b767bd1a85", "parent": {"type": "page_id", "page_id": "39a69b4e-7cc2-4f7a-a656-dd128f3ce855"}, "created_time": "2021-10-19T13:33:00.000Z", "last_edited_time": "2021-10-19T13:33:00.000Z", "created_by": {"object": "user", "id": "f5ac1fcb-a06b-4dcc-80e5-403c40dfb38a"}, "last_edited_by": {"object": "user", "id": "f5ac1fcb-a06b-4dcc-80e5-403c40dfb38a"}, "has_children": false, "archived": false, "type": "bulleted_list_item", "bulleted_list_item": {"rich_text": [], "color": "default"}}, "emitted_at": 1697023288684} +{"stream": "comments", "data": {"object": "comment", "id": "e2dd2530-3ef1-4a27-83fb-3f16400b9838", "parent": {"type": "page_id", "page_id": "a55d276e-4bc2-4fcc-9fb3-e60b867c86e7"}, "discussion_id": "15e3cffe-3c9d-4ef2-87b1-86c46f85a205", "created_time": "2023-10-10T13:52:00.000Z", "last_edited_time": "2023-10-10T13:52:00.000Z", "created_by": {"object": "user", "id": "ec324c09-af75-40f0-b91a-49ded74fdaf5"}, "rich_text": [{"type": "text", "text": {"content": "Gathered voices speak,\nIdeas flow, plans take shape,\nWeek's promise whispers.", "link": null}, "annotations": {"bold": false, "italic": false, "strikethrough": false, "underline": false, "code": false, "color": "default"}, "plain_text": "Gathered voices speak,\nIdeas flow, plans take shape,\nWeek's promise whispers.", "href": null}], "page_last_edited_time": "2021-10-19T13:33:00.000Z"}, "emitted_at": 1697023326959} +{"stream": "comments", "data": {"object": "comment", "id": "e2087302-7eab-4e1d-a95b-472404fb51a2", "parent": {"type": "page_id", "page_id": "249f3796-7e81-47b0-9075-00ed2d06439d"}, "discussion_id": "be372b5d-2610-435e-981a-9be271874b8e", "created_time": "2023-09-12T20:55:00.000Z", "last_edited_time": "2023-09-12T20:55:00.000Z", "created_by": {"object": "user", "id": "ec324c09-af75-40f0-b91a-49ded74fdaf5"}, "rich_text": [{"type": "text", "text": {"content": "Ladybug in flight; Red and black on petal\u2019s edge; Spring\u2019s tiny delight.", "link": null}, "annotations": {"bold": false, "italic": false, "strikethrough": false, "underline": false, "code": false, "color": "default"}, "plain_text": "Ladybug in flight; Red and black on petal\u2019s edge; Spring\u2019s tiny delight.", "href": null}], "page_last_edited_time": "2021-10-19T13:33:00.000Z"}, "emitted_at": 1697023328874} +{"stream": "comments", "data": {"object": "comment", "id": "3f7ce236-fbc5-4b10-bb75-a0835c00aff3", "parent": {"type": "page_id", "page_id": "29299296-ef3f-4aff-aef5-02d651a59be3"}, "discussion_id": "c30808ec-fabd-4e7b-947f-a36dbec5c1db", "created_time": "2023-09-12T20:56:00.000Z", "last_edited_time": "2023-09-12T20:56:00.000Z", "created_by": {"object": "user", "id": "ec324c09-af75-40f0-b91a-49ded74fdaf5"}, "rich_text": [{"type": "text", "text": {"content": "APIs converge; Fixing gaps in code and docs; Two worlds now as one.", "link": null}, "annotations": {"bold": false, "italic": false, "strikethrough": false, "underline": false, "code": false, "color": "default"}, "plain_text": "APIs converge; Fixing gaps in code and docs; Two worlds now as one.", "href": null}], "page_last_edited_time": "2021-10-19T13:33:00.000Z"}, "emitted_at": 1697023329304} diff --git a/airbyte-integrations/connectors/source-notion/integration_tests/sample_state.json b/airbyte-integrations/connectors/source-notion/integration_tests/sample_state.json index ef4cc82c0cd0..0c49b5a9f443 100644 --- a/airbyte-integrations/connectors/source-notion/integration_tests/sample_state.json +++ b/airbyte-integrations/connectors/source-notion/integration_tests/sample_state.json @@ -31,5 +31,16 @@ "name": "blocks" } } + }, + { + "type": "STREAM", + "stream": { + "stream_state": { + "last_edited_time": "2021-10-10T04:00:00.000Z" + }, + "stream_descriptor": { + "name": "comments" + } + } } ] diff --git a/airbyte-integrations/connectors/source-notion/metadata.yaml b/airbyte-integrations/connectors/source-notion/metadata.yaml index 3d34d88bbc64..768f819081bb 100644 --- a/airbyte-integrations/connectors/source-notion/metadata.yaml +++ b/airbyte-integrations/connectors/source-notion/metadata.yaml @@ -5,7 +5,7 @@ data: connectorSubtype: api connectorType: source definitionId: 6e00b415-b02e-4160-bf02-58176a0ae687 - dockerImageTag: 1.1.2 + dockerImageTag: 2.0.0 dockerRepository: airbyte/source-notion githubIssueLabel: source-notion icon: notion.svg @@ -17,6 +17,17 @@ data: oss: enabled: true releaseStage: generally_available + releases: + breakingChanges: + 2.0.0: + message: "Version 2.0.0 introduces schema changes to multiple properties shared by the blocks, databases and pages streams. These changes were introduced to reflect updates to the Notion API. A full schema refresh and data reset are required to upgrade to this version." + upgradeDeadline: "2023-11-09" + suggestedStreams: + streams: + - blocks + - databases + - pages + - users documentationUrl: https://docs.airbyte.com/integrations/sources/notion tags: - language:python diff --git a/airbyte-integrations/connectors/source-notion/setup.py b/airbyte-integrations/connectors/source-notion/setup.py index 102f3ab3947a..a5a21608b86a 100644 --- a/airbyte-integrations/connectors/source-notion/setup.py +++ b/airbyte-integrations/connectors/source-notion/setup.py @@ -13,6 +13,7 @@ "pytest~=6.1", "pytest-mock~=3.6.1", "requests-mock", + "freezegun", ] setup( diff --git a/airbyte-integrations/connectors/source-notion/source_notion/schemas/blocks.json b/airbyte-integrations/connectors/source-notion/source_notion/schemas/blocks.json index 797a17611b39..177adee4fdd3 100644 --- a/airbyte-integrations/connectors/source-notion/source_notion/schemas/blocks.json +++ b/airbyte-integrations/connectors/source-notion/source_notion/schemas/blocks.json @@ -13,10 +13,18 @@ "type": "string" }, "created_time": { - "type": "string" + "type": "string", + "format": "date-time" + }, + "created_by": { + "$ref": "user.json" + }, + "last_edited_by": { + "$ref": "user.json" }, "last_edited_time": { - "type": "string" + "type": "string", + "format": "date-time" }, "archived": { "type": "boolean" @@ -26,58 +34,66 @@ }, "type": { "enum": [ - "paragraph", + "bookmark", + "breadcrumb", + "bulleted_list_item", + "callout", + "child_database", + "child_page", + "code", + "column", + "column_list", + "divider", + "embed", + "equation", + "file", "heading_1", "heading_2", "heading_3", - "callout", - "bulleted_list_item", + "image", + "link_preview", + "link_to_page", "numbered_list_item", + "paragraph", + "pdf", + "quote", + "synced_block", + "table", + "table_of_contents", + "table_row", + "template", "to_do", "toggle", - "code", - "child_page", - "child_database", - "embed", - "image", - "video", - "file", - "pdf", - "bookmark", - "equation", - "unsupported" + "unsupported", + "video" ] }, - "paragraph": { "$ref": "text_element.json" }, - "quote": { "$ref": "text_element.json" }, - "bulleted_list_item": { "$ref": "text_element.json" }, - "numbered_list_item": { "$ref": "text_element.json" }, - "toggle": { "$ref": "text_element.json" }, - "heading_1": { "$ref": "heading.json" }, - "heading_2": { "$ref": "heading.json" }, - "heading_3": { "$ref": "heading.json" }, - "callout": { + "bookmark": { "type": "object", "properties": { - "color": { "type": "string" }, - "text": { "type": "array", "items": { "$ref": "rich_text.json" } }, - "icon": { "$ref": "icon.json" }, - "children": { "type": "array", "items": { "type": "object" } } + "url": { "type": "string" }, + "caption": { "type": "array", "items": { "$ref": "rich_text.json" } } } }, - "to_do": { + "breadcrumb": { + "type": "object" + }, + "bulleted_list_item": { "$ref": "text_element.json" }, + "callout": { "type": "object", "properties": { - "text": { "type": "array", "items": { "$ref": "rich_text.json" } }, - "checked": { "type": ["null", "boolean"] }, - "children": { "type": "array", "items": { "type": "object" } } + "color": { "type": "string" }, + "rich_text": { "type": "array", "items": { "$ref": "rich_text.json" } }, + "icon": { "$ref": "icon.json" } } }, + "child_page": { "$ref": "child.json" }, + "child_database": { "$ref": "child.json" }, "code": { "type": "object", "properties": { - "color": { "type": "string" }, - "text": { "type": "array", "items": { "$ref": "rich_text.json" } }, + "caption": { "type": "array", "items": { "$ref": "rich_text.json" } }, + "rich_text": { "type": "array", "items": { "$ref": "rich_text.json" } }, "language": { "enum": [ "abap", @@ -156,30 +172,88 @@ } } }, - "child_page": { "$ref": "child.json" }, - "child_database": { "$ref": "child.json" }, + "column": { + "type": "object" + }, + "column_list": { + "type": "object" + }, + "divider": { + "type": "object" + }, "embed": { "type": "object", "properties": { "url": { "type": "string" } } }, - "image": { "$ref": "file.json" }, - "video": { "$ref": "file.json" }, + "equation": { + "type": "object", + "properties": { + "expression": { "type": "string" } + } + }, "file": { "$ref": "file.json" }, + "heading_1": { "$ref": "heading.json" }, + "heading_2": { "$ref": "heading.json" }, + "heading_3": { "$ref": "heading.json" }, + "image": { "$ref": "file.json" }, + "link_preview": { + "type": "object", + "properties": { + "url": { "type": "string" } + } + }, + "link_to_page": { + "type": "object", + "properties": { + "page_id": { "type": "string" }, + "type": { "type": "string" } + } + }, + "numbered_list_item": { "$ref": "text_element.json" }, + "paragraph": { "$ref": "text_element.json" }, "pdf": { "$ref": "file.json" }, - "bookmark": { + "quote": { "$ref": "text_element.json" }, + "table": { "type": "object", "properties": { - "url": { "type": "string" }, - "caption": { "type": "array", "items": { "$ref": "rich_text.json" } } + "table_width": { "type": "integer" }, + "has_column_header": { "type": "boolean" }, + "has_row_header": { "type": "boolean" } } }, - "equation": { + "table_of_contents": { "type": "object", "properties": { - "expression": { "type": "string" } + "color": { "type": "string" } + } + }, + "table_row": { + "type": "object", + "properties": { + "cells": { "type": "array", "items": { "$ref": "rich_text.json" } } + } + }, + "template": { + "type": "object", + "properties": { + "rich_text": { "type": "array", "items": { "$ref": "rich_text.json" } } } + }, + "to_do": { + "type": "object", + "properties": { + "rich_text": { "type": "array", "items": { "$ref": "rich_text.json" } }, + "checked": { "type": ["null", "boolean"] }, + "color": { "type": "string" }, + "children": { "type": "array", "items": { "type": "object" } } + } + }, + "toggle": { "$ref": "text_element.json" }, + "video": { "$ref": "file.json" }, + "unsupported": { + "type": "object" } } } diff --git a/airbyte-integrations/connectors/source-notion/source_notion/schemas/comments.json b/airbyte-integrations/connectors/source-notion/source_notion/schemas/comments.json new file mode 100644 index 000000000000..1d6156d5c3a7 --- /dev/null +++ b/airbyte-integrations/connectors/source-notion/source_notion/schemas/comments.json @@ -0,0 +1,90 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "additionalProperties": true, + "properties": { + "object": { + "enum": ["comment"] + }, + "id": { + "type": "string" + }, + "parent": { + "type": "object", + "properties": { + "type": { + "enum": ["page_id"] + }, + "page_id": { + "type": "string" + } + } + }, + "discussion_id": { + "type": "string" + }, + "created_time": { + "type": "string" + }, + "last_edited_time": { + "type": "string" + }, + "page_last_edited_time": { + "type": "string" + }, + "created_by": { + "$ref": "user.json" + }, + "rich_text": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "text": { + "type": "object", + "properties": { + "content": { + "type": "string" + }, + "link": { + "type": ["null", "object"] + } + } + }, + "annotations": { + "type": "object", + "properties": { + "bold": { + "type": "boolean" + }, + "italic": { + "type": "boolean" + }, + "strikethrough": { + "type": "boolean" + }, + "underline": { + "type": "boolean" + }, + "code": { + "type": "boolean" + }, + "color": { + "type": "string" + } + } + }, + "plain_text": { + "type": "string" + }, + "href": { + "type": ["null", "string"] + } + } + } + } + } +} diff --git a/airbyte-integrations/connectors/source-notion/source_notion/schemas/databases.json b/airbyte-integrations/connectors/source-notion/source_notion/schemas/databases.json index 8b521d46fcb9..55f004c52241 100644 --- a/airbyte-integrations/connectors/source-notion/source_notion/schemas/databases.json +++ b/airbyte-integrations/connectors/source-notion/source_notion/schemas/databases.json @@ -10,10 +10,12 @@ "type": "string" }, "created_time": { - "type": "string" + "type": "string", + "format": "date-time" }, "last_edited_time": { - "type": "string" + "type": "string", + "format": "date-time" }, "title": { "type": "array", @@ -21,6 +23,12 @@ "$ref": "rich_text.json" } }, + "description": { + "type": "array", + "items": { + "$ref": "rich_text.json" + } + }, "last_edited_by": { "$ref": "user.json" }, @@ -45,6 +53,9 @@ "is_inline": { "type": ["null", "boolean"] }, + "public_url": { + "type": ["null", "string"] + }, "properties": { "type": "array", "items": { @@ -57,7 +68,7 @@ "value": { "type": "object", "additionalProperties": true, - "oneOf": [ + "anyOf": [ { "type": "object", "additionalProperties": true, @@ -67,19 +78,26 @@ }, "type": { "enum": [ - "title", - "rich_text", - "date", - "people", - "files", "checkbox", - "url", - "email", - "phone_number", - "created_time", "created_by", + "created_time", + "date", + "email", + "files", + "formula", + "last_edited_by", "last_edited_time", - "last_edited_by" + "multi_select", + "number", + "people", + "phone_number", + "relation", + "rich_text", + "rollup", + "select", + "status", + "title", + "url" ] }, "name": { @@ -87,6 +105,159 @@ } } }, + { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "enum": ["checkbox"] + }, + "name": { + "type": "string" + }, + "checkbox": { + "type": "object" + } + } + }, + { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "enum": ["created_by"] + }, + "name": { + "type": "string" + }, + "created_by": { + "type": "object" + } + } + }, + { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "enum": ["created_time"] + }, + "name": { + "type": "string" + }, + "created_time": { + "type": "object" + } + } + }, + { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "enum": ["date"] + }, + "name": { + "type": "string" + }, + "date": { + "type": "object" + } + } + }, + { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "enum": ["email"] + }, + "name": { + "type": "string" + }, + "email": { + "type": "object" + } + } + }, + { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "enum": ["files"] + }, + "name": { + "type": "string" + }, + "files": { + "type": "object" + } + } + }, + { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "enum": ["formula"] + }, + "name": { + "type": "string" + }, + "expression": { + "type": "string" + } + } + }, + { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "enum": ["last_edited_by"] + }, + "name": { + "type": "string" + }, + "last_edited_by": { + "type": "string" + } + } + }, + { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "enum": ["last_edited_time"] + }, + "name": { + "type": "string" + }, + "last_edited_time": { + "type": "string" + } + } + }, { "type": "object", "properties": { @@ -101,42 +272,46 @@ }, "format": { "enum": [ - "number", - "number_with_commas", - "percent", - "dollar", + "argentine_peso", + "baht", "canadian_dollar", + "chilean_peso", + "colombian_peso", + "danish_krone", + "dirham", + "dollar", "euro", - "pound", - "yen", - "ruble", - "rupee", - "won", - "yuan", - "real", - "lira", - "rupiah", + "forint", "franc", "hong_kong_dollar", - "new_zealand_dollar", + "koruna", "krona", - "norwegian_krone", + "leu", + "lira", "mexican_peso", - "rand", "new_taiwan_dollar", - "danish_krone", - "zloty", - "baht", - "forint", - "koruna", - "shekel", - "chilean_peso", + "new_zealand_dollar", + "norwegian_krone", + "number", + "number_with_commas", + "percent", + "peruvian_sol", "philippine_peso", - "dirham", - "colombian_peso", - "riyal", + "pound", + "rand", + "real", "ringgit", - "leu" + "riyal", + "ruble", + "rupee", + "rupiah", + "shekel", + "singapore_dollar", + "uruguayan_peso", + "won", + "yen", + "yuan", + "zloty" ] } } @@ -168,16 +343,33 @@ "type": "string" }, "type": { - "enum": ["formula"] + "enum": ["people"] }, "name": { "type": "string" }, - "expression": { + "people": { "type": "string" } } }, + { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "enum": ["phone_number"] + }, + "name": { + "type": "string" + }, + "phone_number": { + "type": "object" + } + } + }, { "type": "object", "properties": { @@ -201,6 +393,23 @@ } } }, + { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "enum": ["rich_text"] + }, + "name": { + "type": "string" + }, + "rich_text": { + "type": "object" + } + } + }, { "type": "object", "properties": { @@ -227,23 +436,115 @@ }, "function": { "enum": [ - "count_all", - "count_values", - "count_unique_values", - "count_empty", - "count_not_empty", - "percent_empty", - "percent_not_empty", - "sum", "average", + "checked", + "count_per_group", + "count", + "count_values", + "date_range", + "earliest_date", + "empty", + "latest_date", + "max", "median", "min", - "max", + "not_empty", + "percent_checked", + "percent_empty", + "percent_not_empty", + "percent_per_group", + "percent_unchecked", "range", - "show_original" + "unchecked", + "unique", + "show_original", + "show_unique", + "sum" ] } } + }, + { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "enum": ["status"] + }, + "name": { + "type": "string" + }, + "status": { + "type": "object", + "properties": { + "options": { + "type": "array", + "items": { + "$ref": "options.json" + } + }, + "groups": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "color": { + "type": "string" + }, + "option_ids": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + } + }, + { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "enum": ["title"] + }, + "name": { + "type": "string" + }, + "title": { + "type": "object" + } + } + }, + { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "enum": ["url"] + }, + "name": { + "type": "string" + }, + "url": { + "type": "object" + } + } } ] } diff --git a/airbyte-integrations/connectors/source-notion/source_notion/schemas/pages.json b/airbyte-integrations/connectors/source-notion/source_notion/schemas/pages.json index 14275b932ace..7972b07d6c73 100644 --- a/airbyte-integrations/connectors/source-notion/source_notion/schemas/pages.json +++ b/airbyte-integrations/connectors/source-notion/source_notion/schemas/pages.json @@ -10,14 +10,25 @@ "type": "string" }, "created_time": { - "type": "string" + "type": "string", + "format": "date-time" + }, + "created_by": { + "$ref": "user.json" }, "last_edited_time": { - "type": "string" + "type": "string", + "format": "date-time" + }, + "last_edited_by": { + "$ref": "user.json" }, "archived": { "type": "boolean" }, + "icon": { + "$ref": "icon.json" + }, "cover": { "$ref": "file.json" }, @@ -27,6 +38,9 @@ "url": { "type": "string" }, + "public_url": { + "type": ["null", "string"] + }, "properties": { "type": "array", "items": { @@ -61,7 +75,10 @@ "type": { "enum": ["rich_text"] }, - "rich_text": { "$ref": "rich_text.json" } + "rich_text": { + "type": ["null", "array"], + "items": { "$ref": "rich_text.json" } + } } }, { @@ -213,7 +230,7 @@ "properties": { "id": { "type": "string" }, "type": { "enum": ["phone_number"] }, - "phone_number": { "type": "string" } + "phone_number": { "type": "object" } } }, { @@ -247,6 +264,62 @@ "type": { "enum": ["last_edited_by"] }, "last_edited_by": { "$ref": "user.json" } } + }, + { + "type": "object", + "properties": { + "id": { "type": "string" }, + "type": { "enum": ["number"] }, + "number": { + "type": "object", + "properties": { + "format": { "type": "string" } + } + } + } + }, + { + "type": "object", + "properties": { + "id": { "type": "string" }, + "type": { "enum": ["status"] }, + "status": { "$ref": "options.json" } + } + }, + { + "type": "object", + "properties": { + "id": { "type": "string" }, + "type": { "enum": ["unique_id"] }, + "unique_id": { + "type": "object", + "properties": { + "number": { "type": "number" }, + "prefix": { "type": ["null", "string"] } + } + } + } + }, + { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "enum": ["verification"] + }, + "verification": { + "type": "object", + "properties": { + "state": { + "enum": ["verified", "unverified"] + }, + "verified_by": { "$ref": "user.json" }, + "date": { "$ref": "date.json" } + } + } + } } ] } diff --git a/airbyte-integrations/connectors/source-notion/source_notion/schemas/shared/heading.json b/airbyte-integrations/connectors/source-notion/source_notion/schemas/shared/heading.json index eb526a17a235..b321541d43f6 100644 --- a/airbyte-integrations/connectors/source-notion/source_notion/schemas/shared/heading.json +++ b/airbyte-integrations/connectors/source-notion/source_notion/schemas/shared/heading.json @@ -4,6 +4,7 @@ "additionalProperties": true, "properties": { "color": { "type": "string" }, - "text": { "type": "array", "items": { "$ref": "rich_text.json" } } + "rich_text": { "type": "array", "items": { "$ref": "rich_text.json" } }, + "is_toggleable": { "type": "boolean" } } } diff --git a/airbyte-integrations/connectors/source-notion/source_notion/schemas/shared/parent.json b/airbyte-integrations/connectors/source-notion/source_notion/schemas/shared/parent.json index 5c17153c2a14..db2cf20b9e81 100644 --- a/airbyte-integrations/connectors/source-notion/source_notion/schemas/shared/parent.json +++ b/airbyte-integrations/connectors/source-notion/source_notion/schemas/shared/parent.json @@ -4,7 +4,10 @@ "additionalProperties": true, "properties": { "type": { - "enum": ["database_id", "page_id", "workspace"] + "enum": ["block_id", "database_id", "page_id", "workspace"] + }, + "block_id": { + "type": "string" }, "database_id": { "type": "string" diff --git a/airbyte-integrations/connectors/source-notion/source_notion/schemas/shared/rich_text.json b/airbyte-integrations/connectors/source-notion/source_notion/schemas/shared/rich_text.json index 781c739a17be..cc003048b875 100644 --- a/airbyte-integrations/connectors/source-notion/source_notion/schemas/shared/rich_text.json +++ b/airbyte-integrations/connectors/source-notion/source_notion/schemas/shared/rich_text.json @@ -26,24 +26,21 @@ } } }, - "rich_text": { + "mention": { "type": ["null", "object"], "additionalProperties": true, "properties": { - "content": { + "type": { + "type": ["null", "string"] + } + } + }, + "equation": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "expression": { "type": ["null", "string"] - }, - "link": { - "type": ["null", "object"], - "additionalProperties": true, - "properties": { - "type": { - "enum": ["url"] - }, - "url": { - "type": ["null", "string"] - } - } } } }, diff --git a/airbyte-integrations/connectors/source-notion/source_notion/schemas/shared/text_element.json b/airbyte-integrations/connectors/source-notion/source_notion/schemas/shared/text_element.json index ee7ca504414e..65411d825b11 100644 --- a/airbyte-integrations/connectors/source-notion/source_notion/schemas/shared/text_element.json +++ b/airbyte-integrations/connectors/source-notion/source_notion/schemas/shared/text_element.json @@ -4,7 +4,7 @@ "additionalProperties": true, "properties": { "color": { "type": "string" }, - "text": { "type": "array", "items": { "$ref": "rich_text.json" } }, + "rich_text": { "type": "array", "items": { "$ref": "rich_text.json" } }, "children": { "type": "array", "items": { "type": "object" } } } } diff --git a/airbyte-integrations/connectors/source-notion/source_notion/schemas/shared/user.json b/airbyte-integrations/connectors/source-notion/source_notion/schemas/shared/user.json index 2fb94bfa035e..d893b1147b7e 100644 --- a/airbyte-integrations/connectors/source-notion/source_notion/schemas/shared/user.json +++ b/airbyte-integrations/connectors/source-notion/source_notion/schemas/shared/user.json @@ -10,7 +10,7 @@ "type": "string" }, "name": { - "type": "string" + "type": ["null", "string"] }, "avatar_url": { "type": ["null", "string"] @@ -23,7 +23,7 @@ "additionalProperties": true, "properties": { "email": { - "type": "string" + "type": ["null", "string"] } } }, diff --git a/airbyte-integrations/connectors/source-notion/source_notion/source.py b/airbyte-integrations/connectors/source-notion/source_notion/source.py index 69dc093b4244..957d037c4157 100644 --- a/airbyte-integrations/connectors/source-notion/source_notion/source.py +++ b/airbyte-integrations/connectors/source-notion/source_notion/source.py @@ -3,42 +3,39 @@ # +import logging +from itertools import islice from typing import Any, List, Mapping, Tuple import requests -from airbyte_cdk.logger import AirbyteLogger from airbyte_cdk.models import SyncMode from airbyte_cdk.sources import AbstractSource from airbyte_cdk.sources.streams import Stream from airbyte_cdk.sources.streams.http.requests_native_auth import TokenAuthenticator -from .streams import Blocks, Databases, Pages, Users +from .streams import Blocks, Comments, Databases, Pages, Users -class NotionAuthenticator: - def __init__(self, config: Mapping[str, Any]): - self.config = config - - def get_access_token(self): - credentials = self.config.get("credentials") - if credentials: - auth_type = credentials.get("auth_type") - if auth_type == "OAuth2.0": - return TokenAuthenticator(credentials.get("access_token")) - return TokenAuthenticator(credentials.get("token")) +class SourceNotion(AbstractSource): + def _get_authenticator(self, config: Mapping[str, Any]) -> TokenAuthenticator: + credentials = config.get("credentials", {}) + auth_type = credentials.get("auth_type") + token = credentials.get("access_token") if auth_type == "OAuth2.0" else credentials.get("token") - # support the old config - if "access_token" in self.config: - return TokenAuthenticator(self.config.get("access_token")) + if credentials and token: + return TokenAuthenticator(token) + # The original implementation did not support OAuth, and therefore had no "credentials" key. + # We can maintain backwards compatibility for OG connections by checking for the deprecated "access_token" key, just in case. + if config.get("access_token"): + return TokenAuthenticator(config["access_token"]) -class SourceNotion(AbstractSource): - def check_connection(self, logger: AirbyteLogger, config: Mapping[str, Any]) -> Tuple[bool, any]: + def check_connection(self, logger: logging.Logger, config: Mapping[str, Any]) -> Tuple[bool, any]: try: - authenticator = NotionAuthenticator(config).get_access_token() - stream = Users(authenticator=authenticator, config=config) + authenticator = self._get_authenticator(config) + stream = Pages(authenticator=authenticator, config=config) records = stream.read_records(sync_mode=SyncMode.full_refresh) - next(records) + next(islice(records, 5)) # Read the first 5 records to ensure that the connection is valid. return True, None except requests.exceptions.RequestException as e: # The most likely user error will be incorrectly configured credentials. We can provide a specific error message for those cases. Otherwise, the stock Notion API message should suffice. @@ -59,10 +56,11 @@ def check_connection(self, logger: AirbyteLogger, config: Mapping[str, Any]) -> ) def streams(self, config: Mapping[str, Any]) -> List[Stream]: - AirbyteLogger().log("INFO", f"Using start_date: {config['start_date']}") - authenticator = NotionAuthenticator(config).get_access_token() + + authenticator = self._get_authenticator(config) args = {"authenticator": authenticator, "config": config} pages = Pages(**args) blocks = Blocks(parent=pages, **args) + comments = Comments(parent=pages, **args) - return [Users(**args), Databases(**args), pages, blocks] + return [Users(**args), Databases(**args), pages, blocks, comments] diff --git a/airbyte-integrations/connectors/source-notion/source_notion/spec.json b/airbyte-integrations/connectors/source-notion/source_notion/spec.json index b237e7691e2b..fb67d98b6dec 100644 --- a/airbyte-integrations/connectors/source-notion/source_notion/spec.json +++ b/airbyte-integrations/connectors/source-notion/source_notion/spec.json @@ -4,19 +4,19 @@ "$schema": "http://json-schema.org/draft-07/schema#", "title": "Notion Source Spec", "type": "object", - "required": ["start_date"], "properties": { "start_date": { "title": "Start Date", - "description": "UTC date and time in the format 2017-01-25T00:00:00.000Z. Any data before this date will not be replicated.", + "description": "UTC date and time in the format YYYY-MM-DDTHH:MM:SS.000Z. During incremental sync, any data generated before this date will not be replicated. If left blank, the start date will be set to 2 years before the present date.", "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}Z$", + "pattern_descriptor": "YYYY-MM-DDTHH:MM:SS.000Z", "examples": ["2020-11-16T00:00:00.000Z"], "type": "string", "format": "date-time" }, "credentials": { - "title": "Authenticate using", - "description": "Pick an authentication method.", + "title": "Authentication Method", + "description": "Choose either OAuth (recommended for Airbyte Cloud) or Access Token. See our docs for more information.", "type": "object", "order": 1, "oneOf": [ @@ -37,19 +37,19 @@ "client_id": { "title": "Client ID", "type": "string", - "description": "The ClientID of your Notion integration.", + "description": "The Client ID of your Notion integration. See our docs for more information.", "airbyte_secret": true }, "client_secret": { "title": "Client Secret", "type": "string", - "description": "The ClientSecret of your Notion integration.", + "description": "The Client Secret of your Notion integration. See our docs for more information.", "airbyte_secret": true }, "access_token": { "title": "Access Token", "type": "string", - "description": "Access Token is a token you received by complete the OauthWebFlow of Notion.", + "description": "The Access Token received by completing the OAuth flow for your Notion integration. See our docs for more information.", "airbyte_secret": true } } @@ -65,7 +65,7 @@ }, "token": { "title": "Access Token", - "description": "Notion API access token, see the docs for more information on how to obtain this token.", + "description": "The Access Token for your private Notion integration. See the docs for more information on how to obtain this token.", "type": "string", "airbyte_secret": true } diff --git a/airbyte-integrations/connectors/source-notion/source_notion/streams.py b/airbyte-integrations/connectors/source-notion/source_notion/streams.py index 061fa5c3912d..17be2d071f61 100644 --- a/airbyte-integrations/connectors/source-notion/source_notion/streams.py +++ b/airbyte-integrations/connectors/source-notion/source_notion/streams.py @@ -3,14 +3,19 @@ # from abc import ABC -from typing import Any, Iterable, List, Mapping, MutableMapping, Optional, TypeVar +from typing import Any, Dict, Iterable, List, Mapping, MutableMapping, Optional, TypeVar +import pendulum import pydantic import requests +from airbyte_cdk.logger import AirbyteLogger as Logger from airbyte_cdk.models import SyncMode -from airbyte_cdk.sources.streams.availability_strategy import AvailabilityStrategy +from airbyte_cdk.sources import Source +from airbyte_cdk.sources.streams import Stream from airbyte_cdk.sources.streams.http import HttpStream, HttpSubStream +from airbyte_cdk.sources.streams.http.availability_strategy import HttpAvailabilityStrategy from airbyte_cdk.sources.streams.http.exceptions import UserDefinedBackoffException +from requests import HTTPError from .utils import transform_properties @@ -18,6 +23,20 @@ MAX_BLOCK_DEPTH = 30 +class NotionAvailabilityStrategy(HttpAvailabilityStrategy): + """ + Inherit from HttpAvailabilityStrategy with slight modification to 403 error message. + """ + + def reasons_for_unavailable_status_codes(self, stream: Stream, logger: Logger, source: Source, error: HTTPError) -> Dict[int, str]: + + reasons_for_codes: Dict[int, str] = { + requests.codes.FORBIDDEN: "This is likely due to insufficient permissions for your Notion integration. " + "Please make sure your integration has read access for the resources you are trying to sync" + } + return reasons_for_codes + + class NotionStream(HttpStream, ABC): url_base = "https://api.notion.com/v1/" @@ -30,11 +49,16 @@ class NotionStream(HttpStream, ABC): def __init__(self, config: Mapping[str, Any], **kwargs): super().__init__(**kwargs) - self.start_date = config["start_date"] + self.start_date = config.get("start_date") + + # If start_date is not found in config, set it to 2 years ago and update value in config for use in next stream + if not self.start_date: + self.start_date = pendulum.now().subtract(years=2).in_timezone("UTC").format("YYYY-MM-DDTHH:mm:ss.SSS[Z]") + config["start_date"] = self.start_date @property - def availability_strategy(self) -> Optional["AvailabilityStrategy"]: - return None + def availability_strategy(self) -> HttpAvailabilityStrategy: + return NotionAvailabilityStrategy() @staticmethod def check_invalid_start_cursor(response: requests.Response): @@ -70,9 +94,9 @@ def next_page_token( "has_more": true, "results": [ ... ] } - Doc: https://developers.notion.com/reference/pagination + Doc: https://developers.notion.com/reference/intro#pagination """ - next_cursor = response.json()["next_cursor"] + next_cursor = response.json().get("next_cursor") if next_cursor: return {"next_cursor": next_cursor} @@ -158,7 +182,7 @@ def parse_response(self, response: requests.Response, stream_state: Mapping[str, state_lmd = stream_state.get(self.cursor_field, "") if isinstance(state_lmd, StateValueWrapper): state_lmd = state_lmd.value - if not stream_state or record_lmd >= state_lmd: + if (not stream_state or record_lmd >= state_lmd) and record_lmd >= self.start_date: yield from transform_properties(record) def get_updated_state( @@ -298,3 +322,64 @@ def should_retry(self, response: requests.Response) -> bool: else: return super().should_retry(response) return super().should_retry(response) + + +class Comments(HttpSubStream, IncrementalNotionStream): + """ + Comments Object Docs: https://developers.notion.com/reference/comment-object + Comments Endpoint Docs: https://developers.notion.com/reference/retrieve-a-comment + """ + + http_method = "GET" + # We can use the "last edited time" of the parent Page as the cursor field, + # since we cannot guarantee the order of comments between pages. + cursor_field = "page_last_edited_time" + + def path(self, **kwargs) -> str: + return "comments" + + def request_params( + self, next_page_token: Mapping[str, Any] = None, stream_slice: Mapping[str, Any] = None, **kwargs + ) -> MutableMapping[str, Any]: + block_id = stream_slice.get("block_id") + params = {"block_id": block_id, "page_size": self.page_size} + + if next_page_token: + params["start_cursor"] = next_page_token["next_cursor"] + + return params + + def parse_response( + self, response: requests.Response, stream_state: Mapping[str, Any], stream_slice: Mapping[str, Any] = None, **kwargs + ) -> Iterable[Mapping]: + + # Get the parent's "last edited time" to compare against state + page_last_edited_time = stream_slice.get("page_last_edited_time", "") + records = response.json().get("results", []) + + for record in records: + record["page_last_edited_time"] = page_last_edited_time + state_last_edited_time = stream_state.get(self.cursor_field, "") + + if isinstance(state_last_edited_time, StateValueWrapper): + state_last_edited_time = state_last_edited_time.value + + if not stream_state or page_last_edited_time >= state_last_edited_time: + yield from transform_properties(record) + + def read_records(self, **kwargs) -> Iterable[Mapping[str, Any]]: + + yield from IncrementalNotionStream.read_records(self, **kwargs) + + def stream_slices( + self, sync_mode: SyncMode, cursor_field: Optional[List[str]] = None, **kwargs + ) -> Iterable[Optional[Mapping[str, Any]]]: + + # Gather parent stream records in full + parent_records = self.parent.read_records(sync_mode=SyncMode.full_refresh, cursor_field=self.parent.cursor_field) + + # The parent stream is the Pages stream, but we have to pass its id to the request_params as "block_id" + # because pages are also blocks in the Notion API. + # We also grab the last_edited_time from the parent record to use as the cursor field. + for record in parent_records: + yield {"block_id": record["id"], "page_last_edited_time": record["last_edited_time"]} diff --git a/airbyte-integrations/connectors/source-notion/unit_tests/test_incremental_streams.py b/airbyte-integrations/connectors/source-notion/unit_tests/test_incremental_streams.py index 2300767bd758..81fcb268c682 100644 --- a/airbyte-integrations/connectors/source-notion/unit_tests/test_incremental_streams.py +++ b/airbyte-integrations/connectors/source-notion/unit_tests/test_incremental_streams.py @@ -5,8 +5,8 @@ from unittest.mock import MagicMock, patch from airbyte_cdk.models import SyncMode -from pytest import fixture -from source_notion.streams import Blocks, IncrementalNotionStream, Pages +from pytest import fixture, mark +from source_notion.streams import Blocks, Comments, IncrementalNotionStream, Pages @fixture @@ -37,6 +37,11 @@ def blocks(parent, args): return Blocks(parent=parent, **args) +@fixture +def comments(parent, args): + return Comments(parent=parent, **args) + + def test_cursor_field(stream): expected_cursor_field = "last_edited_time" assert stream.cursor_field == expected_cursor_field @@ -67,7 +72,16 @@ def test_get_updated_state(stream): def test_stream_slices(blocks, requests_mock): stream = blocks - requests_mock.post("https://api.notion.com/v1/search", json={"results": [{"id": "aaa"}, {"id": "bbb"}], "next_cursor": None}) + requests_mock.post( + "https://api.notion.com/v1/search", + json={ + "results": [ + {"id": "aaa", "last_edited_time": "2022-10-10T00:00:00.000Z"}, + {"id": "bbb", "last_edited_time": "2022-10-10T00:00:00.000Z"}, + ], + "next_cursor": None, + }, + ) inputs = {"sync_mode": SyncMode.incremental, "cursor_field": [], "stream_state": {}} expected_stream_slice = [{"page_id": "aaa"}, {"page_id": "bbb"}] assert list(stream.stream_slices(**inputs)) == expected_stream_slice @@ -178,10 +192,10 @@ def test_recursive_read(blocks, requests_mock): # |-> record4 root = "aaa" - record1 = {"id": "id1", "type": "heading_1", "has_children": True, "last_edited_time": ""} - record2 = {"id": "id2", "type": "heading_1", "has_children": True, "last_edited_time": ""} - record3 = {"id": "id3", "type": "heading_1", "has_children": False, "last_edited_time": ""} - record4 = {"id": "id4", "type": "heading_1", "has_children": False, "last_edited_time": ""} + record1 = {"id": "id1", "type": "heading_1", "has_children": True, "last_edited_time": "2022-10-10T00:00:00.000Z"} + record2 = {"id": "id2", "type": "heading_1", "has_children": True, "last_edited_time": "2022-10-10T00:00:00.000Z"} + record3 = {"id": "id3", "type": "heading_1", "has_children": False, "last_edited_time": "2022-10-10T00:00:00.000Z"} + record4 = {"id": "id4", "type": "heading_1", "has_children": False, "last_edited_time": "2022-10-10T00:00:00.000Z"} requests_mock.get(f"https://api.notion.com/v1/blocks/{root}/children", json={"results": [record1, record4], "next_cursor": None}) requests_mock.get(f"https://api.notion.com/v1/blocks/{record1['id']}/children", json={"results": [record2], "next_cursor": None}) requests_mock.get(f"https://api.notion.com/v1/blocks/{record2['id']}/children", json={"results": [record3], "next_cursor": None}) @@ -205,3 +219,116 @@ def test_invalid_start_cursor(parent, requests_mock, caplog): list(stream.read_records(**inputs)) assert search_endpoint.call_count == 6 assert f"Skipping stream pages, error message: {error_message}" in caplog.messages + + +# Tests for Comments stream +def test_comments_path(comments): + assert comments.path() == "comments" + + +def test_comments_request_params(comments): + """ + Test that the request_params function returns the correct parameters for the Comments endpoint + """ + params = comments.request_params( + next_page_token=None, stream_slice={"block_id": "block1", "page_last_edited_time": "2021-01-01T00:00:00.000Z"} + ) + + assert params == {"block_id": "block1", "page_size": comments.page_size} + + +def test_comments_stream_slices(comments, requests_mock): + """ + Test that the stream_slices function returns the parent page ids as "block_id" and the last edited time as "page_last_edited_time" + """ + + inputs = {"sync_mode": SyncMode.incremental, "cursor_field": comments.cursor_field, "stream_state": {}} + + requests_mock.post( + "https://api.notion.com/v1/search", + json={ + "results": [ + {"name": "page_1", "id": "id_1", "last_edited_time": "2021-01-01T00:00:00.000Z"}, + {"name": "page_2", "id": "id_2", "last_edited_time": "2021-20-01T00:00:00.000Z"}, + ], + "next_cursor": None, + }, + ) + + expected_stream_slice = [ + {"block_id": "id_1", "page_last_edited_time": "2021-01-01T00:00:00.000Z"}, + {"block_id": "id_2", "page_last_edited_time": "2021-20-01T00:00:00.000Z"}, + ] + + actual_stream_slices_list = list(comments.stream_slices(**inputs)) + assert actual_stream_slices_list == expected_stream_slice + + +@mark.parametrize( + "stream_slice, stream_state, mock_data, expected_records", + [ + # Test that comments with page_last_edited_time >= stream_state are replicated, regardless of each record's LMD + ( + {"block_id": "block_id_1", "page_last_edited_time": "2023-10-10T00:00:00.000Z"}, + {"page_last_edited_time": "2021-10-10T00:00:00.000Z"}, + [ + { + "id": "comment_id_1", + "rich_text": [{"type": "text", "text": {"content": "I am the Alpha comment"}}], + "last_edited_time": "2021-01-01T00:00:00.000Z", + }, + { + "id": "comment_id_2", + "rich_text": [{"type": "text", "text": {"content": "I am the Omega comment"}}], + "last_edited_time": "2022-12-31T00:00:00.000Z", + }, + ], + [ + { + "id": "comment_id_1", + "rich_text": [{"type": "text", "text": {"content": "I am the Alpha comment"}}], + "last_edited_time": "2021-01-01T00:00:00.000Z", + "page_last_edited_time": "2023-10-10T00:00:00.000Z", + }, + { + "id": "comment_id_2", + "rich_text": [{"type": "text", "text": {"content": "I am the Omega comment"}}], + "last_edited_time": "2022-12-31T00:00:00.000Z", + "page_last_edited_time": "2023-10-10T00:00:00.000Z", + }, + ], + ), + # Test that comments with page_last_edited_time < stream_state are not replicated, regardless of each record's LMD + ( + {"block_id": "block_id_2", "page_last_edited_time": "2021-01-01T00:00:00.000Z"}, + {"page_last_edited_time": "2022-20-20T00:00:00.000Z"}, + [ + { + "id": "comment_id_1", + "rich_text": [{"type": "text", "text": {"content": "I will not be replicated"}}], + "last_edited_time": "2021-10-30T00:00:00.000Z", + }, + { + "id": "comment_id_2", + "rich_text": [{"type": "text", "text": {"content": "I will also not be replicated"}}], + "last_edited_time": "2023-01-01T00:00:00.000Z", + }, + ], + [], + ), + ], +) +def test_comments_read_records(comments, requests_mock, stream_slice, stream_state, mock_data, expected_records): + inputs = { + "sync_mode": SyncMode.incremental, + "cursor_field": comments.cursor_field, + "stream_state": stream_state, + "stream_slice": stream_slice, + } + + requests_mock.get( + f"https://api.notion.com/v1/comments?block_id={stream_slice['block_id']}", json={"results": mock_data, "next_cursor": None} + ) + + response = list(comments.read_records(**inputs)) + assert response == expected_records diff --git a/airbyte-integrations/connectors/source-notion/unit_tests/test_source.py b/airbyte-integrations/connectors/source-notion/unit_tests/test_source.py index 94276624e149..626402f650f7 100644 --- a/airbyte-integrations/connectors/source-notion/unit_tests/test_source.py +++ b/airbyte-integrations/connectors/source-notion/unit_tests/test_source.py @@ -5,6 +5,7 @@ from unittest.mock import MagicMock import pytest +from airbyte_cdk.sources.streams.http.requests_native_auth import TokenAuthenticator from source_notion.source import SourceNotion UNAUTHORIZED_ERROR_MESSAGE = "The provided API access token is invalid. Please double-check that you input the correct token and have granted the necessary permissions to your Notion integration." @@ -15,8 +16,11 @@ def test_check_connection(mocker, requests_mock): source = SourceNotion() - logger_mock, config_mock = MagicMock(), MagicMock() - requests_mock.get("https://api.notion.com/v1/users", json={"results": [{"id": "aaa"}], "next_cursor": None}) + logger_mock, config_mock = MagicMock(), {"access_token": "test_token", "start_date": "2021-01-01T00:00:00.000Z"} + requests_mock.post( + "https://api.notion.com/v1/search", + json={"results": [{"id": "aaa", "last_edited_time": "2022-01-01T00:00:00.000Z"}], "next_cursor": None}, + ) assert source.check_connection(logger_mock, config_mock) == (True, None) @@ -32,7 +36,7 @@ def test_check_connection(mocker, requests_mock): def test_check_connection_errors(mocker, requests_mock, status_code, json_response, expected_message): source = SourceNotion() logger_mock, config_mock = MagicMock(), MagicMock() - requests_mock.get("https://api.notion.com/v1/users", status_code=status_code, json=json_response) + requests_mock.post("https://api.notion.com/v1/search", status_code=status_code, json=json_response) result, message = source.check_connection(logger_mock, config_mock) assert result is False @@ -43,5 +47,24 @@ def test_streams(mocker): source = SourceNotion() config_mock = MagicMock() streams = source.streams(config_mock) - expected_streams_number = 4 + expected_streams_number = 5 assert len(streams) == expected_streams_number + + +@pytest.mark.parametrize( + "config, expected_token", + [ + ({"credentials": {"auth_type": "OAuth2.0", "access_token": "oauth_token"}}, "Bearer oauth_token"), + ({"credentials": {"auth_type": "token", "token": "other_token"}}, "Bearer other_token"), + ({}, None), + ], +) +def test_get_authenticator(config, expected_token): + source = SourceNotion() + authenticator = source._get_authenticator(config) # Fixed line + + if expected_token: + assert isinstance(authenticator, TokenAuthenticator) + assert authenticator.token == expected_token # Replace with the actual way to access the token from the authenticator + else: + assert authenticator is None diff --git a/airbyte-integrations/connectors/source-notion/unit_tests/test_streams.py b/airbyte-integrations/connectors/source-notion/unit_tests/test_streams.py index 3126259521a1..12755cef5263 100644 --- a/airbyte-integrations/connectors/source-notion/unit_tests/test_streams.py +++ b/airbyte-integrations/connectors/source-notion/unit_tests/test_streams.py @@ -2,14 +2,16 @@ # Copyright (c) 2023 Airbyte, Inc., all rights reserved. # +import logging import random from http import HTTPStatus from unittest.mock import MagicMock +import freezegun import pytest import requests from airbyte_cdk.models import SyncMode -from source_notion.streams import Blocks, NotionStream, Users +from source_notion.streams import Blocks, NotionStream, Pages, Users @pytest.fixture @@ -35,6 +37,18 @@ def test_next_page_token(patch_base_class, requests_mock): assert stream.next_page_token(**inputs) == expected_token +@pytest.mark.parametrize( + "response_json, expected_output", + [({"next_cursor": "some_cursor", "has_more": True}, {"next_cursor": "some_cursor"}), ({"has_more": False}, None), ({}, None)], +) +def test_next_page_token_with_no_cursor(patch_base_class, response_json, expected_output): + stream = NotionStream(config=MagicMock()) + mock_response = MagicMock() + mock_response.json.return_value = response_json + result = stream.next_page_token(mock_response) + assert result == expected_output + + def test_parse_response(patch_base_class, requests_mock): stream = NotionStream(config=MagicMock()) requests_mock.get("https://dummy", json={"results": [{"a": 123}, {"b": "xx"}]}) @@ -167,3 +181,85 @@ def test_user_stream_handles_pagination_correctly(requests_mock): records = stream.read_records(sync_mode=SyncMode.full_refresh) records_length = sum(1 for _ in records) assert records_length == 220 + + +@pytest.mark.parametrize( + "config, expected_start_date, current_time", + [ + ( + {"authenticator": "secret_token", "start_date": "2021-09-01T00:00:00.000Z"}, + "2021-09-01T00:00:00.000Z", + "2022-09-22T00:00:00.000Z", + ), + ({"authenticator": "super_secret_token", "start_date": None}, "2020-09-22T00:00:00.000Z", "2022-09-22T00:00:00.000Z"), + ({"authenticator": "even_more_secret_token"}, "2021-01-01T12:30:00.000Z", "2023-01-01T12:30:00.000Z"), + ], +) +def test_set_start_date(patch_base_class, config, expected_start_date, current_time): + """ + Test that start_date in config is either: + 1. set to the value provided by the user + 2. defaults to two years from the present date set by the test environment. + """ + with freezegun.freeze_time(current_time): + stream = NotionStream(config=config) + assert stream.start_date == expected_start_date + + +@pytest.mark.parametrize( + "stream,parent,url,status_code,response_content,expected_availability,expected_reason_substring", + [ + ( + Users, + None, + "https://api.notion.com/v1/users", + 403, + b'{"object": "error", "status": 403, "code": "restricted_resource"}', + False, + "This is likely due to insufficient permissions for your Notion integration.", + ), + ( + Blocks, + Pages, + "https://api.notion.com/v1/blocks/123/children", + 403, + b'{"object": "error", "status": 403, "code": "restricted_resource"}', + False, + "This is likely due to insufficient permissions for your Notion integration.", + ), + ( + Users, + None, + "https://api.notion.com/v1/users", + 200, + b'{"object": "list", "results": [{"id": "123", "object": "user", "type": "person"}]}', + True, + None, + ), + ], +) +def test_403_error_handling( + requests_mock, stream, parent, url, status_code, response_content, expected_availability, expected_reason_substring +): + """ + Test that availability strategy flags streams with 403 error as unavailable + and returns custom Notion integration message. + """ + + requests_mock.get(url=url, status_code=status_code, content=response_content) + + if parent: + stream = stream(parent=parent, config=MagicMock()) + stream.parent.stream_slices = MagicMock(return_value=[{"id": "123"}]) + stream.parent.read_records = MagicMock(return_value=[{"id": "123", "object": "page"}]) + else: + stream = stream(config=MagicMock()) + + is_available, reason = stream.check_availability(logger=logging.Logger, source=MagicMock()) + + assert is_available is expected_availability + + if expected_reason_substring: + assert expected_reason_substring in reason + else: + assert reason is None diff --git a/airbyte-integrations/connectors/source-pokeapi/Dockerfile b/airbyte-integrations/connectors/source-pokeapi/Dockerfile index 31f309c2e920..0d27d3737d6f 100644 --- a/airbyte-integrations/connectors/source-pokeapi/Dockerfile +++ b/airbyte-integrations/connectors/source-pokeapi/Dockerfile @@ -1,17 +1,38 @@ -FROM python:3.9-slim +FROM python:3.9.11-alpine3.15 as base -# Bash is installed for more convenient debugging. -RUN apt-get update && apt-get install -y bash && rm -rf /var/lib/apt/lists/* +# build and load all requirements +FROM base as builder +WORKDIR /airbyte/integration_code + +# upgrade pip to the latest version +RUN apk --no-cache upgrade \ + && pip install --upgrade pip \ + && apk --no-cache add tzdata build-base +COPY setup.py ./ +# install necessary packages to a temporary folder +RUN pip install --prefix=/install . + +# build a clean environment +FROM base WORKDIR /airbyte/integration_code -COPY source_pokeapi ./source_pokeapi + +# copy all loaded and built libraries to a pure basic image +COPY --from=builder /install /usr/local +# add default timezone settings +COPY --from=builder /usr/share/zoneinfo/Etc/UTC /etc/localtime +RUN echo "Etc/UTC" > /etc/timezone + +# bash is installed for more convenient debugging. +RUN apk --no-cache add bash + +# copy payload code only COPY main.py ./ -COPY setup.py ./ -RUN pip install . +COPY source_pokeapi ./source_pokeapi ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=0.1.5 +LABEL io.airbyte.version=0.2.0 LABEL io.airbyte.name=airbyte/source-pokeapi diff --git a/airbyte-integrations/connectors/source-pokeapi/README.md b/airbyte-integrations/connectors/source-pokeapi/README.md index 8d422510264a..d91cab01c98e 100644 --- a/airbyte-integrations/connectors/source-pokeapi/README.md +++ b/airbyte-integrations/connectors/source-pokeapi/README.md @@ -1,34 +1,10 @@ # Pokeapi Source -This is the repository for the Pokeapi source connector, written in Python. -For information about how to use this connector within Airbyte, see [the documentation](https://docs.airbyte.io/integrations/sources/pokeapi). +This is the repository for the Pokeapi configuration based source connector. +For information about how to use this connector within Airbyte, see [the documentation](https://docs.airbyte.com/integrations/sources/pokeapi). ## Local development -### Prerequisites -**To iterate on this connector, make sure to complete this prerequisites section.** - -#### Minimum Python version required `= 3.7.0` - -#### Build & Activate Virtual Environment and install dependencies -From this connector directory, create a virtual environment: -``` -python -m venv .venv -``` - -This will generate a virtualenv for this module in `.venv/`. Make sure this venv is active in your -development environment of choice. To activate it from the terminal, run: -``` -source .venv/bin/activate -pip install -r requirements.txt -``` -If you are in an IDE, follow your IDE's instructions to activate the virtualenv. - -Note that while we are installing dependencies from `requirements.txt`, you should only edit `setup.py` for your dependencies. `requirements.txt` is -used for editable installs (`pip install -e`) to pull in Python dependencies from the monorepo and will call `setup.py`. -If this is mumbo jumbo to you, don't worry about it, just put your deps in `setup.py` but install using `pip install -r requirements.txt` and everything -should work as you expect. - #### Building via Gradle You can also build the connector in Gradle. This is typically used in CI and not needed for your development workflow. @@ -38,29 +14,14 @@ To build using Gradle, from the Airbyte repository root, run: ``` #### Create credentials -**If you are a community contributor**, follow the instructions in the [documentation](https://docs.airbyte.io/integrations/sources/pokeapi) -to generate the necessary credentials. Then create a file `secrets/config.json` conforming to the `source_pokeapi/spec.json` file. +**If you are a community contributor**, follow the instructions in the [documentation](https://docs.airbyte.com/integrations/sources/pokeapi) +to generate the necessary credentials. Then create a file `secrets/config.json` conforming to the `source_pokeapi/spec.yaml` file. Note that any directory named `secrets` is gitignored across the entire Airbyte repo, so there is no danger of accidentally checking in sensitive information. -See `sample_files/sample_config.json` for a sample config file. +See `integration_tests/sample_config.json` for a sample config file. **If you are an Airbyte core member**, copy the credentials in Lastpass under the secret name `source pokeapi test creds` and place them into `secrets/config.json`. - -### Locally running the connector -``` -python main_dev.py spec -python main_dev.py check --config secrets/config.json -python main_dev.py discover --config secrets/config.json -python main_dev.py read --config secrets/config.json --catalog sample_files/configured_catalog.json -``` - -### Unit Tests -To run unit tests locally, from the connector directory run: -``` -python -m pytest unit_tests -``` - ### Locally running the connector docker image #### Build @@ -82,56 +43,40 @@ Then run any of the connector commands as follows: docker run --rm airbyte/source-pokeapi:dev spec docker run --rm -v $(pwd)/secrets:/secrets airbyte/source-pokeapi:dev check --config /secrets/config.json docker run --rm -v $(pwd)/secrets:/secrets airbyte/source-pokeapi:dev discover --config /secrets/config.json -docker run --rm -v $(pwd)/secrets:/secrets -v $(pwd)/sample_files:/sample_files airbyte/source-pokeapi:dev read --config /secrets/config.json --catalog /sample_files/configured_catalog.json +docker run --rm -v $(pwd)/secrets:/secrets -v $(pwd)/integration_tests:/integration_tests airbyte/source-pokeapi:dev read --config /secrets/config.json --catalog /integration_tests/configured_catalog.json ``` - ## Testing -Make sure to familiarize yourself with [pytest test discovery](https://docs.pytest.org/en/latest/goodpractices.html#test-discovery) to know how your test files and methods should be named. -First install test dependencies into your virtual environment: -``` -pip install .[tests] -``` -### Unit Tests -To run unit tests locally, from the connector directory run: -``` -python -m pytest unit_tests -``` - -### Integration Tests -There are two types of integration tests: Acceptance Tests (Airbyte's test suite for all source connectors) and custom integration tests (which are specific to this connector). -#### Custom Integration tests -Place custom tests inside `integration_tests/` folder, then, from the connector root, run -``` -python -m pytest integration_tests -``` #### Acceptance Tests -Customize `acceptance-test-config.yml` file to configure tests. See [Connector Acceptance Tests](https://docs.airbyte.io/connector-development/testing-connectors/connector-acceptance-tests-reference) for more information. +Customize `acceptance-test-config.yml` file to configure tests. See [Connector Acceptance Tests](https://docs.airbyte.com/connector-development/testing-connectors/connector-acceptance-tests-reference) for more information. If your connector requires to create or destroy resources for use during acceptance tests create fixtures for it and place them inside integration_tests/acceptance.py. -To run your integration tests with acceptance tests, from the connector root, run + +To run your integration tests with Docker, run: ``` -python -m pytest integration_tests -p integration_tests.acceptance +./acceptance-test-docker.sh ``` -To run your integration tests with docker ### Using gradle to run tests All commands should be run from airbyte project root. -To run unittest run: +To run unit tests: ``` ./gradlew :airbyte-integrations:connectors:source-pokeapi:unitTest ``` -To run acceptance and custom integration tests run: +To run acceptance and custom integration tests: ``` -./gradlew :airbyte-integrations:connectors:source-pokeapi:IntegrationTest +./gradlew :airbyte-integrations:connectors:source-pokeapi:integrationTest ``` ## Dependency Management All of your dependencies should go in `setup.py`, NOT `requirements.txt`. The requirements file is only used to connect internal Airbyte dependencies in the monorepo for local development. +We split dependencies between two groups, dependencies that are: +* required for your connector to work need to go to `MAIN_REQUIREMENTS` list. +* required for the testing need to go to `TEST_REQUIREMENTS` list ### Publishing a new version of the connector You've checked out the repo, implemented a million dollar feature, and you're ready to share your changes with the world. Now what? -1. Make sure your changes are passing unit and integration tests -1. Bump the connector version in `Dockerfile` -- just increment the value of the `LABEL io.airbyte.version` appropriately (we use SemVer). -1. Create a Pull Request -1. Pat yourself on the back for being an awesome contributor -1. Someone from Airbyte will take a look at your PR and iterate with you to merge it into master +1. Make sure your changes are passing unit and integration tests. +1. Bump the connector version in `Dockerfile` -- just increment the value of the `LABEL io.airbyte.version` appropriately (we use [SemVer](https://semver.org/)). +1. Create a Pull Request. +1. Pat yourself on the back for being an awesome contributor. +1. Someone from Airbyte will take a look at your PR and iterate with you to merge it into master. diff --git a/airbyte-integrations/connectors/source-pokeapi/__init__.py b/airbyte-integrations/connectors/source-pokeapi/__init__.py new file mode 100644 index 000000000000..c941b3045795 --- /dev/null +++ b/airbyte-integrations/connectors/source-pokeapi/__init__.py @@ -0,0 +1,3 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# diff --git a/airbyte-integrations/connectors/source-pokeapi/acceptance-test-config.yml b/airbyte-integrations/connectors/source-pokeapi/acceptance-test-config.yml index 2f23c6db6c7f..e0d96ad450b3 100644 --- a/airbyte-integrations/connectors/source-pokeapi/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-pokeapi/acceptance-test-config.yml @@ -1,23 +1,29 @@ +# See [Connector Acceptance Tests](https://docs.airbyte.com/connector-development/testing-connectors/connector-acceptance-tests-reference) +# for more information about how to configure these tests connector_image: airbyte/source-pokeapi:dev -test_strictness_level: high acceptance_tests: spec: - bypass_reason: "The spec is currently invalid: it has additionalProperties set to false" + tests: + - spec_path: "source_pokeapi/spec.yaml" + backward_compatibility_tests_config: + disable_for_version: "0.1.5" connection: tests: - - config_path: "integration_tests/config.json" + - config_path: "secrets/config.json" status: "succeed" discovery: tests: - - config_path: "integration_tests/config.json" + - config_path: "secrets/config.json" + backward_compatibility_tests_config: + disable_for_version: "0.1.5" basic_read: tests: - - config_path: "integration_tests/config.json" - expect_records: - bypass_reason: "We should create an expected_records file" + - config_path: "secrets/config.json" + configured_catalog_path: "integration_tests/configured_catalog.json" + empty_streams: [] + incremental: + bypass_reason: "This connector does not implement incremental sync" full_refresh: tests: - - config_path: "integration_tests/config.json" + - config_path: "secrets/config.json" configured_catalog_path: "integration_tests/configured_catalog.json" - incremental: - bypass_reason: "This connector does not support incremental syncs." diff --git a/airbyte-integrations/connectors/source-pokeapi/acceptance-test-docker.sh b/airbyte-integrations/connectors/source-pokeapi/acceptance-test-docker.sh old mode 100644 new mode 100755 index 5797d20fe9a7..b6d65deeccb4 --- a/airbyte-integrations/connectors/source-pokeapi/acceptance-test-docker.sh +++ b/airbyte-integrations/connectors/source-pokeapi/acceptance-test-docker.sh @@ -1,2 +1,3 @@ #!/usr/bin/env sh + source "$(git rev-parse --show-toplevel)/airbyte-integrations/bases/connector-acceptance-test/acceptance-test-docker.sh" diff --git a/airbyte-integrations/connectors/source-pokeapi/integration_tests/__init__.py b/airbyte-integrations/connectors/source-pokeapi/integration_tests/__init__.py index 46b7376756ec..c941b3045795 100644 --- a/airbyte-integrations/connectors/source-pokeapi/integration_tests/__init__.py +++ b/airbyte-integrations/connectors/source-pokeapi/integration_tests/__init__.py @@ -1,3 +1,3 @@ # -# Copyright (c) 2021 Airbyte, Inc., all rights reserved. +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. # diff --git a/airbyte-integrations/connectors/source-pokeapi/integration_tests/abnormal_state.json b/airbyte-integrations/connectors/source-pokeapi/integration_tests/abnormal_state.json new file mode 100644 index 000000000000..52b0f2c2118f --- /dev/null +++ b/airbyte-integrations/connectors/source-pokeapi/integration_tests/abnormal_state.json @@ -0,0 +1,5 @@ +{ + "todo-stream-name": { + "todo-field-name": "todo-abnormal-value" + } +} diff --git a/airbyte-integrations/connectors/source-pokeapi/integration_tests/acceptance.py b/airbyte-integrations/connectors/source-pokeapi/integration_tests/acceptance.py index 82823254d266..9e6409236281 100644 --- a/airbyte-integrations/connectors/source-pokeapi/integration_tests/acceptance.py +++ b/airbyte-integrations/connectors/source-pokeapi/integration_tests/acceptance.py @@ -11,4 +11,6 @@ @pytest.fixture(scope="session", autouse=True) def connector_setup(): """This fixture is a placeholder for external resources that acceptance test might require.""" + # TODO: setup test dependencies if needed. otherwise remove the TODO comments yield + # TODO: clean up test dependencies diff --git a/airbyte-integrations/connectors/source-pokeapi/integration_tests/config.json b/airbyte-integrations/connectors/source-pokeapi/integration_tests/config.json deleted file mode 100644 index 392328e8b027..000000000000 --- a/airbyte-integrations/connectors/source-pokeapi/integration_tests/config.json +++ /dev/null @@ -1 +0,0 @@ -{ "pokemon_name": "ditto" } diff --git a/airbyte-integrations/connectors/source-pokeapi/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-pokeapi/integration_tests/configured_catalog.json index 72ca528d90f7..81e82dbd2fe4 100644 --- a/airbyte-integrations/connectors/source-pokeapi/integration_tests/configured_catalog.json +++ b/airbyte-integrations/connectors/source-pokeapi/integration_tests/configured_catalog.json @@ -3,15 +3,7 @@ { "stream": { "name": "pokemon", - "json_schema": { - "$schema": "http://json-schema.org/draft-04/schema#", - "type": "object", - "properties": { - "pokemon_name": { - "type": "string" - } - } - }, + "json_schema": {}, "supported_sync_modes": ["full_refresh"] }, "sync_mode": "full_refresh", diff --git a/airbyte-integrations/connectors/source-pokeapi/integration_tests/invalid_config.json b/airbyte-integrations/connectors/source-pokeapi/integration_tests/invalid_config.json index 0d853925b60a..af3ddc30a8a4 100644 --- a/airbyte-integrations/connectors/source-pokeapi/integration_tests/invalid_config.json +++ b/airbyte-integrations/connectors/source-pokeapi/integration_tests/invalid_config.json @@ -1 +1,3 @@ -{ "name": "datto" } +{ + "name": "datto" +} diff --git a/airbyte-integrations/connectors/source-pokeapi/integration_tests/sample_config.json b/airbyte-integrations/connectors/source-pokeapi/integration_tests/sample_config.json new file mode 100644 index 000000000000..db1339d0787e --- /dev/null +++ b/airbyte-integrations/connectors/source-pokeapi/integration_tests/sample_config.json @@ -0,0 +1,3 @@ +{ + "pokemon_name": "ditto" +} diff --git a/airbyte-integrations/connectors/source-pokeapi/integration_tests/sample_state.json b/airbyte-integrations/connectors/source-pokeapi/integration_tests/sample_state.json new file mode 100644 index 000000000000..3587e579822d --- /dev/null +++ b/airbyte-integrations/connectors/source-pokeapi/integration_tests/sample_state.json @@ -0,0 +1,5 @@ +{ + "todo-stream-name": { + "todo-field-name": "value" + } +} diff --git a/airbyte-integrations/connectors/source-pokeapi/main.py b/airbyte-integrations/connectors/source-pokeapi/main.py index 38a510a3f2d7..9ec4c483ecf9 100644 --- a/airbyte-integrations/connectors/source-pokeapi/main.py +++ b/airbyte-integrations/connectors/source-pokeapi/main.py @@ -2,6 +2,7 @@ # Copyright (c) 2023 Airbyte, Inc., all rights reserved. # + import sys from airbyte_cdk.entrypoint import launch diff --git a/airbyte-integrations/connectors/source-pokeapi/metadata.yaml b/airbyte-integrations/connectors/source-pokeapi/metadata.yaml index dec58781459c..92fe96e7beb6 100644 --- a/airbyte-integrations/connectors/source-pokeapi/metadata.yaml +++ b/airbyte-integrations/connectors/source-pokeapi/metadata.yaml @@ -1,24 +1,27 @@ data: + allowedHosts: + hosts: + - "*" + registries: + oss: + enabled: true + dockerImageTag: 0.1.5 + cloud: + enabled: true + dockerImageTag: 0.1.5 connectorSubtype: api connectorType: source definitionId: 6371b14b-bc68-4236-bfbd-468e8df8e968 - dockerImageTag: 0.1.5 + dockerImageTag: 0.2.0 dockerRepository: airbyte/source-pokeapi githubIssueLabel: source-pokeapi icon: pokeapi.svg license: MIT name: PokeAPI - registries: - cloud: - enabled: true - oss: - enabled: true + releaseDate: "2020-05-04" releaseStage: alpha + supportLevel: community documentationUrl: https://docs.airbyte.com/integrations/sources/pokeapi tags: - - language:python - ab_internal: - sl: 100 - ql: 100 - supportLevel: community + - language:lowcode metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-pokeapi/requirements.txt b/airbyte-integrations/connectors/source-pokeapi/requirements.txt index d6e1198b1ab1..cf563bcab685 100644 --- a/airbyte-integrations/connectors/source-pokeapi/requirements.txt +++ b/airbyte-integrations/connectors/source-pokeapi/requirements.txt @@ -1 +1,2 @@ -e . +-e ../../bases/connector-acceptance-test \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-pokeapi/setup.py b/airbyte-integrations/connectors/source-pokeapi/setup.py index e5cdf3627e09..2fa7839b58fc 100644 --- a/airbyte-integrations/connectors/source-pokeapi/setup.py +++ b/airbyte-integrations/connectors/source-pokeapi/setup.py @@ -5,9 +5,15 @@ from setuptools import find_packages, setup -MAIN_REQUIREMENTS = ["airbyte-cdk~=0.1"] +MAIN_REQUIREMENTS = [ + "airbyte-cdk", +] -TEST_REQUIREMENTS = ["requests-mock~=1.9.3", "pytest-mock~=3.6.1", "pytest~=6.1"] +TEST_REQUIREMENTS = [ + "requests-mock~=1.9.3", + "pytest~=6.2", + "pytest-mock~=3.6.1", +] setup( name="source_pokeapi", @@ -16,7 +22,7 @@ author_email="contact@airbyte.io", packages=find_packages(), install_requires=MAIN_REQUIREMENTS, - package_data={"": ["*.json", "schemas/*.json", "schemas/shared/*.json"]}, + package_data={"": ["*.json", "*.yaml", "schemas/*.json", "schemas/shared/*.json"]}, extras_require={ "tests": TEST_REQUIREMENTS, }, diff --git a/airbyte-integrations/connectors/source-pokeapi/source_pokeapi/__init__.py b/airbyte-integrations/connectors/source-pokeapi/source_pokeapi/__init__.py index 091b006498ea..e21b6da3ff71 100644 --- a/airbyte-integrations/connectors/source-pokeapi/source_pokeapi/__init__.py +++ b/airbyte-integrations/connectors/source-pokeapi/source_pokeapi/__init__.py @@ -1,7 +1,8 @@ # -# Copyright (c) 2021 Airbyte, Inc., all rights reserved. +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. # + from .source import SourcePokeapi __all__ = ["SourcePokeapi"] diff --git a/airbyte-integrations/connectors/source-pokeapi/source_pokeapi/manifest.yaml b/airbyte-integrations/connectors/source-pokeapi/source_pokeapi/manifest.yaml new file mode 100644 index 000000000000..e556d07b2cb8 --- /dev/null +++ b/airbyte-integrations/connectors/source-pokeapi/source_pokeapi/manifest.yaml @@ -0,0 +1,40 @@ +version: "0.29.0" + +definitions: + selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + requester: + type: HttpRequester + url_base: "https://pokeapi.co/api/v2/pokemon" + http_method: "GET" + authenticator: + type: NoAuth + retriever: + type: SimpleRetriever + record_selector: + $ref: "#/definitions/selector" + paginator: + type: NoPagination + requester: + $ref: "#/definitions/requester" + base_stream: + type: DeclarativeStream + retriever: + $ref: "#/definitions/retriever" + pokemon_stream: + $ref: "#/definitions/base_stream" + name: "pokemon" + primary_key: "id" + $parameters: + path: "/{{config['pokemon_name']}}" + +streams: + - "#/definitions/pokemon_stream" + +check: + type: CheckStream + stream_names: + - "pokemon" diff --git a/airbyte-integrations/connectors/source-pokeapi/source_pokeapi/pokemon_list.py b/airbyte-integrations/connectors/source-pokeapi/source_pokeapi/pokemon_list.py deleted file mode 100644 index fa640b8ec06a..000000000000 --- a/airbyte-integrations/connectors/source-pokeapi/source_pokeapi/pokemon_list.py +++ /dev/null @@ -1,909 +0,0 @@ -# -# Copyright (c) 2023 Airbyte, Inc., all rights reserved. -# - - -""" -pokemon_list.py includes a list of all known pokemon for config validation in source.py. -""" - -POKEMON_LIST = [ - "bulbasaur", - "ivysaur", - "venusaur", - "charmander", - "charmeleon", - "charizard", - "squirtle", - "wartortle", - "blastoise", - "caterpie", - "metapod", - "butterfree", - "weedle", - "kakuna", - "beedrill", - "pidgey", - "pidgeotto", - "pidgeot", - "rattata", - "raticate", - "spearow", - "fearow", - "ekans", - "arbok", - "pikachu", - "raichu", - "sandshrew", - "sandslash", - "nidoranf", - "nidorina", - "nidoqueen", - "nidoranm", - "nidorino", - "nidoking", - "clefairy", - "clefable", - "vulpix", - "ninetales", - "jigglypuff", - "wigglytuff", - "zubat", - "golbat", - "oddish", - "gloom", - "vileplume", - "paras", - "parasect", - "venonat", - "venomoth", - "diglett", - "dugtrio", - "meowth", - "persian", - "psyduck", - "golduck", - "mankey", - "primeape", - "growlithe", - "arcanine", - "poliwag", - "poliwhirl", - "poliwrath", - "abra", - "kadabra", - "alakazam", - "machop", - "machoke", - "machamp", - "bellsprout", - "weepinbell", - "victreebel", - "tentacool", - "tentacruel", - "geodude", - "graveler", - "golem", - "ponyta", - "rapidash", - "slowpoke", - "slowbro", - "magnemite", - "magneton", - "farfetchd", - "doduo", - "dodrio", - "seel", - "dewgong", - "grimer", - "muk", - "shellder", - "cloyster", - "gastly", - "haunter", - "gengar", - "onix", - "drowzee", - "hypno", - "krabby", - "kingler", - "voltorb", - "electrode", - "exeggcute", - "exeggutor", - "cubone", - "marowak", - "hitmonlee", - "hitmonchan", - "lickitung", - "koffing", - "weezing", - "rhyhorn", - "rhydon", - "chansey", - "tangela", - "kangaskhan", - "horsea", - "seadra", - "goldeen", - "seaking", - "staryu", - "starmie", - "mrmime", - "scyther", - "jynx", - "electabuzz", - "magmar", - "pinsir", - "tauros", - "magikarp", - "gyarados", - "lapras", - "ditto", - "eevee", - "vaporeon", - "jolteon", - "flareon", - "porygon", - "omanyte", - "omastar", - "kabuto", - "kabutops", - "aerodactyl", - "snorlax", - "articuno", - "zapdos", - "moltres", - "dratini", - "dragonair", - "dragonite", - "mewtwo", - "mew", - "chikorita", - "bayleef", - "meganium", - "cyndaquil", - "quilava", - "typhlosion", - "totodile", - "croconaw", - "feraligatr", - "sentret", - "furret", - "hoothoot", - "noctowl", - "ledyba", - "ledian", - "spinarak", - "ariados", - "crobat", - "chinchou", - "lanturn", - "pichu", - "cleffa", - "igglybuff", - "togepi", - "togetic", - "natu", - "xatu", - "mareep", - "flaaffy", - "ampharos", - "bellossom", - "marill", - "azumarill", - "sudowoodo", - "politoed", - "hoppip", - "skiploom", - "jumpluff", - "aipom", - "sunkern", - "sunflora", - "yanma", - "wooper", - "quagsire", - "espeon", - "umbreon", - "murkrow", - "slowking", - "misdreavus", - "unown", - "wobbuffet", - "girafarig", - "pineco", - "forretress", - "dunsparce", - "gligar", - "steelix", - "snubbull", - "granbull", - "qwilfish", - "scizor", - "shuckle", - "heracross", - "sneasel", - "teddiursa", - "ursaring", - "slugma", - "magcargo", - "swinub", - "piloswine", - "corsola", - "remoraid", - "octillery", - "delibird", - "mantine", - "skarmory", - "houndour", - "houndoom", - "kingdra", - "phanpy", - "donphan", - "porygon2", - "stantler", - "smeargle", - "tyrogue", - "hitmontop", - "smoochum", - "elekid", - "magby", - "miltank", - "blissey", - "raikou", - "entei", - "suicune", - "larvitar", - "pupitar", - "tyranitar", - "lugia", - "ho-oh", - "celebi", - "treecko", - "grovyle", - "sceptile", - "torchic", - "combusken", - "blaziken", - "mudkip", - "marshtomp", - "swampert", - "poochyena", - "mightyena", - "zigzagoon", - "linoone", - "wurmple", - "silcoon", - "beautifly", - "cascoon", - "dustox", - "lotad", - "lombre", - "ludicolo", - "seedot", - "nuzleaf", - "shiftry", - "taillow", - "swellow", - "wingull", - "pelipper", - "ralts", - "kirlia", - "gardevoir", - "surskit", - "masquerain", - "shroomish", - "breloom", - "slakoth", - "vigoroth", - "slaking", - "nincada", - "ninjask", - "shedinja", - "whismur", - "loudred", - "exploud", - "makuhita", - "hariyama", - "azurill", - "nosepass", - "skitty", - "delcatty", - "sableye", - "mawile", - "aron", - "lairon", - "aggron", - "meditite", - "medicham", - "electrike", - "manectric", - "plusle", - "minun", - "volbeat", - "illumise", - "roselia", - "gulpin", - "swalot", - "carvanha", - "sharpedo", - "wailmer", - "wailord", - "numel", - "camerupt", - "torkoal", - "spoink", - "grumpig", - "spinda", - "trapinch", - "vibrava", - "flygon", - "cacnea", - "cacturne", - "swablu", - "altaria", - "zangoose", - "seviper", - "lunatone", - "solrock", - "barboach", - "whiscash", - "corphish", - "crawdaunt", - "baltoy", - "claydol", - "lileep", - "cradily", - "anorith", - "armaldo", - "feebas", - "milotic", - "castform", - "kecleon", - "shuppet", - "banette", - "duskull", - "dusclops", - "tropius", - "chimecho", - "absol", - "wynaut", - "snorunt", - "glalie", - "spheal", - "sealeo", - "walrein", - "clamperl", - "huntail", - "gorebyss", - "relicanth", - "luvdisc", - "bagon", - "shelgon", - "salamence", - "beldum", - "metang", - "metagross", - "regirock", - "regice", - "registeel", - "latias", - "latios", - "kyogre", - "groudon", - "rayquaza", - "jirachi", - "deoxys", - "turtwig", - "grotle", - "torterra", - "chimchar", - "monferno", - "infernape", - "piplup", - "prinplup", - "empoleon", - "starly", - "staravia", - "staraptor", - "bidoof", - "bibarel", - "kricketot", - "kricketune", - "shinx", - "luxio", - "luxray", - "budew", - "roserade", - "cranidos", - "rampardos", - "shieldon", - "bastiodon", - "burmy", - "wormadam", - "mothim", - "combee", - "vespiquen", - "pachirisu", - "buizel", - "floatzel", - "cherubi", - "cherrim", - "shellos", - "gastrodon", - "ambipom", - "drifloon", - "drifblim", - "buneary", - "lopunny", - "mismagius", - "honchkrow", - "glameow", - "purugly", - "chingling", - "stunky", - "skuntank", - "bronzor", - "bronzong", - "bonsly", - "mimejr", - "happiny", - "chatot", - "spiritomb", - "gible", - "gabite", - "garchomp", - "munchlax", - "riolu", - "lucario", - "hippopotas", - "hippowdon", - "skorupi", - "drapion", - "croagunk", - "toxicroak", - "carnivine", - "finneon", - "lumineon", - "mantyke", - "snover", - "abomasnow", - "weavile", - "magnezone", - "lickilicky", - "rhyperior", - "tangrowth", - "electivire", - "magmortar", - "togekiss", - "yanmega", - "leafeon", - "glaceon", - "gliscor", - "mamoswine", - "porygon-z", - "gallade", - "probopass", - "dusknoir", - "froslass", - "rotom", - "uxie", - "mesprit", - "azelf", - "dialga", - "palkia", - "heatran", - "regigigas", - "giratina", - "cresselia", - "phione", - "manaphy", - "darkrai", - "shaymin", - "arceus", - "victini", - "snivy", - "servine", - "serperior", - "tepig", - "pignite", - "emboar", - "oshawott", - "dewott", - "samurott", - "patrat", - "watchog", - "lillipup", - "herdier", - "stoutland", - "purrloin", - "liepard", - "pansage", - "simisage", - "pansear", - "simisear", - "panpour", - "simipour", - "munna", - "musharna", - "pidove", - "tranquill", - "unfezant", - "blitzle", - "zebstrika", - "roggenrola", - "boldore", - "gigalith", - "woobat", - "swoobat", - "drilbur", - "excadrill", - "audino", - "timburr", - "gurdurr", - "conkeldurr", - "tympole", - "palpitoad", - "seismitoad", - "throh", - "sawk", - "sewaddle", - "swadloon", - "leavanny", - "venipede", - "whirlipede", - "scolipede", - "cottonee", - "whimsicott", - "petilil", - "lilligant", - "basculin", - "sandile", - "krokorok", - "krookodile", - "darumaka", - "darmanitan", - "maractus", - "dwebble", - "crustle", - "scraggy", - "scrafty", - "sigilyph", - "yamask", - "cofagrigus", - "tirtouga", - "carracosta", - "archen", - "archeops", - "trubbish", - "garbodor", - "zorua", - "zoroark", - "minccino", - "cinccino", - "gothita", - "gothorita", - "gothitelle", - "solosis", - "duosion", - "reuniclus", - "ducklett", - "swanna", - "vanillite", - "vanillish", - "vanilluxe", - "deerling", - "sawsbuck", - "emolga", - "karrablast", - "escavalier", - "foongus", - "amoonguss", - "frillish", - "jellicent", - "alomomola", - "joltik", - "galvantula", - "ferroseed", - "ferrothorn", - "klink", - "klang", - "klinklang", - "tynamo", - "eelektrik", - "eelektross", - "elgyem", - "beheeyem", - "litwick", - "lampent", - "chandelure", - "axew", - "fraxure", - "haxorus", - "cubchoo", - "beartic", - "cryogonal", - "shelmet", - "accelgor", - "stunfisk", - "mienfoo", - "mienshao", - "druddigon", - "golett", - "golurk", - "pawniard", - "bisharp", - "bouffalant", - "rufflet", - "braviary", - "vullaby", - "mandibuzz", - "heatmor", - "durant", - "deino", - "zweilous", - "hydreigon", - "larvesta", - "volcarona", - "cobalion", - "terrakion", - "virizion", - "tornadus", - "thundurus", - "reshiram", - "zekrom", - "landorus", - "kyurem", - "keldeo", - "meloetta", - "genesect", - "chespin", - "quilladin", - "chesnaught", - "fennekin", - "braixen", - "delphox", - "froakie", - "frogadier", - "greninja", - "bunnelby", - "diggersby", - "fletchling", - "fletchinder", - "talonflame", - "scatterbug", - "spewpa", - "vivillon", - "litleo", - "pyroar", - "flabebe", - "floette", - "florges", - "skiddo", - "gogoat", - "pancham", - "pangoro", - "furfrou", - "espurr", - "meowstic", - "honedge", - "doublade", - "aegislash", - "spritzee", - "aromatisse", - "swirlix", - "slurpuff", - "inkay", - "malamar", - "binacle", - "barbaracle", - "skrelp", - "dragalge", - "clauncher", - "clawitzer", - "helioptile", - "heliolisk", - "tyrunt", - "tyrantrum", - "amaura", - "aurorus", - "sylveon", - "hawlucha", - "dedenne", - "carbink", - "goomy", - "sliggoo", - "goodra", - "klefki", - "phantump", - "trevenant", - "pumpkaboo", - "gourgeist", - "bergmite", - "avalugg", - "noibat", - "noivern", - "xerneas", - "yveltal", - "zygarde", - "diancie", - "hoopa", - "volcanion", - "rowlet", - "dartrix", - "decidueye", - "litten", - "torracat", - "incineroar", - "popplio", - "brionne", - "primarina", - "pikipek", - "trumbeak", - "toucannon", - "yungoos", - "gumshoos", - "grubbin", - "charjabug", - "vikavolt", - "crabrawler", - "crabominable", - "oricorio", - "cutiefly", - "ribombee", - "rockruff", - "lycanroc", - "wishiwashi", - "mareanie", - "toxapex", - "mudbray", - "mudsdale", - "dewpider", - "araquanid", - "fomantis", - "lurantis", - "morelull", - "shiinotic", - "salandit", - "salazzle", - "stufful", - "bewear", - "bounsweet", - "steenee", - "tsareena", - "comfey", - "oranguru", - "passimian", - "wimpod", - "golisopod", - "sandygast", - "palossand", - "pyukumuku", - "typenull", - "silvally", - "minior", - "komala", - "turtonator", - "togedemaru", - "mimikyu", - "bruxish", - "drampa", - "dhelmise", - "jangmo-o", - "hakamo-o", - "kommo-o", - "tapukoko", - "tapulele", - "tapubulu", - "tapufini", - "cosmog", - "cosmoem", - "solgaleo", - "lunala", - "nihilego", - "buzzwole", - "pheromosa", - "xurkitree", - "celesteela", - "kartana", - "guzzlord", - "necrozma", - "magearna", - "marshadow", - "poipole", - "naganadel", - "stakataka", - "blacephalon", - "zeraora", - "meltan", - "melmetal", - "grookey", - "thwackey", - "rillaboom", - "scorbunny", - "raboot", - "cinderace", - "sobble", - "drizzile", - "inteleon", - "skwovet", - "greedent", - "rookidee", - "corvisquire", - "corviknight", - "blipbug", - "dottler", - "orbeetle", - "nickit", - "thievul", - "gossifleur", - "eldegoss", - "wooloo", - "dubwool", - "chewtle", - "drednaw", - "yamper", - "boltund", - "rolycoly", - "carkol", - "coalossal", - "applin", - "flapple", - "appletun", - "silicobra", - "sandaconda", - "cramorant", - "arrokuda", - "barraskewda", - "toxel", - "toxtricity", - "sizzlipede", - "centiskorch", - "clobbopus", - "grapploct", - "sinistea", - "polteageist", - "hatenna", - "hattrem", - "hatterene", - "impidimp", - "morgrem", - "grimmsnarl", - "obstagoon", - "perrserker", - "cursola", - "sirfetchd", - "mrrime", - "runerigus", - "milcery", - "alcremie", - "falinks", - "pincurchin", - "snom", - "frosmoth", - "stonjourner", - "eiscue", - "indeedee", - "morpeko", - "cufant", - "copperajah", - "dracozolt", - "arctozolt", - "dracovish", - "arctovish", - "duraludon", - "dreepy", - "drakloak", - "dragapult", - "zacian", - "zamazenta", - "eternatus", - "kubfu", - "urshifu", - "zarude", - "regieleki", - "regidrago", - "glastrier", - "spectrier", - "calyrex", -] diff --git a/airbyte-integrations/connectors/source-pokeapi/source_pokeapi/schemas/TODO.md b/airbyte-integrations/connectors/source-pokeapi/source_pokeapi/schemas/TODO.md deleted file mode 100644 index cf1efadb3c9c..000000000000 --- a/airbyte-integrations/connectors/source-pokeapi/source_pokeapi/schemas/TODO.md +++ /dev/null @@ -1,25 +0,0 @@ -# TODO: Define your stream schemas -Your connector must describe the schema of each stream it can output using [JSONSchema](https://json-schema.org). - -The simplest way to do this is to describe the schema of your streams using one `.json` file per stream. You can also dynamically generate the schema of your stream in code, or you can combine both approaches: start with a `.json` file and dynamically add properties to it. - -The schema of a stream is the return value of `Stream.get_json_schema`. - -## Static schemas -By default, `Stream.get_json_schema` reads a `.json` file in the `schemas/` directory whose name is equal to the value of the `Stream.name` property. In turn `Stream.name` by default returns the name of the class in snake case. Therefore, if you have a class `class EmployeeBenefits(HttpStream)` the default behavior will look for a file called `schemas/employee_benefits.json`. You can override any of these behaviors as you need. - -Important note: any objects referenced via `$ref` should be placed in the `shared/` directory in their own `.json` files. - -## Dynamic schemas -If you'd rather define your schema in code, override `Stream.get_json_schema` in your stream class to return a `dict` describing the schema using [JSONSchema](https://json-schema.org). - -## Dynamically modifying static schemas -Override `Stream.get_json_schema` to run the default behavior, edit the returned value, then return the edited value: -``` -def get_json_schema(self): - schema = super().get_json_schema() - schema['dynamically_determined_property'] = "property" - return schema -``` - -Delete this file once you're done. Or don't. Up to you :) diff --git a/airbyte-integrations/connectors/source-pokeapi/source_pokeapi/schemas/pokemon.json b/airbyte-integrations/connectors/source-pokeapi/source_pokeapi/schemas/pokemon.json index 7c190d9cb6c4..c4cdb193909d 100644 --- a/airbyte-integrations/connectors/source-pokeapi/source_pokeapi/schemas/pokemon.json +++ b/airbyte-integrations/connectors/source-pokeapi/source_pokeapi/schemas/pokemon.json @@ -14,7 +14,7 @@ "height": { "type": ["null", "integer"] }, - "is_default ": { + "is_default": { "type": ["null", "boolean"] }, "order": { @@ -27,6 +27,7 @@ "type": ["null", "array"], "items": { "type": ["null", "object"], + "additionalProperties": true, "properties": { "is_hidden": { "type": ["null", "boolean"] @@ -36,6 +37,7 @@ }, "ability": { "type": ["null", "object"], + "additionalProperties": true, "properties": { "name": { "type": ["null", "string"] @@ -52,6 +54,7 @@ "type": ["null", "array"], "items": { "type": ["null", "object"], + "additionalProperties": true, "properties": { "name": { "type": ["null", "string"] @@ -66,12 +69,14 @@ "type": ["null", "array"], "items": { "type": ["null", "object"], + "additionalProperties": true, "properties": { "game_index": { "type": ["null", "integer"] }, "version": { "type": ["null", "object"], + "additionalProperties": true, "properties": { "name": { "type": ["null", "string"] @@ -88,9 +93,11 @@ "type": ["null", "array"], "items": { "type": ["null", "object"], + "additionalProperties": true, "properties": { "item": { "type": ["null", "object"], + "additionalProperties": true, "properties": { "name": { "type": ["null", "string"] @@ -104,9 +111,11 @@ "type": ["null", "array"], "items": { "type": ["null", "object"], + "additionalProperties": true, "properties": { "version": { "type": ["null", "object"], + "additionalProperties": true, "properties": { "name": { "type": ["null", "string"] @@ -132,9 +141,11 @@ "type": ["null", "array"], "items": { "type": ["null", "object"], + "additionalProperties": true, "properties": { "move": { "type": ["null", "object"], + "additionalProperties": true, "properties": { "name": { "type": ["null", "string"] @@ -148,9 +159,11 @@ "type": ["null", "array"], "items": { "type": ["null", "object"], + "additionalProperties": true, "properties": { "move_learn_method": { "type": ["null", "object"], + "additionalProperties": true, "properties": { "name": { "type": ["null", "string"] @@ -162,6 +175,7 @@ }, "version_group": { "type": ["null", "object"], + "additionalProperties": true, "properties": { "name": { "type": ["null", "string"] @@ -182,6 +196,7 @@ }, "sprites": { "type": ["null", "object"], + "additionalProperties": true, "properties": { "front_default": { "type": ["null", "string"] @@ -211,6 +226,7 @@ }, "species": { "type": ["null", "object"], + "additionalProperties": true, "properties": { "name": { "type": ["null", "string"] @@ -224,9 +240,11 @@ "type": ["null", "array"], "items": { "type": ["null", "object"], + "additionalProperties": true, "properties": { "stat": { "type": ["null", "object"], + "additionalProperties": true, "properties": { "name": { "type": ["null", "string"] @@ -249,6 +267,7 @@ "type": ["null", "array"], "items": { "type": ["null", "object"], + "additionalProperties": true, "properties": { "slot": { "type": ["null", "integer"] @@ -266,6 +285,51 @@ } } } + }, + "past_types": { + "type": ["null", "array"], + "items": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "generation": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "name": { + "type": ["null", "string"] + }, + "url": { + "type": ["null", "string"] + } + } + }, + "types": { + "type": ["null", "array"], + "items": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "slot": { + "type": ["null", "integer"] + }, + "type": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "name": { + "type": ["null", "string"] + }, + "url": { + "type": ["null", "string"] + } + } + } + } + } + } + } + } } } } diff --git a/airbyte-integrations/connectors/source-pokeapi/source_pokeapi/source.py b/airbyte-integrations/connectors/source-pokeapi/source_pokeapi/source.py index 650320579e9c..4e1813d78e7e 100644 --- a/airbyte-integrations/connectors/source-pokeapi/source_pokeapi/source.py +++ b/airbyte-integrations/connectors/source-pokeapi/source_pokeapi/source.py @@ -2,67 +2,17 @@ # Copyright (c) 2023 Airbyte, Inc., all rights reserved. # +from airbyte_cdk.sources.declarative.yaml_declarative_source import YamlDeclarativeSource -from typing import Any, Iterable, List, Mapping, MutableMapping, Optional, Tuple +""" +This file provides the necessary constructs to interpret a provided declarative YAML configuration file into +source connector. -import requests -from airbyte_cdk.sources import AbstractSource -from airbyte_cdk.sources.streams import Stream -from airbyte_cdk.sources.streams.http import HttpStream +WARNING: Do not modify this file. +""" -from . import pokemon_list - -class PokeapiStream(HttpStream): - url_base = "https://pokeapi.co/api/v2/" - - def __init__(self, pokemon_name: str, **kwargs): - super().__init__(**kwargs) - self.pokemon_name = pokemon_name - - def request_params( - self, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> MutableMapping[str, Any]: - # The api requires that we include the Pokemon name as a query param so we do that in this method - return {"pokemon_name": self.pokemon_name} - - def parse_response( - self, - response: requests.Response, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Iterable[Mapping]: - # The response is a simple JSON whose schema matches our stream's schema exactly, - # so we just return a list containing the response - return [response.json()] - - def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: - # The API does not offer pagination, - # so we return None to indicate there are no more pages in the response - return None - - -class Pokemon(PokeapiStream): - # Set this as a noop. - primary_key = None - - def path(self, **kwargs) -> str: - pokemon_name = self.pokemon_name - return f"pokemon/{pokemon_name}" - - -# Source -class SourcePokeapi(AbstractSource): - def check_connection(self, logger, config) -> Tuple[bool, any]: - input_pokemon = config["pokemon_name"] - if input_pokemon not in pokemon_list.POKEMON_LIST: - return False, f"Input Pokemon {input_pokemon} is invalid. Please check your spelling our input a valid Pokemon." - else: - return True, None - - def streams(self, config: Mapping[str, Any]) -> List[Stream]: - return [Pokemon(pokemon_name=config["pokemon_name"])] +# Declarative Source +class SourcePokeapi(YamlDeclarativeSource): + def __init__(self): + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-pokeapi/source_pokeapi/spec.json b/airbyte-integrations/connectors/source-pokeapi/source_pokeapi/spec.json deleted file mode 100644 index 8798a9470575..000000000000 --- a/airbyte-integrations/connectors/source-pokeapi/source_pokeapi/spec.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "documentationUrl": "https://docs.airbyte.com/integrations/sources/pokeapi", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Pokeapi Spec", - "type": "object", - "required": ["pokemon_name"], - "additionalProperties": false, - "properties": { - "pokemon_name": { - "type": "string", - "title": "Pokemon Name", - "description": "Pokemon requested from the API.", - "pattern": "^[a-z0-9_\\-]+$", - "examples": ["ditto", "luxray", "snorlax"] - } - } - } -} diff --git a/airbyte-integrations/connectors/source-pokeapi/source_pokeapi/spec.yaml b/airbyte-integrations/connectors/source-pokeapi/source_pokeapi/spec.yaml new file mode 100644 index 000000000000..e08974cd37ec --- /dev/null +++ b/airbyte-integrations/connectors/source-pokeapi/source_pokeapi/spec.yaml @@ -0,0 +1,916 @@ +documentationUrl: "https://docs.airbyte.com/integrations/sources/pokeapi" +connectionSpecification: + $schema: "http://json-schema.org/draft-07/schema#" + title: "Pokeapi Spec" + type: object + required: + - pokemon_name + properties: + pokemon_name: + type: string + title: "Pokemon Name" + description: "Pokemon requested from the API." + pattern: "^[a-z0-9_\\-]+$" + enum: + - bulbasaur + - ivysaur + - venusaur + - charmander + - charmeleon + - charizard + - squirtle + - wartortle + - blastoise + - caterpie + - metapod + - butterfree + - weedle + - kakuna + - beedrill + - pidgey + - pidgeotto + - pidgeot + - rattata + - raticate + - spearow + - fearow + - ekans + - arbok + - pikachu + - raichu + - sandshrew + - sandslash + - nidoranf + - nidorina + - nidoqueen + - nidoranm + - nidorino + - nidoking + - clefairy + - clefable + - vulpix + - ninetales + - jigglypuff + - wigglytuff + - zubat + - golbat + - oddish + - gloom + - vileplume + - paras + - parasect + - venonat + - venomoth + - diglett + - dugtrio + - meowth + - persian + - psyduck + - golduck + - mankey + - primeape + - growlithe + - arcanine + - poliwag + - poliwhirl + - poliwrath + - abra + - kadabra + - alakazam + - machop + - machoke + - machamp + - bellsprout + - weepinbell + - victreebel + - tentacool + - tentacruel + - geodude + - graveler + - golem + - ponyta + - rapidash + - slowpoke + - slowbro + - magnemite + - magneton + - farfetchd + - doduo + - dodrio + - seel + - dewgong + - grimer + - muk + - shellder + - cloyster + - gastly + - haunter + - gengar + - onix + - drowzee + - hypno + - krabby + - kingler + - voltorb + - electrode + - exeggcute + - exeggutor + - cubone + - marowak + - hitmonlee + - hitmonchan + - lickitung + - koffing + - weezing + - rhyhorn + - rhydon + - chansey + - tangela + - kangaskhan + - horsea + - seadra + - goldeen + - seaking + - staryu + - starmie + - mrmime + - scyther + - jynx + - electabuzz + - magmar + - pinsir + - tauros + - magikarp + - gyarados + - lapras + - ditto + - eevee + - vaporeon + - jolteon + - flareon + - porygon + - omanyte + - omastar + - kabuto + - kabutops + - aerodactyl + - snorlax + - articuno + - zapdos + - moltres + - dratini + - dragonair + - dragonite + - mewtwo + - mew + - chikorita + - bayleef + - meganium + - cyndaquil + - quilava + - typhlosion + - totodile + - croconaw + - feraligatr + - sentret + - furret + - hoothoot + - noctowl + - ledyba + - ledian + - spinarak + - ariados + - crobat + - chinchou + - lanturn + - pichu + - cleffa + - igglybuff + - togepi + - togetic + - natu + - xatu + - mareep + - flaaffy + - ampharos + - bellossom + - marill + - azumarill + - sudowoodo + - politoed + - hoppip + - skiploom + - jumpluff + - aipom + - sunkern + - sunflora + - yanma + - wooper + - quagsire + - espeon + - umbreon + - murkrow + - slowking + - misdreavus + - unown + - wobbuffet + - girafarig + - pineco + - forretress + - dunsparce + - gligar + - steelix + - snubbull + - granbull + - qwilfish + - scizor + - shuckle + - heracross + - sneasel + - teddiursa + - ursaring + - slugma + - magcargo + - swinub + - piloswine + - corsola + - remoraid + - octillery + - delibird + - mantine + - skarmory + - houndour + - houndoom + - kingdra + - phanpy + - donphan + - porygon2 + - stantler + - smeargle + - tyrogue + - hitmontop + - smoochum + - elekid + - magby + - miltank + - blissey + - raikou + - entei + - suicune + - larvitar + - pupitar + - tyranitar + - lugia + - ho-oh + - celebi + - treecko + - grovyle + - sceptile + - torchic + - combusken + - blaziken + - mudkip + - marshtomp + - swampert + - poochyena + - mightyena + - zigzagoon + - linoone + - wurmple + - silcoon + - beautifly + - cascoon + - dustox + - lotad + - lombre + - ludicolo + - seedot + - nuzleaf + - shiftry + - taillow + - swellow + - wingull + - pelipper + - ralts + - kirlia + - gardevoir + - surskit + - masquerain + - shroomish + - breloom + - slakoth + - vigoroth + - slaking + - nincada + - ninjask + - shedinja + - whismur + - loudred + - exploud + - makuhita + - hariyama + - azurill + - nosepass + - skitty + - delcatty + - sableye + - mawile + - aron + - lairon + - aggron + - meditite + - medicham + - electrike + - manectric + - plusle + - minun + - volbeat + - illumise + - roselia + - gulpin + - swalot + - carvanha + - sharpedo + - wailmer + - wailord + - numel + - camerupt + - torkoal + - spoink + - grumpig + - spinda + - trapinch + - vibrava + - flygon + - cacnea + - cacturne + - swablu + - altaria + - zangoose + - seviper + - lunatone + - solrock + - barboach + - whiscash + - corphish + - crawdaunt + - baltoy + - claydol + - lileep + - cradily + - anorith + - armaldo + - feebas + - milotic + - castform + - kecleon + - shuppet + - banette + - duskull + - dusclops + - tropius + - chimecho + - absol + - wynaut + - snorunt + - glalie + - spheal + - sealeo + - walrein + - clamperl + - huntail + - gorebyss + - relicanth + - luvdisc + - bagon + - shelgon + - salamence + - beldum + - metang + - metagross + - regirock + - regice + - registeel + - latias + - latios + - kyogre + - groudon + - rayquaza + - jirachi + - deoxys + - turtwig + - grotle + - torterra + - chimchar + - monferno + - infernape + - piplup + - prinplup + - empoleon + - starly + - staravia + - staraptor + - bidoof + - bibarel + - kricketot + - kricketune + - shinx + - luxio + - luxray + - budew + - roserade + - cranidos + - rampardos + - shieldon + - bastiodon + - burmy + - wormadam + - mothim + - combee + - vespiquen + - pachirisu + - buizel + - floatzel + - cherubi + - cherrim + - shellos + - gastrodon + - ambipom + - drifloon + - drifblim + - buneary + - lopunny + - mismagius + - honchkrow + - glameow + - purugly + - chingling + - stunky + - skuntank + - bronzor + - bronzong + - bonsly + - mimejr + - happiny + - chatot + - spiritomb + - gible + - gabite + - garchomp + - munchlax + - riolu + - lucario + - hippopotas + - hippowdon + - skorupi + - drapion + - croagunk + - toxicroak + - carnivine + - finneon + - lumineon + - mantyke + - snover + - abomasnow + - weavile + - magnezone + - lickilicky + - rhyperior + - tangrowth + - electivire + - magmortar + - togekiss + - yanmega + - leafeon + - glaceon + - gliscor + - mamoswine + - porygon-z + - gallade + - probopass + - dusknoir + - froslass + - rotom + - uxie + - mesprit + - azelf + - dialga + - palkia + - heatran + - regigigas + - giratina + - cresselia + - phione + - manaphy + - darkrai + - shaymin + - arceus + - victini + - snivy + - servine + - serperior + - tepig + - pignite + - emboar + - oshawott + - dewott + - samurott + - patrat + - watchog + - lillipup + - herdier + - stoutland + - purrloin + - liepard + - pansage + - simisage + - pansear + - simisear + - panpour + - simipour + - munna + - musharna + - pidove + - tranquill + - unfezant + - blitzle + - zebstrika + - roggenrola + - boldore + - gigalith + - woobat + - swoobat + - drilbur + - excadrill + - audino + - timburr + - gurdurr + - conkeldurr + - tympole + - palpitoad + - seismitoad + - throh + - sawk + - sewaddle + - swadloon + - leavanny + - venipede + - whirlipede + - scolipede + - cottonee + - whimsicott + - petilil + - lilligant + - basculin + - sandile + - krokorok + - krookodile + - darumaka + - darmanitan + - maractus + - dwebble + - crustle + - scraggy + - scrafty + - sigilyph + - yamask + - cofagrigus + - tirtouga + - carracosta + - archen + - archeops + - trubbish + - garbodor + - zorua + - zoroark + - minccino + - cinccino + - gothita + - gothorita + - gothitelle + - solosis + - duosion + - reuniclus + - ducklett + - swanna + - vanillite + - vanillish + - vanilluxe + - deerling + - sawsbuck + - emolga + - karrablast + - escavalier + - foongus + - amoonguss + - frillish + - jellicent + - alomomola + - joltik + - galvantula + - ferroseed + - ferrothorn + - klink + - klang + - klinklang + - tynamo + - eelektrik + - eelektross + - elgyem + - beheeyem + - litwick + - lampent + - chandelure + - axew + - fraxure + - haxorus + - cubchoo + - beartic + - cryogonal + - shelmet + - accelgor + - stunfisk + - mienfoo + - mienshao + - druddigon + - golett + - golurk + - pawniard + - bisharp + - bouffalant + - rufflet + - braviary + - vullaby + - mandibuzz + - heatmor + - durant + - deino + - zweilous + - hydreigon + - larvesta + - volcarona + - cobalion + - terrakion + - virizion + - tornadus + - thundurus + - reshiram + - zekrom + - landorus + - kyurem + - keldeo + - meloetta + - genesect + - chespin + - quilladin + - chesnaught + - fennekin + - braixen + - delphox + - froakie + - frogadier + - greninja + - bunnelby + - diggersby + - fletchling + - fletchinder + - talonflame + - scatterbug + - spewpa + - vivillon + - litleo + - pyroar + - flabebe + - floette + - florges + - skiddo + - gogoat + - pancham + - pangoro + - furfrou + - espurr + - meowstic + - honedge + - doublade + - aegislash + - spritzee + - aromatisse + - swirlix + - slurpuff + - inkay + - malamar + - binacle + - barbaracle + - skrelp + - dragalge + - clauncher + - clawitzer + - helioptile + - heliolisk + - tyrunt + - tyrantrum + - amaura + - aurorus + - sylveon + - hawlucha + - dedenne + - carbink + - goomy + - sliggoo + - goodra + - klefki + - phantump + - trevenant + - pumpkaboo + - gourgeist + - bergmite + - avalugg + - noibat + - noivern + - xerneas + - yveltal + - zygarde + - diancie + - hoopa + - volcanion + - rowlet + - dartrix + - decidueye + - litten + - torracat + - incineroar + - popplio + - brionne + - primarina + - pikipek + - trumbeak + - toucannon + - yungoos + - gumshoos + - grubbin + - charjabug + - vikavolt + - crabrawler + - crabominable + - oricorio + - cutiefly + - ribombee + - rockruff + - lycanroc + - wishiwashi + - mareanie + - toxapex + - mudbray + - mudsdale + - dewpider + - araquanid + - fomantis + - lurantis + - morelull + - shiinotic + - salandit + - salazzle + - stufful + - bewear + - bounsweet + - steenee + - tsareena + - comfey + - oranguru + - passimian + - wimpod + - golisopod + - sandygast + - palossand + - pyukumuku + - typenull + - silvally + - minior + - komala + - turtonator + - togedemaru + - mimikyu + - bruxish + - drampa + - dhelmise + - jangmo-o + - hakamo-o + - kommo-o + - tapukoko + - tapulele + - tapubulu + - tapufini + - cosmog + - cosmoem + - solgaleo + - lunala + - nihilego + - buzzwole + - pheromosa + - xurkitree + - celesteela + - kartana + - guzzlord + - necrozma + - magearna + - marshadow + - poipole + - naganadel + - stakataka + - blacephalon + - zeraora + - meltan + - melmetal + - grookey + - thwackey + - rillaboom + - scorbunny + - raboot + - cinderace + - sobble + - drizzile + - inteleon + - skwovet + - greedent + - rookidee + - corvisquire + - corviknight + - blipbug + - dottler + - orbeetle + - nickit + - thievul + - gossifleur + - eldegoss + - wooloo + - dubwool + - chewtle + - drednaw + - yamper + - boltund + - rolycoly + - carkol + - coalossal + - applin + - flapple + - appletun + - silicobra + - sandaconda + - cramorant + - arrokuda + - barraskewda + - toxel + - toxtricity + - sizzlipede + - centiskorch + - clobbopus + - grapploct + - sinistea + - polteageist + - hatenna + - hattrem + - hatterene + - impidimp + - morgrem + - grimmsnarl + - obstagoon + - perrserker + - cursola + - sirfetchd + - mrrime + - runerigus + - milcery + - alcremie + - falinks + - pincurchin + - snom + - frosmoth + - stonjourner + - eiscue + - indeedee + - morpeko + - cufant + - copperajah + - dracozolt + - arctozolt + - dracovish + - arctovish + - duraludon + - dreepy + - drakloak + - dragapult + - zacian + - zamazenta + - eternatus + - kubfu + - urshifu + - zarude + - regieleki + - regidrago + - glastrier + - spectrier + - calyrex + examples: + - ditto + - luxray + - snorlax diff --git a/airbyte-integrations/connectors/source-postgres-strict-encrypt/build.gradle b/airbyte-integrations/connectors/source-postgres-strict-encrypt/build.gradle index b03fae124fad..e0476313b03b 100644 --- a/airbyte-integrations/connectors/source-postgres-strict-encrypt/build.gradle +++ b/airbyte-integrations/connectors/source-postgres-strict-encrypt/build.gradle @@ -4,7 +4,7 @@ plugins { } airbyteJavaConnector { - cdkVersionRequired = '0.1.0' + cdkVersionRequired = '0.1.8' features = ['db-sources'] useLocalCdk = false } @@ -16,6 +16,12 @@ application { applicationDefaultJvmArgs = ['-XX:+ExitOnOutOfMemoryError', '-XX:MaxRAMPercentage=75.0'] } +configurations.all { + resolutionStrategy { + force 'org.jooq:jooq:3.13.4' + } +} + dependencies { implementation project(':airbyte-integrations:connectors:source-postgres') implementation libs.airbyte.protocol diff --git a/airbyte-integrations/connectors/source-postgres-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/source-postgres-strict-encrypt/metadata.yaml index 1b2bed77262c..6d6d49f8cfeb 100644 --- a/airbyte-integrations/connectors/source-postgres-strict-encrypt/metadata.yaml +++ b/airbyte-integrations/connectors/source-postgres-strict-encrypt/metadata.yaml @@ -12,7 +12,7 @@ data: connectorType: source definitionId: decd338e-5647-4c0b-adf4-da0e75f5a750 maxSecondsBetweenMessages: 7200 - dockerImageTag: 3.1.8 + dockerImageTag: 3.1.11 dockerRepository: airbyte/source-postgres-strict-encrypt githubIssueLabel: source-postgres icon: postgresql.svg diff --git a/airbyte-integrations/connectors/source-postgres/Dockerfile b/airbyte-integrations/connectors/source-postgres/Dockerfile index d7e10879216a..1d2525293ab3 100644 --- a/airbyte-integrations/connectors/source-postgres/Dockerfile +++ b/airbyte-integrations/connectors/source-postgres/Dockerfile @@ -24,5 +24,5 @@ ENV APPLICATION source-postgres COPY --from=build /airbyte /airbyte -LABEL io.airbyte.version=3.1.9 +LABEL io.airbyte.version=3.1.11 LABEL io.airbyte.name=airbyte/source-postgres diff --git a/airbyte-integrations/connectors/source-postgres/build.gradle b/airbyte-integrations/connectors/source-postgres/build.gradle index 56253ec358d4..360f81ec60a0 100644 --- a/airbyte-integrations/connectors/source-postgres/build.gradle +++ b/airbyte-integrations/connectors/source-postgres/build.gradle @@ -7,7 +7,7 @@ plugins { } airbyteJavaConnector { - cdkVersionRequired = '0.1.0' + cdkVersionRequired = '0.1.8' features = ['db-sources'] useLocalCdk = false } diff --git a/airbyte-integrations/connectors/source-postgres/metadata.yaml b/airbyte-integrations/connectors/source-postgres/metadata.yaml index ce6939c4bee7..73eeefbd550a 100644 --- a/airbyte-integrations/connectors/source-postgres/metadata.yaml +++ b/airbyte-integrations/connectors/source-postgres/metadata.yaml @@ -6,7 +6,7 @@ data: connectorSubtype: database connectorType: source definitionId: decd338e-5647-4c0b-adf4-da0e75f5a750 - dockerImageTag: 3.1.9 + dockerImageTag: 3.1.11 maxSecondsBetweenMessages: 7200 dockerRepository: airbyte/source-postgres githubIssueLabel: source-postgres diff --git a/airbyte-integrations/connectors/source-postgres/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/AbstractPostgresSourceDatatypeTest.java b/airbyte-integrations/connectors/source-postgres/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/AbstractPostgresSourceDatatypeTest.java index 8389fe6ffdff..3c127adb1c08 100644 --- a/airbyte-integrations/connectors/source-postgres/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/AbstractPostgresSourceDatatypeTest.java +++ b/airbyte-integrations/connectors/source-postgres/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/AbstractPostgresSourceDatatypeTest.java @@ -202,20 +202,6 @@ protected void initTests() { .addExpectedValues((String) null) .build()); - for (final String type : Set.of("double precision", "float", "float8")) { - addDataTypeTestData( - TestDataHolder.builder() - .sourceType(type) - .airbyteType(JsonSchemaType.NUMBER) - .addInsertValues("'123'", "'1234567890.1234567'", "null") - // Postgres source does not support these special values yet - // https://github.com/airbytehq/airbyte/issues/8902 - // "'-Infinity'", "'Infinity'", "'NaN'", "null") - .addExpectedValues("123.0", "1.2345678901234567E9", null) - // "-Infinity", "Infinity", "NaN", null) - .build()); - } - addDataTypeTestData( TestDataHolder.builder() .sourceType("inet") @@ -320,38 +306,23 @@ protected void initTests() { addDataTypeTestData( TestDataHolder.builder() .sourceType("numeric") - .fullSourceDataType("NUMERIC(38)") + .fullSourceDataType("NUMERIC(38,0)") .airbyteType(JsonSchemaType.INTEGER) - .addInsertValues("'33'") - .addExpectedValues("33") - .build()); - - addDataTypeTestData( - TestDataHolder.builder() - .sourceType("numeric") - .fullSourceDataType("NUMERIC(28,2)") - .airbyteType(JsonSchemaType.NUMBER) - .addInsertValues( - "'123'", "null", "'14525.22'") - // Postgres source does not support these special values yet - // https://github.com/airbytehq/airbyte/issues/8902 - // "'infinity'", "'-infinity'", "'nan'" - .addExpectedValues("123", null, "14525.22") + .addInsertValues("'33'", "'123'") + .addExpectedValues("33", "123") .build()); - // Blocked by https://github.com/airbytehq/airbyte/issues/8902 - for (final String type : Set.of("numeric", "decimal")) { + for (final String type : Set.of("double precision", "float", "float8")) { addDataTypeTestData( TestDataHolder.builder() .sourceType(type) - .fullSourceDataType("NUMERIC(20,7)") .airbyteType(JsonSchemaType.NUMBER) - .addInsertValues( - "'123'", "null", "'1234567890.1234567'") + .addInsertValues("'123'", "'1234567890.1234567'", "null") // Postgres source does not support these special values yet // https://github.com/airbytehq/airbyte/issues/8902 - // "'infinity'", "'-infinity'", "'nan'" - .addExpectedValues("123", null, "1.2345678901234567E9") + // "'-Infinity'", "'Infinity'", "'NaN'", "null") + .addExpectedValues("123.0", "1.2345678901234567E9", null) + // "-Infinity", "Infinity", "NaN", null) .build()); } @@ -592,6 +563,7 @@ protected void initTests() { addTimeWithTimeZoneTest(); addArraysTestData(); addMoneyTest(); + addNumericValuesTest(); } protected void addHstoreTest() { @@ -966,4 +938,35 @@ private void addArraysTestData() { .build()); } + protected void addNumericValuesTest() { + addDataTypeTestData( + TestDataHolder.builder() + .sourceType("numeric") + .fullSourceDataType("NUMERIC(28,2)") + .airbyteType(JsonSchemaType.NUMBER) + .addInsertValues( + "'123'", "null", "'14525.22'") + // Postgres source does not support these special values yet + // https://github.com/airbytehq/airbyte/issues/8902 + // "'infinity'", "'-infinity'", "'nan'" + .addExpectedValues("123.0", null, "14525.22") + .build()); + + // Blocked by https://github.com/airbytehq/airbyte/issues/8902 + for (final String type : Set.of("numeric", "decimal")) { + addDataTypeTestData( + TestDataHolder.builder() + .sourceType(type) + .fullSourceDataType("NUMERIC(20,7)") + .airbyteType(JsonSchemaType.NUMBER) + .addInsertValues( + "'123'", "null", "'1234567890.1234567'") + // Postgres source does not support these special values yet + // https://github.com/airbytehq/airbyte/issues/8902 + // "'infinity'", "'-infinity'", "'nan'" + .addExpectedValues("123.0", null, "1.2345678901234567E9") + .build()); + } + } + } diff --git a/airbyte-integrations/connectors/source-postgres/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/CdcWalLogsPostgresSourceDatatypeTest.java b/airbyte-integrations/connectors/source-postgres/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/CdcWalLogsPostgresSourceDatatypeTest.java index 65fd35fe0cd6..8a28044a0035 100644 --- a/airbyte-integrations/connectors/source-postgres/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/CdcWalLogsPostgresSourceDatatypeTest.java +++ b/airbyte-integrations/connectors/source-postgres/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/CdcWalLogsPostgresSourceDatatypeTest.java @@ -215,4 +215,36 @@ protected void addTimestampWithInfinityValuesTest() { } } + @Override + protected void addNumericValuesTest() { + addDataTypeTestData( + TestDataHolder.builder() + .sourceType("numeric") + .fullSourceDataType("NUMERIC(28,2)") + .airbyteType(JsonSchemaType.NUMBER) + .addInsertValues( + "'123'", "null", "'14525.22'") + // Postgres source does not support these special values yet + // https://github.com/airbytehq/airbyte/issues/8902 + // "'infinity'", "'-infinity'", "'nan'" + .addExpectedValues("123", null, "14525.22") + .build()); + + // Blocked by https://github.com/airbytehq/airbyte/issues/8902 + for (final String type : Set.of("numeric", "decimal")) { + addDataTypeTestData( + TestDataHolder.builder() + .sourceType(type) + .fullSourceDataType("NUMERIC(20,7)") + .airbyteType(JsonSchemaType.NUMBER) + .addInsertValues( + "'123'", "null", "'1234567890.1234567'") + // Postgres source does not support these special values yet + // https://github.com/airbytehq/airbyte/issues/8902 + // "'infinity'", "'-infinity'", "'nan'" + .addExpectedValues("123", null, "1.2345678901234567E9") + .build()); + } + } + } diff --git a/airbyte-integrations/connectors/source-postgres/src/test/java/io/airbyte/integrations/source/postgres/CdkImportTest.java b/airbyte-integrations/connectors/source-postgres/src/test/java/io/airbyte/integrations/source/postgres/CdkImportTest.java index 8aa8b87e0f74..eb296a5f4ddf 100644 --- a/airbyte-integrations/connectors/source-postgres/src/test/java/io/airbyte/integrations/source/postgres/CdkImportTest.java +++ b/airbyte-integrations/connectors/source-postgres/src/test/java/io/airbyte/integrations/source/postgres/CdkImportTest.java @@ -21,7 +21,7 @@ class CdkImportTest { @Test void cdkVersionShouldMatch() { // Should fail in unit test phase: - assertEquals("0.1.0", CDKConstants.VERSION.replace("-SNAPSHOT", "")); + assertEquals("0.1.8", CDKConstants.VERSION.replace("-SNAPSHOT", "")); } } diff --git a/airbyte-integrations/connectors/source-salesforce/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-salesforce/integration_tests/expected_records.jsonl index dfa6d5b3b5b8..4f0913339983 100644 --- a/airbyte-integrations/connectors/source-salesforce/integration_tests/expected_records.jsonl +++ b/airbyte-integrations/connectors/source-salesforce/integration_tests/expected_records.jsonl @@ -1,30 +1,30 @@ -{"stream": "Account", "data": {"attributes": {"type": "Account", "url": "/services/data/v57.0/sobjects/Account/0014W000027f6V5QAI"}, "Id": "0014W000027f6V5QAI", "IsDeleted": false, "MasterRecordId": null, "Name": "United Oil & Gas, Singapore", "Type": "Customer - Direct", "ParentId": null, "BillingStreet": "9 Tagore Lane\nSingapore, Singapore 787472\nSingapore", "BillingCity": "Singapore", "BillingState": "Singapore", "BillingPostalCode": null, "BillingCountry": null, "BillingLatitude": null, "BillingLongitude": null, "BillingGeocodeAccuracy": null, "BillingAddress": {"city": "Singapore", "country": null, "geocodeAccuracy": null, "latitude": null, "longitude": null, "postalCode": null, "state": "Singapore", "street": "9 Tagore Lane\nSingapore, Singapore 787472\nSingapore"}, "ShippingStreet": "9 Tagore Lane\nSingapore, Singapore 787472\nSingapore", "ShippingCity": null, "ShippingState": null, "ShippingPostalCode": null, "ShippingCountry": null, "ShippingLatitude": null, "ShippingLongitude": null, "ShippingGeocodeAccuracy": null, "ShippingAddress": {"city": null, "country": null, "geocodeAccuracy": null, "latitude": null, "longitude": null, "postalCode": null, "state": null, "street": "9 Tagore Lane\nSingapore, Singapore 787472\nSingapore"}, "Phone": "(650) 450-8810", "Fax": "(650) 450-8820", "AccountNumber": "CD355120-B", "Website": "http://www.uos.com", "PhotoUrl": "/services/images/photo/0014W000027f6V5QAI", "Sic": "4437", "Industry": "Energy", "AnnualRevenue": null, "NumberOfEmployees": 3000, "Ownership": "Public", "TickerSymbol": "UOS", "Description": null, "Rating": null, "Site": null, "OwnerId": "0054W00000BZkk0QAD", "CreatedDate": "2020-10-22T21:03:23.000+0000", "CreatedById": "0054W00000BZkk0QAD", "LastModifiedDate": "2020-10-22T21:03:23.000+0000", "LastModifiedById": "0054W00000BZkk0QAD", "SystemModstamp": "2020-10-22T21:03:23.000+0000", "LastActivityDate": null, "LastViewedDate": null, "LastReferencedDate": null, "Jigsaw": null, "JigsawCompanyId": null, "CleanStatus": "Pending", "AccountSource": null, "DunsNumber": null, "Tradestyle": null, "NaicsCode": null, "NaicsDesc": null, "YearStarted": null, "SicDesc": null, "DandbCompanyId": null, "OperatingHoursId": null, "CustomerPriority__c": "High", "SLA__c": "Platinum", "Active__c": "Yes", "NumberofLocations__c": 6.0, "UpsellOpportunity__c": "Maybe", "SLASerialNumber__c": "2457", "SLAExpirationDate__c": "2021-05-19"}, "emitted_at": 1684265259323} -{"stream": "Account", "data": {"attributes": {"type": "Account", "url": "/services/data/v57.0/sobjects/Account/0014W000027f6V4QAI"}, "Id": "0014W000027f6V4QAI", "IsDeleted": false, "MasterRecordId": null, "Name": "United Oil & Gas, UK", "Type": "Customer - Direct", "ParentId": null, "BillingStreet": "Kings Park, 17th Avenue, Team Valley Trading Estate,\nGateshead, Tyne and Wear NE26 3HS\nUnited Kingdom", "BillingCity": null, "BillingState": "UK", "BillingPostalCode": null, "BillingCountry": null, "BillingLatitude": null, "BillingLongitude": null, "BillingGeocodeAccuracy": null, "BillingAddress": {"city": null, "country": null, "geocodeAccuracy": null, "latitude": null, "longitude": null, "postalCode": null, "state": "UK", "street": "Kings Park, 17th Avenue, Team Valley Trading Estate,\nGateshead, Tyne and Wear NE26 3HS\nUnited Kingdom"}, "ShippingStreet": "Kings Park, 17th Avenue, Team Valley Trading Estate,\nGateshead, Tyne and Wear NE26 3HS\nUnited Kingdom", "ShippingCity": null, "ShippingState": null, "ShippingPostalCode": null, "ShippingCountry": null, "ShippingLatitude": null, "ShippingLongitude": null, "ShippingGeocodeAccuracy": null, "ShippingAddress": {"city": null, "country": null, "geocodeAccuracy": null, "latitude": null, "longitude": null, "postalCode": null, "state": null, "street": "Kings Park, 17th Avenue, Team Valley Trading Estate,\nGateshead, Tyne and Wear NE26 3HS\nUnited Kingdom"}, "Phone": "+44 191 4956203", "Fax": "+44 191 4956620", "AccountNumber": "CD355119-A", "Website": "http://www.uos.com", "PhotoUrl": "/services/images/photo/0014W000027f6V4QAI", "Sic": "4437", "Industry": "Energy", "AnnualRevenue": null, "NumberOfEmployees": 24000, "Ownership": "Public", "TickerSymbol": "UOS", "Description": null, "Rating": null, "Site": null, "OwnerId": "0054W00000BZkk0QAD", "CreatedDate": "2020-10-22T21:03:23.000+0000", "CreatedById": "0054W00000BZkk0QAD", "LastModifiedDate": "2020-10-22T21:03:23.000+0000", "LastModifiedById": "0054W00000BZkk0QAD", "SystemModstamp": "2020-10-22T21:03:23.000+0000", "LastActivityDate": null, "LastViewedDate": null, "LastReferencedDate": null, "Jigsaw": null, "JigsawCompanyId": null, "CleanStatus": "Pending", "AccountSource": null, "DunsNumber": null, "Tradestyle": null, "NaicsCode": null, "NaicsDesc": null, "YearStarted": null, "SicDesc": null, "DandbCompanyId": null, "OperatingHoursId": null, "CustomerPriority__c": "High", "SLA__c": "Platinum", "Active__c": "Yes", "NumberofLocations__c": 34.0, "UpsellOpportunity__c": "No", "SLASerialNumber__c": "3479", "SLAExpirationDate__c": "2020-11-16"}, "emitted_at": 1684265259326} -{"stream": "Account", "data": {"attributes": {"type": "Account", "url": "/services/data/v57.0/sobjects/Account/0014W000027f6V3QAI"}, "Id": "0014W000027f6V3QAI", "IsDeleted": false, "MasterRecordId": null, "Name": "University of Arizona", "Type": "Customer - Direct", "ParentId": null, "BillingStreet": "888 N Euclid \nHallis Center, Room 501\nTucson, AZ 85721\nUnited States", "BillingCity": "Tucson", "BillingState": "AZ", "BillingPostalCode": null, "BillingCountry": null, "BillingLatitude": null, "BillingLongitude": null, "BillingGeocodeAccuracy": null, "BillingAddress": {"city": "Tucson", "country": null, "geocodeAccuracy": null, "latitude": null, "longitude": null, "postalCode": null, "state": "AZ", "street": "888 N Euclid \nHallis Center, Room 501\nTucson, AZ 85721\nUnited States"}, "ShippingStreet": "888 N Euclid \nHallis Center, Room 501\nTucson, AZ 85721\nUnited States", "ShippingCity": null, "ShippingState": null, "ShippingPostalCode": null, "ShippingCountry": null, "ShippingLatitude": null, "ShippingLongitude": null, "ShippingGeocodeAccuracy": null, "ShippingAddress": {"city": null, "country": null, "geocodeAccuracy": null, "latitude": null, "longitude": null, "postalCode": null, "state": null, "street": "888 N Euclid \nHallis Center, Room 501\nTucson, AZ 85721\nUnited States"}, "Phone": "(520) 773-9050", "Fax": "(520) 773-9060", "AccountNumber": "CD736025", "Website": "www.universityofarizona.com", "PhotoUrl": "/services/images/photo/0014W000027f6V3QAI", "Sic": "7321", "Industry": "Education", "AnnualRevenue": null, "NumberOfEmployees": 39000, "Ownership": "Other", "TickerSymbol": null, "Description": "Leading university in AZ offering undergraduate and graduate programs in arts and humanities, pure sciences, engineering, business, and medicine.", "Rating": "Warm", "Site": null, "OwnerId": "0054W00000BZkk0QAD", "CreatedDate": "2020-10-22T21:03:23.000+0000", "CreatedById": "0054W00000BZkk0QAD", "LastModifiedDate": "2020-10-22T21:03:23.000+0000", "LastModifiedById": "0054W00000BZkk0QAD", "SystemModstamp": "2020-10-22T21:03:23.000+0000", "LastActivityDate": null, "LastViewedDate": null, "LastReferencedDate": null, "Jigsaw": null, "JigsawCompanyId": null, "CleanStatus": "Pending", "AccountSource": null, "DunsNumber": null, "Tradestyle": null, "NaicsCode": null, "NaicsDesc": null, "YearStarted": null, "SicDesc": null, "DandbCompanyId": null, "OperatingHoursId": null, "CustomerPriority__c": "Medium", "SLA__c": "Gold", "Active__c": "Yes", "NumberofLocations__c": 3.0, "UpsellOpportunity__c": "Yes", "SLASerialNumber__c": "8350", "SLAExpirationDate__c": "2020-11-16"}, "emitted_at": 1684265259328} -{"stream": "ActiveFeatureLicenseMetric", "data": {"Id": "5H24W000000DA8jSAG", "MetricsDate": "2021-06-06", "FeatureType": "MarketingUser", "SystemModstamp": "2021-06-06T05:04:12.000Z", "AssignedUserCount": 1, "ActiveUserCount": 1, "TotalLicenseCount": 2}, "emitted_at": 1684265266426} -{"stream": "ActiveFeatureLicenseMetric", "data": {"Id": "5H24W000000DA8pSAG", "MetricsDate": "2021-06-06", "FeatureType": "OfflineUser", "SystemModstamp": "2021-06-06T05:04:12.000Z", "AssignedUserCount": 1, "ActiveUserCount": 1, "TotalLicenseCount": 2}, "emitted_at": 1684265266427} -{"stream": "ActiveFeatureLicenseMetric", "data": {"Id": "5H24W000000DA8qSAG", "MetricsDate": "2021-06-06", "FeatureType": "MobileUser", "SystemModstamp": "2021-06-06T05:04:12.000Z", "AssignedUserCount": 1, "ActiveUserCount": 1, "TotalLicenseCount": 3}, "emitted_at": 1684265266428} -{"stream": "ActivePermSetLicenseMetric", "data": {"Id": "5H14W000000I7Y0SAK", "MetricsDate": "2021-06-06", "PermissionSetLicenseId": "0PL4W0000012s3wWAA", "SystemModstamp": "2021-06-06T05:23:44.000Z", "AssignedUserCount": 0, "ActiveUserCount": 0, "DeveloperName": null, "MasterLabel": null, "TotalLicenses": null}, "emitted_at": 1684265287677} -{"stream": "ActivePermSetLicenseMetric", "data": {"Id": "5H14W000000I7Y1SAK", "MetricsDate": "2021-06-06", "PermissionSetLicenseId": "0PL4W0000012s3xWAA", "SystemModstamp": "2021-06-06T05:23:44.000Z", "AssignedUserCount": 0, "ActiveUserCount": 0, "DeveloperName": null, "MasterLabel": null, "TotalLicenses": null}, "emitted_at": 1684265287678} -{"stream": "ActivePermSetLicenseMetric", "data": {"Id": "5H14W000000I7Y2SAK", "MetricsDate": "2021-06-06", "PermissionSetLicenseId": "0PL4W0000012s3yWAA", "SystemModstamp": "2021-06-06T05:23:44.000Z", "AssignedUserCount": 0, "ActiveUserCount": 0, "DeveloperName": null, "MasterLabel": null, "TotalLicenses": null}, "emitted_at": 1684265287679} -{"stream": "ActiveProfileMetric", "data": {"Id": "5H04W000000MrTCSA0", "MetricsDate": "2021-06-06", "UserLicenseId": "1004W000001gXudQAE", "ProfileId": "00e4W000001VsqfQAC", "SystemModstamp": "2021-06-06T06:50:04.000Z", "AssignedUserCount": 0, "ActiveUserCount": 0}, "emitted_at": 1684265307076} -{"stream": "ActiveProfileMetric", "data": {"Id": "5H04W000000MrTDSA0", "MetricsDate": "2021-06-06", "UserLicenseId": "1004W000001gXudQAE", "ProfileId": "00e4W000002LjMOQA0", "SystemModstamp": "2021-06-06T06:50:04.000Z", "AssignedUserCount": 1, "ActiveUserCount": 1}, "emitted_at": 1684265307077} -{"stream": "ActiveProfileMetric", "data": {"Id": "5H04W000000MrTESA0", "MetricsDate": "2021-06-06", "UserLicenseId": "1004W000001gXudQAE", "ProfileId": "00e4W000002LjMtQAK", "SystemModstamp": "2021-06-06T06:50:04.000Z", "AssignedUserCount": 0, "ActiveUserCount": 0}, "emitted_at": 1684265307078} -{"stream": "AppDefinition", "data": {"Id": "000000000000000AAA", "DurableId": "06m4W000001ldIZQAY", "Label": "Sales", "MasterLabel": "salesforce", "NamespacePrefix": "standard", "DeveloperName": "Sales", "LogoUrl": "/img/salesforce-noname-logo-v2.svg", "Description": "The world's most popular sales force automation (SFA) solution", "UiType": "Aloha", "NavType": "Standard", "UtilityBar": null, "HeaderColor": "#0070D2", "IsOverrideOrgTheme": false, "IsSmallFormFactorSupported": false, "IsMediumFormFactorSupported": false, "IsLargeFormFactorSupported": false, "IsNavPersonalizationDisabled": false, "IsNavAutoTempTabsDisabled": false, "IsNavTabPersistenceDisabled": false}, "emitted_at": 1684265329649} -{"stream": "AppDefinition", "data": {"Id": "000000000000000AAA", "DurableId": "06m4W000001ldIdQAI", "Label": "Service", "MasterLabel": "supportforce", "NamespacePrefix": "standard", "DeveloperName": "Service", "LogoUrl": "/img/salesforce-noname-logo-v2.svg", "Description": "Manage customer service with accounts, contacts, cases, and more", "UiType": "Aloha", "NavType": "Standard", "UtilityBar": null, "HeaderColor": "#0070D2", "IsOverrideOrgTheme": false, "IsSmallFormFactorSupported": false, "IsMediumFormFactorSupported": false, "IsLargeFormFactorSupported": true, "IsNavPersonalizationDisabled": false, "IsNavAutoTempTabsDisabled": false, "IsNavTabPersistenceDisabled": false}, "emitted_at": 1684265329650} -{"stream": "AppDefinition", "data": {"Id": "000000000000000AAA", "DurableId": "06m4W000001ldIeQAI", "Label": "Marketing", "MasterLabel": "Marketing", "NamespacePrefix": "standard", "DeveloperName": "Marketing", "LogoUrl": "/img/salesforce-noname-logo-v2.svg", "Description": "Best-in-class on-demand marketing automation", "UiType": "Aloha", "NavType": "Standard", "UtilityBar": null, "HeaderColor": "#0070D2", "IsOverrideOrgTheme": false, "IsSmallFormFactorSupported": false, "IsMediumFormFactorSupported": false, "IsLargeFormFactorSupported": true, "IsNavPersonalizationDisabled": false, "IsNavAutoTempTabsDisabled": false, "IsNavTabPersistenceDisabled": false}, "emitted_at": 1684265329651} -{"stream": "Asset", "data": {"attributes": {"type": "Asset", "url": "/services/data/v57.0/sobjects/Asset/02i4W00000EkJspQAF"}, "Id": "02i4W00000EkJspQAF", "ContactId": null, "AccountId": "0014W00002DkoWNQAZ", "ParentId": null, "RootAssetId": "02i4W00000EkJspQAF", "Product2Id": null, "ProductCode": null, "IsCompetitorProduct": false, "CreatedDate": "2021-01-18T21:44:57.000+0000", "CreatedById": "0054W00000BZkk0QAD", "LastModifiedDate": "2021-01-18T21:44:57.000+0000", "LastModifiedById": "0054W00000BZkk0QAD", "SystemModstamp": "2021-01-18T21:44:57.000+0000", "IsDeleted": false, "Name": "Radish - Black, Winter, Organic", "SerialNumber": null, "InstallDate": null, "PurchaseDate": null, "UsageEndDate": null, "LifecycleStartDate": null, "LifecycleEndDate": null, "Status": null, "Price": null, "Quantity": null, "Description": null, "OwnerId": "0054W00000BZkk0QAD", "AssetProvidedById": null, "AssetServicedById": null, "IsInternal": false, "AssetLevel": 1, "StockKeepingUnit": null, "HasLifecycleManagement": false, "CurrentMrr": null, "CurrentLifecycleEndDate": null, "CurrentQuantity": null, "CurrentAmount": null, "TotalLifecycleAmount": null, "Street": null, "City": null, "State": null, "PostalCode": null, "Country": null, "Latitude": null, "Longitude": null, "GeocodeAccuracy": null, "Address": null, "LastViewedDate": null, "LastReferencedDate": null}, "emitted_at": 1684265330917} -{"stream": "Asset", "data": {"attributes": {"type": "Asset", "url": "/services/data/v57.0/sobjects/Asset/02i4W00000EkJtDQAV"}, "Id": "02i4W00000EkJtDQAV", "ContactId": null, "AccountId": "0014W00002DkoWJQAZ", "ParentId": null, "RootAssetId": "02i4W00000EkJtDQAV", "Product2Id": null, "ProductCode": null, "IsCompetitorProduct": false, "CreatedDate": "2021-01-18T21:44:57.000+0000", "CreatedById": "0054W00000BZkk0QAD", "LastModifiedDate": "2021-01-18T21:44:57.000+0000", "LastModifiedById": "0054W00000BZkk0QAD", "SystemModstamp": "2021-01-18T21:44:57.000+0000", "IsDeleted": false, "Name": "Mushroom - Morels, Dry", "SerialNumber": null, "InstallDate": null, "PurchaseDate": null, "UsageEndDate": null, "LifecycleStartDate": null, "LifecycleEndDate": null, "Status": null, "Price": null, "Quantity": null, "Description": null, "OwnerId": "0054W00000BZkk0QAD", "AssetProvidedById": null, "AssetServicedById": null, "IsInternal": false, "AssetLevel": 1, "StockKeepingUnit": null, "HasLifecycleManagement": false, "CurrentMrr": null, "CurrentLifecycleEndDate": null, "CurrentQuantity": null, "CurrentAmount": null, "TotalLifecycleAmount": null, "Street": null, "City": null, "State": null, "PostalCode": null, "Country": null, "Latitude": null, "Longitude": null, "GeocodeAccuracy": null, "Address": null, "LastViewedDate": null, "LastReferencedDate": null}, "emitted_at": 1684265330919} -{"stream": "Asset", "data": {"attributes": {"type": "Asset", "url": "/services/data/v57.0/sobjects/Asset/02i4W00000EkJsrQAF"}, "Id": "02i4W00000EkJsrQAF", "ContactId": null, "AccountId": "0014W00002DkoW5QAJ", "ParentId": null, "RootAssetId": "02i4W00000EkJsrQAF", "Product2Id": null, "ProductCode": null, "IsCompetitorProduct": false, "CreatedDate": "2021-01-18T21:44:57.000+0000", "CreatedById": "0054W00000BZkk0QAD", "LastModifiedDate": "2021-01-18T21:44:57.000+0000", "LastModifiedById": "0054W00000BZkk0QAD", "SystemModstamp": "2021-01-18T21:44:57.000+0000", "IsDeleted": false, "Name": "Truffle Cups Green", "SerialNumber": null, "InstallDate": null, "PurchaseDate": null, "UsageEndDate": null, "LifecycleStartDate": null, "LifecycleEndDate": null, "Status": null, "Price": null, "Quantity": null, "Description": null, "OwnerId": "0054W00000BZkk0QAD", "AssetProvidedById": null, "AssetServicedById": null, "IsInternal": false, "AssetLevel": 1, "StockKeepingUnit": null, "HasLifecycleManagement": false, "CurrentMrr": null, "CurrentLifecycleEndDate": null, "CurrentQuantity": null, "CurrentAmount": null, "TotalLifecycleAmount": null, "Street": null, "City": null, "State": null, "PostalCode": null, "Country": null, "Latitude": null, "Longitude": null, "GeocodeAccuracy": null, "Address": null, "LastViewedDate": null, "LastReferencedDate": null}, "emitted_at": 1684265330921} -{"stream": "FormulaFunctionAllowedType", "data": {"Id": "000000000000000AAA", "DurableId": "VALIDATION-ABS", "FunctionId": "ABS", "Type": "VALIDATION"}, "emitted_at": 1684265334221} -{"stream": "FormulaFunctionAllowedType", "data": {"Id": "000000000000000AAA", "DurableId": "VALIDATION-ACOS", "FunctionId": "ACOS", "Type": "VALIDATION"}, "emitted_at": 1684265334222} -{"stream": "FormulaFunctionAllowedType", "data": {"Id": "000000000000000AAA", "DurableId": "VALIDATION-ADDMONTHS", "FunctionId": "ADDMONTHS", "Type": "VALIDATION"}, "emitted_at": 1684265334223} -{"stream": "LeadHistory", "data": {"Id": "0174W00010EpxkSQAR", "IsDeleted": false, "LeadId": "00Q4W00001WGXdDUAX", "CreatedById": "0054W00000BZkk0QAD", "CreatedDate": "2021-11-02T00:20:05.000Z", "Field": "Title", "DataType": "Text", "OldValue": "Co-Founder", "NewValue": "History Track"}, "emitted_at": 1684265342972} -{"stream": "LeadHistory", "data": {"Id": "0174W0001FSln5AQQR", "IsDeleted": false, "LeadId": "00Q4W00001WGXdDUAX", "CreatedById": "0054W00000BZkk0QAD", "CreatedDate": "2023-01-17T15:14:50.000Z", "Field": "FirstName", "DataType": "Text", "OldValue": "Jean", "NewValue": "John"}, "emitted_at": 1684265352478} -{"stream": "LeadHistory", "data": {"Id": "0174W0001FSln5BQQR", "IsDeleted": false, "LeadId": "00Q4W00001WGXdDUAX", "CreatedById": "0054W00000BZkk0QAD", "CreatedDate": "2023-01-17T15:14:50.000Z", "Field": "LastName", "DataType": "Text", "OldValue": "Lafleur", "NewValue": "Doe"}, "emitted_at": 1684265352479} -{"stream": "ObjectPermissions", "data": {"Id": "1104W00002Fjqc6QAB", "ParentId": "0PS4W000002mq70WAA", "SobjectType": "AuthorizationFormConsent", "PermissionsCreate": true, "PermissionsRead": true, "PermissionsEdit": true, "PermissionsDelete": true, "PermissionsViewAllRecords": false, "PermissionsModifyAllRecords": false, "CreatedDate": "2020-10-22T21:03:23.000Z", "CreatedById": "0054W00000CVeyaQAD", "LastModifiedDate": "2020-10-22T21:03:23.000Z", "LastModifiedById": "0054W00000CVeyaQAD", "SystemModstamp": "2020-10-22T21:03:23.000Z"}, "emitted_at": 1684265357620} -{"stream": "ObjectPermissions", "data": {"Id": "1104W00002Fjqc7QAB", "ParentId": "0PS4W000002mq70WAA", "SobjectType": "AuthorizationFormDataUse", "PermissionsCreate": true, "PermissionsRead": true, "PermissionsEdit": true, "PermissionsDelete": true, "PermissionsViewAllRecords": false, "PermissionsModifyAllRecords": false, "CreatedDate": "2020-10-22T21:03:23.000Z", "CreatedById": "0054W00000CVeyaQAD", "LastModifiedDate": "2020-10-22T21:03:23.000Z", "LastModifiedById": "0054W00000CVeyaQAD", "SystemModstamp": "2020-10-22T21:03:23.000Z"}, "emitted_at": 1684265357622} -{"stream": "ObjectPermissions", "data": {"Id": "1104W00002Fjqc8QAB", "ParentId": "0PS4W000002mq70WAA", "SobjectType": "AuthorizationFormText", "PermissionsCreate": true, "PermissionsRead": true, "PermissionsEdit": true, "PermissionsDelete": true, "PermissionsViewAllRecords": false, "PermissionsModifyAllRecords": false, "CreatedDate": "2020-10-22T21:03:23.000Z", "CreatedById": "0054W00000CVeyaQAD", "LastModifiedDate": "2020-10-22T21:03:23.000Z", "LastModifiedById": "0054W00000CVeyaQAD", "SystemModstamp": "2020-10-22T21:03:23.000Z"}, "emitted_at": 1684265357622} -{"stream": "PermissionSetTabSetting", "data": {"Id": "01P4W00005O7pKXUAZ", "ParentId": "0PS4W000002mq7WWAQ", "Visibility": "DefaultOn", "Name": "standard-ConsumptionSchedule", "SystemModstamp": "2020-10-22T21:03:23.000Z"}, "emitted_at": 1684265399726} -{"stream": "PermissionSetTabSetting", "data": {"Id": "01P4W00005O7pLCUAZ", "ParentId": "0PS4W000002mq7OWAQ", "Visibility": "DefaultOn", "Name": "standard-AppLauncher", "SystemModstamp": "2020-10-22T21:03:23.000Z"}, "emitted_at": 1684265399727} -{"stream": "PermissionSetTabSetting", "data": {"Id": "01P4W00005O7pLFUAZ", "ParentId": "0PS4W000002mq7PWAQ", "Visibility": "DefaultOn", "Name": "standard-AppLauncher", "SystemModstamp": "2020-10-22T21:03:23.000Z"}, "emitted_at": 1684265399728} +{"stream": "Account", "data": {"attributes": {"type": "Account", "url": "/services/data/v57.0/sobjects/Account/0014W000027f6V3QAI"}, "Id": "0014W000027f6V3QAI", "IsDeleted": false, "MasterRecordId": null, "Name": "University of Arizona", "Type": "Customer - Direct", "ParentId": null, "BillingStreet": "888 N Euclid \nHallis Center, Room 501\nTucson, AZ 85721\nUnited States", "BillingCity": "Tucson", "BillingState": "AZ", "BillingPostalCode": null, "BillingCountry": null, "BillingLatitude": null, "BillingLongitude": null, "BillingGeocodeAccuracy": null, "BillingAddress": {"city": "Tucson", "country": null, "geocodeAccuracy": null, "latitude": null, "longitude": null, "postalCode": null, "state": "AZ", "street": "888 N Euclid \nHallis Center, Room 501\nTucson, AZ 85721\nUnited States"}, "ShippingStreet": "888 N Euclid \nHallis Center, Room 501\nTucson, AZ 85721\nUnited States", "ShippingCity": null, "ShippingState": null, "ShippingPostalCode": null, "ShippingCountry": null, "ShippingLatitude": null, "ShippingLongitude": null, "ShippingGeocodeAccuracy": null, "ShippingAddress": {"city": null, "country": null, "geocodeAccuracy": null, "latitude": null, "longitude": null, "postalCode": null, "state": null, "street": "888 N Euclid \nHallis Center, Room 501\nTucson, AZ 85721\nUnited States"}, "Phone": "(520) 773-9050", "Fax": "(520) 773-9060", "AccountNumber": "CD736025", "Website": "www.universityofarizona.com", "PhotoUrl": "/services/images/photo/0014W000027f6V3QAI", "Sic": "7321", "Industry": "Education", "AnnualRevenue": null, "NumberOfEmployees": 39000, "Ownership": "Other", "TickerSymbol": null, "Description": "Leading university in AZ offering undergraduate and graduate programs in arts and humanities, pure sciences, engineering, business, and medicine.", "Rating": "Warm", "Site": null, "OwnerId": "0054W00000BZkk0QAD", "CreatedDate": "2020-10-22T21:03:23.000+0000", "CreatedById": "0054W00000BZkk0QAD", "LastModifiedDate": "2020-10-22T21:03:23.000+0000", "LastModifiedById": "0054W00000BZkk0QAD", "SystemModstamp": "2020-10-22T21:03:23.000+0000", "LastActivityDate": null, "LastViewedDate": null, "LastReferencedDate": null, "Jigsaw": null, "JigsawCompanyId": null, "CleanStatus": "Pending", "AccountSource": null, "DunsNumber": null, "Tradestyle": null, "NaicsCode": null, "NaicsDesc": null, "YearStarted": null, "SicDesc": null, "DandbCompanyId": null, "OperatingHoursId": null, "CustomerPriority__c": "Medium", "SLA__c": "Gold", "Active__c": "Yes", "NumberofLocations__c": 3.0, "UpsellOpportunity__c": "Yes", "SLASerialNumber__c": "8350", "SLAExpirationDate__c": "2020-11-16"}, "emitted_at": 1697018545992} +{"stream": "Account", "data": {"attributes": {"type": "Account", "url": "/services/data/v57.0/sobjects/Account/0014W000027f6V2QAI"}, "Id": "0014W000027f6V2QAI", "IsDeleted": false, "MasterRecordId": null, "Name": "Express Logistics and Transport", "Type": "Customer - Channel", "ParentId": null, "BillingStreet": "620 SW 5th Avenue Suite 400\nPortland, Oregon 97204\nUnited States", "BillingCity": "Portland", "BillingState": "OR", "BillingPostalCode": null, "BillingCountry": null, "BillingLatitude": null, "BillingLongitude": null, "BillingGeocodeAccuracy": null, "BillingAddress": {"city": "Portland", "country": null, "geocodeAccuracy": null, "latitude": null, "longitude": null, "postalCode": null, "state": "OR", "street": "620 SW 5th Avenue Suite 400\nPortland, Oregon 97204\nUnited States"}, "ShippingStreet": "620 SW 5th Avenue Suite 400\nPortland, Oregon 97204\nUnited States", "ShippingCity": null, "ShippingState": null, "ShippingPostalCode": null, "ShippingCountry": null, "ShippingLatitude": null, "ShippingLongitude": null, "ShippingGeocodeAccuracy": null, "ShippingAddress": {"city": null, "country": null, "geocodeAccuracy": null, "latitude": null, "longitude": null, "postalCode": null, "state": null, "street": "620 SW 5th Avenue Suite 400\nPortland, Oregon 97204\nUnited States"}, "Phone": "(503) 421-7800", "Fax": "(503) 421-7801", "AccountNumber": "CC947211", "Website": "www.expressl&t.net", "PhotoUrl": "/services/images/photo/0014W000027f6V2QAI", "Sic": "8742", "Industry": "Transportation", "AnnualRevenue": 950000000.0, "NumberOfEmployees": 12300, "Ownership": "Public", "TickerSymbol": "EXLT", "Description": "Commerical logistics and transportation company.", "Rating": "Cold", "Site": null, "OwnerId": "0054W00000BZkk0QAD", "CreatedDate": "2020-10-22T21:03:23.000+0000", "CreatedById": "0054W00000BZkk0QAD", "LastModifiedDate": "2020-10-22T21:03:23.000+0000", "LastModifiedById": "0054W00000BZkk0QAD", "SystemModstamp": "2020-10-22T21:03:23.000+0000", "LastActivityDate": null, "LastViewedDate": null, "LastReferencedDate": null, "Jigsaw": null, "JigsawCompanyId": null, "CleanStatus": "Pending", "AccountSource": null, "DunsNumber": null, "Tradestyle": null, "NaicsCode": null, "NaicsDesc": null, "YearStarted": null, "SicDesc": null, "DandbCompanyId": null, "OperatingHoursId": null, "CustomerPriority__c": "Medium", "SLA__c": "Platinum", "Active__c": "Yes", "NumberofLocations__c": 150.0, "UpsellOpportunity__c": "Maybe", "SLASerialNumber__c": "4724", "SLAExpirationDate__c": "2021-05-19"}, "emitted_at": 1697018545994} +{"stream": "Account", "data": {"attributes": {"type": "Account", "url": "/services/data/v57.0/sobjects/Account/0014W000027f6UyQAI"}, "Id": "0014W000027f6UyQAI", "IsDeleted": false, "MasterRecordId": null, "Name": "Pyramid Construction Inc.", "Type": "Customer - Channel", "ParentId": null, "BillingStreet": "2 Place Jussieu", "BillingCity": "Paris", "BillingState": null, "BillingPostalCode": "75251", "BillingCountry": "France", "BillingLatitude": null, "BillingLongitude": null, "BillingGeocodeAccuracy": null, "BillingAddress": {"city": "Paris", "country": "France", "geocodeAccuracy": null, "latitude": null, "longitude": null, "postalCode": "75251", "state": null, "street": "2 Place Jussieu"}, "ShippingStreet": "2 Place Jussieu", "ShippingCity": "Paris", "ShippingState": null, "ShippingPostalCode": "75251", "ShippingCountry": "France", "ShippingLatitude": null, "ShippingLongitude": null, "ShippingGeocodeAccuracy": null, "ShippingAddress": {"city": "Paris", "country": "France", "geocodeAccuracy": null, "latitude": null, "longitude": null, "postalCode": "75251", "state": null, "street": "2 Place Jussieu"}, "Phone": "(014) 427-4427", "Fax": "(014) 427-4428", "AccountNumber": "CC213425", "Website": "www.pyramid.com", "PhotoUrl": "/services/images/photo/0014W000027f6UyQAI", "Sic": "4253", "Industry": "Construction", "AnnualRevenue": 950000000.0, "NumberOfEmployees": 2680, "Ownership": "Public", "TickerSymbol": "PYR", "Description": null, "Rating": null, "Site": null, "OwnerId": "0054W00000BZkk0QAD", "CreatedDate": "2020-10-22T21:03:23.000+0000", "CreatedById": "0054W00000BZkk0QAD", "LastModifiedDate": "2020-10-22T21:03:23.000+0000", "LastModifiedById": "0054W00000BZkk0QAD", "SystemModstamp": "2020-10-22T21:03:23.000+0000", "LastActivityDate": null, "LastViewedDate": null, "LastReferencedDate": null, "Jigsaw": null, "JigsawCompanyId": null, "CleanStatus": "Pending", "AccountSource": null, "DunsNumber": null, "Tradestyle": null, "NaicsCode": null, "NaicsDesc": null, "YearStarted": null, "SicDesc": null, "DandbCompanyId": null, "OperatingHoursId": null, "CustomerPriority__c": null, "SLA__c": "Silver", "Active__c": "Yes", "NumberofLocations__c": 17.0, "UpsellOpportunity__c": "Maybe", "SLASerialNumber__c": "9840", "SLAExpirationDate__c": "2021-05-19"}, "emitted_at": 1697018545995} +{"stream": "ActiveFeatureLicenseMetric", "data": {"Id": "5H24W000000EpHsSAK", "MetricsDate": "2021-06-20", "FeatureType": "MarketingUser", "SystemModstamp": "2021-06-20T05:04:18.000Z", "AssignedUserCount": 1, "ActiveUserCount": 1, "TotalLicenseCount": 2}, "emitted_at": 1697018595083} +{"stream": "ActiveFeatureLicenseMetric", "data": {"Id": "5H24W000000EpHtSAK", "MetricsDate": "2021-06-20", "FeatureType": "OfflineUser", "SystemModstamp": "2021-06-20T05:04:18.000Z", "AssignedUserCount": 1, "ActiveUserCount": 1, "TotalLicenseCount": 2}, "emitted_at": 1697018595084} +{"stream": "ActiveFeatureLicenseMetric", "data": {"Id": "5H24W000000EpHuSAK", "MetricsDate": "2021-06-20", "FeatureType": "MobileUser", "SystemModstamp": "2021-06-20T05:04:18.000Z", "AssignedUserCount": 1, "ActiveUserCount": 1, "TotalLicenseCount": 3}, "emitted_at": 1697018595085} +{"stream": "ActivePermSetLicenseMetric", "data": {"Id": "5H14W000000KM71SAG", "MetricsDate": "2021-06-20", "PermissionSetLicenseId": "0PL4W000000mZUIWA2", "SystemModstamp": "2021-06-20T05:07:31.000Z", "AssignedUserCount": 0, "ActiveUserCount": 0, "DeveloperName": null, "MasterLabel": null, "TotalLicenses": null}, "emitted_at": 1697018721297} +{"stream": "ActivePermSetLicenseMetric", "data": {"Id": "5H14W000000KM72SAG", "MetricsDate": "2021-06-20", "PermissionSetLicenseId": "0PL4W000000mZUJWA2", "SystemModstamp": "2021-06-20T05:07:31.000Z", "AssignedUserCount": 0, "ActiveUserCount": 0, "DeveloperName": null, "MasterLabel": null, "TotalLicenses": null}, "emitted_at": 1697018721298} +{"stream": "ActivePermSetLicenseMetric", "data": {"Id": "5H14W000000KM73SAG", "MetricsDate": "2021-06-20", "PermissionSetLicenseId": "0PL4W000000mZUKWA2", "SystemModstamp": "2021-06-20T05:07:31.000Z", "AssignedUserCount": 0, "ActiveUserCount": 0, "DeveloperName": null, "MasterLabel": null, "TotalLicenses": null}, "emitted_at": 1697018721299} +{"stream": "ActiveProfileMetric", "data": {"Id": "5H04W000000MrTCSA0", "MetricsDate": "2021-06-06", "UserLicenseId": "1004W000001gXudQAE", "ProfileId": "00e4W000001VsqfQAC", "SystemModstamp": "2021-06-06T06:50:04.000Z", "AssignedUserCount": 0, "ActiveUserCount": 0}, "emitted_at": 1697018854048} +{"stream": "ActiveProfileMetric", "data": {"Id": "5H04W000000MrTDSA0", "MetricsDate": "2021-06-06", "UserLicenseId": "1004W000001gXudQAE", "ProfileId": "00e4W000002LjMOQA0", "SystemModstamp": "2021-06-06T06:50:04.000Z", "AssignedUserCount": 1, "ActiveUserCount": 1}, "emitted_at": 1697018854049} +{"stream": "ActiveProfileMetric", "data": {"Id": "5H04W000000MrTESA0", "MetricsDate": "2021-06-06", "UserLicenseId": "1004W000001gXudQAE", "ProfileId": "00e4W000002LjMtQAK", "SystemModstamp": "2021-06-06T06:50:04.000Z", "AssignedUserCount": 0, "ActiveUserCount": 0}, "emitted_at": 1697018854049} +{"stream": "AppDefinition", "data": {"Id": "000000000000000AAA", "DurableId": "06m4W000001ldIZQAY", "Label": "Sales", "MasterLabel": "salesforce", "NamespacePrefix": "standard", "DeveloperName": "Sales", "LogoUrl": "/img/salesforce-noname-logo-v2.svg", "Description": "The world's most popular sales force automation (SFA) solution", "UiType": "Aloha", "NavType": "Standard", "UtilityBar": null, "HeaderColor": "#0070D2", "IsOverrideOrgTheme": false, "IsSmallFormFactorSupported": false, "IsMediumFormFactorSupported": false, "IsLargeFormFactorSupported": false, "IsNavPersonalizationDisabled": false, "IsNavAutoTempTabsDisabled": false, "IsNavTabPersistenceDisabled": false}, "emitted_at": 1697019474451} +{"stream": "AppDefinition", "data": {"Id": "000000000000000AAA", "DurableId": "06m4W000001ldIdQAI", "Label": "Service", "MasterLabel": "supportforce", "NamespacePrefix": "standard", "DeveloperName": "Service", "LogoUrl": "/img/salesforce-noname-logo-v2.svg", "Description": "Manage customer service with accounts, contacts, cases, and more", "UiType": "Aloha", "NavType": "Standard", "UtilityBar": null, "HeaderColor": "#0070D2", "IsOverrideOrgTheme": false, "IsSmallFormFactorSupported": false, "IsMediumFormFactorSupported": false, "IsLargeFormFactorSupported": true, "IsNavPersonalizationDisabled": false, "IsNavAutoTempTabsDisabled": false, "IsNavTabPersistenceDisabled": false}, "emitted_at": 1697019474452} +{"stream": "AppDefinition", "data": {"Id": "000000000000000AAA", "DurableId": "06m4W000001ldIeQAI", "Label": "Marketing", "MasterLabel": "Marketing", "NamespacePrefix": "standard", "DeveloperName": "Marketing", "LogoUrl": "/img/salesforce-noname-logo-v2.svg", "Description": "Best-in-class on-demand marketing automation", "UiType": "Aloha", "NavType": "Standard", "UtilityBar": null, "HeaderColor": "#0070D2", "IsOverrideOrgTheme": false, "IsSmallFormFactorSupported": false, "IsMediumFormFactorSupported": false, "IsLargeFormFactorSupported": true, "IsNavPersonalizationDisabled": false, "IsNavAutoTempTabsDisabled": false, "IsNavTabPersistenceDisabled": false}, "emitted_at": 1697019474453} +{"stream": "Asset", "data": {"attributes": {"type": "Asset", "url": "/services/data/v57.0/sobjects/Asset/02i4W00000EkJspQAF"}, "Id": "02i4W00000EkJspQAF", "ContactId": null, "AccountId": "0014W00002DkoWNQAZ", "ParentId": null, "RootAssetId": "02i4W00000EkJspQAF", "Product2Id": null, "ProductCode": null, "IsCompetitorProduct": false, "CreatedDate": "2021-01-18T21:44:57.000+0000", "CreatedById": "0054W00000BZkk0QAD", "LastModifiedDate": "2021-01-18T21:44:57.000+0000", "LastModifiedById": "0054W00000BZkk0QAD", "SystemModstamp": "2021-01-18T21:44:57.000+0000", "IsDeleted": false, "Name": "Radish - Black, Winter, Organic", "SerialNumber": null, "InstallDate": null, "PurchaseDate": null, "UsageEndDate": null, "LifecycleStartDate": null, "LifecycleEndDate": null, "Status": null, "Price": null, "Quantity": null, "Description": null, "OwnerId": "0054W00000BZkk0QAD", "AssetProvidedById": null, "AssetServicedById": null, "IsInternal": false, "AssetLevel": 1, "StockKeepingUnit": null, "HasLifecycleManagement": false, "CurrentMrr": null, "CurrentLifecycleEndDate": null, "CurrentQuantity": null, "CurrentAmount": null, "TotalLifecycleAmount": null, "Street": null, "City": null, "State": null, "PostalCode": null, "Country": null, "Latitude": null, "Longitude": null, "GeocodeAccuracy": null, "Address": null, "LastViewedDate": null, "LastReferencedDate": null}, "emitted_at": 1697019475973} +{"stream": "Asset", "data": {"attributes": {"type": "Asset", "url": "/services/data/v57.0/sobjects/Asset/02i4W00000EkJsqQAF"}, "Id": "02i4W00000EkJsqQAF", "ContactId": null, "AccountId": "0014W00002DkoW0QAJ", "ParentId": null, "RootAssetId": "02i4W00000EkJsqQAF", "Product2Id": null, "ProductCode": null, "IsCompetitorProduct": false, "CreatedDate": "2021-01-18T21:44:57.000+0000", "CreatedById": "0054W00000BZkk0QAD", "LastModifiedDate": "2021-01-18T21:44:57.000+0000", "LastModifiedById": "0054W00000BZkk0QAD", "SystemModstamp": "2021-01-18T21:44:57.000+0000", "IsDeleted": false, "Name": "Cheese - Valancey", "SerialNumber": null, "InstallDate": null, "PurchaseDate": null, "UsageEndDate": null, "LifecycleStartDate": null, "LifecycleEndDate": null, "Status": null, "Price": null, "Quantity": null, "Description": null, "OwnerId": "0054W00000BZkk0QAD", "AssetProvidedById": null, "AssetServicedById": null, "IsInternal": false, "AssetLevel": 1, "StockKeepingUnit": null, "HasLifecycleManagement": false, "CurrentMrr": null, "CurrentLifecycleEndDate": null, "CurrentQuantity": null, "CurrentAmount": null, "TotalLifecycleAmount": null, "Street": null, "City": null, "State": null, "PostalCode": null, "Country": null, "Latitude": null, "Longitude": null, "GeocodeAccuracy": null, "Address": null, "LastViewedDate": null, "LastReferencedDate": null}, "emitted_at": 1697019475975} +{"stream": "Asset", "data": {"attributes": {"type": "Asset", "url": "/services/data/v57.0/sobjects/Asset/02i4W00000EkJsrQAF"}, "Id": "02i4W00000EkJsrQAF", "ContactId": null, "AccountId": "0014W00002DkoW5QAJ", "ParentId": null, "RootAssetId": "02i4W00000EkJsrQAF", "Product2Id": null, "ProductCode": null, "IsCompetitorProduct": false, "CreatedDate": "2021-01-18T21:44:57.000+0000", "CreatedById": "0054W00000BZkk0QAD", "LastModifiedDate": "2021-01-18T21:44:57.000+0000", "LastModifiedById": "0054W00000BZkk0QAD", "SystemModstamp": "2021-01-18T21:44:57.000+0000", "IsDeleted": false, "Name": "Truffle Cups Green", "SerialNumber": null, "InstallDate": null, "PurchaseDate": null, "UsageEndDate": null, "LifecycleStartDate": null, "LifecycleEndDate": null, "Status": null, "Price": null, "Quantity": null, "Description": null, "OwnerId": "0054W00000BZkk0QAD", "AssetProvidedById": null, "AssetServicedById": null, "IsInternal": false, "AssetLevel": 1, "StockKeepingUnit": null, "HasLifecycleManagement": false, "CurrentMrr": null, "CurrentLifecycleEndDate": null, "CurrentQuantity": null, "CurrentAmount": null, "TotalLifecycleAmount": null, "Street": null, "City": null, "State": null, "PostalCode": null, "Country": null, "Latitude": null, "Longitude": null, "GeocodeAccuracy": null, "Address": null, "LastViewedDate": null, "LastReferencedDate": null}, "emitted_at": 1697019475976} +{"stream": "FormulaFunctionAllowedType", "data": {"Id": "000000000000000AAA", "DurableId": "VALIDATION-ABS", "FunctionId": "ABS", "Type": "VALIDATION"}, "emitted_at": 1697019484628} +{"stream": "FormulaFunctionAllowedType", "data": {"Id": "000000000000000AAA", "DurableId": "VALIDATION-ACOS", "FunctionId": "ACOS", "Type": "VALIDATION"}, "emitted_at": 1697019484629} +{"stream": "FormulaFunctionAllowedType", "data": {"Id": "000000000000000AAA", "DurableId": "VALIDATION-ADDMONTHS", "FunctionId": "ADDMONTHS", "Type": "VALIDATION"}, "emitted_at": 1697019484629} +{"stream": "LeadHistory", "data": {"Id": "0174W00010EpxkSQAR", "IsDeleted": false, "LeadId": "00Q4W00001WGXdDUAX", "CreatedById": "0054W00000BZkk0QAD", "CreatedDate": "2021-11-02T00:20:05.000Z", "Field": "Title", "DataType": "Text", "OldValue": "Co-Founder", "NewValue": "History Track"}, "emitted_at": 1697019532736} +{"stream": "LeadHistory", "data": {"Id": "0174W0001FSln5AQQR", "IsDeleted": false, "LeadId": "00Q4W00001WGXdDUAX", "CreatedById": "0054W00000BZkk0QAD", "CreatedDate": "2023-01-17T15:14:50.000Z", "Field": "FirstName", "DataType": "Text", "OldValue": "Jean", "NewValue": "John"}, "emitted_at": 1697019576157} +{"stream": "LeadHistory", "data": {"Id": "0174W0001FSln5BQQR", "IsDeleted": false, "LeadId": "00Q4W00001WGXdDUAX", "CreatedById": "0054W00000BZkk0QAD", "CreatedDate": "2023-01-17T15:14:50.000Z", "Field": "LastName", "DataType": "Text", "OldValue": "Lafleur", "NewValue": "Doe"}, "emitted_at": 1697019576158} +{"stream": "ObjectPermissions", "data": {"Id": "1104W00002AG1dYQAT", "ParentId": "0PS4W000002mq7VWAQ", "SobjectType": "GtwyProvPaymentMethodType", "PermissionsCreate": false, "PermissionsRead": true, "PermissionsEdit": false, "PermissionsDelete": false, "PermissionsViewAllRecords": true, "PermissionsModifyAllRecords": false, "CreatedDate": "2020-10-22T21:04:28.000Z", "CreatedById": "0054W00000BZkk0QAD", "LastModifiedDate": "2020-10-22T21:04:28.000Z", "LastModifiedById": "0054W00000CVeybQAD", "SystemModstamp": "2020-10-22T21:04:28.000Z"}, "emitted_at": 1697019599985} +{"stream": "ObjectPermissions", "data": {"Id": "1104W00002AG21vQAD", "ParentId": "0PS4W000002mq72WAA", "SobjectType": "LocationWaitlistedParty", "PermissionsCreate": true, "PermissionsRead": true, "PermissionsEdit": true, "PermissionsDelete": true, "PermissionsViewAllRecords": true, "PermissionsModifyAllRecords": true, "CreatedDate": "2020-10-22T21:05:07.000Z", "CreatedById": "0054W00000CVeybQAD", "LastModifiedDate": "2020-10-22T21:05:07.000Z", "LastModifiedById": "0054W00000CVeybQAD", "SystemModstamp": "2020-10-22T21:05:07.000Z"}, "emitted_at": 1697019599986} +{"stream": "ObjectPermissions", "data": {"Id": "1104W00002AG229QAD", "ParentId": "0PS4W000002mq72WAA", "SobjectType": "LocationGroup", "PermissionsCreate": true, "PermissionsRead": true, "PermissionsEdit": true, "PermissionsDelete": true, "PermissionsViewAllRecords": true, "PermissionsModifyAllRecords": true, "CreatedDate": "2020-10-22T21:05:07.000Z", "CreatedById": "0054W00000CVeybQAD", "LastModifiedDate": "2020-10-22T21:05:07.000Z", "LastModifiedById": "0054W00000CVeybQAD", "SystemModstamp": "2020-10-22T21:05:07.000Z"}, "emitted_at": 1697019599986} +{"stream": "PermissionSetTabSetting", "data": {"Id": "01P4W00005O7rDUUAZ", "ParentId": "0PS4W000002mq7NWAQ", "Visibility": "DefaultOn", "Name": "standard-Event", "SystemModstamp": "2020-10-22T21:03:23.000Z"}, "emitted_at": 1697019725762} +{"stream": "PermissionSetTabSetting", "data": {"Id": "01P4W00005O7rDaUAJ", "ParentId": "0PS4W000002mq7WWAQ", "Visibility": "DefaultOn", "Name": "standard-Event", "SystemModstamp": "2020-10-22T21:03:23.000Z"}, "emitted_at": 1697019725762} +{"stream": "PermissionSetTabSetting", "data": {"Id": "01P4W00005O7rDoUAJ", "ParentId": "0PS4W000002mq78WAA", "Visibility": "DefaultOn", "Name": "standard-Feed", "SystemModstamp": "2020-10-22T21:03:23.000Z"}, "emitted_at": 1697019725763} diff --git a/airbyte-integrations/connectors/source-slack/Dockerfile b/airbyte-integrations/connectors/source-slack/Dockerfile index dfe941facc71..aac6386cf566 100644 --- a/airbyte-integrations/connectors/source-slack/Dockerfile +++ b/airbyte-integrations/connectors/source-slack/Dockerfile @@ -17,5 +17,5 @@ COPY main.py ./ ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=0.3.3 +LABEL io.airbyte.version=0.3.4 LABEL io.airbyte.name=airbyte/source-slack diff --git a/airbyte-integrations/connectors/source-slack/metadata.yaml b/airbyte-integrations/connectors/source-slack/metadata.yaml index 6c5b30a48180..8a966edcf0d6 100644 --- a/airbyte-integrations/connectors/source-slack/metadata.yaml +++ b/airbyte-integrations/connectors/source-slack/metadata.yaml @@ -5,7 +5,7 @@ data: connectorSubtype: api connectorType: source definitionId: c2281cee-86f9-4a86-bb48-d23286b4c7bd - dockerImageTag: 0.3.3 + dockerImageTag: 0.3.4 dockerRepository: airbyte/source-slack githubIssueLabel: source-slack icon: slack.svg diff --git a/airbyte-integrations/connectors/source-slack/source_slack/source.py b/airbyte-integrations/connectors/source-slack/source_slack/source.py index b856f68728a3..c677b4bdbca7 100644 --- a/airbyte-integrations/connectors/source-slack/source_slack/source.py +++ b/airbyte-integrations/connectors/source-slack/source_slack/source.py @@ -209,8 +209,9 @@ def read_records( stream_state: Mapping[str, Any] = None, ) -> Iterable[Mapping[str, Any]]: if not stream_slice: + # return an empty iterator # this is done to emit at least one state message when no slices are generated - return [] + return iter([]) return super().read_records(sync_mode, cursor_field=cursor_field, stream_slice=stream_slice, stream_state=stream_state) diff --git a/airbyte-integrations/connectors/source-slack/unit_tests/conftest.py b/airbyte-integrations/connectors/source-slack/unit_tests/conftest.py index 6957dea2c22a..2fa9d3d332fe 100644 --- a/airbyte-integrations/connectors/source-slack/unit_tests/conftest.py +++ b/airbyte-integrations/connectors/source-slack/unit_tests/conftest.py @@ -3,10 +3,13 @@ # import copy +import os from typing import MutableMapping import pytest +os.environ["REQUEST_CACHE_PATH"] = "REQUEST_CACHE_PATH" + @pytest.fixture(autouse=True) def conversations_list(requests_mock): diff --git a/airbyte-integrations/connectors/source-snowflake/build.gradle b/airbyte-integrations/connectors/source-snowflake/build.gradle index 094853b01afd..2485da687131 100644 --- a/airbyte-integrations/connectors/source-snowflake/build.gradle +++ b/airbyte-integrations/connectors/source-snowflake/build.gradle @@ -16,12 +16,21 @@ application { applicationDefaultJvmArgs = ['-XX:+ExitOnOutOfMemoryError', '-XX:MaxRAMPercentage=75.0'] } +configurations { + all { + resolutionStrategy { + force 'org.jooq:jooq:3.13.4' + } + } +} + dependencies { implementation libs.airbyte.protocol - implementation group: 'net.snowflake', name: 'snowflake-jdbc', version: '3.13.22' + implementation group: 'net.snowflake', name: 'snowflake-jdbc', version: '3.14.1' implementation 'com.zaxxer:HikariCP:5.0.1' testImplementation project(':airbyte-test-utils') + testImplementation 'org.hamcrest:hamcrest-all:1.3' integrationTestJavaImplementation 'org.apache.commons:commons-lang3:3.11' } diff --git a/airbyte-integrations/connectors/source-snowflake/metadata.yaml b/airbyte-integrations/connectors/source-snowflake/metadata.yaml index deb9bc02d5a1..f040702727f0 100644 --- a/airbyte-integrations/connectors/source-snowflake/metadata.yaml +++ b/airbyte-integrations/connectors/source-snowflake/metadata.yaml @@ -8,7 +8,7 @@ data: connectorSubtype: database connectorType: source definitionId: e2d65910-8c8b-40a1-ae7d-ee2416b2bfa2 - dockerImageTag: 0.2.0 + dockerImageTag: 0.2.1 dockerRepository: airbyte/source-snowflake documentationUrl: https://docs.airbyte.com/integrations/sources/snowflake githubIssueLabel: source-snowflake diff --git a/airbyte-integrations/connectors/source-square/Dockerfile b/airbyte-integrations/connectors/source-square/Dockerfile index c18311a47f48..bdac632d5be6 100644 --- a/airbyte-integrations/connectors/source-square/Dockerfile +++ b/airbyte-integrations/connectors/source-square/Dockerfile @@ -34,5 +34,5 @@ COPY source_square ./source_square ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=1.1.2 +LABEL io.airbyte.version=1.2.0 LABEL io.airbyte.name=airbyte/source-square diff --git a/airbyte-integrations/connectors/source-square/acceptance-test-config.yml b/airbyte-integrations/connectors/source-square/acceptance-test-config.yml index 6eaf8a1137aa..3087c1a5876c 100644 --- a/airbyte-integrations/connectors/source-square/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-square/acceptance-test-config.yml @@ -34,6 +34,8 @@ acceptance_tests: bypass_reason: "Not able to fill stream" - name: refunds bypass_reason: "Not able to fill stream" + - name: cash_drawers + bypass_reason: "Not able to fill stream" expect_records: path: "integration_tests/expected_records_oauth.jsonl" ignored_fields: diff --git a/airbyte-integrations/connectors/source-square/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-square/integration_tests/configured_catalog.json index be5690c59532..72198c43bc55 100644 --- a/airbyte-integrations/connectors/source-square/integration_tests/configured_catalog.json +++ b/airbyte-integrations/connectors/source-square/integration_tests/configured_catalog.json @@ -155,6 +155,18 @@ "sync_mode": "incremental", "cursor_field": ["updated_at"], "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "cash_drawers", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"], + "source_defined_cursor": true, + "default_cursor_field": ["id"] + }, + "sync_mode": "full_refresh", + "cursor_field": ["id"], + "destination_sync_mode": "overwrite" } ] } diff --git a/airbyte-integrations/connectors/source-square/metadata.yaml b/airbyte-integrations/connectors/source-square/metadata.yaml index 481db7beee22..f9559e832224 100644 --- a/airbyte-integrations/connectors/source-square/metadata.yaml +++ b/airbyte-integrations/connectors/source-square/metadata.yaml @@ -9,7 +9,7 @@ data: connectorSubtype: api connectorType: source definitionId: 77225a51-cd15-4a13-af02-65816bd0ecf4 - dockerImageTag: 1.1.2 + dockerImageTag: 1.2.0 dockerRepository: airbyte/source-square documentationUrl: https://docs.airbyte.com/integrations/sources/square githubIssueLabel: source-square diff --git a/airbyte-integrations/connectors/source-square/setup.py b/airbyte-integrations/connectors/source-square/setup.py index 051433b5675c..fe3012decd5d 100644 --- a/airbyte-integrations/connectors/source-square/setup.py +++ b/airbyte-integrations/connectors/source-square/setup.py @@ -6,7 +6,7 @@ from setuptools import find_packages, setup MAIN_REQUIREMENTS = [ - "airbyte-cdk>=0.44.2", + "airbyte-cdk>=0.51.31", ] TEST_REQUIREMENTS = [ diff --git a/airbyte-integrations/connectors/source-square/source_square/manifest.yaml b/airbyte-integrations/connectors/source-square/source_square/manifest.yaml index 255f2a403888..6599c7451846 100644 --- a/airbyte-integrations/connectors/source-square/source_square/manifest.yaml +++ b/airbyte-integrations/connectors/source-square/source_square/manifest.yaml @@ -207,6 +207,32 @@ definitions: primary_key: "id" path: "/locations" + locations_partition_router: + type: SubstreamPartitionRouter + parent_stream_configs: + - stream: "#/definitions/locations_stream" + parent_key: "id" + partition_field: "location_id" + + cash_drawers_stream: + $ref: "#/definitions/base_stream" + $parameters: + name: "cash_drawers" + primary_key: "id" + path: "/cash-drawers/shifts" + retriever: + $ref: "#/definitions/retriever" + partition_router: + $ref: "#/definitions/locations_partition_router" + requester: + $ref: "#/definitions/requester" + request_parameters: + location_id: "{{ stream_partition.location_id }}" + record_selector: + $ref: "#/definitions/selector" + extractor: + field_path: ["cash_drawer_shifts"] + categories_stream: $ref: "#/definitions/base_catalog_objects_stream" $parameters: @@ -303,6 +329,7 @@ streams: - "#/definitions/refunds_stream" - "#/definitions/payments_stream" - "#/definitions/orders_stream" + - "#/definitions/cash_drawers_stream" check: stream_names: diff --git a/airbyte-integrations/connectors/source-square/source_square/schemas/cash_drawers.json b/airbyte-integrations/connectors/source-square/source_square/schemas/cash_drawers.json new file mode 100644 index 000000000000..2881cd872572 --- /dev/null +++ b/airbyte-integrations/connectors/source-square/source_square/schemas/cash_drawers.json @@ -0,0 +1,59 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Cash Drawer Shifts Schema", + "additionalProperties": true, + "type": ["object", "null"], + "properties": { + "id": { + "type": ["string", "null"] + }, + "state": { + "type": ["string", "null"] + }, + "opened_at": { + "type": ["string", "null"] + }, + "ended_at": { + "type": ["string", "null"] + }, + "closed_at": { + "type": ["string", "null"] + }, + "description": { + "type": ["string", "null"] + }, + "opened_cash_money": { + "type": ["object", "null"], + "properties": { + "amount": { + "type": ["number", "null"] + }, + "currency": { + "type": ["string", "null"] + } + } + }, + "expected_cash_money": { + "type": ["object", "null"], + "properties": { + "amount": { + "type": ["number", "null"] + }, + "currency": { + "type": ["string", "null"] + } + } + }, + "closed_cash_money": { + "type": ["object", "null"], + "properties": { + "amount": { + "type": ["number", "null"] + }, + "currency": { + "type": ["string", "null"] + } + } + } + } +} diff --git a/airbyte-integrations/connectors/source-square/unit_tests/test_component.py b/airbyte-integrations/connectors/source-square/unit_tests/test_component.py index d991026313d5..c749f1e10e9f 100644 --- a/airbyte-integrations/connectors/source-square/unit_tests/test_component.py +++ b/airbyte-integrations/connectors/source-square/unit_tests/test_component.py @@ -57,6 +57,7 @@ def test_refresh_access_token(req_mock): client_id="client_id", refresh_token="refresh_token", token_expiry_date_format="YYYY-MM-DDTHH:mm:ss[Z]", + token_expiry_is_time_of_expiration=True, config=config, parameters=parameters, ) diff --git a/airbyte-integrations/connectors/source-stripe/Dockerfile b/airbyte-integrations/connectors/source-stripe/Dockerfile index d992f20b03e4..c194b7d639b9 100644 --- a/airbyte-integrations/connectors/source-stripe/Dockerfile +++ b/airbyte-integrations/connectors/source-stripe/Dockerfile @@ -13,5 +13,5 @@ ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=4.3.1 +LABEL io.airbyte.version=4.4.0 LABEL io.airbyte.name=airbyte/source-stripe diff --git a/airbyte-integrations/connectors/source-stripe/acceptance-test-config.yml b/airbyte-integrations/connectors/source-stripe/acceptance-test-config.yml index a25b6928b6f7..0dda354b4266 100644 --- a/airbyte-integrations/connectors/source-stripe/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-stripe/acceptance-test-config.yml @@ -55,6 +55,8 @@ acceptance_tests: bypass_reason: "URL changes upon each request for privacy/security" - name: hosted_invoice_url bypass_reason: "URL changes upon each request for privacy/security" + - name: lines/data/*/margins + bypass_reason: "API randomly returns this field" charges: - name: receipt_url bypass_reason: "URL changes upon each request for privacy/security" @@ -80,6 +82,9 @@ acceptance_tests: usage_records: - name: id bypass_reason: "id field is randomly generated" + invoice_line_items: + - name: margins + bypass_reason: "API randomly returns this field" incremental: tests: - config_path: "secrets/config.json" diff --git a/airbyte-integrations/connectors/source-stripe/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-stripe/integration_tests/expected_records.jsonl index 78bd786092ff..f375e980c0bf 100644 --- a/airbyte-integrations/connectors/source-stripe/integration_tests/expected_records.jsonl +++ b/airbyte-integrations/connectors/source-stripe/integration_tests/expected_records.jsonl @@ -18,8 +18,8 @@ {"stream": "invoice_items", "data": {"id": "ii_1K9GKLEcXtiJtvvhmr2AYOAx", "object": "invoiceitem", "amount": 8400, "currency": "usd", "customer": "cus_Kou8knsO3qQOwU", "date": 1640123817, "description": "a box of parsnips", "discountable": true, "discounts": [], "invoice": "in_1K9GK0EcXtiJtvvhSo2LvGqT", "livemode": false, "metadata": {}, "period": {"end": 1640123817, "start": 1640123817}, "plan": null, "price": {"id": "price_1K9GKLEcXtiJtvvhXbrg33lq", "object": "price", "active": false, "billing_scheme": "per_unit", "created": 1640123817, "currency": "usd", "custom_unit_amount": null, "livemode": false, "lookup_key": null, "metadata": {}, "nickname": null, "product": "prod_Kou8cQxtIpF1p7", "recurring": null, "tax_behavior": "unspecified", "tiers_mode": null, "transform_quantity": null, "type": "one_time", "unit_amount": 8400, "unit_amount_decimal": "8400"}, "proration": false, "quantity": 1, "subscription": null, "tax_rates": [], "test_clock": null, "unit_amount": 8400, "unit_amount_decimal": "8400", "updated": 1640123817}, "emitted_at": 1691675215106} {"stream": "invoice_items", "data": {"id": "ii_1MX384EcXtiJtvvhguyn3iYb", "object": "invoiceitem", "amount": 6000, "currency": "usd", "customer": "cus_NGoTFiJFVbSsvZ", "date": 1675345628, "description": "Test Product 1", "discountable": true, "discounts": ["di_1MX384EcXtiJtvvhkOrY57Ep"], "invoice": "in_1MX37hEcXtiJtvvhRSl1KbQm", "livemode": false, "metadata": {}, "period": {"end": 1675345628, "start": 1675345628}, "plan": null, "price": {"id": "price_1MX364EcXtiJtvvhE3WgTl4O", "object": "price", "active": true, "billing_scheme": "per_unit", "created": 1675345504, "currency": "usd", "custom_unit_amount": null, "livemode": false, "lookup_key": null, "metadata": {}, "nickname": null, "product": "prod_NHcKselSHfKdfc", "recurring": null, "tax_behavior": "exclusive", "tiers_mode": null, "transform_quantity": null, "type": "one_time", "unit_amount": 2000, "unit_amount_decimal": "2000"}, "proration": false, "quantity": 3, "subscription": null, "tax_rates": [], "test_clock": null, "unit_amount": 2000, "unit_amount_decimal": "2000", "updated": 1675345628}, "emitted_at": 1691675215403} {"stream": "invoice_items", "data": {"id": "ii_1MX2yfEcXtiJtvvhfhyOG7SP", "object": "invoiceitem", "amount": 25200, "currency": "usd", "customer": "cus_NGoTFiJFVbSsvZ", "date": 1675345045, "description": "edgao-test-product", "discountable": true, "discounts": ["di_1MX2ysEcXtiJtvvh8ORqRVKm"], "invoice": "in_1MX2yFEcXtiJtvvhMXhUCgKx", "livemode": false, "metadata": {}, "period": {"end": 1675345045, "start": 1675345045}, "plan": null, "price": {"id": "price_1K9GbqEcXtiJtvvhJ3lZe4i5", "object": "price", "active": true, "billing_scheme": "per_unit", "created": 1640124902, "currency": "usd", "custom_unit_amount": null, "livemode": false, "lookup_key": null, "metadata": {}, "nickname": null, "product": "prod_KouQ5ez86yREmB", "recurring": null, "tax_behavior": "inclusive", "tiers_mode": null, "transform_quantity": null, "type": "one_time", "unit_amount": 12600, "unit_amount_decimal": "12600"}, "proration": false, "quantity": 2, "subscription": null, "tax_rates": [], "test_clock": null, "unit_amount": 12600, "unit_amount_decimal": "12600", "updated": 1675345045}, "emitted_at": 1691675215404} -{"stream": "invoice_line_items", "data": {"id": "il_1K9GKLEcXtiJtvvhhHaYMebN", "object": "line_item", "amount": 8400, "amount_excluding_tax": 8400, "currency": "usd", "description": "a box of parsnips", "discount_amounts": [], "discountable": true, "discounts": [], "invoice_item": "ii_1K9GKLEcXtiJtvvhmr2AYOAx", "livemode": false, "metadata": {}, "period": {"end": 1640123817, "start": 1640123817}, "plan": null, "price": {"id": "price_1K9GKLEcXtiJtvvhXbrg33lq", "object": "price", "active": false, "billing_scheme": "per_unit", "created": 1640123817, "currency": "usd", "custom_unit_amount": null, "livemode": false, "lookup_key": null, "metadata": {}, "nickname": null, "product": "prod_Kou8cQxtIpF1p7", "recurring": null, "tax_behavior": "unspecified", "tiers_mode": null, "transform_quantity": null, "type": "one_time", "unit_amount": 8400, "unit_amount_decimal": "8400"}, "proration": false, "proration_details": {"credited_items": null}, "quantity": 1, "subscription": null, "tax_amounts": [], "tax_rates": [], "type": "invoiceitem", "unit_amount_excluding_tax": "8400", "invoice_id": "in_1K9GK0EcXtiJtvvhSo2LvGqT"}, "emitted_at": 1691675216433} -{"stream": "invoices", "data": {"id": "in_1K9GK0EcXtiJtvvhSo2LvGqT", "object": "invoice", "account_country": "US", "account_name": "Airbyte, Inc.", "account_tax_ids": null, "amount_due": 0, "amount_paid": 0, "amount_remaining": 0, "amount_shipping": 0, "application": null, "application_fee_amount": null, "attempt_count": 0, "attempted": true, "auto_advance": false, "automatic_tax": {"enabled": false, "status": null}, "billing_reason": "manual", "charge": null, "collection_method": "send_invoice", "created": 1640123796, "currency": "usd", "custom_fields": null, "customer": "cus_Kou8knsO3qQOwU", "customer_address": null, "customer_email": "edward.gao+stripe-test-customer-1@airbyte.io", "customer_name": "edgao-test-customer-1", "customer_phone": null, "customer_shipping": null, "customer_tax_exempt": "none", "customer_tax_ids": [], "default_payment_method": null, "default_source": null, "default_tax_rates": [], "description": null, "discount": null, "discounts": [], "due_date": 1688750070.0, "effective_at": 1686158070, "ending_balance": 0, "footer": null, "from_invoice": null, "hosted_invoice_url": "https://invoice.stripe.com/i/acct_1JwnoiEcXtiJtvvh/test_YWNjdF8xSndub2lFY1h0aUp0dnZoLF9Lb3U4bk9YR0lWV3BhN2EzMXZNUFJSaEdXUUVNR1J0LDg2Mjc4NjIy0200I27bRV7A?s=ap", "invoice_pdf": "https://pay.stripe.com/invoice/acct_1JwnoiEcXtiJtvvh/test_YWNjdF8xSndub2lFY1h0aUp0dnZoLF9Lb3U4bk9YR0lWV3BhN2EzMXZNUFJSaEdXUUVNR1J0LDg2Mjc4NjIy0200I27bRV7A/pdf?s=ap", "last_finalization_error": null, "latest_revision": null, "lines": {"object": "list", "data": [{"id": "il_1K9GKLEcXtiJtvvhhHaYMebN", "object": "line_item", "amount": 8400, "amount_excluding_tax": 8400, "currency": "usd", "description": "a box of parsnips", "discount_amounts": [], "discountable": true, "discounts": [], "invoice_item": "ii_1K9GKLEcXtiJtvvhmr2AYOAx", "livemode": false, "metadata": {}, "period": {"end": 1640123817, "start": 1640123817}, "plan": null, "price": {"id": "price_1K9GKLEcXtiJtvvhXbrg33lq", "object": "price", "active": false, "billing_scheme": "per_unit", "created": 1640123817, "currency": "usd", "custom_unit_amount": null, "livemode": false, "lookup_key": null, "metadata": {}, "nickname": null, "product": "prod_Kou8cQxtIpF1p7", "recurring": null, "tax_behavior": "unspecified", "tiers_mode": null, "transform_quantity": null, "type": "one_time", "unit_amount": 8400, "unit_amount_decimal": "8400"}, "proration": false, "proration_details": {"credited_items": null}, "quantity": 1, "subscription": null, "tax_amounts": [], "tax_rates": [], "type": "invoiceitem", "unit_amount_excluding_tax": "8400"}], "has_more": false, "total_count": 1, "url": "/v1/invoices/in_1K9GK0EcXtiJtvvhSo2LvGqT/lines"}, "livemode": false, "metadata": {}, "next_payment_attempt": null, "number": "CA35DF83-0001", "on_behalf_of": null, "paid": true, "paid_out_of_band": false, "payment_intent": null, "payment_settings": {"default_mandate": null, "payment_method_options": null, "payment_method_types": null}, "period_end": 1640123795.0, "period_start": 1640123795.0, "post_payment_credit_notes_amount": 0, "pre_payment_credit_notes_amount": 8400, "quote": null, "receipt_number": null, "rendering": null, "rendering_options": null, "shipping_cost": null, "shipping_details": null, "starting_balance": 0, "statement_descriptor": null, "status": "paid", "status_transitions": {"finalized_at": 1686158070, "marked_uncollectible_at": null, "paid_at": 1686158100, "voided_at": null}, "subscription": null, "subscription_details": {"metadata": null}, "subtotal": 8400, "subtotal_excluding_tax": 8400, "tax": null, "test_clock": null, "total": 8400, "total_discount_amounts": [], "total_excluding_tax": 8400, "total_tax_amounts": [], "transfer_data": null, "webhooks_delivered_at": 1640123796.0, "updated": 1640123796}, "emitted_at": 1695737822676} +{"stream": "invoice_line_items", "data": {"id": "il_1K9GKLEcXtiJtvvhhHaYMebN", "object": "line_item", "amount": 8400, "amount_excluding_tax": 8400, "currency": "usd", "description": "a box of parsnips", "discount_amounts": [], "discountable": true, "discounts": [], "invoice_item": "ii_1K9GKLEcXtiJtvvhmr2AYOAx", "livemode": false, "margins": [], "metadata": {}, "period": {"end": 1640123817, "start": 1640123817}, "plan": null, "price": {"id": "price_1K9GKLEcXtiJtvvhXbrg33lq", "object": "price", "active": false, "billing_scheme": "per_unit", "created": 1640123817, "currency": "usd", "custom_unit_amount": null, "livemode": false, "lookup_key": null, "metadata": {}, "nickname": null, "product": "prod_Kou8cQxtIpF1p7", "recurring": null, "tax_behavior": "unspecified", "tiers_mode": null, "transform_quantity": null, "type": "one_time", "unit_amount": 8400, "unit_amount_decimal": "8400"}, "proration": false, "proration_details": {"credited_items": null}, "quantity": 1, "subscription": null, "tax_amounts": [], "tax_rates": [], "type": "invoiceitem", "unit_amount_excluding_tax": "8400", "invoice_id": "in_1K9GK0EcXtiJtvvhSo2LvGqT"}, "emitted_at": 1696417280998} +{"stream": "invoices", "data": {"id": "in_1K9GK0EcXtiJtvvhSo2LvGqT", "object": "invoice", "account_country": "US", "account_name": "Airbyte, Inc.", "account_tax_ids": null, "amount_due": 0, "amount_paid": 0, "amount_remaining": 0, "amount_shipping": 0, "application": null, "application_fee_amount": null, "attempt_count": 0, "attempted": true, "auto_advance": false, "automatic_tax": {"enabled": false, "status": null}, "billing_reason": "manual", "charge": null, "collection_method": "send_invoice", "created": 1640123796, "currency": "usd", "custom_fields": null, "customer": "cus_Kou8knsO3qQOwU", "customer_address": null, "customer_email": "edward.gao+stripe-test-customer-1@airbyte.io", "customer_name": "edgao-test-customer-1", "customer_phone": null, "customer_shipping": null, "customer_tax_exempt": "none", "customer_tax_ids": [], "default_payment_method": null, "default_source": null, "default_tax_rates": [], "description": null, "discount": null, "discounts": [], "due_date": 1688750070.0, "effective_at": 1686158070, "ending_balance": 0, "footer": null, "from_invoice": null, "hosted_invoice_url": "https://invoice.stripe.com/i/acct_1JwnoiEcXtiJtvvh/test_YWNjdF8xSndub2lFY1h0aUp0dnZoLF9Lb3U4bk9YR0lWV3BhN2EzMXZNUFJSaEdXUUVNR1J0LDg2OTU4MDgw0200UWHaaIJ7?s=ap", "invoice_pdf": "https://pay.stripe.com/invoice/acct_1JwnoiEcXtiJtvvh/test_YWNjdF8xSndub2lFY1h0aUp0dnZoLF9Lb3U4bk9YR0lWV3BhN2EzMXZNUFJSaEdXUUVNR1J0LDg2OTU4MDgw0200UWHaaIJ7/pdf?s=ap", "last_finalization_error": null, "latest_revision": null, "lines": {"object": "list", "data": [{"id": "il_1K9GKLEcXtiJtvvhhHaYMebN", "object": "line_item", "amount": 8400, "amount_excluding_tax": 8400, "currency": "usd", "description": "a box of parsnips", "discount_amounts": [], "discountable": true, "discounts": [], "invoice_item": "ii_1K9GKLEcXtiJtvvhmr2AYOAx", "livemode": false, "margins": [], "metadata": {}, "period": {"end": 1640123817, "start": 1640123817}, "plan": null, "price": {"id": "price_1K9GKLEcXtiJtvvhXbrg33lq", "object": "price", "active": false, "billing_scheme": "per_unit", "created": 1640123817, "currency": "usd", "custom_unit_amount": null, "livemode": false, "lookup_key": null, "metadata": {}, "nickname": null, "product": "prod_Kou8cQxtIpF1p7", "recurring": null, "tax_behavior": "unspecified", "tiers_mode": null, "transform_quantity": null, "type": "one_time", "unit_amount": 8400, "unit_amount_decimal": "8400"}, "proration": false, "proration_details": {"credited_items": null}, "quantity": 1, "subscription": null, "tax_amounts": [], "tax_rates": [], "type": "invoiceitem", "unit_amount_excluding_tax": "8400"}], "has_more": false, "total_count": 1, "url": "/v1/invoices/in_1K9GK0EcXtiJtvvhSo2LvGqT/lines"}, "livemode": false, "metadata": {}, "next_payment_attempt": null, "number": "CA35DF83-0001", "on_behalf_of": null, "paid": true, "paid_out_of_band": false, "payment_intent": null, "payment_settings": {"default_mandate": null, "payment_method_options": null, "payment_method_types": null}, "period_end": 1640123795.0, "period_start": 1640123795.0, "post_payment_credit_notes_amount": 0, "pre_payment_credit_notes_amount": 8400, "quote": null, "receipt_number": null, "rendering": null, "rendering_options": null, "shipping_cost": null, "shipping_details": null, "starting_balance": 0, "statement_descriptor": null, "status": "paid", "status_transitions": {"finalized_at": 1686158070, "marked_uncollectible_at": null, "paid_at": 1686158100, "voided_at": null}, "subscription": null, "subscription_details": {"metadata": null}, "subtotal": 8400, "subtotal_excluding_tax": 8400, "tax": null, "test_clock": null, "total": 8400, "total_discount_amounts": [], "total_excluding_tax": 8400, "total_tax_amounts": [], "transfer_data": null, "webhooks_delivered_at": 1640123796.0, "updated": 1640123796}, "emitted_at": 1696417282452} {"stream": "payment_intents", "data": {"id": "pi_3K9FSOEcXtiJtvvh0AEIFllC", "object": "payment_intent", "amount": 5300, "amount_capturable": 0, "amount_details": {"tip": {}}, "amount_received": 5300, "application": null, "application_fee_amount": null, "automatic_payment_methods": null, "canceled_at": null, "cancellation_reason": null, "capture_method": "automatic", "client_secret": "pi_3K9FSOEcXtiJtvvh0AEIFllC_secret_uPUtIaSltgtW0qK7mLD0uF2Mr", "confirmation_method": "automatic", "created": 1640120472, "currency": "usd", "customer": null, "description": null, "invoice": null, "last_payment_error": null, "latest_charge": "ch_3K9FSOEcXtiJtvvh0zxb7clc", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, "payment_method": null, "payment_method_configuration_details": null, "payment_method_options": {"card": {"installments": null, "mandate_options": null, "network": null, "request_three_d_secure": "automatic"}}, "payment_method_types": ["card"], "processing": null, "receipt_email": null, "review": null, "setup_future_usage": null, "shipping": null, "source": "src_1K9FSOEcXtiJtvvhHGu1qtOx", "statement_descriptor": "airbyte.io", "statement_descriptor_suffix": null, "status": "succeeded", "transfer_data": null, "transfer_group": null, "updated": 1640120472}, "emitted_at": 1695737825535} {"stream": "payment_intents", "data": {"id": "pi_3K9F5DEcXtiJtvvh16scJMp6", "object": "payment_intent", "amount": 4200, "amount_capturable": 0, "amount_details": {"tip": {}}, "amount_received": 4200, "application": null, "application_fee_amount": null, "automatic_payment_methods": null, "canceled_at": null, "cancellation_reason": null, "capture_method": "automatic", "client_secret": "pi_3K9F5DEcXtiJtvvh16scJMp6_secret_YwhzCTpXtfcKYeklXnPnysRRi", "confirmation_method": "automatic", "created": 1640119035, "currency": "usd", "customer": null, "description": "edgao test", "invoice": null, "last_payment_error": null, "latest_charge": "ch_3K9F5DEcXtiJtvvh1w2MaTpj", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, "payment_method": null, "payment_method_configuration_details": null, "payment_method_options": {"card": {"installments": null, "mandate_options": null, "network": null, "request_three_d_secure": "automatic"}}, "payment_method_types": ["card"], "processing": null, "receipt_email": null, "review": null, "setup_future_usage": null, "shipping": null, "source": "src_1K9F5CEcXtiJtvvhrsZdur8Y", "statement_descriptor": "airbyte.io", "statement_descriptor_suffix": null, "status": "succeeded", "transfer_data": null, "transfer_group": null, "updated": 1640119035}, "emitted_at": 1695737825537} {"stream": "payment_intents", "data": {"id": "pi_3K9F4mEcXtiJtvvh18NKhEuo", "object": "payment_intent", "amount": 4200, "amount_capturable": 0, "amount_details": {"tip": {}}, "amount_received": 0, "application": null, "application_fee_amount": null, "automatic_payment_methods": null, "canceled_at": null, "cancellation_reason": null, "capture_method": "automatic", "client_secret": "pi_3K9F4mEcXtiJtvvh18NKhEuo_secret_pfUt7CTkPjVdJacycm0bMpdLt", "confirmation_method": "automatic", "created": 1640119008, "currency": "usd", "customer": null, "description": "edgao test", "invoice": null, "last_payment_error": {"charge": "ch_3K9F4mEcXtiJtvvh1kUzxjwN", "code": "card_declined", "decline_code": "test_mode_live_card", "doc_url": "https://stripe.com/docs/error-codes/card-declined", "message": "Your card was declined. Your request was in test mode, but used a non test (live) card. For a list of valid test cards, visit: https://stripe.com/docs/testing.", "source": {"id": "src_1K9F4hEcXtiJtvvhrUEwvCyi", "object": "source", "amount": null, "card": {"address_line1_check": null, "address_zip_check": null, "brand": "Visa", "country": "US", "cvc_check": "unchecked", "dynamic_last4": null, "exp_month": 9, "exp_year": 2028, "fingerprint": "Re3p4j8issXA77iI", "funding": "credit", "last4": "8097", "name": null, "three_d_secure": "optional", "tokenization_method": null}, "client_secret": "src_client_secret_b3v8YqNMLGykB120fqv2Tjhq", "created": 1640119003, "currency": null, "flow": "none", "livemode": false, "metadata": {}, "owner": {"address": null, "email": null, "name": null, "phone": null, "verified_address": null, "verified_email": null, "verified_name": null, "verified_phone": null}, "statement_descriptor": null, "status": "consumed", "type": "card", "usage": "reusable"}, "type": "card_error"}, "latest_charge": "ch_3K9F4mEcXtiJtvvh1kUzxjwN", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, "payment_method": null, "payment_method_configuration_details": null, "payment_method_options": {"card": {"installments": null, "mandate_options": null, "network": null, "request_three_d_secure": "automatic"}}, "payment_method_types": ["card"], "processing": null, "receipt_email": null, "review": null, "setup_future_usage": null, "shipping": null, "source": null, "statement_descriptor": "airbyte.io", "statement_descriptor_suffix": null, "status": "requires_payment_method", "transfer_data": null, "transfer_group": null, "updated": 1640119008}, "emitted_at": 1695737825538} diff --git a/airbyte-integrations/connectors/source-stripe/metadata.yaml b/airbyte-integrations/connectors/source-stripe/metadata.yaml index a8c21740f828..a0e1eabd75a3 100644 --- a/airbyte-integrations/connectors/source-stripe/metadata.yaml +++ b/airbyte-integrations/connectors/source-stripe/metadata.yaml @@ -5,7 +5,7 @@ data: connectorSubtype: api connectorType: source definitionId: e094cb9a-26de-4645-8761-65c0c425d1de - dockerImageTag: 4.3.1 + dockerImageTag: 4.4.0 dockerRepository: airbyte/source-stripe githubIssueLabel: source-stripe icon: stripe.svg diff --git a/airbyte-integrations/connectors/source-stripe/source_stripe/schemas/invoice_line_items.json b/airbyte-integrations/connectors/source-stripe/source_stripe/schemas/invoice_line_items.json index 3ade45cbe340..f59bb1a3a04b 100644 --- a/airbyte-integrations/connectors/source-stripe/source_stripe/schemas/invoice_line_items.json +++ b/airbyte-integrations/connectors/source-stripe/source_stripe/schemas/invoice_line_items.json @@ -38,6 +38,12 @@ "livemode": { "type": ["null", "boolean"] }, + "margins": { + "type": ["null", "array"], + "items": { + "type": ["null", "string"] + } + }, "proration": { "type": ["null", "boolean"] }, diff --git a/airbyte-integrations/connectors/source-stripe/unit_tests/conftest.py b/airbyte-integrations/connectors/source-stripe/unit_tests/conftest.py index b1b632850f0d..9877fb85efc8 100644 --- a/airbyte-integrations/connectors/source-stripe/unit_tests/conftest.py +++ b/airbyte-integrations/connectors/source-stripe/unit_tests/conftest.py @@ -2,10 +2,14 @@ # Copyright (c) 2023 Airbyte, Inc., all rights reserved. # +import os + import pytest from airbyte_cdk.sources.streams.http.auth import TokenAuthenticator from source_stripe.streams import IncrementalStripeStream, StripeLazySubStream +os.environ["REQUEST_CACHE_PATH"] = "REQUEST_CACHE_PATH" + @pytest.fixture(name="config") def config_fixture(): diff --git a/airbyte-integrations/connectors/source-zendesk-chat/Dockerfile b/airbyte-integrations/connectors/source-zendesk-chat/Dockerfile deleted file mode 100644 index c7764ec2d2e5..000000000000 --- a/airbyte-integrations/connectors/source-zendesk-chat/Dockerfile +++ /dev/null @@ -1,20 +0,0 @@ -FROM python:3.9-slim - -# Bash is installed for more convenient debugging. -RUN apt-get update && apt-get install -y bash && rm -rf /var/lib/apt/lists/* - -ENV CODE_PATH="source_zendesk_chat" -ENV AIRBYTE_IMPL_MODULE="source_zendesk_chat" -ENV AIRBYTE_IMPL_PATH="SourceZendeskChat" -ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main_dev.py" - -WORKDIR /airbyte/integration_code -COPY $CODE_PATH ./$CODE_PATH -COPY main_dev.py ./ -COPY setup.py ./ -RUN pip install . - -ENTRYPOINT ["python", "/airbyte/integration_code/main_dev.py"] - -LABEL io.airbyte.version=0.1.14 -LABEL io.airbyte.name=airbyte/source-zendesk-chat diff --git a/airbyte-integrations/connectors/source-zendesk-chat/build_customization.py b/airbyte-integrations/connectors/source-zendesk-chat/build_customization.py new file mode 100644 index 000000000000..e85c96df52a9 --- /dev/null +++ b/airbyte-integrations/connectors/source-zendesk-chat/build_customization.py @@ -0,0 +1,21 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# +from __future__ import annotations + +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from dagger import Container + +MAIN_FILE_NAME = "main_dev.py" + + +async def pre_connector_install(base_image_container: Container) -> Container: + """This function will run before the connector installation. + We set these environment variable to match what was originally in the Dockerfile. + Disclaimer: I have no idea if these env vars are actually needed. + """ + return base_image_container.with_env_variable("AIRBYTE_IMPL_MODULE", "source_zendesk_chat").with_env_variable( + "AIRBYTE_IMPL_PATH", "SourceZendeskChat" + ) diff --git a/airbyte-integrations/connectors/source-zendesk-chat/metadata.yaml b/airbyte-integrations/connectors/source-zendesk-chat/metadata.yaml index 5d9c006e0853..18185bf76a27 100644 --- a/airbyte-integrations/connectors/source-zendesk-chat/metadata.yaml +++ b/airbyte-integrations/connectors/source-zendesk-chat/metadata.yaml @@ -2,10 +2,12 @@ data: allowedHosts: hosts: - zopim.com + connectorBuildOptions: + baseImage: airbyte/python-connector-base:1.0.0 connectorSubtype: api connectorType: source definitionId: 40d24d0f-b8f9-4fe0-9e6c-b06c0f3f45e4 - dockerImageTag: 0.1.14 + dockerImageTag: 0.2.0 dockerRepository: airbyte/source-zendesk-chat githubIssueLabel: source-zendesk-chat icon: zendesk-chat.svg diff --git a/airbyte-integrations/connectors/source-zendesk-support/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-zendesk-support/integration_tests/expected_records.jsonl index 071347fcf623..0f9bcf453ed3 100644 --- a/airbyte-integrations/connectors/source-zendesk-support/integration_tests/expected_records.jsonl +++ b/airbyte-integrations/connectors/source-zendesk-support/integration_tests/expected_records.jsonl @@ -1,76 +1,73 @@ -{"stream":"articles","data":{"id":7253394952591,"url":"https://d3v-airbyte.zendesk.com/api/v2/help_center/en-us/articles/7253394952591.json","html_url":"https://d3v-airbyte.zendesk.com/hc/en-us/articles/7253394952591-How-do-I-customize-my-Help-Center-","author_id":360786799676,"comments_disabled":false,"draft":false,"promoted":false,"position":0,"vote_sum":0,"vote_count":0,"section_id":7253394947215,"created_at":"2023-06-22T00:32:20Z","updated_at":"2023-06-22T00:32:20Z","name":"How do I customize my Help Center?","title":"How do I customize my Help Center?","source_locale":"en-us","locale":"en-us","outdated":false,"outdated_locales":[],"edited_at":"2023-06-22T00:32:20Z","user_segment_id":null,"permission_group_id":7253379449487,"content_tag_ids":[],"label_names":[],"body":"

You can modify the look and feel of your Help Center by changing colors and fonts. See Branding your Help Center to learn how.

\n\n

You can also change the design of your Help Center. If you're comfortable working with page code, you can dig in to the site's HTML, CSS, and Javascript to customize your theme. To get started, see Customizing the Help Center.

"},"emitted_at":1693841595187} -{"stream":"articles","data":{"id":7253351877519,"url":"https://d3v-airbyte.zendesk.com/api/v2/help_center/en-us/articles/7253351877519.json","html_url":"https://d3v-airbyte.zendesk.com/hc/en-us/articles/7253351877519-Sample-article-Stellar-Skyonomy-refund-policies","author_id":360786799676,"comments_disabled":false,"draft":true,"promoted":false,"position":0,"vote_sum":0,"vote_count":0,"section_id":7253394933775,"created_at":"2023-06-22T00:32:20Z","updated_at":"2023-06-22T00:32:20Z","name":"Sample article: Stellar Skyonomy refund policies","title":"Sample article: Stellar Skyonomy refund policies","source_locale":"en-us","locale":"en-us","outdated":false,"outdated_locales":[],"edited_at":"2023-06-22T00:32:20Z","user_segment_id":null,"permission_group_id":7253379449487,"content_tag_ids":[],"label_names":[],"body":"

All Stellar Skyonomy merchandise purchases are backed by our 30-day satisfaction guarantee, no questions asked. We even pay to have it shipped back to us. Additionally, you can cancel your Stellar Skyonomy subscription at any time. Before you cancel, review our refund policies in this article.


Refund policy

We automatically issue a full refund when you initiate a return within 30 days of delivery.

To cancel an annual website subscription you can do so at any time and your refund will be prorated based on the cancellation date.


Request a refund

If you believe you’re eligible for a refund but haven’t received one, contact us by completing a refund request form. We review every refund and aim to respond within two business days.

If you haven't received a refund you're expecting, note that it can take up to 10 business days to appear on your card statement.

"},"emitted_at":1693841595186} -{"stream":"articles","data":{"id":7253391127951,"url":"https://d3v-airbyte.zendesk.com/api/v2/help_center/en-us/articles/7253391127951.json","html_url":"https://d3v-airbyte.zendesk.com/hc/en-us/articles/7253391127951-How-do-I-publish-my-content-in-other-languages-","author_id":360786799676,"comments_disabled":false,"draft":false,"promoted":false,"position":0,"vote_sum":0,"vote_count":0,"section_id":7253394947215,"created_at":"2023-06-22T00:32:20Z","updated_at":"2023-06-22T00:32:20Z","name":"How do I publish my content in other languages?","title":"How do I publish my content in other languages?","source_locale":"en-us","locale":"en-us","outdated":false,"outdated_locales":[],"edited_at":"2023-06-22T00:32:20Z","user_segment_id":null,"permission_group_id":7253379449487,"content_tag_ids":[],"label_names":[],"body":"

If you have configured your Help Center to support multiple languages, you can publish content in your supported languages.

\n\n

Here's the workflow for localizing your Help Center content into other languages:

\n\n
    \n
  1. Get your content translated in the other languages.
  2. \n
  3. Configure the Help Center to support all your languages.
  4. \n
  5. Add the translated content to the Help Center.
  6. \n
\n\n\n

For complete instructions, see Localizing the Help Center.

"},"emitted_at":1693841595187} -{"stream":"articles","data":{"id":7253391134863,"url":"https://d3v-airbyte.zendesk.com/api/v2/help_center/en-us/articles/7253391134863.json","html_url":"https://d3v-airbyte.zendesk.com/hc/en-us/articles/7253391134863-How-can-agents-leverage-knowledge-to-help-customers-","author_id":360786799676,"comments_disabled":false,"draft":false,"promoted":false,"position":0,"vote_sum":0,"vote_count":0,"section_id":7253394947215,"created_at":"2023-06-22T00:32:20Z","updated_at":"2023-06-22T00:32:20Z","name":"How can agents leverage knowledge to help customers?","title":"How can agents leverage knowledge to help customers?","source_locale":"en-us","locale":"en-us","outdated":false,"outdated_locales":[],"edited_at":"2023-06-22T00:32:20Z","user_segment_id":null,"permission_group_id":7253379449487,"content_tag_ids":[],"label_names":[],"body":"

You can use our Knowledge Capture app to leverage your team’s collective knowledge.

\n

Using the app, agents can:\n

    \n
  • Search the Help Center without leaving the ticket
  • \n
  • Insert links to relevant Help Center articles in ticket comments
  • \n
  • Add inline feedback to existing articles that need updates
  • \n
  • Create new articles while answering tickets using a pre-defined template
  • \n
\n\n\n

Agents never have to leave the ticket interface to share, flag, or create knowledge, so they can help the customer, while also improving your self-service offerings for other customers.

\n\n

To get started, see our Knowledge Capture documentation.

\n\n

And before your agents can start creating new knowledge directly from tickets, you’ll need to create a template for them to use. To help you along, we’ve provided some template ideas below. You can copy and paste any sample template below into a new article, add the KCTemplate label to the article, and you’ll be all set.

\n\n

Q&A template:

\n\n
\n\n

\n

\n

[Title]

\n\n\n

\n

\n

Question

\nwrite the question here.\n\n\n

\n

\n

Answer

\nwrite the answer here.\n\n\n
\n\n

Solution template:

\n\n
\n\n

\n

\n

[Title]

\n\n\n

\n

\n

Symptoms

\nwrite the symptoms here.\n\n\n

\n

\n

Resolution

\nwrite the resolution here.\n\n\n

\n

\n

Cause

\nwrite the cause here.\n\n\n
\n\n

How-to template:

\n\n
\n\n

\n

\n

[Title]

\n\n\n

\n

\n

Objective

\nwrite the purpose or task here.\n\n\n

\n

\n

Procedure

\nwrite the steps here.\n\n\n
\n"},"emitted_at":1693841595186} -{"stream":"articles","data":{"id":7253391120527,"url":"https://d3v-airbyte.zendesk.com/api/v2/help_center/en-us/articles/7253391120527.json","html_url":"https://d3v-airbyte.zendesk.com/hc/en-us/articles/7253391120527-What-are-these-sections-and-articles-doing-here-","author_id":360786799676,"comments_disabled":false,"draft":false,"promoted":false,"position":0,"vote_sum":1,"vote_count":1,"section_id":7253394947215,"created_at":"2023-06-22T00:32:20Z","updated_at":"2023-09-04T13:52:58Z","name":"What are these sections and articles doing here?","title":"What are these sections and articles doing here?","source_locale":"en-us","locale":"en-us","outdated":false,"outdated_locales":[],"edited_at":"2023-06-22T00:32:20Z","user_segment_id":null,"permission_group_id":7253379449487,"content_tag_ids":[],"label_names":[],"body":"

This FAQ is a section in the General category of your help center knowledge base. We created this category and a few common sections to help you get started with your Help Center.

\n\n

The knowledge base in the Help Center consists of three main page types: category pages, section pages, and articles. Here's the structure:

\n\n

\"Comments

\n\n

You can create your own categories, sections, and articles and modify or completely delete ours. See the Organizing knowledge base content and Creating articles in the Help Center to learn how.

"},"emitted_at":1693841595187} -{"stream":"articles","data":{"id":7253394935055,"url":"https://d3v-airbyte.zendesk.com/api/v2/help_center/en-us/articles/7253394935055.json","html_url":"https://d3v-airbyte.zendesk.com/hc/en-us/articles/7253394935055-Welcome-to-your-Help-Center-","author_id":360786799676,"comments_disabled":false,"draft":false,"promoted":false,"position":0,"vote_sum":1,"vote_count":1,"section_id":7253394933775,"created_at":"2023-06-22T00:32:19Z","updated_at":"2023-09-04T13:52:38Z","name":"Welcome to your Help Center!","title":"Welcome to your Help Center!","source_locale":"en-us","locale":"en-us","outdated":false,"outdated_locales":[],"edited_at":"2023-06-22T00:32:19Z","user_segment_id":null,"permission_group_id":7253379449487,"content_tag_ids":[],"label_names":[],"body":"

You're looking at your new Help Center. We populated it with placeholder content to help you get started. Feel free to edit or delete this content.

\n\n

The Help Center is designed to provide a complete self-service support option for your customers. The Help Center contains: a knowledge base and, on Guide Professional and Enterprise, a Customer Portal for support requests. You can also add a community to your Help Center if you have Zendesk Gather.

\n\n

Your customers can search for knowledge base articles to learn a task or search the community, if available, to ask fellow users questions. If your customers can't find an answer, they can submit a support request.

\n\n

For more information, see Help Center guide for end users.

Each user has a Help Center profile (Guide Professional and Enterprise), so your Help Center users can get to know one another better. Profiles contain relevant information about the user, along with their activities and contributions.

"},"emitted_at":1693841595187} -{"stream":"article_comments","data":{"id":7253381447311,"url":"https://d3v-airbyte.zendesk.com/api/v2/help_center/en-us/articles/7253394935055/comments/7253381447311.json","body":"

Test comment 2

","author_id":360786799676,"source_id":7253394935055,"source_type":"Article","html_url":"https://d3v-airbyte.zendesk.com/hc/en-us/articles/7253394935055/comments/7253381447311","locale":"en-us","created_at":"2023-06-22T00:33:36Z","updated_at":"2023-06-22T00:33:42Z","vote_sum":-1,"vote_count":1,"non_author_editor_id":null,"non_author_updated_at":null},"emitted_at":1693835587672} -{"stream":"article_comments","data":{"id":7253366869647,"url":"https://d3v-airbyte.zendesk.com/api/v2/help_center/en-us/articles/7253394935055/comments/7253366869647.json","body":"

Test comment

","author_id":360786799676,"source_id":7253394935055,"source_type":"Article","html_url":"https://d3v-airbyte.zendesk.com/hc/en-us/articles/7253394935055/comments/7253366869647","locale":"en-us","created_at":"2023-06-22T00:33:29Z","updated_at":"2023-06-22T00:33:40Z","vote_sum":1,"vote_count":1,"non_author_editor_id":null,"non_author_updated_at":null},"emitted_at":1693835587672} -{"stream":"article_votes","data":{"id":7816935174287,"url":"https://d3v-airbyte.zendesk.com/api/v2/help_center/votes/7816935174287.json","user_id":360786799676,"value":1,"item_id":7253394935055,"item_type":"Article","created_at":"2023-09-04T13:52:38Z","updated_at":"2023-09-04T13:52:38Z"},"emitted_at":1693835592223} -{"stream":"article_votes","data":{"id":7816935384335,"url":"https://d3v-airbyte.zendesk.com/api/v2/help_center/votes/7816935384335.json","user_id":360786799676,"value":1,"item_id":7253391120527,"item_type":"Article","created_at":"2023-09-04T13:52:58Z","updated_at":"2023-09-04T13:52:58Z"},"emitted_at":1693835592686} -{"stream":"article_comment_votes","data":{"id":7253393200655,"url":"https://d3v-airbyte.zendesk.com/api/v2/help_center/votes/7253393200655.json","user_id":360786799676,"value":-1,"item_id":7253381447311,"item_type":"Comment","created_at":"2023-06-22T00:33:42Z","updated_at":"2023-06-22T00:33:42Z"},"emitted_at":1693835598941} -{"stream":"article_comment_votes","data":{"id":7253381522703,"url":"https://d3v-airbyte.zendesk.com/api/v2/help_center/votes/7253381522703.json","user_id":360786799676,"value":1,"item_id":7253366869647,"item_type":"Comment","created_at":"2023-06-22T00:33:40Z","updated_at":"2023-06-22T00:33:40Z"},"emitted_at":1693835599304} -{"stream":"audit_logs","data":{"url":"https://d3v-airbyte.zendesk.com/api/v2/audit_logs/7901951628943.json","id":7901951628943,"action_label":"Created","actor_id":360786799676,"source_id":360000047875,"source_type":"voice/address","source_label":"Talk Addresses: Fake Zendesk 991","action":"create","change_description":"","ip_address":"188.163.104.11","created_at":"2023-09-15T01:05:27Z","actor_name":"Team Airbyte"},"emitted_at":1694793897914} -{"stream":"audit_logs","data":{"url":"https://d3v-airbyte.zendesk.com/api/v2/audit_logs/7901951603983.json","id":7901951603983,"action_label":"Created","actor_id":360786799676,"source_id":360000048736,"source_type":"voice/address","source_label":"Talk Addresses: Fake Zendesk 950","action":"create","change_description":"","ip_address":"188.163.104.11","created_at":"2023-09-15T01:05:27Z","actor_name":"Team Airbyte"},"emitted_at":1694793897915} -{"stream":"audit_logs","data":{"url":"https://d3v-airbyte.zendesk.com/api/v2/audit_logs/7901951598095.json","id":7901951598095,"action_label":"Created","actor_id":360786799676,"source_id":360000047455,"source_type":"voice/address","source_label":"Talk Addresses: Fake Zendesk 946","action":"create","change_description":"","ip_address":"188.163.104.11","created_at":"2023-09-15T01:05:27Z","actor_name":"Team Airbyte"},"emitted_at":1694793897915} -{"stream": "group_memberships", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/group_memberships/360007820916.json", "id": 360007820916, "user_id": 360786799676, "group_id": 360003074836, "default": true, "created_at": "2020-12-11T18:34:05Z", "updated_at": "2020-12-11T18:34:05Z"}, "emitted_at": 1690888151470} -{"stream": "group_memberships", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/group_memberships/360011727976.json", "id": 360011727976, "user_id": 361084605116, "group_id": 360003074836, "default": true, "created_at": "2021-04-23T14:33:11Z", "updated_at": "2021-04-23T14:33:11Z"}, "emitted_at": 1690888151471} -{"stream": "group_memberships", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/group_memberships/360011812655.json", "id": 360011812655, "user_id": 361089721035, "group_id": 360003074836, "default": true, "created_at": "2021-04-23T14:34:20Z", "updated_at": "2021-04-23T14:34:20Z"}, "emitted_at": 1690888151471} -{"stream": "groups", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/groups/7282640316815.json", "id": 7282640316815, "is_public": true, "name": "Airbyte Department 1", "description": "A sample department", "default": false, "deleted": false, "created_at": "2023-06-26T10:09:12Z", "updated_at": "2023-06-26T10:09:12Z"}, "emitted_at": 1690888152597} -{"stream": "groups", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/groups/7282618889231.json", "id": 7282618889231, "is_public": true, "name": "Department 1", "description": "A sample department", "default": false, "deleted": false, "created_at": "2023-06-26T10:09:14Z", "updated_at": "2023-06-26T10:09:14Z"}, "emitted_at": 1690888152598} -{"stream": "groups", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/groups/7282630247567.json", "id": 7282630247567, "is_public": true, "name": "Department 2", "description": "A sample department 2", "default": false, "deleted": false, "created_at": "2023-06-26T10:09:14Z", "updated_at": "2023-06-26T10:09:14Z"}, "emitted_at": 1690888152598} -{"stream": "macros", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/macros/360011363556.json", "id": 360011363556, "title": "Customer not responding", "active": true, "updated_at": "2020-12-11T18:34:06Z", "created_at": "2020-12-11T18:34:06Z", "default": false, "position": 9999, "description": null, "actions": [{"field": "status", "value": "pending"}, {"field": "comment_value", "value": "Hello {{ticket.requester.name}}. Our agent {{current_user.name}} has tried to contact you about this request but we haven't heard back from you yet. Please let us know if we can be of further assistance. Thanks. "}], "restriction": null, "raw_title": "Customer not responding"}, "emitted_at": 1690888153534} -{"stream": "macros", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/macros/360011363536.json", "id": 360011363536, "title": "Downgrade and inform", "active": true, "updated_at": "2020-12-11T18:34:06Z", "created_at": "2020-12-11T18:34:06Z", "default": false, "position": 9999, "description": null, "actions": [{"field": "priority", "value": "low"}, {"field": "comment_value", "value": "We're currently experiencing unusually high traffic. We'll get back to you as soon as possible."}], "restriction": null, "raw_title": "Downgrade and inform"}, "emitted_at": 1690888153535} -{"stream":"organizations","data":{"url":"https://d3v-airbyte.zendesk.com/api/v2/organizations/360033549136.json","id":360033549136,"name":"Airbyte","shared_tickets":true,"shared_comments":true,"external_id":null,"created_at":"2020-12-11T18:34:05Z","updated_at":"2023-04-13T14:51:21Z","domain_names":["cloud.airbyte.com"],"details":"test","notes":"test","group_id":6770788212111,"tags":["test"],"organization_fields":{"test_check_box_field_1":false,"test_drop_down_field_1":null,"test_number_field_1":null},"deleted_at":null},"emitted_at":1693307229393} -{"stream":"organization_fields","data":{"url":"https://d3v-airbyte.zendesk.com/api/v2/organization_fields/7376684398223.json","id":7376684398223,"type":"dropdown","key":"test_drop_down_field_1","title":"Test Drop-Down field 1","description":"Description for a Test Drop-Down field","raw_title":"Test Drop-Down field 1","raw_description":"Description for a Test Drop-Down field","position":0,"active":true,"system":false,"regexp_for_validation":null,"created_at":"2023-07-10T08:35:43Z","updated_at":"2023-07-10T08:35:43Z","custom_field_options":[{"id":7376695621007,"name":"Test 1","raw_name":"Test 1","value":"test_1"},{"id":7376695621135,"name":"Test 2","raw_name":"Test 2","value":"test_2"},{"id":7376695621263,"name":"12","raw_name":"12","value":"12"},{"id":7376695621391,"name":"154","raw_name":"154","value":"154"}]},"emitted_at":1693493354659} -{"stream":"organization_fields","data":{"url":"https://d3v-airbyte.zendesk.com/api/v2/organization_fields/7376684841999.json","id":7376684841999,"type":"integer","key":"test_number_field_1","title":"Test Number field 1","description":"Description for a Test Number field","raw_title":"Test Number field 1","raw_description":"Description for a Test Number field","position":1,"active":true,"system":false,"regexp_for_validation":null,"created_at":"2023-07-10T08:36:13Z","updated_at":"2023-07-10T08:36:13Z"},"emitted_at":1693493354659} -{"stream":"organization_fields","data":{"url":"https://d3v-airbyte.zendesk.com/api/v2/organization_fields/7376673274511.json","id":7376673274511,"type":"checkbox","key":"test_check_box_field_1","title":"Test Check box field 1","description":"Description for a Test Check box field","raw_title":"Test Check box field 1","raw_description":"Description for a Test Check box field","position":2,"active":true,"system":false,"regexp_for_validation":null,"created_at":"2023-07-10T08:36:58Z","updated_at":"2023-07-10T08:36:58Z","tag":"check_box_1"},"emitted_at":1693493354660} -{"stream": "organization_memberships", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/organization_memberships/360057705196.json", "id": 360057705196, "user_id": 360786799676, "organization_id": 360033549136, "default": true, "created_at": "2020-12-11T18:34:05Z", "organization_name": "Airbyte", "updated_at": "2020-12-11T18:34:05Z", "view_tickets": true}, "emitted_at": 1690888156003} -{"stream": "organization_memberships", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/organization_memberships/7282880134671.json", "id": 7282880134671, "user_id": 7282634891791, "organization_id": 360033549136, "default": true, "created_at": "2023-06-26T11:03:38Z", "organization_name": "Airbyte", "updated_at": "2023-06-26T11:03:38Z", "view_tickets": true}, "emitted_at": 1690888156004} -{"stream": "posts", "data": {"id": 7253351904271, "title": "How do I get around the community?", "details": "

You can use search to find answers. You can also browse topics and posts using views and filters. See Getting around the community.

", "author_id": 360786799676, "vote_sum": 0, "vote_count": 0, "comment_count": 0, "follower_count": 0, "topic_id": 7253351897871, "html_url": "https://d3v-airbyte.zendesk.com/hc/en-us/community/posts/7253351904271-How-do-I-get-around-the-community-", "created_at": "2023-06-22T00:32:21Z", "updated_at": "2023-06-22T00:32:21Z", "url": "https://d3v-airbyte.zendesk.com/api/v2/help_center/community/posts/7253351904271-How-do-I-get-around-the-community-.json", "featured": false, "pinned": false, "closed": false, "frozen": false, "status": "none", "non_author_editor_id": null, "non_author_updated_at": null, "content_tag_ids": []}, "emitted_at": 1692700567985} -{"stream": "posts", "data": {"id": 7253375870607, "title": "Which topics should I add to my community?", "details": "

That depends. If you support several products, you might add a topic for each product. If you have one big product, you might add a topic for each major feature area or task. If you have different types of users (for example, end users and API developers), you might add a topic or topics for each type of user.

A General Discussion topic is a place for users to discuss issues that don't quite fit in the other topics. You could monitor this topic for emerging issues that might need their own topics.

\n\n

To create your own topics, see Adding community discussion topics.

", "author_id": 360786799676, "vote_sum": 0, "vote_count": 0, "comment_count": 0, "follower_count": 0, "topic_id": 7253351897871, "html_url": "https://d3v-airbyte.zendesk.com/hc/en-us/community/posts/7253375870607-Which-topics-should-I-add-to-my-community-", "created_at": "2023-06-22T00:32:21Z", "updated_at": "2023-06-22T00:32:21Z", "url": "https://d3v-airbyte.zendesk.com/api/v2/help_center/community/posts/7253375870607-Which-topics-should-I-add-to-my-community-.json", "featured": false, "pinned": false, "closed": false, "frozen": false, "status": "none", "non_author_editor_id": null, "non_author_updated_at": null, "content_tag_ids": []}, "emitted_at": 1692700567986} -{"stream": "posts", "data": {"id": 7253375879055, "title": "I'd like a way for users to submit feature requests", "details": "

You can add a topic like this one in your community. End users can add feature requests and describe their use cases. Other users can comment on the requests and vote for them. Product managers can review feature requests and provide feedback.

", "author_id": 360786799676, "vote_sum": 0, "vote_count": 0, "comment_count": 0, "follower_count": 0, "topic_id": 7253394974479, "html_url": "https://d3v-airbyte.zendesk.com/hc/en-us/community/posts/7253375879055-I-d-like-a-way-for-users-to-submit-feature-requests", "created_at": "2023-06-22T00:32:21Z", "updated_at": "2023-06-22T00:32:21Z", "url": "https://d3v-airbyte.zendesk.com/api/v2/help_center/community/posts/7253375879055-I-d-like-a-way-for-users-to-submit-feature-requests.json", "featured": false, "pinned": false, "closed": false, "frozen": false, "status": "none", "non_author_editor_id": null, "non_author_updated_at": null, "content_tag_ids": []}, "emitted_at": 1692700567986} -{"stream": "satisfaction_ratings", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/satisfaction_ratings/7235633102607.json", "id": 7235633102607, "assignee_id": null, "group_id": null, "requester_id": 361089721035, "ticket_id": 146, "score": "offered", "created_at": "2023-06-19T18:01:40Z", "updated_at": "2023-06-19T18:01:40Z", "comment": null}, "emitted_at": 1690888165601} -{"stream": "satisfaction_ratings", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/satisfaction_ratings/5909514818319.json", "id": 5909514818319, "assignee_id": null, "group_id": null, "requester_id": 360786799676, "ticket_id": 25, "score": "offered", "created_at": "2022-11-22T17:02:04Z", "updated_at": "2022-11-22T17:02:04Z", "comment": null}, "emitted_at": 1690888165602} -{"stream": "satisfaction_ratings", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/satisfaction_ratings/5527212710799.json", "id": 5527212710799, "assignee_id": null, "group_id": null, "requester_id": 5527080499599, "ticket_id": 144, "score": "offered", "created_at": "2022-09-19T16:01:43Z", "updated_at": "2022-09-19T16:01:43Z", "comment": null}, "emitted_at": 1690888165602} -{"stream": "sla_policies", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/slas/policies/360001110696.json", "id": 360001110696, "title": "test police", "description": "for tests", "position": 1, "filter": {"all": [{"field": "assignee_id", "operator": "is", "value": 361089721035}], "any": []}, "policy_metrics": [{"priority": "high", "metric": "first_reply_time", "target": 61, "business_hours": false}], "created_at": "2021-07-16T11:05:31Z", "updated_at": "2021-07-16T11:05:31Z"}, "emitted_at": 1690888166730} -{"stream": "sla_policies", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/slas/policies/360001113715.json", "id": 360001113715, "title": "test police 2", "description": "test police 2", "position": 2, "filter": {"all": [{"field": "organization_id", "operator": "is", "value": 360033549136}], "any": []}, "policy_metrics": [{"priority": "high", "metric": "first_reply_time", "target": 121, "business_hours": false}], "created_at": "2021-07-16T11:06:01Z", "updated_at": "2021-07-16T11:06:01Z"}, "emitted_at": 1690888166731} -{"stream": "ticket_audits", "data": {"id": 7429253845903, "ticket_id": 152, "created_at": "2023-07-16T12:01:39Z", "author_id": -1, "metadata": {"system": {}, "custom": {}}, "events": [{"id": 7429253846031, "type": "Change", "value": "closed", "field_name": "status", "previous_value": "solved"}], "via": {"channel": "rule", "source": {"to": {}, "from": {"deleted": false, "title": "Close ticket 4 days after status is set to solved", "id": 6241378811151}, "rel": "automation"}}}, "emitted_at": 1690888174095} -{"stream": "ticket_audits", "data": {"id": 7283194465039, "ticket_id": 141, "created_at": "2023-06-26T12:15:34Z", "author_id": 360786799676, "metadata": {"system": {"client": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.58", "ip_address": "85.209.47.207", "location": "Kyiv, 30, Ukraine", "latitude": 50.458, "longitude": 30.5303}, "custom": {}}, "events": [{"id": 7283194465167, "type": "Change", "value": "7282634891791", "field_name": "assignee_id", "previous_value": null}, {"id": 7283194465295, "type": "Change", "value": "360006394556", "field_name": "group_id", "previous_value": null}, {"id": 7283194465423, "type": "Notification", "via": {"channel": "rule", "source": {"from": {"deleted": false, "title": "Notify assignee of assignment", "id": 360011363256, "revision_id": 1}, "rel": "trigger"}}, "subject": "[{{ticket.account}}] Assignment: {{ticket.title}}", "body": "You have been assigned to this ticket (#{{ticket.id}}).\n\n{{ticket.comments_formatted}}", "recipients": [7282634891791]}], "via": {"channel": "web", "source": {"from": {}, "to": {}, "rel": null}}}, "emitted_at": 1690888174096} -{"stream": "ticket_audits", "data": {"id": 7283163099535, "ticket_id": 153, "created_at": "2023-06-26T12:13:42Z", "author_id": 360786799676, "metadata": {"system": {"client": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.58", "ip_address": "85.209.47.207", "location": "Kyiv, 30, Ukraine", "latitude": 50.458, "longitude": 30.5303}, "custom": {}}, "events": [{"id": 7283163099663, "type": "Change", "value": "7282634891791", "field_name": "assignee_id", "previous_value": "360786799676"}, {"id": 7283163099791, "type": "Change", "value": "360006394556", "field_name": "group_id", "previous_value": "6770788212111"}, {"id": 7283163099919, "type": "Notification", "via": {"channel": "rule", "source": {"from": {"deleted": false, "title": "Notify assignee of assignment", "id": 360011363256, "revision_id": 1}, "rel": "trigger"}}, "subject": "[{{ticket.account}}] Assignment: {{ticket.title}}", "body": "You have been assigned to this ticket (#{{ticket.id}}).\n\n{{ticket.comments_formatted}}", "recipients": [7282634891791]}], "via": {"channel": "web", "source": {"from": {}, "to": {}, "rel": null}}}, "emitted_at": 1690888174097} -{"stream": "ticket_comments", "data": {"id": 5162146653071, "via": {"channel": "web", "source": {"from": {}, "to": {"name": "Team Airbyte", "address": "integration-test@airbyte.io"}, "rel": null}}, "via_reference_id": null, "type": "Comment", "author_id": 360786799676, "body": " 163748", "html_body": "
 163748
", "plain_body": " 163748", "public": true, "attachments": [], "audit_id": 5162146652943, "created_at": "2022-07-18T09:58:23Z", "event_type": "Comment", "ticket_id": 124, "timestamp": 1658138303}, "emitted_at": 1690888176621} -{"stream": "ticket_comments", "data": {"id": 5162208963983, "via": {"channel": "web", "source": {"from": {}, "to": {}, "rel": null}}, "via_reference_id": null, "type": "Comment", "author_id": 360786799676, "body": "238473846", "html_body": "
238473846
", "plain_body": "238473846", "public": false, "attachments": [], "audit_id": 5162208963855, "created_at": "2022-07-18T10:16:53Z", "event_type": "Comment", "ticket_id": 125, "timestamp": 1658139413}, "emitted_at": 1690888176622} -{"stream": "ticket_comments", "data": {"id": 5162223308559, "via": {"channel": "web", "source": {"from": {}, "to": {}, "rel": null}}, "via_reference_id": null, "type": "Comment", "author_id": 360786799676, "body": "Airbyte", "html_body": "", "plain_body": "Airbyte", "public": false, "attachments": [], "audit_id": 5162223308431, "created_at": "2022-07-18T10:25:21Z", "event_type": "Comment", "ticket_id": 125, "timestamp": 1658139921}, "emitted_at": 1690888176622} -{"stream": "ticket_fields", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/ticket_fields/360002833076.json", "id": 360002833076, "type": "subject", "title": "Subject", "raw_title": "Subject", "description": "", "raw_description": "", "position": 1, "active": true, "required": false, "collapsed_for_agents": false, "regexp_for_validation": null, "title_in_portal": "Subject", "raw_title_in_portal": "Subject", "visible_in_portal": true, "editable_in_portal": true, "required_in_portal": true, "tag": null, "created_at": "2020-12-11T18:34:05Z", "updated_at": "2020-12-11T18:34:05Z", "removable": false, "key": null, "agent_description": null}, "emitted_at": 1690888178196} -{"stream": "ticket_fields", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/ticket_fields/360002833096.json", "id": 360002833096, "type": "description", "title": "Description", "raw_title": "Description", "description": "Please enter the details of your request. A member of our support staff will respond as soon as possible.", "raw_description": "Please enter the details of your request. A member of our support staff will respond as soon as possible.", "position": 2, "active": true, "required": false, "collapsed_for_agents": false, "regexp_for_validation": null, "title_in_portal": "Description", "raw_title_in_portal": "Description", "visible_in_portal": true, "editable_in_portal": true, "required_in_portal": true, "tag": null, "created_at": "2020-12-11T18:34:05Z", "updated_at": "2020-12-11T18:34:05Z", "removable": false, "key": null, "agent_description": null}, "emitted_at": 1690888178197} -{"stream": "ticket_fields", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/ticket_fields/360002833116.json", "id": 360002833116, "type": "status", "title": "Status", "raw_title": "Status", "description": "Request status", "raw_description": "Request status", "position": 3, "active": true, "required": false, "collapsed_for_agents": false, "regexp_for_validation": null, "title_in_portal": "Status", "raw_title_in_portal": "Status", "visible_in_portal": false, "editable_in_portal": false, "required_in_portal": false, "tag": null, "created_at": "2020-12-11T18:34:05Z", "updated_at": "2020-12-11T18:34:05Z", "removable": false, "key": null, "agent_description": null, "system_field_options": [{"name": "Open", "value": "open"}, {"name": "Pending", "value": "pending"}, {"name": "Solved", "value": "solved"}], "sub_type_id": 0}, "emitted_at": 1690888178198} -{"stream": "ticket_metrics", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/ticket_metrics/7283000498191.json", "id": 7283000498191, "ticket_id": 153, "created_at": "2023-06-26T11:31:48Z", "updated_at": "2023-06-26T12:13:42Z", "group_stations": 2, "assignee_stations": 2, "reopens": 0, "replies": 0, "assignee_updated_at": "2023-06-26T11:31:48Z", "requester_updated_at": "2023-06-26T11:31:48Z", "status_updated_at": "2023-06-26T11:31:48Z", "initially_assigned_at": "2023-06-26T11:31:48Z", "assigned_at": "2023-06-26T12:13:42Z", "solved_at": null, "latest_comment_added_at": "2023-06-26T11:31:48Z", "reply_time_in_minutes": {"calendar": null, "business": null}, "first_resolution_time_in_minutes": {"calendar": null, "business": null}, "full_resolution_time_in_minutes": {"calendar": null, "business": null}, "agent_wait_time_in_minutes": {"calendar": null, "business": null}, "requester_wait_time_in_minutes": {"calendar": null, "business": null}, "on_hold_time_in_minutes": {"calendar": 0, "business": 0}, "custom_status_updated_at": "2023-06-26T11:31:48Z"}, "emitted_at": 1690888179326} -{"stream": "ticket_metrics", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/ticket_metrics/7282909551759.json", "id": 7282909551759, "ticket_id": 152, "created_at": "2023-06-26T11:10:33Z", "updated_at": "2023-06-26T11:25:43Z", "group_stations": 1, "assignee_stations": 1, "reopens": 0, "replies": 1, "assignee_updated_at": "2023-06-26T11:25:43Z", "requester_updated_at": "2023-06-26T11:10:33Z", "status_updated_at": "2023-07-16T12:01:39Z", "initially_assigned_at": "2023-06-26T11:10:33Z", "assigned_at": "2023-06-26T11:10:33Z", "solved_at": "2023-06-26T11:25:43Z", "latest_comment_added_at": "2023-06-26T11:21:06Z", "reply_time_in_minutes": {"calendar": 11, "business": 0}, "first_resolution_time_in_minutes": {"calendar": 15, "business": 0}, "full_resolution_time_in_minutes": {"calendar": 15, "business": 0}, "agent_wait_time_in_minutes": {"calendar": 15, "business": 0}, "requester_wait_time_in_minutes": {"calendar": 0, "business": 0}, "on_hold_time_in_minutes": {"calendar": 0, "business": 0}, "custom_status_updated_at": "2023-06-26T11:25:43Z"}, "emitted_at": 1690888179326} -{"stream": "ticket_metrics", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/ticket_metrics/7282901696015.json", "id": 7282901696015, "ticket_id": 151, "created_at": "2023-06-26T11:09:33Z", "updated_at": "2023-06-26T12:03:38Z", "group_stations": 1, "assignee_stations": 1, "reopens": 0, "replies": 1, "assignee_updated_at": "2023-06-26T12:03:37Z", "requester_updated_at": "2023-06-26T11:09:33Z", "status_updated_at": "2023-06-26T11:09:33Z", "initially_assigned_at": "2023-06-26T11:09:33Z", "assigned_at": "2023-06-26T11:09:33Z", "solved_at": null, "latest_comment_added_at": "2023-06-26T12:03:37Z", "reply_time_in_minutes": {"calendar": 54, "business": 0}, "first_resolution_time_in_minutes": {"calendar": null, "business": null}, "full_resolution_time_in_minutes": {"calendar": null, "business": null}, "agent_wait_time_in_minutes": {"calendar": null, "business": null}, "requester_wait_time_in_minutes": {"calendar": null, "business": null}, "on_hold_time_in_minutes": {"calendar": 0, "business": 0}, "custom_status_updated_at": "2023-06-26T11:09:33Z"}, "emitted_at": 1690888179327} -{"stream": "ticket_metric_events", "data": {"id": 4992797383183, "ticket_id": 121, "metric": "agent_work_time", "instance_id": 0, "type": "measure", "time": "2022-06-17T14:49:20Z"}, "emitted_at": 1690888180347} -{"stream": "ticket_metric_events", "data": {"id": 4992797383311, "ticket_id": 121, "metric": "pausable_update_time", "instance_id": 0, "type": "measure", "time": "2022-06-17T14:49:20Z"}, "emitted_at": 1690888180348} -{"stream": "ticket_metric_events", "data": {"id": 4992797383439, "ticket_id": 121, "metric": "reply_time", "instance_id": 0, "type": "measure", "time": "2022-06-17T14:49:20Z"}, "emitted_at": 1690888180348} -{"stream": "ticket_skips", "data": {"id": 7290033348623, "ticket_id": 121, "user_id": 360786799676, "reason": "I have no idea.", "created_at": "2023-06-27T08:24:02Z", "updated_at": "2023-06-27T08:24:02Z", "ticket": {"url": "https://d3v-airbyte.zendesk.com/api/v2/tickets/121.json", "id": 121, "external_id": null, "via": {"channel": "voice", "source": {"rel": "voicemail", "from": {"formatted_phone": "+1 (689) 689-8023", "phone": "+16896898023", "name": "Caller +1 (689) 689-8023"}, "to": {"formatted_phone": "+1 (205) 953-1462", "phone": "+12059531462", "name": "Airbyte", "brand_id": 360000358316}}}, "created_at": "2022-06-17T14:49:20Z", "updated_at": "2022-06-17T16:01:42Z", "type": null, "subject": "Voicemail from: Caller +1 (689) 689-8023", "raw_subject": "Voicemail from: Caller +1 (689) 689-8023", "description": "Call from: +1 (689) 689-8023\\nTime of call: June 17, 2022 at 2:48:27 PM", "priority": null, "status": "new", "recipient": null, "requester_id": 4992781783439, "submitter_id": 4992781783439, "assignee_id": null, "organization_id": null, "group_id": null, "collaborator_ids": [], "follower_ids": [], "email_cc_ids": [], "forum_topic_id": null, "problem_id": null, "has_incidents": false, "is_public": false, "due_at": null, "tags": [], "custom_fields": [], "satisfaction_rating": {"score": "offered"}, "sharing_agreement_ids": [], "custom_status_id": 4044356, "fields": [], "followup_ids": [], "ticket_form_id": 360000084116, "deleted_ticket_form_id": null, "brand_id": 360000358316, "allow_channelback": false, "allow_attachments": true, "from_messaging_channel": false}}, "emitted_at": 1690888182191} -{"stream": "ticket_skips", "data": {"id": 7290088475023, "ticket_id": 125, "user_id": 360786799676, "reason": "Another test skip.", "created_at": "2023-06-27T08:30:01Z", "updated_at": "2023-06-27T08:30:01Z", "ticket": {"url": "https://d3v-airbyte.zendesk.com/api/v2/tickets/125.json", "id": 125, "external_id": null, "via": {"channel": "web", "source": {"from": {}, "to": {}, "rel": null}}, "created_at": "2022-07-18T10:16:53Z", "updated_at": "2022-07-18T10:36:02Z", "type": "question", "subject": "Ticket Test 2", "raw_subject": "Ticket Test 2", "description": "238473846", "priority": "urgent", "status": "open", "recipient": null, "requester_id": 360786799676, "submitter_id": 360786799676, "assignee_id": 361089721035, "organization_id": 360033549136, "group_id": 5059439464079, "collaborator_ids": [360786799676], "follower_ids": [360786799676], "email_cc_ids": [], "forum_topic_id": null, "problem_id": null, "has_incidents": false, "is_public": false, "due_at": null, "tags": [], "custom_fields": [], "satisfaction_rating": {"score": "unoffered"}, "sharing_agreement_ids": [], "custom_status_id": 4044376, "fields": [], "followup_ids": [], "ticket_form_id": 360000084116, "deleted_ticket_form_id": null, "brand_id": 360000358316, "allow_channelback": false, "allow_attachments": true, "from_messaging_channel": false}}, "emitted_at": 1690888182192} -{"stream":"tickets","data":{"url":"https://d3v-airbyte.zendesk.com/api/v2/tickets/121.json","id":121,"external_id":null,"via":{"channel":"voice","source":{"rel":"voicemail","from":{"formatted_phone":"+1 (689) 689-8023","phone":"+16896898023","name":"Caller +1 (689) 689-8023"},"to":{"formatted_phone":"+1 (205) 953-1462","phone":"+12059531462","name":"Airbyte","brand_id":360000358316}}},"created_at":"2022-06-17T14:49:20Z","updated_at":"2022-06-17T16:01:42Z","type":null,"subject":"Voicemail from: Caller +1 (689) 689-8023","raw_subject":"Voicemail from: Caller +1 (689) 689-8023","description":"Call from: +1 (689) 689-8023\\nTime of call: June 17, 2022 at 2:48:27 PM","priority":null,"status":"new","recipient":null,"requester_id":4992781783439,"submitter_id":4992781783439,"assignee_id":null,"organization_id":null,"group_id":null,"collaborator_ids":[],"follower_ids":[],"email_cc_ids":[],"forum_topic_id":null,"problem_id":null,"has_incidents":false,"is_public":false,"due_at":null,"tags":[],"custom_fields":[],"satisfaction_rating":{"score":"offered"},"sharing_agreement_ids":[],"custom_status_id":4044356,"fields":[],"followup_ids":[],"ticket_form_id":360000084116,"brand_id":360000358316,"allow_channelback":false,"allow_attachments":true,"from_messaging_channel":false,"generated_timestamp":1655481702},"emitted_at":1694176872771} -{"stream":"tickets","data":{"url":"https://d3v-airbyte.zendesk.com/api/v2/tickets/122.json","id":122,"external_id":null,"via":{"channel":"voice","source":{"rel":"voicemail","from":{"formatted_phone":"+1 (912) 420-0314","phone":"+19124200314","name":"Caller +1 (912) 420-0314"},"to":{"formatted_phone":"+1 (205) 953-1462","phone":"+12059531462","name":"Airbyte","brand_id":360000358316}}},"created_at":"2022-06-17T19:52:39Z","updated_at":"2022-06-17T21:01:41Z","type":null,"subject":"Voicemail from: Caller +1 (912) 420-0314","raw_subject":"Voicemail from: Caller +1 (912) 420-0314","description":"Call from: +1 (912) 420-0314\\nTime of call: June 17, 2022 at 7:52:02 PM","priority":null,"status":"new","recipient":null,"requester_id":4993467856015,"submitter_id":4993467856015,"assignee_id":null,"organization_id":null,"group_id":null,"collaborator_ids":[],"follower_ids":[],"email_cc_ids":[],"forum_topic_id":null,"problem_id":null,"has_incidents":false,"is_public":false,"due_at":null,"tags":[],"custom_fields":[],"satisfaction_rating":{"score":"offered"},"sharing_agreement_ids":[],"custom_status_id":4044356,"fields":[],"followup_ids":[],"ticket_form_id":360000084116,"brand_id":360000358316,"allow_channelback":false,"allow_attachments":true,"from_messaging_channel":false,"generated_timestamp":1655499701},"emitted_at":1694176872772} -{"stream":"tickets","data":{"url":"https://d3v-airbyte.zendesk.com/api/v2/tickets/123.json","id":123,"external_id":null,"via":{"channel":"voice","source":{"rel":"voicemail","from":{"formatted_phone":"+1 (607) 210-9549","phone":"+16072109549","name":"Caller +1 (607) 210-9549"},"to":{"formatted_phone":"+1 (205) 953-1462","phone":"+12059531462","name":"Airbyte","brand_id":360000358316}}},"created_at":"2022-07-13T14:34:05Z","updated_at":"2023-09-07T16:46:02Z","type":null,"subject":"Voicemail from: Caller +1 (607) 210-9549","raw_subject":"Voicemail from: Caller +1 (607) 210-9549","description":"Call from: +1 (607) 210-9549\\nTime of call: July 13, 2022 at 2:33:27 PM","priority":null,"status":"deleted","recipient":null,"requester_id":5137812260495,"submitter_id":5137812260495,"assignee_id":null,"organization_id":null,"group_id":null,"collaborator_ids":[],"follower_ids":[],"email_cc_ids":[],"forum_topic_id":null,"problem_id":null,"has_incidents":false,"is_public":false,"due_at":null,"tags":[],"custom_fields":[],"satisfaction_rating":{"score":"offered"},"sharing_agreement_ids":[],"custom_status_id":4044356,"fields":[],"followup_ids":[],"ticket_form_id":360000084116,"brand_id":360000358316,"allow_channelback":false,"allow_attachments":true,"from_messaging_channel":false,"generated_timestamp":1694105162},"emitted_at":1694705163872} -{"stream":"users","data":{"id":4992781783439,"url":"https://d3v-airbyte.zendesk.com/api/v2/users/4992781783439.json","name":"Caller +1 (689) 689-8023","email":null,"created_at":"2022-06-17T14:49:19Z","updated_at":"2022-06-17T14:49:19Z","time_zone":"Pacific/Noumea","iana_time_zone":"Pacific/Noumea","phone":"+16896898023","shared_phone_number":false,"photo":null,"locale_id":1,"locale":"en-US","organization_id":null,"role":"end-user","verified":true,"external_id":null,"tags":[],"alias":null,"active":true,"shared":false,"shared_agent":false,"last_login_at":null,"two_factor_auth_enabled":false,"signature":null,"details":null,"notes":null,"role_type":null,"custom_role_id":null,"moderator":false,"ticket_restriction":"requested","only_private_comments":false,"restricted_agent":true,"suspended":false,"default_group_id":null,"report_csv":false,"user_fields":{"test_display_name_checkbox_field":false,"test_display_name_decimal_field":null,"test_display_name_text_field":null}},"emitted_at":1693221422922} -{"stream":"users","data":{"id":4993467856015,"url":"https://d3v-airbyte.zendesk.com/api/v2/users/4993467856015.json","name":"Caller +1 (912) 420-0314","email":null,"created_at":"2022-06-17T19:52:38Z","updated_at":"2022-06-17T19:52:38Z","time_zone":"Pacific/Noumea","iana_time_zone":"Pacific/Noumea","phone":"+19124200314","shared_phone_number":false,"photo":null,"locale_id":1,"locale":"en-US","organization_id":null,"role":"end-user","verified":true,"external_id":null,"tags":[],"alias":null,"active":true,"shared":false,"shared_agent":false,"last_login_at":null,"two_factor_auth_enabled":false,"signature":null,"details":null,"notes":null,"role_type":null,"custom_role_id":null,"moderator":false,"ticket_restriction":"requested","only_private_comments":false,"restricted_agent":true,"suspended":false,"default_group_id":null,"report_csv":false,"user_fields":{"test_display_name_checkbox_field":false,"test_display_name_decimal_field":null,"test_display_name_text_field":null}},"emitted_at":1693221422922} -{"stream":"users","data":{"id":5137812260495,"url":"https://d3v-airbyte.zendesk.com/api/v2/users/5137812260495.json","name":"Caller +1 (607) 210-9549","email":null,"created_at":"2022-07-13T14:34:04Z","updated_at":"2022-07-13T14:34:04Z","time_zone":"Pacific/Noumea","iana_time_zone":"Pacific/Noumea","phone":"+16072109549","shared_phone_number":false,"photo":null,"locale_id":1,"locale":"en-US","organization_id":null,"role":"end-user","verified":true,"external_id":null,"tags":[],"alias":null,"active":true,"shared":false,"shared_agent":false,"last_login_at":null,"two_factor_auth_enabled":false,"signature":null,"details":null,"notes":null,"role_type":null,"custom_role_id":null,"moderator":false,"ticket_restriction":"requested","only_private_comments":false,"restricted_agent":true,"suspended":false,"default_group_id":null,"report_csv":false,"user_fields":{"test_display_name_checkbox_field":false,"test_display_name_decimal_field":null,"test_display_name_text_field":null}},"emitted_at":1693221422922} -{"stream": "brands", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/brands/360000358316.json", "id": 360000358316, "name": "Airbyte", "brand_url": "https://d3v-airbyte.zendesk.com", "subdomain": "d3v-airbyte", "host_mapping": null, "has_help_center": true, "help_center_state": "enabled", "active": true, "default": true, "is_deleted": false, "logo": null, "ticket_form_ids": [360000084116], "signature_template": "{{agent.signature}}", "created_at": "2020-12-11T18:34:04Z", "updated_at": "2020-12-11T18:34:09Z"}, "emitted_at": 1690888190028} -{"stream": "custom_roles", "data": {"id": 360000210636, "name": "Advisor", "description": "Can automate ticket workflows, manage channels and make private comments on tickets", "role_type": 0, "created_at": "2020-12-11T18:34:36Z", "updated_at": "2020-12-11T18:34:36Z", "configuration": {"chat_access": true, "end_user_list_access": "full", "forum_access_restricted_content": false, "light_agent": false, "manage_business_rules": true, "manage_dynamic_content": false, "manage_extensions_and_channels": true, "manage_facebook": true, "moderate_forums": false, "side_conversation_create": true, "ticket_access": "within-groups", "ticket_comment_access": "none", "ticket_deletion": false, "ticket_tag_editing": true, "twitter_search_access": false, "view_deleted_tickets": false, "voice_access": true, "group_access": false, "organization_editing": false, "organization_notes_editing": false, "assign_tickets_to_any_group": false, "end_user_profile_access": "readonly", "explore_access": "readonly", "forum_access": "readonly", "macro_access": "full", "report_access": "none", "ticket_editing": true, "ticket_merge": false, "user_view_access": "full", "view_access": "full", "voice_dashboard_access": false, "manage_automations": true, "manage_contextual_workspaces": false, "manage_organization_fields": false, "manage_skills": true, "manage_slas": true, "manage_ticket_fields": false, "manage_ticket_forms": false, "manage_user_fields": false, "ticket_redaction": false, "manage_roles": "none", "manage_groups": false, "manage_group_memberships": false, "manage_organizations": false, "manage_suspended_tickets": false, "manage_triggers": true, "view_reduced_count": false, "custom_objects": {}}, "team_member_count": 1}, "emitted_at": 1696409992642} -{"stream": "custom_roles", "data": {"id": 360000210596, "name": "Staff", "description": "Can edit tickets within their groups", "role_type": 0, "created_at": "2020-12-11T18:34:36Z", "updated_at": "2020-12-11T18:34:36Z", "configuration": {"chat_access": true, "end_user_list_access": "full", "forum_access_restricted_content": false, "light_agent": false, "manage_business_rules": false, "manage_dynamic_content": false, "manage_extensions_and_channels": false, "manage_facebook": false, "moderate_forums": false, "side_conversation_create": true, "ticket_access": "within-groups", "ticket_comment_access": "public", "ticket_deletion": false, "ticket_tag_editing": false, "twitter_search_access": false, "view_deleted_tickets": false, "voice_access": true, "group_access": false, "organization_editing": false, "organization_notes_editing": false, "assign_tickets_to_any_group": false, "end_user_profile_access": "readonly", "explore_access": "readonly", "forum_access": "readonly", "macro_access": "manage-personal", "report_access": "readonly", "ticket_editing": true, "ticket_merge": false, "user_view_access": "manage-personal", "view_access": "manage-personal", "voice_dashboard_access": false, "manage_automations": false, "manage_contextual_workspaces": false, "manage_organization_fields": false, "manage_skills": false, "manage_slas": false, "manage_ticket_fields": false, "manage_ticket_forms": false, "manage_user_fields": false, "ticket_redaction": false, "manage_roles": "none", "manage_groups": false, "manage_group_memberships": false, "manage_organizations": false, "manage_suspended_tickets": false, "manage_triggers": false, "view_reduced_count": false, "custom_objects": {}}, "team_member_count": 1}, "emitted_at": 1696409992643} -{"stream": "custom_roles", "data": {"id": 360000210616, "name": "Team lead", "description": "Can manage all tickets and forums", "role_type": 0, "created_at": "2020-12-11T18:34:36Z", "updated_at": "2023-06-26T11:06:24Z", "configuration": {"chat_access": true, "end_user_list_access": "full", "forum_access_restricted_content": false, "light_agent": false, "manage_business_rules": true, "manage_dynamic_content": true, "manage_extensions_and_channels": true, "manage_facebook": true, "moderate_forums": false, "side_conversation_create": true, "ticket_access": "all", "ticket_comment_access": "public", "ticket_deletion": true, "ticket_tag_editing": true, "twitter_search_access": false, "view_deleted_tickets": true, "voice_access": true, "group_access": true, "organization_editing": true, "organization_notes_editing": true, "assign_tickets_to_any_group": false, "end_user_profile_access": "full", "explore_access": "edit", "forum_access": "full", "macro_access": "full", "report_access": "full", "ticket_editing": true, "ticket_merge": true, "user_view_access": "full", "view_access": "playonly", "voice_dashboard_access": true, "manage_automations": true, "manage_contextual_workspaces": true, "manage_organization_fields": true, "manage_skills": true, "manage_slas": true, "manage_ticket_fields": true, "manage_ticket_forms": true, "manage_user_fields": true, "ticket_redaction": true, "manage_roles": "all-except-self", "manage_groups": true, "manage_group_memberships": true, "manage_organizations": true, "manage_suspended_tickets": true, "manage_triggers": true, "view_reduced_count": false, "custom_objects": {}}, "team_member_count": 2}, "emitted_at": 1696409992643} -{"stream": "schedules", "data": {"id": 4567312249615, "name": "Test Schedule", "time_zone": "New Caledonia", "created_at": "2022-03-25T10:23:34Z", "updated_at": "2022-03-25T10:23:34Z", "intervals": [{"start_time": 1980, "end_time": 2460}, {"start_time": 3420, "end_time": 3900}, {"start_time": 4860, "end_time": 5340}, {"start_time": 6300, "end_time": 6780}, {"start_time": 7740, "end_time": 8220}]}, "emitted_at": 1690888192224} -{"stream":"ticket_forms","data":{"url":"https://d3v-airbyte.zendesk.com/api/v2/ticket_forms/360000084116.json","name":"Default Ticket Form","display_name":"Default Ticket Form","id":360000084116,"raw_name":"Default Ticket Form","raw_display_name":"Default Ticket Form","end_user_visible":true,"position":1,"ticket_field_ids":[360002833076,360002833096,360002833116,360002833136,360002833156,360002833176,360002833196],"active":true,"default":true,"created_at":"2020-12-11T18:34:37Z","updated_at":"2020-12-11T18:34:37Z","in_all_brands":true,"restricted_brand_ids":[],"end_user_conditions":[],"agent_conditions":[]},"emitted_at":1694082682196} -{"stream": "account_attributes", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/routing/attributes/ac43b460-0ebd-11ee-85a3-4750db6aa722.json", "id": "ac43b460-0ebd-11ee-85a3-4750db6aa722", "name": "Language", "created_at": "2023-06-19T16:23:49Z", "updated_at": "2023-06-19T16:23:49Z"}, "emitted_at": 1690888194272} -{"stream": "account_attributes", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/routing/attributes/c15cdb76-0ebd-11ee-a37f-f315f48c0150.json", "id": "c15cdb76-0ebd-11ee-a37f-f315f48c0150", "name": "Quality", "created_at": "2023-06-19T16:24:25Z", "updated_at": "2023-06-19T16:24:25Z"}, "emitted_at": 1690888194273} -{"stream": "attribute_definitions", "data": {"title": "Number of incidents", "subject": "number_of_incidents", "type": "text", "group": "ticket", "nullable": false, "repeatable": false, "operators": [{"value": "less_than", "title": "Less than", "terminal": false}, {"value": "greater_than", "title": "Greater than", "terminal": false}, {"value": "is", "title": "Is", "terminal": false}, {"value": "less_than_equal", "title": "Less than or equal to", "terminal": false}, {"value": "greater_than_equal", "title": "Greater than or equal to", "terminal": false}], "condition": "all"}, "emitted_at": 1690888195504} -{"stream": "attribute_definitions", "data": {"title": "Brand", "subject": "brand_id", "type": "list", "group": "ticket", "nullable": false, "repeatable": false, "operators": [{"value": "is", "title": "Is", "terminal": false}, {"value": "is_not", "title": "Is not", "terminal": false}], "values": [{"value": "360000358316", "title": "Airbyte", "enabled": true}], "condition": "all"}, "emitted_at": 1690888195504} -{"stream": "attribute_definitions", "data": {"title": "Form", "subject": "ticket_form_id", "type": "list", "group": "ticket", "nullable": false, "repeatable": false, "operators": [{"value": "is", "title": "Is", "terminal": false}, {"value": "is_not", "title": "Is not", "terminal": false}], "values": [{"value": "360000084116", "title": "Default Ticket Form", "enabled": true}], "condition": "all"}, "emitted_at": 1690888195505} -{"stream":"topics","data":{"id":7253394974479,"url":"https://d3v-airbyte.zendesk.com/api/v2/help_center/community/topics/7253394974479.json","html_url":"https://d3v-airbyte.zendesk.com/hc/en-us/community/topics/7253394974479-Feature-Requests","name":"Feature Requests","description":null,"position":0,"follower_count":1,"community_id":7253391140495,"created_at":"2023-06-22T00:32:21Z","updated_at":"2023-06-22T00:32:21Z","manageable_by":"managers","user_segment_id":null},"emitted_at":1687861697934} -{"stream":"topics","data":{"id":7253351897871,"url":"https://d3v-airbyte.zendesk.com/api/v2/help_center/community/topics/7253351897871.json","html_url":"https://d3v-airbyte.zendesk.com/hc/en-us/community/topics/7253351897871-General-Discussion","name":"General Discussion","description":null,"position":0,"follower_count":1,"community_id":7253391140495,"created_at":"2023-06-22T00:32:20Z","updated_at":"2023-06-22T00:32:20Z","manageable_by":"managers","user_segment_id":null},"emitted_at":1687861697934} -{"stream":"user_fields","data":{"url":"https://d3v-airbyte.zendesk.com/api/v2/user_fields/7761239926287.json","id":7761239926287,"type":"text","key":"test_display_name_text_field","title":"test Display Name text field","description":"test Display Name text field","raw_title":"test Display Name text field","raw_description":"test Display Name text field","position":0,"active":true,"system":false,"regexp_for_validation":null,"created_at":"2023-08-28T10:10:46Z","updated_at":"2023-08-28T10:10:46Z"},"emitted_at":1693218053198} -{"stream":"user_fields","data":{"url":"https://d3v-airbyte.zendesk.com/api/v2/user_fields/7761264848527.json","id":7761264848527,"type":"checkbox","key":"test_display_name_checkbox_field","title":"test Display Name Checkbox field","description":"","raw_title":"test Display Name Checkbox field","raw_description":"","position":1,"active":true,"system":false,"regexp_for_validation":null,"created_at":"2023-08-28T10:11:16Z","updated_at":"2023-08-28T10:11:16Z","tag":null},"emitted_at":1693218053198} -{"stream":"user_fields","data":{"url":"https://d3v-airbyte.zendesk.com/api/v2/user_fields/7761256026127.json","id":7761256026127,"type":"decimal","key":"test_display_name_decimal_field","title":"test Display Name Decimal field","description":"","raw_title":"test Display Name Decimal field","raw_description":"","position":2,"active":true,"system":false,"regexp_for_validation":null,"created_at":"2023-08-28T10:11:30Z","updated_at":"2023-08-28T10:11:30Z"},"emitted_at":1693218053198} +{"stream": "articles", "data": {"id": 7253351877519, "url": "https://d3v-airbyte.zendesk.com/api/v2/help_center/en-us/articles/7253351877519.json", "html_url": "https://d3v-airbyte.zendesk.com/hc/en-us/articles/7253351877519-Sample-article-Stellar-Skyonomy-refund-policies", "author_id": 360786799676, "comments_disabled": false, "draft": true, "promoted": false, "position": 0, "vote_sum": 0, "vote_count": 0, "section_id": 7253394933775, "created_at": "2023-06-22T00:32:20Z", "updated_at": "2023-06-22T00:32:20Z", "name": "Sample article: Stellar Skyonomy refund policies", "title": "Sample article: Stellar Skyonomy refund policies", "source_locale": "en-us", "locale": "en-us", "outdated": false, "outdated_locales": [], "edited_at": "2023-06-22T00:32:20Z", "user_segment_id": null, "permission_group_id": 7253379449487, "content_tag_ids": [], "label_names": [], "body": "

All Stellar Skyonomy merchandise purchases are backed by our 30-day satisfaction guarantee, no questions asked. We even pay to have it shipped back to us. Additionally, you can cancel your Stellar Skyonomy subscription at any time. Before you cancel, review our refund policies in this article.


Refund policy

We automatically issue a full refund when you initiate a return within 30 days of delivery.

To cancel an annual website subscription you can do so at any time and your refund will be prorated based on the cancellation date.


Request a refund

If you believe you\u2019re eligible for a refund but haven\u2019t received one, contact us by completing a refund request form. We review every refund and aim to respond within two business days.

If you haven't received a refund you're expecting, note that it can take up to 10 business days to appear on your card statement.

"}, "emitted_at": 1697022220884} +{"stream": "articles", "data": {"id": 7253391134863, "url": "https://d3v-airbyte.zendesk.com/api/v2/help_center/en-us/articles/7253391134863.json", "html_url": "https://d3v-airbyte.zendesk.com/hc/en-us/articles/7253391134863-How-can-agents-leverage-knowledge-to-help-customers-", "author_id": 360786799676, "comments_disabled": false, "draft": false, "promoted": false, "position": 0, "vote_sum": 0, "vote_count": 0, "section_id": 7253394947215, "created_at": "2023-06-22T00:32:20Z", "updated_at": "2023-06-22T00:32:20Z", "name": "How can agents leverage knowledge to help customers?", "title": "How can agents leverage knowledge to help customers?", "source_locale": "en-us", "locale": "en-us", "outdated": false, "outdated_locales": [], "edited_at": "2023-06-22T00:32:20Z", "user_segment_id": null, "permission_group_id": 7253379449487, "content_tag_ids": [], "label_names": [], "body": "

You can use our Knowledge Capture app to leverage your team\u2019s collective knowledge.

\n

Using the app, agents can:\n

    \n
  • Search the Help Center without leaving the ticket
  • \n
  • Insert links to relevant Help Center articles in ticket comments
  • \n
  • Add inline feedback to existing articles that need updates
  • \n
  • Create new articles while answering tickets using a pre-defined template
  • \n
\n\n\n

Agents never have to leave the ticket interface to share, flag, or create knowledge, so they can help the customer, while also improving your self-service offerings for other customers.

\n\n

To get started, see our Knowledge Capture documentation.

\n\n

And before your agents can start creating new knowledge directly from tickets, you\u2019ll need to create a template for them to use. To help you along, we\u2019ve provided some template ideas below. You can copy and paste any sample template below into a new article, add the KCTemplate label to the article, and you\u2019ll be all set.

\n\n

Q&A template:

\n\n
\n\n

\n

\n

[Title]

\n\n\n

\n

\n

Question

\nwrite the question here.\n\n\n

\n

\n

Answer

\nwrite the answer here.\n\n\n
\n\n

Solution template:

\n\n
\n\n

\n

\n

[Title]

\n\n\n

\n

\n

Symptoms

\nwrite the symptoms here.\n\n\n

\n

\n

Resolution

\nwrite the resolution here.\n\n\n

\n

\n

Cause

\nwrite the cause here.\n\n\n
\n\n

How-to template:

\n\n
\n\n

\n

\n

[Title]

\n\n\n

\n

\n

Objective

\nwrite the purpose or task here.\n\n\n

\n

\n

Procedure

\nwrite the steps here.\n\n\n
\n"}, "emitted_at": 1697022220885} +{"stream": "articles", "data": {"id": 7253394952591, "url": "https://d3v-airbyte.zendesk.com/api/v2/help_center/en-us/articles/7253394952591.json", "html_url": "https://d3v-airbyte.zendesk.com/hc/en-us/articles/7253394952591-How-do-I-customize-my-Help-Center-", "author_id": 360786799676, "comments_disabled": false, "draft": false, "promoted": false, "position": 0, "vote_sum": 0, "vote_count": 0, "section_id": 7253394947215, "created_at": "2023-06-22T00:32:20Z", "updated_at": "2023-06-22T00:32:20Z", "name": "How do I customize my Help Center?", "title": "How do I customize my Help Center?", "source_locale": "en-us", "locale": "en-us", "outdated": false, "outdated_locales": [], "edited_at": "2023-06-22T00:32:20Z", "user_segment_id": null, "permission_group_id": 7253379449487, "content_tag_ids": [], "label_names": [], "body": "

You can modify the look and feel of your Help Center by changing colors and fonts. See Branding your Help Center to learn how.

\n\n

You can also change the design of your Help Center. If you're comfortable working with page code, you can dig in to the site's HTML, CSS, and Javascript to customize your theme. To get started, see Customizing the Help Center.

"}, "emitted_at": 1697022220885} +{"stream": "article_comments", "data": {"id": 7253381447311, "url": "https://d3v-airbyte.zendesk.com/api/v2/help_center/en-us/articles/7253394935055/comments/7253381447311.json", "body": "

Test comment 2

", "author_id": 360786799676, "source_id": 7253394935055, "source_type": "Article", "html_url": "https://d3v-airbyte.zendesk.com/hc/en-us/articles/7253394935055/comments/7253381447311", "locale": "en-us", "created_at": "2023-06-22T00:33:36Z", "updated_at": "2023-06-22T00:33:42Z", "vote_sum": -1, "vote_count": 1, "non_author_editor_id": null, "non_author_updated_at": null}, "emitted_at": 1697022225469} +{"stream": "article_comments", "data": {"id": 7253366869647, "url": "https://d3v-airbyte.zendesk.com/api/v2/help_center/en-us/articles/7253394935055/comments/7253366869647.json", "body": "

Test comment

", "author_id": 360786799676, "source_id": 7253394935055, "source_type": "Article", "html_url": "https://d3v-airbyte.zendesk.com/hc/en-us/articles/7253394935055/comments/7253366869647", "locale": "en-us", "created_at": "2023-06-22T00:33:29Z", "updated_at": "2023-06-22T00:33:40Z", "vote_sum": 1, "vote_count": 1, "non_author_editor_id": null, "non_author_updated_at": null}, "emitted_at": 1697022225469} +{"stream": "article_comment_votes", "data": {"id": 7253393200655, "url": "https://d3v-airbyte.zendesk.com/api/v2/help_center/votes/7253393200655.json", "user_id": 360786799676, "value": -1, "item_id": 7253381447311, "item_type": "Comment", "created_at": "2023-06-22T00:33:42Z", "updated_at": "2023-06-22T00:33:42Z"}, "emitted_at": 1697022233644} +{"stream": "article_comment_votes", "data": {"id": 7253381522703, "url": "https://d3v-airbyte.zendesk.com/api/v2/help_center/votes/7253381522703.json", "user_id": 360786799676, "value": 1, "item_id": 7253366869647, "item_type": "Comment", "created_at": "2023-06-22T00:33:40Z", "updated_at": "2023-06-22T00:33:40Z"}, "emitted_at": 1697022234091} +{"stream": "article_votes", "data": {"id": 7816935174287, "url": "https://d3v-airbyte.zendesk.com/api/v2/help_center/votes/7816935174287.json", "user_id": 360786799676, "value": 1, "item_id": 7253394935055, "item_type": "Article", "created_at": "2023-09-04T13:52:38Z", "updated_at": "2023-09-04T13:52:38Z"}, "emitted_at": 1697022239106} +{"stream": "article_votes", "data": {"id": 7816935384335, "url": "https://d3v-airbyte.zendesk.com/api/v2/help_center/votes/7816935384335.json", "user_id": 360786799676, "value": 1, "item_id": 7253391120527, "item_type": "Article", "created_at": "2023-09-04T13:52:58Z", "updated_at": "2023-09-04T13:52:58Z"}, "emitted_at": 1697022239480} +{"stream": "audit_logs", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/audit_logs/8077202228367.json", "id": 8077202228367, "action_label": "Deleted", "actor_id": -1, "source_id": 360110774296, "source_type": "voice/recording", "source_label": "Recording: Voice::Recording: Ticket: #123", "action": "update", "change_description": "", "ip_address": "127.0.0.6", "created_at": "2023-10-07T17:16:22Z", "actor_name": "Zendesk"}, "emitted_at": 1697022240928} +{"stream": "audit_logs", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/audit_logs/7979268716687.json", "id": 7979268716687, "action_label": "Signed in", "actor_id": 360786799676, "source_id": 360786799676, "source_type": "user", "source_label": "Team member: Team Airbyte", "action": "login", "change_description": "Successful sign-in using Zendesk password from https://d3v-airbyte.zendesk.com/access/login", "ip_address": "46.223.163.102", "created_at": "2023-09-25T13:03:12Z", "actor_name": "Team Airbyte"}, "emitted_at": 1697022240929} +{"stream": "audit_logs", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/audit_logs/7901951628943.json", "id": 7901951628943, "action_label": "Created", "actor_id": 360786799676, "source_id": 360000047875, "source_type": "voice/address", "source_label": "Talk Addresses: Fake Zendesk 991", "action": "create", "change_description": "", "ip_address": "188.163.104.11", "created_at": "2023-09-15T01:05:27Z", "actor_name": "Team Airbyte"}, "emitted_at": 1697022240929} +{"stream": "group_memberships", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/group_memberships/360007820916.json", "id": 360007820916, "user_id": 360786799676, "group_id": 360003074836, "default": true, "created_at": "2020-12-11T18:34:05Z", "updated_at": "2020-12-11T18:34:05Z"}, "emitted_at": 1697022242044} +{"stream": "group_memberships", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/group_memberships/360011727976.json", "id": 360011727976, "user_id": 361084605116, "group_id": 360003074836, "default": true, "created_at": "2021-04-23T14:33:11Z", "updated_at": "2021-04-23T14:33:11Z"}, "emitted_at": 1697022242044} +{"stream": "group_memberships", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/group_memberships/360011812655.json", "id": 360011812655, "user_id": 361089721035, "group_id": 360003074836, "default": true, "created_at": "2021-04-23T14:34:20Z", "updated_at": "2021-04-23T14:34:20Z"}, "emitted_at": 1697022242045} +{"stream": "groups", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/groups/7282640316815.json", "id": 7282640316815, "is_public": true, "name": "Airbyte Department 1", "description": "A sample department", "default": false, "deleted": false, "created_at": "2023-06-26T10:09:12Z", "updated_at": "2023-06-26T10:09:12Z"}, "emitted_at": 1697022243126} +{"stream": "groups", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/groups/7282618889231.json", "id": 7282618889231, "is_public": true, "name": "Department 1", "description": "A sample department", "default": false, "deleted": false, "created_at": "2023-06-26T10:09:14Z", "updated_at": "2023-06-26T10:09:14Z"}, "emitted_at": 1697022243148} +{"stream": "groups", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/groups/7282630247567.json", "id": 7282630247567, "is_public": true, "name": "Department 2", "description": "A sample department 2", "default": false, "deleted": false, "created_at": "2023-06-26T10:09:14Z", "updated_at": "2023-06-26T10:09:14Z"}, "emitted_at": 1697022243149} +{"stream": "macros", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/macros/360011363556.json", "id": 360011363556, "title": "Customer not responding", "active": true, "updated_at": "2020-12-11T18:34:06Z", "created_at": "2020-12-11T18:34:06Z", "default": false, "position": 9999, "description": null, "actions": [{"field": "status", "value": "pending"}, {"field": "comment_value", "value": "Hello {{ticket.requester.name}}. Our agent {{current_user.name}} has tried to contact you about this request but we haven't heard back from you yet. Please let us know if we can be of further assistance. Thanks. "}], "restriction": null, "raw_title": "Customer not responding"}, "emitted_at": 1697022244316} +{"stream": "macros", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/macros/360011363536.json", "id": 360011363536, "title": "Downgrade and inform", "active": true, "updated_at": "2020-12-11T18:34:06Z", "created_at": "2020-12-11T18:34:06Z", "default": false, "position": 9999, "description": null, "actions": [{"field": "priority", "value": "low"}, {"field": "comment_value", "value": "We're currently experiencing unusually high traffic. We'll get back to you as soon as possible."}], "restriction": null, "raw_title": "Downgrade and inform"}, "emitted_at": 1697022244317} +{"stream": "organizations", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/organizations/360033549136.json", "id": 360033549136, "name": "Airbyte", "shared_tickets": true, "shared_comments": true, "external_id": null, "created_at": "2020-12-11T18:34:05Z", "updated_at": "2023-04-13T14:51:21Z", "domain_names": ["cloud.airbyte.com"], "details": "test", "notes": "test", "group_id": 6770788212111, "tags": ["test"], "organization_fields": {"test_check_box_field_1": false, "test_drop_down_field_1": null, "test_number_field_1": null}, "deleted_at": null}, "emitted_at": 1697022245356} +{"stream": "organization_fields", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/organization_fields/7376684398223.json", "id": 7376684398223, "type": "dropdown", "key": "test_drop_down_field_1", "title": "Test Drop-Down field 1", "description": "Description for a Test Drop-Down field", "raw_title": "Test Drop-Down field 1", "raw_description": "Description for a Test Drop-Down field", "position": 0, "active": true, "system": false, "regexp_for_validation": null, "created_at": "2023-07-10T08:35:43Z", "updated_at": "2023-07-10T08:35:43Z", "custom_field_options": [{"id": 7376695621007, "name": "Test 1", "raw_name": "Test 1", "value": "test_1"}, {"id": 7376695621135, "name": "Test 2", "raw_name": "Test 2", "value": "test_2"}, {"id": 7376695621263, "name": "12", "raw_name": "12", "value": "12"}, {"id": 7376695621391, "name": "154", "raw_name": "154", "value": "154"}]}, "emitted_at": 1697022246427} +{"stream": "organization_fields", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/organization_fields/7376684841999.json", "id": 7376684841999, "type": "integer", "key": "test_number_field_1", "title": "Test Number field 1", "description": "Description for a Test Number field", "raw_title": "Test Number field 1", "raw_description": "Description for a Test Number field", "position": 1, "active": true, "system": false, "regexp_for_validation": null, "created_at": "2023-07-10T08:36:13Z", "updated_at": "2023-07-10T08:36:13Z"}, "emitted_at": 1697022246428} +{"stream": "organization_fields", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/organization_fields/7376673274511.json", "id": 7376673274511, "type": "checkbox", "key": "test_check_box_field_1", "title": "Test Check box field 1", "description": "Description for a Test Check box field", "raw_title": "Test Check box field 1", "raw_description": "Description for a Test Check box field", "position": 2, "active": true, "system": false, "regexp_for_validation": null, "created_at": "2023-07-10T08:36:58Z", "updated_at": "2023-07-10T08:36:58Z", "tag": "check_box_1"}, "emitted_at": 1697022246428} +{"stream": "organization_memberships", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/organization_memberships/360057705196.json", "id": 360057705196, "user_id": 360786799676, "organization_id": 360033549136, "default": true, "created_at": "2020-12-11T18:34:05Z", "organization_name": "Airbyte", "updated_at": "2020-12-11T18:34:05Z", "view_tickets": true}, "emitted_at": 1697022247428} +{"stream": "organization_memberships", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/organization_memberships/7282880134671.json", "id": 7282880134671, "user_id": 7282634891791, "organization_id": 360033549136, "default": true, "created_at": "2023-06-26T11:03:38Z", "organization_name": "Airbyte", "updated_at": "2023-06-26T11:03:38Z", "view_tickets": true}, "emitted_at": 1697022247428} +{"stream": "posts", "data": {"id": 7253351904271, "title": "How do I get around the community?", "details": "

You can use search to find answers. You can also browse topics and posts using views and filters. See Getting around the community.

", "author_id": 360786799676, "vote_sum": 0, "vote_count": 0, "comment_count": 0, "follower_count": 0, "topic_id": 7253351897871, "html_url": "https://d3v-airbyte.zendesk.com/hc/en-us/community/posts/7253351904271-How-do-I-get-around-the-community-", "created_at": "2023-06-22T00:32:21Z", "updated_at": "2023-06-22T00:32:21Z", "url": "https://d3v-airbyte.zendesk.com/api/v2/help_center/community/posts/7253351904271-How-do-I-get-around-the-community-.json", "featured": false, "pinned": false, "closed": false, "frozen": false, "status": "none", "non_author_editor_id": null, "non_author_updated_at": null, "content_tag_ids": []}, "emitted_at": 1697022248118} +{"stream": "posts", "data": {"id": 7253375870607, "title": "Which topics should I add to my community?", "details": "

That depends. If you support several products, you might add a topic for each product. If you have one big product, you might add a topic for each major feature area or task. If you have different types of users (for example, end users and API developers), you might add a topic or topics for each type of user.

A General Discussion topic is a place for users to discuss issues that don't quite fit in the other topics. You could monitor this topic for emerging issues that might need their own topics.

\n\n

To create your own topics, see Adding community discussion topics.

", "author_id": 360786799676, "vote_sum": 0, "vote_count": 0, "comment_count": 0, "follower_count": 0, "topic_id": 7253351897871, "html_url": "https://d3v-airbyte.zendesk.com/hc/en-us/community/posts/7253375870607-Which-topics-should-I-add-to-my-community-", "created_at": "2023-06-22T00:32:21Z", "updated_at": "2023-06-22T00:32:21Z", "url": "https://d3v-airbyte.zendesk.com/api/v2/help_center/community/posts/7253375870607-Which-topics-should-I-add-to-my-community-.json", "featured": false, "pinned": false, "closed": false, "frozen": false, "status": "none", "non_author_editor_id": null, "non_author_updated_at": null, "content_tag_ids": []}, "emitted_at": 1697022248118} +{"stream": "posts", "data": {"id": 7253375879055, "title": "I'd like a way for users to submit feature requests", "details": "

You can add a topic like this one in your community. End users can add feature requests and describe their use cases. Other users can comment on the requests and vote for them. Product managers can review feature requests and provide feedback.

", "author_id": 360786799676, "vote_sum": 0, "vote_count": 0, "comment_count": 0, "follower_count": 0, "topic_id": 7253394974479, "html_url": "https://d3v-airbyte.zendesk.com/hc/en-us/community/posts/7253375879055-I-d-like-a-way-for-users-to-submit-feature-requests", "created_at": "2023-06-22T00:32:21Z", "updated_at": "2023-06-22T00:32:21Z", "url": "https://d3v-airbyte.zendesk.com/api/v2/help_center/community/posts/7253375879055-I-d-like-a-way-for-users-to-submit-feature-requests.json", "featured": false, "pinned": false, "closed": false, "frozen": false, "status": "none", "non_author_editor_id": null, "non_author_updated_at": null, "content_tag_ids": []}, "emitted_at": 1697022248119} +{"stream": "satisfaction_ratings", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/satisfaction_ratings/7235633102607.json", "id": 7235633102607, "assignee_id": null, "group_id": null, "requester_id": 361089721035, "ticket_id": 146, "score": "offered", "created_at": "2023-06-19T18:01:40Z", "updated_at": "2023-06-19T18:01:40Z", "comment": null}, "emitted_at": 1697022256825} +{"stream": "satisfaction_ratings", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/satisfaction_ratings/5909514818319.json", "id": 5909514818319, "assignee_id": null, "group_id": null, "requester_id": 360786799676, "ticket_id": 25, "score": "offered", "created_at": "2022-11-22T17:02:04Z", "updated_at": "2022-11-22T17:02:04Z", "comment": null}, "emitted_at": 1697022256826} +{"stream": "satisfaction_ratings", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/satisfaction_ratings/5527212710799.json", "id": 5527212710799, "assignee_id": null, "group_id": null, "requester_id": 5527080499599, "ticket_id": 144, "score": "offered", "created_at": "2022-09-19T16:01:43Z", "updated_at": "2022-09-19T16:01:43Z", "comment": null}, "emitted_at": 1697022256826} +{"stream": "sla_policies", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/slas/policies/360001110696.json", "id": 360001110696, "title": "test police", "description": "for tests", "position": 1, "filter": {"all": [{"field": "assignee_id", "operator": "is", "value": 361089721035}], "any": []}, "policy_metrics": [{"priority": "high", "metric": "first_reply_time", "target": 61, "business_hours": false}], "created_at": "2021-07-16T11:05:31Z", "updated_at": "2021-07-16T11:05:31Z"}, "emitted_at": 1697022257932} +{"stream": "sla_policies", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/slas/policies/360001113715.json", "id": 360001113715, "title": "test police 2", "description": "test police 2", "position": 2, "filter": {"all": [{"field": "organization_id", "operator": "is", "value": 360033549136}], "any": []}, "policy_metrics": [{"priority": "high", "metric": "first_reply_time", "target": 121, "business_hours": false}], "created_at": "2021-07-16T11:06:01Z", "updated_at": "2021-07-16T11:06:01Z"}, "emitted_at": 1697022257933} +{"stream": "ticket_audits", "data": {"id": 7429253845903, "ticket_id": 152, "created_at": "2023-07-16T12:01:39Z", "author_id": -1, "metadata": {"system": {}, "custom": {}}, "events": [{"id": 7429253846031, "type": "Change", "value": "closed", "field_name": "status", "previous_value": "solved"}], "via": {"channel": "rule", "source": {"to": {}, "from": {"deleted": false, "title": "Close ticket 4 days after status is set to solved", "id": 6241378811151}, "rel": "automation"}}}, "emitted_at": 1697022264212} +{"stream": "ticket_audits", "data": {"id": 7283194465039, "ticket_id": 141, "created_at": "2023-06-26T12:15:34Z", "author_id": 360786799676, "metadata": {"system": {"client": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.58", "ip_address": "85.209.47.207", "location": "Kyiv, 30, Ukraine", "latitude": 50.458, "longitude": 30.5303}, "custom": {}}, "events": [{"id": 7283194465167, "type": "Change", "value": "7282634891791", "field_name": "assignee_id", "previous_value": null}, {"id": 7283194465295, "type": "Change", "value": "360006394556", "field_name": "group_id", "previous_value": null}, {"id": 7283194465423, "type": "Notification", "via": {"channel": "rule", "source": {"from": {"deleted": false, "title": "Notify assignee of assignment", "id": 360011363256, "revision_id": 1}, "rel": "trigger"}}, "subject": "[{{ticket.account}}] Assignment: {{ticket.title}}", "body": "You have been assigned to this ticket (#{{ticket.id}}).\n\n{{ticket.comments_formatted}}", "recipients": [7282634891791]}], "via": {"channel": "web", "source": {"from": {}, "to": {}, "rel": null}}}, "emitted_at": 1697022264213} +{"stream": "ticket_audits", "data": {"id": 7283163099535, "ticket_id": 153, "created_at": "2023-06-26T12:13:42Z", "author_id": 360786799676, "metadata": {"system": {"client": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.58", "ip_address": "85.209.47.207", "location": "Kyiv, 30, Ukraine", "latitude": 50.458, "longitude": 30.5303}, "custom": {}}, "events": [{"id": 7283163099663, "type": "Change", "value": "7282634891791", "field_name": "assignee_id", "previous_value": "360786799676"}, {"id": 7283163099791, "type": "Change", "value": "360006394556", "field_name": "group_id", "previous_value": "6770788212111"}, {"id": 7283163099919, "type": "Notification", "via": {"channel": "rule", "source": {"from": {"deleted": false, "title": "Notify assignee of assignment", "id": 360011363256, "revision_id": 1}, "rel": "trigger"}}, "subject": "[{{ticket.account}}] Assignment: {{ticket.title}}", "body": "You have been assigned to this ticket (#{{ticket.id}}).\n\n{{ticket.comments_formatted}}", "recipients": [7282634891791]}], "via": {"channel": "web", "source": {"from": {}, "to": {}, "rel": null}}}, "emitted_at": 1697022264214} +{"stream": "ticket_comments", "data": {"id": 5162146653071, "via": {"channel": "web", "source": {"from": {}, "to": {"name": "Team Airbyte", "address": "integration-test@airbyte.io"}, "rel": null}}, "via_reference_id": null, "type": "Comment", "author_id": 360786799676, "body": " 163748", "html_body": "
 163748
", "plain_body": " 163748", "public": true, "attachments": [], "audit_id": 5162146652943, "created_at": "2022-07-18T09:58:23Z", "event_type": "Comment", "ticket_id": 124, "timestamp": 1658138303}, "emitted_at": 1697022266588} +{"stream": "ticket_comments", "data": {"id": 5162208963983, "via": {"channel": "web", "source": {"from": {}, "to": {}, "rel": null}}, "via_reference_id": null, "type": "Comment", "author_id": 360786799676, "body": "238473846", "html_body": "
238473846
", "plain_body": "238473846", "public": false, "attachments": [], "audit_id": 5162208963855, "created_at": "2022-07-18T10:16:53Z", "event_type": "Comment", "ticket_id": 125, "timestamp": 1658139413}, "emitted_at": 1697022266588} +{"stream": "ticket_comments", "data": {"id": 5162223308559, "via": {"channel": "web", "source": {"from": {}, "to": {}, "rel": null}}, "via_reference_id": null, "type": "Comment", "author_id": 360786799676, "body": "Airbyte", "html_body": "", "plain_body": "Airbyte", "public": false, "attachments": [], "audit_id": 5162223308431, "created_at": "2022-07-18T10:25:21Z", "event_type": "Comment", "ticket_id": 125, "timestamp": 1658139921}, "emitted_at": 1697022266589} +{"stream": "ticket_fields", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/ticket_fields/360002833076.json", "id": 360002833076, "type": "subject", "title": "Subject", "raw_title": "Subject", "description": "", "raw_description": "", "position": 1, "active": true, "required": false, "collapsed_for_agents": false, "regexp_for_validation": null, "title_in_portal": "Subject", "raw_title_in_portal": "Subject", "visible_in_portal": true, "editable_in_portal": true, "required_in_portal": true, "tag": null, "created_at": "2020-12-11T18:34:05Z", "updated_at": "2020-12-11T18:34:05Z", "removable": false, "key": null, "agent_description": null}, "emitted_at": 1697022268293} +{"stream": "ticket_fields", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/ticket_fields/360002833096.json", "id": 360002833096, "type": "description", "title": "Description", "raw_title": "Description", "description": "Please enter the details of your request. A member of our support staff will respond as soon as possible.", "raw_description": "Please enter the details of your request. A member of our support staff will respond as soon as possible.", "position": 2, "active": true, "required": false, "collapsed_for_agents": false, "regexp_for_validation": null, "title_in_portal": "Description", "raw_title_in_portal": "Description", "visible_in_portal": true, "editable_in_portal": true, "required_in_portal": true, "tag": null, "created_at": "2020-12-11T18:34:05Z", "updated_at": "2020-12-11T18:34:05Z", "removable": false, "key": null, "agent_description": null}, "emitted_at": 1697022268294} +{"stream": "ticket_fields", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/ticket_fields/360002833116.json", "id": 360002833116, "type": "status", "title": "Status", "raw_title": "Status", "description": "Request status", "raw_description": "Request status", "position": 3, "active": true, "required": false, "collapsed_for_agents": false, "regexp_for_validation": null, "title_in_portal": "Status", "raw_title_in_portal": "Status", "visible_in_portal": false, "editable_in_portal": false, "required_in_portal": false, "tag": null, "created_at": "2020-12-11T18:34:05Z", "updated_at": "2020-12-11T18:34:05Z", "removable": false, "key": null, "agent_description": null, "system_field_options": [{"name": "Open", "value": "open"}, {"name": "Pending", "value": "pending"}, {"name": "Solved", "value": "solved"}], "sub_type_id": 0}, "emitted_at": 1697022268295} +{"stream": "ticket_metrics", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/ticket_metrics/7283000498191.json", "id": 7283000498191, "ticket_id": 153, "created_at": "2023-06-26T11:31:48Z", "updated_at": "2023-06-26T12:13:42Z", "group_stations": 2, "assignee_stations": 2, "reopens": 0, "replies": 0, "assignee_updated_at": "2023-06-26T11:31:48Z", "requester_updated_at": "2023-06-26T11:31:48Z", "status_updated_at": "2023-06-26T11:31:48Z", "initially_assigned_at": "2023-06-26T11:31:48Z", "assigned_at": "2023-06-26T12:13:42Z", "solved_at": null, "latest_comment_added_at": "2023-06-26T11:31:48Z", "reply_time_in_minutes": {"calendar": null, "business": null}, "first_resolution_time_in_minutes": {"calendar": null, "business": null}, "full_resolution_time_in_minutes": {"calendar": null, "business": null}, "agent_wait_time_in_minutes": {"calendar": null, "business": null}, "requester_wait_time_in_minutes": {"calendar": null, "business": null}, "on_hold_time_in_minutes": {"calendar": 0, "business": 0}, "custom_status_updated_at": "2023-06-26T11:31:48Z"}, "emitted_at": 1697022269422} +{"stream": "ticket_metrics", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/ticket_metrics/7282909551759.json", "id": 7282909551759, "ticket_id": 152, "created_at": "2023-06-26T11:10:33Z", "updated_at": "2023-06-26T11:25:43Z", "group_stations": 1, "assignee_stations": 1, "reopens": 0, "replies": 1, "assignee_updated_at": "2023-06-26T11:25:43Z", "requester_updated_at": "2023-06-26T11:10:33Z", "status_updated_at": "2023-07-16T12:01:39Z", "initially_assigned_at": "2023-06-26T11:10:33Z", "assigned_at": "2023-06-26T11:10:33Z", "solved_at": "2023-06-26T11:25:43Z", "latest_comment_added_at": "2023-06-26T11:21:06Z", "reply_time_in_minutes": {"calendar": 11, "business": 0}, "first_resolution_time_in_minutes": {"calendar": 15, "business": 0}, "full_resolution_time_in_minutes": {"calendar": 15, "business": 0}, "agent_wait_time_in_minutes": {"calendar": 15, "business": 0}, "requester_wait_time_in_minutes": {"calendar": 0, "business": 0}, "on_hold_time_in_minutes": {"calendar": 0, "business": 0}, "custom_status_updated_at": "2023-06-26T11:25:43Z"}, "emitted_at": 1697022269423} +{"stream": "ticket_metrics", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/ticket_metrics/7282901696015.json", "id": 7282901696015, "ticket_id": 151, "created_at": "2023-06-26T11:09:33Z", "updated_at": "2023-06-26T12:03:38Z", "group_stations": 1, "assignee_stations": 1, "reopens": 0, "replies": 1, "assignee_updated_at": "2023-06-26T12:03:37Z", "requester_updated_at": "2023-06-26T11:09:33Z", "status_updated_at": "2023-06-26T11:09:33Z", "initially_assigned_at": "2023-06-26T11:09:33Z", "assigned_at": "2023-06-26T11:09:33Z", "solved_at": null, "latest_comment_added_at": "2023-06-26T12:03:37Z", "reply_time_in_minutes": {"calendar": 54, "business": 0}, "first_resolution_time_in_minutes": {"calendar": null, "business": null}, "full_resolution_time_in_minutes": {"calendar": null, "business": null}, "agent_wait_time_in_minutes": {"calendar": null, "business": null}, "requester_wait_time_in_minutes": {"calendar": null, "business": null}, "on_hold_time_in_minutes": {"calendar": 0, "business": 0}, "custom_status_updated_at": "2023-06-26T11:09:33Z"}, "emitted_at": 1697022269424} +{"stream": "ticket_metric_events", "data": {"id": 4992797383183, "ticket_id": 121, "metric": "agent_work_time", "instance_id": 0, "type": "measure", "time": "2022-06-17T14:49:20Z"}, "emitted_at": 1697022270647} +{"stream": "ticket_metric_events", "data": {"id": 4992797383311, "ticket_id": 121, "metric": "pausable_update_time", "instance_id": 0, "type": "measure", "time": "2022-06-17T14:49:20Z"}, "emitted_at": 1697022270647} +{"stream": "ticket_metric_events", "data": {"id": 4992797383439, "ticket_id": 121, "metric": "reply_time", "instance_id": 0, "type": "measure", "time": "2022-06-17T14:49:20Z"}, "emitted_at": 1697022270648} +{"stream": "ticket_skips", "data": {"id": 7290033348623, "ticket_id": 121, "user_id": 360786799676, "reason": "I have no idea.", "created_at": "2023-06-27T08:24:02Z", "updated_at": "2023-06-27T08:24:02Z", "ticket": {"url": "https://d3v-airbyte.zendesk.com/api/v2/tickets/121.json", "id": 121, "external_id": null, "via": {"channel": "voice", "source": {"rel": "voicemail", "from": {"formatted_phone": "+1 (689) 689-8023", "phone": "+16896898023", "name": "Caller +1 (689) 689-8023"}, "to": {"formatted_phone": "+1 (205) 953-1462", "phone": "+12059531462", "name": "Airbyte", "brand_id": 360000358316}}}, "created_at": "2022-06-17T14:49:20Z", "updated_at": "2022-06-17T16:01:42Z", "type": null, "subject": "Voicemail from: Caller +1 (689) 689-8023", "raw_subject": "Voicemail from: Caller +1 (689) 689-8023", "description": "Call from: +1 (689) 689-8023\\nTime of call: June 17, 2022 at 2:48:27 PM", "priority": null, "status": "new", "recipient": null, "requester_id": 4992781783439, "submitter_id": 4992781783439, "assignee_id": null, "organization_id": null, "group_id": null, "collaborator_ids": [], "follower_ids": [], "email_cc_ids": [], "forum_topic_id": null, "problem_id": null, "has_incidents": false, "is_public": false, "due_at": null, "tags": [], "custom_fields": [], "satisfaction_rating": {"score": "offered"}, "sharing_agreement_ids": [], "custom_status_id": 4044356, "fields": [], "followup_ids": [], "ticket_form_id": 360000084116, "deleted_ticket_form_id": null, "brand_id": 360000358316, "allow_channelback": false, "allow_attachments": true, "from_messaging_channel": false}}, "emitted_at": 1697022271782} +{"stream": "ticket_skips", "data": {"id": 7290088475023, "ticket_id": 125, "user_id": 360786799676, "reason": "Another test skip.", "created_at": "2023-06-27T08:30:01Z", "updated_at": "2023-06-27T08:30:01Z", "ticket": {"url": "https://d3v-airbyte.zendesk.com/api/v2/tickets/125.json", "id": 125, "external_id": null, "via": {"channel": "web", "source": {"from": {}, "to": {}, "rel": null}}, "created_at": "2022-07-18T10:16:53Z", "updated_at": "2022-07-18T10:36:02Z", "type": "question", "subject": "Ticket Test 2", "raw_subject": "Ticket Test 2", "description": "238473846", "priority": "urgent", "status": "open", "recipient": null, "requester_id": 360786799676, "submitter_id": 360786799676, "assignee_id": 361089721035, "organization_id": 360033549136, "group_id": 5059439464079, "collaborator_ids": [360786799676], "follower_ids": [360786799676], "email_cc_ids": [], "forum_topic_id": null, "problem_id": null, "has_incidents": false, "is_public": false, "due_at": null, "tags": [], "custom_fields": [], "satisfaction_rating": {"score": "unoffered"}, "sharing_agreement_ids": [], "custom_status_id": 4044376, "fields": [], "followup_ids": [], "ticket_form_id": 360000084116, "deleted_ticket_form_id": null, "brand_id": 360000358316, "allow_channelback": false, "allow_attachments": true, "from_messaging_channel": false}}, "emitted_at": 1697022271783} +{"stream": "tickets", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/tickets/121.json", "id": 121, "external_id": null, "via": {"channel": "voice", "source": {"rel": "voicemail", "from": {"formatted_phone": "+1 (689) 689-8023", "phone": "+16896898023", "name": "Caller +1 (689) 689-8023"}, "to": {"formatted_phone": "+1 (205) 953-1462", "phone": "+12059531462", "name": "Airbyte", "brand_id": 360000358316}}}, "created_at": "2022-06-17T14:49:20Z", "updated_at": "2022-06-17T16:01:42Z", "type": null, "subject": "Voicemail from: Caller +1 (689) 689-8023", "raw_subject": "Voicemail from: Caller +1 (689) 689-8023", "description": "Call from: +1 (689) 689-8023\\nTime of call: June 17, 2022 at 2:48:27 PM", "priority": null, "status": "new", "recipient": null, "requester_id": 4992781783439, "submitter_id": 4992781783439, "assignee_id": null, "organization_id": null, "group_id": null, "collaborator_ids": [], "follower_ids": [], "email_cc_ids": [], "forum_topic_id": null, "problem_id": null, "has_incidents": false, "is_public": false, "due_at": null, "tags": [], "custom_fields": [], "satisfaction_rating": {"score": "offered"}, "sharing_agreement_ids": [], "custom_status_id": 4044356, "fields": [], "followup_ids": [], "ticket_form_id": 360000084116, "brand_id": 360000358316, "allow_channelback": false, "allow_attachments": true, "from_messaging_channel": false, "generated_timestamp": 1655481702}, "emitted_at": 1697022273332} +{"stream": "tickets", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/tickets/122.json", "id": 122, "external_id": null, "via": {"channel": "voice", "source": {"rel": "voicemail", "from": {"formatted_phone": "+1 (912) 420-0314", "phone": "+19124200314", "name": "Caller +1 (912) 420-0314"}, "to": {"formatted_phone": "+1 (205) 953-1462", "phone": "+12059531462", "name": "Airbyte", "brand_id": 360000358316}}}, "created_at": "2022-06-17T19:52:39Z", "updated_at": "2022-06-17T21:01:41Z", "type": null, "subject": "Voicemail from: Caller +1 (912) 420-0314", "raw_subject": "Voicemail from: Caller +1 (912) 420-0314", "description": "Call from: +1 (912) 420-0314\\nTime of call: June 17, 2022 at 7:52:02 PM", "priority": null, "status": "new", "recipient": null, "requester_id": 4993467856015, "submitter_id": 4993467856015, "assignee_id": null, "organization_id": null, "group_id": null, "collaborator_ids": [], "follower_ids": [], "email_cc_ids": [], "forum_topic_id": null, "problem_id": null, "has_incidents": false, "is_public": false, "due_at": null, "tags": [], "custom_fields": [], "satisfaction_rating": {"score": "offered"}, "sharing_agreement_ids": [], "custom_status_id": 4044356, "fields": [], "followup_ids": [], "ticket_form_id": 360000084116, "brand_id": 360000358316, "allow_channelback": false, "allow_attachments": true, "from_messaging_channel": false, "generated_timestamp": 1655499701}, "emitted_at": 1697022273334} +{"stream": "tickets", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/tickets/125.json", "id": 125, "external_id": null, "via": {"channel": "web", "source": {"from": {}, "to": {}, "rel": null}}, "created_at": "2022-07-18T10:16:53Z", "updated_at": "2022-07-18T10:36:02Z", "type": "question", "subject": "Ticket Test 2", "raw_subject": "Ticket Test 2", "description": "238473846", "priority": "urgent", "status": "open", "recipient": null, "requester_id": 360786799676, "submitter_id": 360786799676, "assignee_id": 361089721035, "organization_id": 360033549136, "group_id": 5059439464079, "collaborator_ids": [360786799676], "follower_ids": [360786799676], "email_cc_ids": [], "forum_topic_id": null, "problem_id": null, "has_incidents": false, "is_public": false, "due_at": null, "tags": [], "custom_fields": [], "satisfaction_rating": {"score": "unoffered"}, "sharing_agreement_ids": [], "custom_status_id": 4044376, "fields": [], "followup_ids": [], "ticket_form_id": 360000084116, "brand_id": 360000358316, "allow_channelback": false, "allow_attachments": true, "from_messaging_channel": false, "generated_timestamp": 1658140562}, "emitted_at": 1697022273335} +{"stream": "topics", "data": {"id": 7253394974479, "url": "https://d3v-airbyte.zendesk.com/api/v2/help_center/community/topics/7253394974479.json", "html_url": "https://d3v-airbyte.zendesk.com/hc/en-us/community/topics/7253394974479-Feature-Requests", "name": "Feature Requests", "description": null, "position": 0, "follower_count": 1, "community_id": 7253391140495, "created_at": "2023-06-22T00:32:21Z", "updated_at": "2023-06-22T00:32:21Z", "manageable_by": "managers", "user_segment_id": null}, "emitted_at": 1697022274540} +{"stream": "topics", "data": {"id": 7253351897871, "url": "https://d3v-airbyte.zendesk.com/api/v2/help_center/community/topics/7253351897871.json", "html_url": "https://d3v-airbyte.zendesk.com/hc/en-us/community/topics/7253351897871-General-Discussion", "name": "General Discussion", "description": null, "position": 0, "follower_count": 1, "community_id": 7253391140495, "created_at": "2023-06-22T00:32:20Z", "updated_at": "2023-06-22T00:32:20Z", "manageable_by": "managers", "user_segment_id": null}, "emitted_at": 1697022274541} +{"stream": "users", "data": {"id": 4992781783439, "url": "https://d3v-airbyte.zendesk.com/api/v2/users/4992781783439.json", "name": "Caller +1 (689) 689-8023", "email": null, "created_at": "2022-06-17T14:49:19Z", "updated_at": "2022-06-17T14:49:19Z", "time_zone": "Pacific/Noumea", "iana_time_zone": "Pacific/Noumea", "phone": "+16896898023", "shared_phone_number": false, "photo": null, "locale_id": 1, "locale": "en-US", "organization_id": null, "role": "end-user", "verified": true, "external_id": null, "tags": [], "alias": null, "active": true, "shared": false, "shared_agent": false, "last_login_at": null, "two_factor_auth_enabled": false, "signature": null, "details": null, "notes": null, "role_type": null, "custom_role_id": null, "moderator": false, "ticket_restriction": "requested", "only_private_comments": false, "restricted_agent": true, "suspended": false, "default_group_id": null, "report_csv": false, "user_fields": {"test_display_name_checkbox_field": false, "test_display_name_decimal_field": null, "test_display_name_text_field": null}}, "emitted_at": 1697022279166} +{"stream": "users", "data": {"id": 4993467856015, "url": "https://d3v-airbyte.zendesk.com/api/v2/users/4993467856015.json", "name": "Caller +1 (912) 420-0314", "email": null, "created_at": "2022-06-17T19:52:38Z", "updated_at": "2022-06-17T19:52:38Z", "time_zone": "Pacific/Noumea", "iana_time_zone": "Pacific/Noumea", "phone": "+19124200314", "shared_phone_number": false, "photo": null, "locale_id": 1, "locale": "en-US", "organization_id": null, "role": "end-user", "verified": true, "external_id": null, "tags": [], "alias": null, "active": true, "shared": false, "shared_agent": false, "last_login_at": null, "two_factor_auth_enabled": false, "signature": null, "details": null, "notes": null, "role_type": null, "custom_role_id": null, "moderator": false, "ticket_restriction": "requested", "only_private_comments": false, "restricted_agent": true, "suspended": false, "default_group_id": null, "report_csv": false, "user_fields": {"test_display_name_checkbox_field": false, "test_display_name_decimal_field": null, "test_display_name_text_field": null}}, "emitted_at": 1697022279167} +{"stream": "users", "data": {"id": 5137812260495, "url": "https://d3v-airbyte.zendesk.com/api/v2/users/5137812260495.json", "name": "Caller +1 (607) 210-9549", "email": null, "created_at": "2022-07-13T14:34:04Z", "updated_at": "2022-07-13T14:34:04Z", "time_zone": "Pacific/Noumea", "iana_time_zone": "Pacific/Noumea", "phone": "+16072109549", "shared_phone_number": false, "photo": null, "locale_id": 1, "locale": "en-US", "organization_id": null, "role": "end-user", "verified": true, "external_id": null, "tags": [], "alias": null, "active": true, "shared": false, "shared_agent": false, "last_login_at": null, "two_factor_auth_enabled": false, "signature": null, "details": null, "notes": null, "role_type": null, "custom_role_id": null, "moderator": false, "ticket_restriction": "requested", "only_private_comments": false, "restricted_agent": true, "suspended": false, "default_group_id": null, "report_csv": false, "user_fields": {"test_display_name_checkbox_field": false, "test_display_name_decimal_field": null, "test_display_name_text_field": null}}, "emitted_at": 1697022279167} +{"stream": "brands", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/brands/360000358316.json", "id": 360000358316, "name": "Airbyte", "brand_url": "https://d3v-airbyte.zendesk.com", "subdomain": "d3v-airbyte", "host_mapping": null, "has_help_center": true, "help_center_state": "enabled", "active": true, "default": true, "is_deleted": false, "logo": null, "ticket_form_ids": [360000084116], "signature_template": "{{agent.signature}}", "created_at": "2020-12-11T18:34:04Z", "updated_at": "2020-12-11T18:34:09Z"}, "emitted_at": 1697022280535} +{"stream": "custom_roles", "data": {"id": 360000210636, "name": "Advisor", "description": "Can automate ticket workflows, manage channels and make private comments on tickets", "role_type": 0, "created_at": "2020-12-11T18:34:36Z", "updated_at": "2020-12-11T18:34:36Z", "configuration": {"chat_access": true, "end_user_list_access": "full", "forum_access_restricted_content": false, "light_agent": false, "manage_business_rules": true, "manage_dynamic_content": false, "manage_extensions_and_channels": true, "manage_facebook": true, "moderate_forums": false, "side_conversation_create": true, "ticket_access": "within-groups", "ticket_comment_access": "none", "ticket_deletion": false, "ticket_tag_editing": true, "twitter_search_access": false, "view_deleted_tickets": false, "voice_access": true, "group_access": false, "organization_editing": false, "organization_notes_editing": false, "assign_tickets_to_any_group": false, "end_user_profile_access": "readonly", "explore_access": "readonly", "forum_access": "readonly", "macro_access": "full", "report_access": "none", "ticket_editing": true, "ticket_merge": false, "user_view_access": "full", "view_access": "full", "voice_dashboard_access": false, "manage_automations": true, "manage_contextual_workspaces": false, "manage_organization_fields": false, "manage_skills": true, "manage_slas": true, "manage_ticket_fields": false, "manage_ticket_forms": false, "manage_user_fields": false, "ticket_redaction": false, "manage_roles": "none", "manage_groups": false, "manage_group_memberships": false, "manage_organizations": false, "manage_suspended_tickets": false, "manage_triggers": true, "view_reduced_count": false, "view_filter_tickets": true, "custom_objects": {}}, "team_member_count": 1}, "emitted_at": 1697022281914} +{"stream": "custom_roles", "data": {"id": 360000210596, "name": "Staff", "description": "Can edit tickets within their groups", "role_type": 0, "created_at": "2020-12-11T18:34:36Z", "updated_at": "2020-12-11T18:34:36Z", "configuration": {"chat_access": true, "end_user_list_access": "full", "forum_access_restricted_content": false, "light_agent": false, "manage_business_rules": false, "manage_dynamic_content": false, "manage_extensions_and_channels": false, "manage_facebook": false, "moderate_forums": false, "side_conversation_create": true, "ticket_access": "within-groups", "ticket_comment_access": "public", "ticket_deletion": false, "ticket_tag_editing": false, "twitter_search_access": false, "view_deleted_tickets": false, "voice_access": true, "group_access": false, "organization_editing": false, "organization_notes_editing": false, "assign_tickets_to_any_group": false, "end_user_profile_access": "readonly", "explore_access": "readonly", "forum_access": "readonly", "macro_access": "manage-personal", "report_access": "readonly", "ticket_editing": true, "ticket_merge": false, "user_view_access": "manage-personal", "view_access": "manage-personal", "voice_dashboard_access": false, "manage_automations": false, "manage_contextual_workspaces": false, "manage_organization_fields": false, "manage_skills": false, "manage_slas": false, "manage_ticket_fields": false, "manage_ticket_forms": false, "manage_user_fields": false, "ticket_redaction": false, "manage_roles": "none", "manage_groups": false, "manage_group_memberships": false, "manage_organizations": false, "manage_suspended_tickets": false, "manage_triggers": false, "view_reduced_count": false, "view_filter_tickets": true, "custom_objects": {}}, "team_member_count": 1}, "emitted_at": 1697022281915} +{"stream": "custom_roles", "data": {"id": 360000210616, "name": "Team lead", "description": "Can manage all tickets and forums", "role_type": 0, "created_at": "2020-12-11T18:34:36Z", "updated_at": "2023-06-26T11:06:24Z", "configuration": {"chat_access": true, "end_user_list_access": "full", "forum_access_restricted_content": false, "light_agent": false, "manage_business_rules": true, "manage_dynamic_content": true, "manage_extensions_and_channels": true, "manage_facebook": true, "moderate_forums": false, "side_conversation_create": true, "ticket_access": "all", "ticket_comment_access": "public", "ticket_deletion": true, "ticket_tag_editing": true, "twitter_search_access": false, "view_deleted_tickets": true, "voice_access": true, "group_access": true, "organization_editing": true, "organization_notes_editing": true, "assign_tickets_to_any_group": false, "end_user_profile_access": "full", "explore_access": "edit", "forum_access": "full", "macro_access": "full", "report_access": "full", "ticket_editing": true, "ticket_merge": true, "user_view_access": "full", "view_access": "playonly", "voice_dashboard_access": true, "manage_automations": true, "manage_contextual_workspaces": true, "manage_organization_fields": true, "manage_skills": true, "manage_slas": true, "manage_ticket_fields": true, "manage_ticket_forms": true, "manage_user_fields": true, "ticket_redaction": true, "manage_roles": "all-except-self", "manage_groups": true, "manage_group_memberships": true, "manage_organizations": true, "manage_suspended_tickets": true, "manage_triggers": true, "view_reduced_count": false, "view_filter_tickets": true, "custom_objects": {}}, "team_member_count": 2}, "emitted_at": 1697022281915} +{"stream": "schedules", "data": {"id": 4567312249615, "name": "Test Schedule", "time_zone": "New Caledonia", "created_at": "2022-03-25T10:23:34Z", "updated_at": "2022-03-25T10:23:34Z", "intervals": [{"start_time": 1980, "end_time": 2460}, {"start_time": 3420, "end_time": 3900}, {"start_time": 4860, "end_time": 5340}, {"start_time": 6300, "end_time": 6780}, {"start_time": 7740, "end_time": 8220}]}, "emitted_at": 1697022283007} +{"stream": "user_fields", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/user_fields/7761239926287.json", "id": 7761239926287, "type": "text", "key": "test_display_name_text_field", "title": "test Display Name text field", "description": "test Display Name text field", "raw_title": "test Display Name text field", "raw_description": "test Display Name text field", "position": 0, "active": true, "system": false, "regexp_for_validation": null, "created_at": "2023-08-28T10:10:46Z", "updated_at": "2023-08-28T10:10:46Z"}, "emitted_at": 1697022283972} +{"stream": "user_fields", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/user_fields/7761264848527.json", "id": 7761264848527, "type": "checkbox", "key": "test_display_name_checkbox_field", "title": "test Display Name Checkbox field", "description": "", "raw_title": "test Display Name Checkbox field", "raw_description": "", "position": 1, "active": true, "system": false, "regexp_for_validation": null, "created_at": "2023-08-28T10:11:16Z", "updated_at": "2023-08-28T10:11:16Z", "tag": null}, "emitted_at": 1697022283973} +{"stream": "user_fields", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/user_fields/7761256026127.json", "id": 7761256026127, "type": "decimal", "key": "test_display_name_decimal_field", "title": "test Display Name Decimal field", "description": "", "raw_title": "test Display Name Decimal field", "raw_description": "", "position": 2, "active": true, "system": false, "regexp_for_validation": null, "created_at": "2023-08-28T10:11:30Z", "updated_at": "2023-08-28T10:11:30Z"}, "emitted_at": 1697022283973} +{"stream": "ticket_forms", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/ticket_forms/360000084116.json", "name": "Default Ticket Form", "display_name": "Default Ticket Form", "id": 360000084116, "raw_name": "Default Ticket Form", "raw_display_name": "Default Ticket Form", "end_user_visible": true, "position": 1, "ticket_field_ids": [360002833076, 360002833096, 360002833116, 360002833136, 360002833156, 360002833176, 360002833196], "active": true, "default": true, "created_at": "2020-12-11T18:34:37Z", "updated_at": "2020-12-11T18:34:37Z", "in_all_brands": true, "restricted_brand_ids": [], "end_user_conditions": [], "agent_conditions": []}, "emitted_at": 1697022284889} +{"stream": "account_attributes", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/routing/attributes/ac43b460-0ebd-11ee-85a3-4750db6aa722.json", "id": "ac43b460-0ebd-11ee-85a3-4750db6aa722", "name": "Language", "created_at": "2023-06-19T16:23:49Z", "updated_at": "2023-06-19T16:23:49Z"}, "emitted_at": 1697022285821} +{"stream": "account_attributes", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/routing/attributes/c15cdb76-0ebd-11ee-a37f-f315f48c0150.json", "id": "c15cdb76-0ebd-11ee-a37f-f315f48c0150", "name": "Quality", "created_at": "2023-06-19T16:24:25Z", "updated_at": "2023-06-19T16:24:25Z"}, "emitted_at": 1697022285821} +{"stream": "attribute_definitions", "data": {"title": "Number of incidents", "subject": "number_of_incidents", "type": "text", "group": "ticket", "nullable": false, "repeatable": false, "operators": [{"value": "less_than", "title": "Less than", "terminal": false}, {"value": "greater_than", "title": "Greater than", "terminal": false}, {"value": "is", "title": "Is", "terminal": false}, {"value": "less_than_equal", "title": "Less than or equal to", "terminal": false}, {"value": "greater_than_equal", "title": "Greater than or equal to", "terminal": false}], "condition": "all"}, "emitted_at": 1697022287749} +{"stream": "attribute_definitions", "data": {"title": "Brand", "subject": "brand_id", "type": "list", "group": "ticket", "nullable": false, "repeatable": false, "operators": [{"value": "is", "title": "Is", "terminal": false}, {"value": "is_not", "title": "Is not", "terminal": false}], "values": [{"value": "360000358316", "title": "Airbyte", "enabled": true}], "condition": "all"}, "emitted_at": 1697022287750} +{"stream": "attribute_definitions", "data": {"title": "Form", "subject": "ticket_form_id", "type": "list", "group": "ticket", "nullable": false, "repeatable": false, "operators": [{"value": "is", "title": "Is", "terminal": false}, {"value": "is_not", "title": "Is not", "terminal": false}], "values": [{"value": "360000084116", "title": "Default Ticket Form", "enabled": true}], "condition": "all"}, "emitted_at": 1697022287750} diff --git a/build.gradle b/build.gradle index c2d521a76d9a..9e73ca2a0569 100644 --- a/build.gradle +++ b/build.gradle @@ -159,6 +159,18 @@ python { envPath = '.venv' minPythonVersion = '3.10' // should be 3.10 for local development + // Amazon Linux support. + // The airbyte-ci tool runs gradle tasks in AL2023-based containers. + // In AL2023, `python3` is necessarily v3.9, and later pythons need to be installed and named explicitly. + // See https://github.com/amazonlinux/amazon-linux-2023/issues/459 for details. + try { + if ("python3.11 --version".execute().waitFor() == 0) { + // python3.11 definitely exists at this point, use it instead of 'python3'. + pythonBinary "python3.11" + } + } catch (IOException _) { + // Swallow exception if python3.11 is not installed. + } // Pyenv support. try { def pyenvRoot = "pyenv root".execute() @@ -545,6 +557,8 @@ subprojects { subproj -> } } + systemProperty 'user.timezone', 'UTC' + if (rootProject.ext.skipSlowTests) { // Exclude all connector unit tests exclude '**/io/airbyte/integrations/source/**' diff --git a/buildSrc/src/main/groovy/airbyte-python.gradle b/buildSrc/src/main/groovy/airbyte-python.gradle index b0be7c885051..03bdb06b7b8b 100644 --- a/buildSrc/src/main/groovy/airbyte-python.gradle +++ b/buildSrc/src/main/groovy/airbyte-python.gradle @@ -80,6 +80,18 @@ class AirbytePythonPlugin implements Plugin { envPath = venvDirectoryName minPythonVersion '3.10' + // Amazon Linux support. + // The airbyte-ci tool runs gradle tasks in AL2023-based containers. + // In AL2023, `python3` is necessarily v3.9, and later pythons need to be installed and named explicitly. + // See https://github.com/amazonlinux/amazon-linux-2023/issues/459 for details. + try { + if ("python3.11 --version".execute().waitFor() == 0) { + // python3.11 definitely exists at this point, use it instead of 'python3'. + pythonBinary "python3.11" + } + } catch (IOException _) { + // Swallow exception if python3.11 is not installed. + } // Pyenv support. try { def pyenvRoot = "pyenv root".execute() diff --git a/docs/.gitbook/assets/source/airtable/add_scopes.png b/docs/.gitbook/assets/source/airtable/add_scopes.png new file mode 100644 index 000000000000..280b6dd0b8e3 Binary files /dev/null and b/docs/.gitbook/assets/source/airtable/add_scopes.png differ diff --git a/docs/.gitbook/assets/source/airtable/generate_new_token.png b/docs/.gitbook/assets/source/airtable/generate_new_token.png new file mode 100644 index 000000000000..3173805f3a97 Binary files /dev/null and b/docs/.gitbook/assets/source/airtable/generate_new_token.png differ diff --git a/docs/airbyte-enterprise.md b/docs/airbyte-enterprise.md index 158683a3e702..d717cd41d3ef 100644 --- a/docs/airbyte-enterprise.md +++ b/docs/airbyte-enterprise.md @@ -1,16 +1,14 @@ # Airbyte Enterprise -Airbyte Enterprise is a self-hosted version of Airbyte with additional features for enterprise customers. Airbyte Enterprise is currently in early development. Interested in Airbyte Enterprise for your organization? [Learn more](https://airbyte.com/solutions/airbyte-enterprise). +[Airbyte Enterprise](https://airbyte.com/solutions/airbyte-enterprise) is a self-managed version of Airbyte with additional features for enterprise customers. Airbyte Enterprise is in an early access stage for select priority users. A valid license key is required to get started with Airbyte Enterprise. [Talk to sales](https://airbyte.com/company/talk-to-sales) to receive your license key. -## Airbyte Enterprise License Key - -A valid license key is required for Airbyte Enterprise. Talk to your Sales Representative to receive your license key before installing Airbyte Enterprise. +The following instructions outline how to: +1. Configure Okta for Single Sign-On (SSO) with Airbyte Enterprise +2. Deploy Airbyte Enterprise using Kubernetes (License Key Required) ## Single Sign-On (SSO) -Airbyte Enterprise supports Single Sign-On, allowing an organization to manage user acces to their Airbyte Enterprise instance through the configuration of an Identity Provider (IdP). - -Airbyte Enterprise currently supports SSO via OIDC with [Okta](https://www.okta.com/) as an IdP. +Airbyte Enterprise supports Single Sign-On, allowing an organization to manage user access to their Airbyte Enterprise instance through the configuration of an Identity Provider (IdP). Airbyte Enterprise currently supports SSO via OIDC with [Okta](https://www.okta.com/) as an IdP. ### Setting up Okta for SSO @@ -50,9 +48,9 @@ _Example values_ `` should point to where your Airbyte instance will be available, including the http/https protocol. -#### Deploying Airbyte Enterprise with Okta +## Deploying Airbyte Enterprise with Okta -Your Okta app is now set up and you're ready to deploy Airbyte with SSO! Take note of the following configuration values, as you will need them to configure Airbyte to use your new Okta SSO app integration: +Once your Okta app is set up, you're ready to deploy Airbyte with SSO. Take note of the following configuration values, as you will need them to configure Airbyte to use your new Okta SSO app integration: - Okta domain ([how to find your Okta domain](https://developer.okta.com/docs/guides/find-your-domain/main/)) - App integration name diff --git a/docs/cloud/managing-airbyte-cloud/manage-airbyte-cloud-notifications.md b/docs/cloud/managing-airbyte-cloud/manage-airbyte-cloud-notifications.md index 794abaa46ab7..49a663b451c9 100644 --- a/docs/cloud/managing-airbyte-cloud/manage-airbyte-cloud-notifications.md +++ b/docs/cloud/managing-airbyte-cloud/manage-airbyte-cloud-notifications.md @@ -21,7 +21,7 @@ To set up email notifications: 2. Click **Notifications**. -3. Toggle which messages you'd like to receive from Airbyte. All email notifications will be sent to the owner of this workspace. The owner of your workspace is noted at the top of the page. +3. Toggle which messages you'd like to receive from Airbyte. All email notifications will be sent by default to the creator of the workspace. To change the recipient, edit and save the **notification email recipient**. If you would like to send email notifications to more than one recipient, you can enter an email distribution list (ie Google Group) as the recipient. 4. Click **Save changes**. diff --git a/docs/cloud/managing-airbyte-cloud/manage-credits.md b/docs/cloud/managing-airbyte-cloud/manage-credits.md index fd07cbf0a421..040a083e58d5 100644 --- a/docs/cloud/managing-airbyte-cloud/manage-credits.md +++ b/docs/cloud/managing-airbyte-cloud/manage-credits.md @@ -17,12 +17,12 @@ To buy credits: :::note Purchase limits: - * Minimum: 100 credits + * Minimum: 20 credits * Maximum: 2,500 credits ::: - To buy more credits or a subscription plan, reach out to [Sales](https://airbyte.com/talk-to-sales). + To buy more credits or a custom plan, reach out to [Sales](https://airbyte.com/talk-to-sales). 5. Fill out the payment information. @@ -40,10 +40,31 @@ To buy credits: ::: +## Automatic reload of credits (Beta) + +You can enroll in automatic top-ups of your credit balance. This is a beta feature for those who do not want to manually add credits each time. + +To enroll, [email us](mailto:natalie@airbyte.io) with: + +1. A link to your workspace that you'd like to enable this feature for. +2. **Recharge threshold** The number under what credit balance you would like the automatic top up to occur. +3. **Recharge balance** The amount of credits you would like to refill to. + +As an example, if the recharge threshold is 10 credits and recharge balance is 30 credits, anytime your workspace's credit balance dipped below 10 credits, Airbyte will automatically add enough credits to bring the balance back to 30 credits by charging the difference between your credit balance and 30 credits. + +To take a real example, if: +1. The credit balance reached 3 credits. +2. 27 credits are automatically charged to the card on file and added to the balance. +3. The ending credit balance is 30 credits. + +Note that the difference between the recharge credit amount and recharge threshold must be at least 20 as our minimum purchase is 20 credits. + +If you are enrolled and want to change your limits or cancel your enrollment, [email us](mailto:natalie@airbyte.io). + ## View invoice history 1. On the [Airbyte Cloud](http://cloud.airbyte.com) dashboard, click **Billing** in the navigation bar. 2. Click **Invoice History**. You will be redirected to a Stripe portal. -3. Enter the email address used to make the purchase to see your invoice history. [Email us](mailto:ar@airbyte.io) for an invoice. \ No newline at end of file +3. Enter the email address used to make the purchase to see your invoice history. [Email us](mailto:ar@airbyte.io) for an invoice. diff --git a/docs/cloud/managing-airbyte-cloud/understand-airbyte-cloud-limits.md b/docs/cloud/managing-airbyte-cloud/understand-airbyte-cloud-limits.md index d0ab753e6616..bbc2211fd2e6 100644 --- a/docs/cloud/managing-airbyte-cloud/understand-airbyte-cloud-limits.md +++ b/docs/cloud/managing-airbyte-cloud/understand-airbyte-cloud-limits.md @@ -9,7 +9,7 @@ Understanding the following limitations will help you more effectively manage Ai * Max number of days with consecutive sync failures before a connection is paused: 14 days * Max number of streams that can be returned by a source in a discover call: 1K * Max number of streams that can be configured to sync in a single connection: 1K -* Size of a single record: 100MB +* Size of a single record: 20MB * Shortest sync schedule: Every 60 min * Schedule accuracy: +/- 30 min diff --git a/docs/connector-development/README.md b/docs/connector-development/README.md index 9a011cb3f4e3..b19dac14552c 100644 --- a/docs/connector-development/README.md +++ b/docs/connector-development/README.md @@ -53,7 +53,7 @@ If you are building a connector in any of the following languages/frameworks, th #### Sources * **Python Source Connector** -* [**Singer**](https://singer.io)**-based Python Source Connector**. [Singer.io](https://singer.io/) is an open source framework with a large community and many available connectors \(known as taps & targets\). To build an Airbyte connector from a Singer tap, wrap the tap in a thin Python package to make it Airbyte Protocol-compatible. See the [Github Connector](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-github-singer) for an example of an Airbyte Connector implemented on top of a Singer tap. +* [**Singer**](https://singer.io)**-based Python Source Connector**. [Singer.io](https://singer.io/) is an open source framework with a large community and many available connectors \(known as taps & targets\). To build an Airbyte connector from a Singer tap, wrap the tap in a thin Python package to make it Airbyte Protocol-compatible. See the [Github Connector](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-github) for an example of an Airbyte Connector implemented on top of a Singer tap. * **Generic Connector**: This template provides a basic starting point for any language. #### Destinations diff --git a/docs/connector-development/connector-builder-ui/incremental-sync.md b/docs/connector-development/connector-builder-ui/incremental-sync.md index c6f780fe12cc..5801267fea9d 100644 --- a/docs/connector-development/connector-builder-ui/incremental-sync.md +++ b/docs/connector-development/connector-builder-ui/incremental-sync.md @@ -11,7 +11,6 @@ To use incremental syncs, the API endpoint needs to fullfil the following requir - Records contain a top-level date/time field that defines when this record was last updated (the "cursor field") - If the record's cursor field is nested, you can use an "Add Field" transformation to copy it to the top-level, and a Remove Field to remove it from the object. This will effectively move the field to the top-level of the record - It's possible to filter/request records by the cursor field -- The records are sorted in ascending order based on their cursor field The knowledge of a cursor value also allows the Airbyte system to automatically keep a history of changes to records in the destination. To learn more about how different modes of incremental syncs, check out the [Incremental Sync - Append](/understanding-airbyte/connections/incremental-append/) and [Incremental Sync - Append + Deduped](/understanding-airbyte/connections/incremental-append-deduped) pages. @@ -59,19 +58,13 @@ As this fulfills the requirements for incremental syncs, we can configure the "I -This API orders records by default from new to old, which is not optimal for a reliable sync as the last encountered cursor value will be the most recent date even if some older records did not get synced (for example if a sync fails halfway through). It's better to start with the oldest records and work your way up to make sure that all older records are synced already once a certain date is encountered on a record. In this case the API can be configured to behave like this by setting an additional parameter: - -- Add a new "Query Parameter" near the top of the page -- Set the key to `order-by` -- Set the value to `oldest` - Setting the start date in the "Testing values" to a date in the past like **2023-04-09T00:00:00Z** results in the following request:
-curl 'https://content.guardianapis.com/search?order-by=oldest&from-date=2023-04-09T00:00:00Z&to-date={`now`}'
+curl 'https://content.guardianapis.com/search?from-date=2023-04-09T00:00:00Z&to-date={`now`}'
 
-The last encountered date will be saved as part of the connection - when the next sync is running, it picks up from the last record. Let's assume the last ecountered article looked like this: +The most recent encountered date will be saved as part of the connection - when the next sync is running, it picks up from that date as the new start date. Let's assume the last ecountered article looked like this:
 {`{
@@ -86,7 +79,7 @@ The last encountered date will be saved as part of the connection - when the nex
 Then when a sync is triggered for the same connection the next day, the following request is made:
 
 
-curl 'https://content.guardianapis.com/search?order-by=oldest&from-date=2023-04-15T07:30:58Z&to-date={``}'
+curl 'https://content.guardianapis.com/search?from-date=2023-04-15T07:30:58Z&to-date={``}'
 
The `from-date` is set to the cutoff date of articles synced already and the `to-date` is set to the current date. @@ -118,9 +111,9 @@ The "cursor granularity" also needs to be set to an ISO 8601 duration - it repre For example if the "Step" is set to 10 days (`P10D`) and the "Cursor granularity" set to second (`PT1S`) for the Guardian articles stream described above and a longer time range, then the following requests will be performed:
-curl 'https://content.guardianapis.com/search?order-by=oldest&from-date=2023-01-01T00:00:00Z&to-date=2023-01-10T00:00:00Z'{`\n`}
-curl 'https://content.guardianapis.com/search?order-by=oldest&from-date=2023-01-10T00:00:00Z&to-date=2023-01-20T00:00:00Z'{`\n`}
-curl 'https://content.guardianapis.com/search?order-by=oldest&from-date=2023-01-20T00:00:00Z&to-date=2023-01-30T00:00:00Z'{`\n`}
+curl 'https://content.guardianapis.com/search?from-date=2023-01-01T00:00:00Z&to-date=2023-01-10T00:00:00Z'{`\n`}
+curl 'https://content.guardianapis.com/search?from-date=2023-01-10T00:00:00Z&to-date=2023-01-20T00:00:00Z'{`\n`}
+curl 'https://content.guardianapis.com/search?from-date=2023-01-20T00:00:00Z&to-date=2023-01-30T00:00:00Z'{`\n`}
 ...
 
@@ -157,7 +150,7 @@ Reiterating the example from above with a "Lookback window" of 2 days configured Then when a sync is triggered for the same connection the next day, the following request is made:
-curl 'https://content.guardianapis.com/search?order-by=oldest&from-date=2023-04-13T07:30:58Z&to-date={``}'
+curl 'https://content.guardianapis.com/search?from-date=2023-04-13T07:30:58Z&to-date={``}'
 
## Custom parameter injection diff --git a/docs/deploying-airbyte/on-kubernetes-via-helm.md b/docs/deploying-airbyte/on-kubernetes-via-helm.md index 9f8f04dab34c..a79f74e46e9d 100644 --- a/docs/deploying-airbyte/on-kubernetes-via-helm.md +++ b/docs/deploying-airbyte/on-kubernetes-via-helm.md @@ -118,7 +118,7 @@ helm install --values path/to/values.yaml %release_name% airbyte/airbyte ### (Early Access) Airbyte Enterprise deployment -[Airbyte Enterprise](/airbyte-enterprise) is in an early access stage, so this section will likely evolve. That said, if you have an Airbyte Enterprise license key and wish to install Airbyte Enterprise via helm, follow these steps: +[Airbyte Enterprise](/airbyte-enterprise) is in an early access stage for select priority users. Once you [are qualified for an Airbyte Enterprise license key](https://airbyte.com/company/talk-to-sales), you can install Airbyte Enterprise via helm by following these steps: 1. Checkout the latest revision of the [airbyte-platform repository](https://github.com/airbytehq/airbyte-platform) diff --git a/docs/integrations/destinations/bigquery.md b/docs/integrations/destinations/bigquery.md index 84b48838823a..2f0c4fd686f0 100644 --- a/docs/integrations/destinations/bigquery.md +++ b/docs/integrations/destinations/bigquery.md @@ -88,7 +88,7 @@ Airbyte converts any invalid characters into `_` characters when writing data. H ## Data type map | Airbyte type | BigQuery type | -| :---------------------------------- | :------------ | +|:------------------------------------|:--------------| | DATE | DATE | | STRING (BASE64) | STRING | | NUMBER | FLOAT | @@ -126,6 +126,13 @@ Now that you have set up the BigQuery destination connector, check out the follo | Version | Date | Pull Request | Subject | |:--------|:-----------|:-----------------------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 2.1.2 | 2023-10-10 | [\#31194](https://github.com/airbytehq/airbyte/pull/31194) | Deallocate unused per stream buffer memory when empty | +| 2.1.1 | 2023-10-10 | [\#31083](https://github.com/airbytehq/airbyte/pull/31083) | Fix precision of numeric values in async destinations | +| 2.1.0 | 2023-10-09 | [\#31149](https://github.com/airbytehq/airbyte/pull/31149) | No longer fail syncs when PKs are null - try do dedupe anyway | +| 2.0.26 | 2023-10-09 | [\#31198](https://github.com/airbytehq/airbyte/pull/31198) | Clarify configuration groups | +| 2.0.25 | 2023-10-09 | [\#31185](https://github.com/airbytehq/airbyte/pull/31185) | Increase staging file upload timeout to 5 minutes | +| 2.0.24 | 2023-10-06 | [\#31139](https://github.com/airbytehq/airbyte/pull/31139) | Bump CDK version | +| 2.0.23 | 2023-10-06 | [\#31129](https://github.com/airbytehq/airbyte/pull/31129) | Reduce async buffer size | | 2.0.22 | 2023-10-04 | [\#31082](https://github.com/airbytehq/airbyte/pull/31082) | Revert null PK checks | | 2.0.21 | 2023-10-03 | [\#31028](https://github.com/airbytehq/airbyte/pull/31028) | Update timeout | | 2.0.20 | 2023-09-26 | [\#30779](https://github.com/airbytehq/airbyte/pull/30779) | Final table PK columns become non-null and skip check for null PKs in raw records (performance) | diff --git a/docs/integrations/destinations/chroma.md b/docs/integrations/destinations/chroma.md index 6efd9f3d478b..7ebc7b78ca1d 100644 --- a/docs/integrations/destinations/chroma.md +++ b/docs/integrations/destinations/chroma.md @@ -75,5 +75,6 @@ You should now have all the requirements needed to configure Chroma as a destina | Version | Date | Pull Request | Subject | | :------ | :--------- | :--------------------------------------------------------- | :----------------------------------------- | +| 0.0.3 | 2023-10-04 | [#31075](https://github.com/airbytehq/airbyte/pull/31075) | Fix OpenAI embedder batch size | | 0.0.2 | 2023-09-29 | [#30820](https://github.com/airbytehq/airbyte/pull/30820) | Update CDK | | 0.0.1 | 2023-09-08 | [#30023](https://github.com/airbytehq/airbyte/pull/30023) | πŸŽ‰ New Destination: Chroma (Vector Database) | diff --git a/docs/integrations/destinations/milvus.md b/docs/integrations/destinations/milvus.md index 8ff7e93304fb..9a9a7808601a 100644 --- a/docs/integrations/destinations/milvus.md +++ b/docs/integrations/destinations/milvus.md @@ -105,6 +105,7 @@ vector_store.similarity_search("test") | Version | Date | Pull Request | Subject | |:--------| :--------- |:--------------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------| +| 0.0.4 | 2023-10-04 | [#31075](https://github.com/airbytehq/airbyte/pull/31075) | Fix OpenAI embedder batch size | | 0.0.3 | 2023-09-29 | [#30820](https://github.com/airbytehq/airbyte/pull/30820) | Update CDK | | 0.0.2 | 2023-08-25 | [#30689](https://github.com/airbytehq/airbyte/pull/30689) | Update CDK to support azure OpenAI embeddings and text splitting options, make sure primary key field is not accidentally set, promote to certified | | 0.0.1 | 2023-08-12 | [#29442](https://github.com/airbytehq/airbyte/pull/29442) | Milvus connector with some embedders | diff --git a/docs/integrations/destinations/pinecone.md b/docs/integrations/destinations/pinecone.md index 6ac74fd933da..3d4153f66ecf 100644 --- a/docs/integrations/destinations/pinecone.md +++ b/docs/integrations/destinations/pinecone.md @@ -74,6 +74,7 @@ OpenAI and Fake embeddings produce vectors with 1536 dimensions, and the Cohere | Version | Date | Pull Request | Subject | |:--------| :--------- |:--------------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------| +| 0.0.15 | 2023-10-04 | [#31075](https://github.com/airbytehq/airbyte/pull/31075) | Fix OpenAI embedder batch size | | 0.0.14 | 2023-09-29 | [#30820](https://github.com/airbytehq/airbyte/pull/30820) | Update CDK | | 0.0.13 | 2023-09-26 | [#30649](https://github.com/airbytehq/airbyte/pull/30649) | Allow more text splitting options | | 0.0.12 | 2023-09-25 | [#30649](https://github.com/airbytehq/airbyte/pull/30649) | Fix bug with stale documents left on starter pods | diff --git a/docs/integrations/destinations/qdrant.md b/docs/integrations/destinations/qdrant.md index 2a49d11b2fa3..eb55b7a1669b 100644 --- a/docs/integrations/destinations/qdrant.md +++ b/docs/integrations/destinations/qdrant.md @@ -70,6 +70,7 @@ You should now have all the requirements needed to configure Qdrant as a destina | Version | Date | Pull Request | Subject | | :------ | :--------- | :--------------------------------------------------------- | :----------------------------------------- | +| 0.0.4 | 2023-10-04 | [#31075](https://github.com/airbytehq/airbyte/pull/31075) | Fix OpenAI embedder batch size | | 0.0.3 | 2023-09-29 | [#30820](https://github.com/airbytehq/airbyte/pull/30820) | Update CDK | | 0.0.2 | 2023-09-25 | [#30689](https://github.com/airbytehq/airbyte/pull/30689) | Update CDK to support Azure OpenAI embeddings and text splitting options | | 0.0.1 | 2023-09-22 | [#30332](https://github.com/airbytehq/airbyte/pull/30332) | πŸŽ‰ New Destination: Qdrant (Vector Database) | diff --git a/docs/integrations/destinations/redshift.md b/docs/integrations/destinations/redshift.md index 4dfedfd02f34..bd92c29289e5 100644 --- a/docs/integrations/destinations/redshift.md +++ b/docs/integrations/destinations/redshift.md @@ -141,7 +141,7 @@ Each stream will be output into its own raw table in Redshift. Each table will c ## Data type mapping | Redshift Type | Airbyte Type | Notes | -| :-------------------- | :------------------------ | :---- | +|:----------------------|:--------------------------|:------| | `boolean` | `boolean` | | | `int` | `integer` | | | `float` | `number` | | @@ -156,6 +156,10 @@ Each stream will be output into its own raw table in Redshift. Each table will c | Version | Date | Pull Request | Subject | |:--------|:-----------|:-----------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 0.6.9 | 2023-10-10 | [\#31083](https://github.com/airbytehq/airbyte/pull/31083) | Fix precision of numeric values in async destinations | +| 0.6.8 | 2023-10-10 | [\#31218](https://github.com/airbytehq/airbyte/pull/31218) | Clarify configuration groups | +| 0.6.7 | 2023-10-06 | [\#31153](https://github.com/airbytehq/airbyte/pull/31153) | Increase jvm GC retries | +| 0.6.6 | 2023-10-06 | [\#31129](https://github.com/airbytehq/airbyte/pull/31129) | Reduce async buffer size | | 0.6.5 | 2023-08-18 | [\#28619](https://github.com/airbytehq/airbyte/pull/29640) | Fix duplicate staging object names in concurrent environment (e.g. async) | | 0.6.4 | 2023-08-10 | [\#28619](https://github.com/airbytehq/airbyte/pull/28619) | Use async method for staging | | 0.6.3 | 2023-08-07 | [\#29188](https://github.com/airbytehq/airbyte/pull/29188) | Internal code refactoring | @@ -197,7 +201,7 @@ Each stream will be output into its own raw table in Redshift. Each table will c | 0.3.33 | 2022-05-04 | [\#12601](https://github.com/airbytehq/airbyte/pull/12601) | Apply buffering strategy for S3 staging | | 0.3.32 | 2022-04-20 | [\#12085](https://github.com/airbytehq/airbyte/pull/12085) | Fixed bug with switching between INSERT and COPY config | | 0.3.31 | 2022-04-19 | [\#12064](https://github.com/airbytehq/airbyte/pull/12064) | Added option to support SUPER datatype in \_airbyte_raw\*\*\* table | -| 0.3.29 | 2022-04-05 | [\#11729](https://github.com/airbytehq/airbyte/pull/11729) | Fixed bug with dashes in schema name | | +| 0.3.29 | 2022-04-05 | [\#11729](https://github.com/airbytehq/airbyte/pull/11729) | Fixed bug with dashes in schema name | | 0.3.28 | 2022-03-18 | [\#11254](https://github.com/airbytehq/airbyte/pull/11254) | Fixed missing records during S3 staging | | 0.3.27 | 2022-02-25 | [\#10421](https://github.com/airbytehq/airbyte/pull/10421) | Refactor JDBC parameters handling | | 0.3.25 | 2022-02-14 | [\#9920](https://github.com/airbytehq/airbyte/pull/9920) | Updated the size of staging files for S3 staging. Also, added closure of S3 writers to staging files when data has been written to an staging file. | diff --git a/docs/integrations/destinations/snowflake.md b/docs/integrations/destinations/snowflake.md index e32e5b1652c2..1c8f51791b1e 100644 --- a/docs/integrations/destinations/snowflake.md +++ b/docs/integrations/destinations/snowflake.md @@ -157,7 +157,7 @@ Navigate to the Airbyte UI to set up Snowflake as a destination. You can authent ### Login and Password | Field | Description | -| ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +|-------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | [Host](https://docs.snowflake.com/en/user-guide/admin-account-identifier.html) | The host domain of the snowflake instance (must include the account, region, cloud environment, and end with snowflakecomputing.com). Example: `accountname.us-east-2.aws.snowflakecomputing.com` | | [Role](https://docs.snowflake.com/en/user-guide/security-access-control-overview.html#roles) | The role you created in Step 1 for Airbyte to access Snowflake. Example: `AIRBYTE_ROLE` | | [Warehouse](https://docs.snowflake.com/en/user-guide/warehouses-overview.html#overview-of-warehouses) | The warehouse you created in Step 1 for Airbyte to sync data into. Example: `AIRBYTE_WAREHOUSE` | @@ -170,7 +170,7 @@ Navigate to the Airbyte UI to set up Snowflake as a destination. You can authent ### OAuth 2.0 | Field | Description | -| :---------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +|:------------------------------------------------------------------------------------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | [Host](https://docs.snowflake.com/en/user-guide/admin-account-identifier.html) | The host domain of the snowflake instance (must include the account, region, cloud environment, and end with snowflakecomputing.com). Example: `accountname.us-east-2.aws.snowflakecomputing.com` | | [Role](https://docs.snowflake.com/en/user-guide/security-access-control-overview.html#roles) | The role you created in Step 1 for Airbyte to access Snowflake. Example: `AIRBYTE_ROLE` | | [Warehouse](https://docs.snowflake.com/en/user-guide/warehouses-overview.html#overview-of-warehouses) | The warehouse you created in Step 1 for Airbyte to sync data into. Example: `AIRBYTE_WAREHOUSE` | @@ -207,7 +207,7 @@ Navigate to the Airbyte UI to set up Snowflake as a destination. You can authent To use AWS S3 as the cloud storage, enter the information for the S3 bucket you created in Step 2: | Field | Description | -| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +|--------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | S3 Bucket Name | The name of the staging S3 bucket (Example: `airbyte.staging`). Airbyte will write files to this bucket and read them via statements on Snowflake. | | S3 Bucket Region | The S3 staging bucket region used. | | S3 Key Id \* | The Access Key ID granting access to the S3 staging bucket. Airbyte requires Read and Write permissions for the bucket. | @@ -220,7 +220,7 @@ To use AWS S3 as the cloud storage, enter the information for the S3 bucket you To use a Google Cloud Storage bucket, enter the information for the bucket you created in Step 2: | Field | Description | -| ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +|--------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | GCP Project ID | The name of the GCP project ID for your credentials. (Example: `my-project`) | | GCP Bucket Name | The name of the staging bucket. Airbyte will write files to this bucket and read them via statements on Snowflake. (Example: `airbyte-staging`) | | Google Application Credentials | The contents of the JSON key file that has read/write permissions to the staging GCS bucket. You will separately need to grant bucket access to your Snowflake GCP service account. See the [Google Cloud docs](https://cloud.google.com/iam/docs/creating-managing-service-account-keys#creating_service_account_keys) for more information on how to generate a JSON key for your service account. | @@ -230,7 +230,7 @@ To use a Google Cloud Storage bucket, enter the information for the bucket you c Airbyte outputs each stream into its own table with the following columns in Snowflake: | Airbyte field | Description | Column type | -| -------------------- | -------------------------------------------------------------- | ------------------------ | +|----------------------|----------------------------------------------------------------|--------------------------| | \_airbyte_ab_id | A UUID assigned to each processed event | VARCHAR | | \_airbyte_emitted_at | A timestamp for when the event was pulled from the data source | TIMESTAMP WITH TIME ZONE | | \_airbyte_data | A JSON blob with the event data. | VARIANT | @@ -271,6 +271,12 @@ Otherwise, make sure to grant the role the required permissions in the desired n | Version | Date | Pull Request | Subject | |:----------------|:-----------|:-----------------------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 3.2.2 | 2023-10-10 | [\#31194](https://github.com/airbytehq/airbyte/pull/31194) | Deallocate unused per stream buffer memory when empty | +| 3.2.1 | 2023-10-10 | [\#31083](https://github.com/airbytehq/airbyte/pull/31083) | Fix precision of numeric values in async destinations | +| 3.2.0 | 2023-10-09 | [\#31149](https://github.com/airbytehq/airbyte/pull/31149) | No longer fail syncs when PKs are null - try do dedupe anyway | +| 3.1.22 | 2023-10-06 | [\#31153](https://github.com/airbytehq/airbyte/pull/31153) | Increase jvm GC retries | +| 3.1.21 | 2023-10-06 | [\#31139](https://github.com/airbytehq/airbyte/pull/31139) | Bump CDK version | +| 3.1.20 | 2023-10-06 | [\#31129](https://github.com/airbytehq/airbyte/pull/31129) | Reduce async buffer size | | 3.1.19 | 2023-10-04 | [\#31082](https://github.com/airbytehq/airbyte/pull/31082) | Revert null PK checks | | 3.1.18 | 2023-10-01 | [\#30779](https://github.com/airbytehq/airbyte/pull/30779) | Final table PK columns become non-null and skip check for null PKs in raw records (performance) | | 3.1.17 | 2023-09-29 | [\#30938](https://github.com/airbytehq/airbyte/pull/30938) | Upgrade snowflake-jdbc driver | diff --git a/docs/integrations/destinations/weaviate.md b/docs/integrations/destinations/weaviate.md index 92e5dcf3a2c8..bc23c60823eb 100644 --- a/docs/integrations/destinations/weaviate.md +++ b/docs/integrations/destinations/weaviate.md @@ -77,12 +77,13 @@ If a class doesn't exist in the schema of the cluster, it will be created using You can also create the class in Weaviate in advance if you need more control over the schema in Weaviate. In this case, the text properies `_ab_stream` and `_ab_record_id` need to be created for bookkeeping reasons. In case a sync is run in `Overwrite` mode, the class will be deleted and recreated. -As properties have to start will a lowercase letter in Weaviate, field names might be updated during the loading process. +As properties have to start will a lowercase letter in Weaviate, field names might be updated during the loading process. The field names `id`, `_id` and `_additional` are reserved keywords in Weaviate, so they will be renamed to `raw_id`, `raw__id` and `raw_additional` respectively. ## Changelog | Version | Date | Pull Request | Subject | | :------ | :--------- | :--------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------- | +| 0.2.1 | 2023-10-04 | [#31075](https://github.com/airbytehq/airbyte/pull/31075) | Fix OpenAI embedder batch size and conflict field name handling | | 0.2.0 | 2023-09-22 | [#30151](https://github.com/airbytehq/airbyte/pull/30151) | Add embedding capabilities, overwrite and dedup support and API key auth mode, make certified. 🚨 Breaking changes - check migrations guide. | | 0.1.1 | 2022-02-08 | [\#22527](https://github.com/airbytehq/airbyte/pull/22527) | Multiple bug fixes: Support String based IDs, arrays of uknown type and additionalProperties of type object and array of objects | | 0.1.0 | 2022-12-06 | [\#20094](https://github.com/airbytehq/airbyte/pull/20094) | Add Weaviate destination | diff --git a/docs/integrations/getting-started/source-facebook-marketing.md b/docs/integrations/getting-started/source-google-ads.md similarity index 98% rename from docs/integrations/getting-started/source-facebook-marketing.md rename to docs/integrations/getting-started/source-google-ads.md index cb0303519372..f1558cddf335 100644 --- a/docs/integrations/getting-started/source-facebook-marketing.md +++ b/docs/integrations/getting-started/source-google-ads.md @@ -1,4 +1,4 @@ -# Getting Started: Source Facebook Marketing +# Getting Started: Source Google Ads ## Requirements diff --git a/docs/integrations/sources/airtable-migrations.md b/docs/integrations/sources/airtable-migrations.md new file mode 100644 index 000000000000..66a0d6526f01 --- /dev/null +++ b/docs/integrations/sources/airtable-migrations.md @@ -0,0 +1,4 @@ +# Airtable Migration Guide + +## Upgrading to 4.0.0 +Columns with Formulas are narrowing from `array` to `string` or `number`. You may need to refresh the connection schema (with the reset), and run a sync. \ No newline at end of file diff --git a/docs/integrations/sources/airtable.md b/docs/integrations/sources/airtable.md index 59d427c2f6a3..d485d07710ec 100644 --- a/docs/integrations/sources/airtable.md +++ b/docs/integrations/sources/airtable.md @@ -2,10 +2,6 @@ This page contains the setup guide and reference information for the [Airtable](https://airtable.com/api) source connector. -:::caution -Currently, this source connector works with `Standard` subscription plan only. `Enterprise` level accounts are not supported yet. -::: - ## Prerequisites * An active Airtable account @@ -15,9 +11,23 @@ Currently, this source connector works with `Standard` subscription plan only. ` - `schema.bases:read` ## Setup guide - ### Step 1: Set up Airtable + +#### For Airbyte Open Source: +1. Go to https://airtable.com/create/tokens to create new token. + ![Generate new Token](../../.gitbook/assets/source/airtable/generate_new_token.png) +2. Add following scopes and press the `Create Token` button: + - `data.records:read` + - `data.recordComments:read` + - `schema.bases:read` + + ![Add Scopes](../../.gitbook/assets/source/airtable/add_scopes.png) +3. Save token from the popup window. + + +### Step 2: Set up Airtable connector in Airbyte + ### For Airbyte Cloud: @@ -51,51 +61,52 @@ Please keep in mind that if you start syncing a table via Airbyte, then rename i The airtable source connector supports the following [sync modes](https://docs.airbyte.com/cloud/core-concepts#connection-sync-modes): -| Feature | Supported?\(Yes/No\) | Notes | -|:------------------|:---------------------|:------| -| Full Refresh Sync | Yes | | -| Incremental Sync | No | | - +- [Full Refresh - Overwrite](https://docs.airbyte.com/understanding-airbyte/glossary#full-refresh-sync) +- [Full Refresh - Append](https://docs.airbyte.com/understanding-airbyte/connections/full-refresh-append) ## Supported Tables -This source allows you to pull all available tables and bases using `Metadata API` for a given authenticated user. In case you rename or add a column to any existing table, you will need to recreate the source to update the Airbyte catalog. +This source allows you to pull all available tables and bases using `Metadata API` for a given authenticated user. In case you rename or add a column to any existing table, you will need to recreate the source to update the Airbyte catalog. + +### Performance Considerations + +See information about rate limits [here](https://airtable.com/developers/web/api/rate-limits). ## Data type map -| Integration Type | Airbyte Type | Nullable | -|:------------------------|:--------------------------------|----------| -| `multipleAttachments` | `string` | Yes | -| `autoNumber` | `string` | Yes | -| `barcode` | `string` | Yes | -| `button` | `string` | Yes | -| `checkbox` | `boolean` | Yes | -| `singleCollaborator` | `string` | Yes | -| `count` | `number` | Yes | -| `createdBy` | `string` | Yes | -| `createdTime` | `datetime`, `format: date-time` | Yes | -| `currency` | `number` | Yes | -| `email` | `string` | Yes | -| `date` | `string`, `format: date` | Yes | -| `duration` | `number` | Yes | -| `lastModifiedBy` | `string` | Yes | -| `lastModifiedTime` | `datetime`, `format: date-time` | Yes | -| `multipleRecordLinks` | `array with strings` | Yes | -| `multilineText` | `string` | Yes | -| `multipleCollaborators` | `array with strings` | Yes | -| `multipleSelects` | `array with strings` | Yes | -| `number` | `number` | Yes | -| `percent` | `number` | Yes | -| `phoneNumber` | `string` | Yes | -| `rating` | `number` | Yes | -| `richText` | `string` | Yes | -| `singleLineText` | `string` | Yes | -| `externalSyncSource` | `string` | Yes | -| `url` | `string` | Yes | -| `formula` | `array with any` | Yes | -| `lookup` | `array with any` | Yes | -| `multipleLookupValues` | `array with any` | Yes | -| `rollup` | `array with any` | Yes | +| Integration Type | Airbyte Type | Nullable | +|:------------------------|:---------------------------------------|----------| +| `multipleAttachments` | `string` | Yes | +| `autoNumber` | `string` | Yes | +| `barcode` | `string` | Yes | +| `button` | `string` | Yes | +| `checkbox` | `boolean` | Yes | +| `singleCollaborator` | `string` | Yes | +| `count` | `number` | Yes | +| `createdBy` | `string` | Yes | +| `createdTime` | `datetime`, `format: date-time` | Yes | +| `currency` | `number` | Yes | +| `email` | `string` | Yes | +| `date` | `string`, `format: date` | Yes | +| `duration` | `number` | Yes | +| `lastModifiedBy` | `string` | Yes | +| `lastModifiedTime` | `datetime`, `format: date-time` | Yes | +| `multipleRecordLinks` | `array with strings` | Yes | +| `multilineText` | `string` | Yes | +| `multipleCollaborators` | `array with strings` | Yes | +| `multipleSelects` | `array with strings` | Yes | +| `number` | `number` | Yes | +| `percent` | `number` | Yes | +| `phoneNumber` | `string` | Yes | +| `rating` | `number` | Yes | +| `richText` | `string` | Yes | +| `singleLineText` | `string` | Yes | +| `externalSyncSource` | `string` | Yes | +| `url` | `string` | Yes | +| `formula` | `string`, `number` or `array with any` | Yes | +| `lookup` | `array with any` | Yes | +| `multipleLookupValues` | `array with any` | Yes | +| `rollup` | `array with any` | Yes | * All the fields are `nullable` by default, meaning that the field could be empty. * The `array with any` - represents the classic array with one of the other Airtable data types inside, such as: @@ -103,24 +114,24 @@ This source allows you to pull all available tables and bases using `Metadata AP - number/integer - nested lists/objects -### Performance Considerations (Airbyte Open-Source) - -See information about rate limits [here](https://airtable.com/developers/web/api/rate-limits). - ## Changelog -| Version | Date | Pull Request | Subject | -|:--------|:-----------|:---------------------------------------------------------|:----------------------------------------------------------------| -| 3.0.1 | 2023-05-10 | [25946](https://github.com/airbytehq/airbyte/pull/25946) | Skip stream if it does not appear in catalog | -| 3.0.0 | 2023-03-20 | [22704](https://github.com/airbytehq/airbyte/pull/22704) | Fix for stream name uniqueness | -| 2.0.4 | 2023-03-15 | [24093](https://github.com/airbytehq/airbyte/pull/24093) | Update spec and doc | -| 2.0.3 | 2023-02-02 | [22311](https://github.com/airbytehq/airbyte/pull/22311) | Fix for `singleSelect` types when discovering the schema | -| 2.0.2 | 2023-02-01 | [22245](https://github.com/airbytehq/airbyte/pull/22245) | Fix for empty `result` object when discovering the schema | -| 2.0.1 | 2023-02-01 | [22224](https://github.com/airbytehq/airbyte/pull/22224) | Fixed broken `API Key` authentication | -| 2.0.0 | 2023-01-27 | [21962](https://github.com/airbytehq/airbyte/pull/21962) | Added casting of native Airtable data types to JsonSchema types | -| 1.0.2 | 2023-01-25 | [20934](https://github.com/airbytehq/airbyte/pull/20934) | Added `OAuth2.0` authentication support | -| 1.0.1 | 2023-01-10 | [21215](https://github.com/airbytehq/airbyte/pull/21215) | Fix field names | -| 1.0.0 | 2022-12-22 | [20846](https://github.com/airbytehq/airbyte/pull/20846) | Migrated to Metadata API for dynamic schema generation | -| 0.1.3 | 2022-10-26 | [18491](https://github.com/airbytehq/airbyte/pull/18491) | Improve schema discovery logic | -| 0.1.2 | 2022-04-30 | [12500](https://github.com/airbytehq/airbyte/pull/12500) | Improve input configuration copy | -| 0.1.1 | 2021-12-06 | [8425](https://github.com/airbytehq/airbyte/pull/8425) | Update title, description fields in spec | +| Version | Date | Pull Request | Subject | +|:--------|:-----------|:---------------------------------------------------------|:---------------------------------------------------------------------------------------| +| 4.1.2 | 2023-10-10 | [31215](https://github.com/airbytehq/airbyte/pull/31215) | Exclude bases without permission | +| 4.1.1 | 2023-10-10 | [31119](https://github.com/airbytehq/airbyte/pull/31119) | Add user-friendly error message when refresh token has expired | +| 4.1.0 | 2023-10-10 | [31044](https://github.com/airbytehq/airbyte/pull/31044) | Add source table name to output records | +| 4.0.0 | 2023-10-09 | [31181](https://github.com/airbytehq/airbyte/pull/31181) | Additional schema processing for the FORMULA schema type: Convert to simple data types | +| 3.0.1 | 2023-05-10 | [25946](https://github.com/airbytehq/airbyte/pull/25946) | Skip stream if it does not appear in catalog | +| 3.0.0 | 2023-03-20 | [22704](https://github.com/airbytehq/airbyte/pull/22704) | Fix for stream name uniqueness | +| 2.0.4 | 2023-03-15 | [24093](https://github.com/airbytehq/airbyte/pull/24093) | Update spec and doc | +| 2.0.3 | 2023-02-02 | [22311](https://github.com/airbytehq/airbyte/pull/22311) | Fix for `singleSelect` types when discovering the schema | +| 2.0.2 | 2023-02-01 | [22245](https://github.com/airbytehq/airbyte/pull/22245) | Fix for empty `result` object when discovering the schema | +| 2.0.1 | 2023-02-01 | [22224](https://github.com/airbytehq/airbyte/pull/22224) | Fixed broken `API Key` authentication | +| 2.0.0 | 2023-01-27 | [21962](https://github.com/airbytehq/airbyte/pull/21962) | Added casting of native Airtable data types to JsonSchema types | +| 1.0.2 | 2023-01-25 | [20934](https://github.com/airbytehq/airbyte/pull/20934) | Added `OAuth2.0` authentication support | +| 1.0.1 | 2023-01-10 | [21215](https://github.com/airbytehq/airbyte/pull/21215) | Fix field names | +| 1.0.0 | 2022-12-22 | [20846](https://github.com/airbytehq/airbyte/pull/20846) | Migrated to Metadata API for dynamic schema generation | +| 0.1.3 | 2022-10-26 | [18491](https://github.com/airbytehq/airbyte/pull/18491) | Improve schema discovery logic | +| 0.1.2 | 2022-04-30 | [12500](https://github.com/airbytehq/airbyte/pull/12500) | Improve input configuration copy | +| 0.1.1 | 2021-12-06 | [8425](https://github.com/airbytehq/airbyte/pull/8425) | Update title, description fields in spec | diff --git a/docs/integrations/sources/alloydb.md b/docs/integrations/sources/alloydb.md deleted file mode 100644 index 9cb17080c38b..000000000000 --- a/docs/integrations/sources/alloydb.md +++ /dev/null @@ -1,364 +0,0 @@ -# AlloyDB for PostgreSQL - -This page contains the setup guide and reference information for the AlloyDB for PostgreSQL. - -## Prerequisites - -- For Airbyte Open Source users, [upgrade](https://docs.airbyte.com/operator-guides/upgrading-airbyte/) your Airbyte platform to version `v0.40.0-alpha` or newer -- For Airbyte Cloud (and optionally for Airbyte Open Source), ensure SSL is enabled in your environment - -## Setup guide - -## When to use AlloyDB with CDC - -Configure AlloyDB with CDC if: - -- You need a record of deletions -- Your table has a primary key but doesn't have a reasonable cursor field for incremental syncing (`updated_at`). CDC allows you to sync your table incrementally - -If your goal is to maintain a snapshot of your table in the destination but the limitations prevent you from using CDC, consider using [non-CDC incremental sync](https://docs.airbyte.com/understanding-airbyte/connections/incremental-append) and occasionally reset the data and re-sync. - -If your dataset is small and you just want a snapshot of your table in the destination, consider using [Full Refresh replication](https://docs.airbyte.com/understanding-airbyte/connections/full-refresh-overwrite) for your table instead of CDC. - -### Step 1: (Optional) Create a dedicated read-only user - -We recommend creating a dedicated read-only user for better permission control and auditing. Alternatively, you can use an existing AlloyDB user in your database. - -To create a dedicated user, run the following command: - -``` -CREATE USER PASSWORD 'your_password_here'; -``` - -Grant access to the relevant schema: - -``` -GRANT USAGE ON SCHEMA TO -``` - -:::note -To replicate data from multiple AlloyDB schemas, re-run the command to grant access to all the relevant schemas. Note that you'll need to set up multiple Airbyte sources connecting to the same AlloyDB database on multiple schemas. -::: - -Grant the user read-only access to the relevant tables: - -``` -GRANT SELECT ON ALL TABLES IN SCHEMA TO ; -``` - -Allow user to see tables created in the future: - -``` -ALTER DEFAULT PRIVILEGES IN SCHEMA GRANT SELECT ON TABLES TO ; -``` - -Additionally, if you plan to configure CDC for the AlloyDB source connector, grant `REPLICATION` permissions to the user: - -``` -ALTER USER REPLICATION; -``` - -**Syncing a subset of columns​** - -Currently, there is no way to sync a subset of columns using the AlloyDB source connector: - -- When setting up a connection, you can only choose which tables to sync, but not columns. -- If the user can only access a subset of columns, the connection check will pass. However, the data sync will fail with a permission denied exception. - -The workaround for partial table syncing is to create a view on the specific columns, and grant the user read access to that view: - -``` -CREATE VIEW as SELECT FROM ; -``` - -``` -GRANT SELECT ON TABLE IN SCHEMA to ; -``` - -**Note:** The workaround works only for non-CDC setups since CDC requires data to be in tables and not views. -This issue is tracked in [#9771](https://github.com/airbytehq/airbyte/issues/9771). - -### Step 2: Set up the AlloyDB connector in Airbyte - -1. Log into your [Airbyte Cloud](https://cloud.airbyte.com/workspaces) or Airbyte Open Source account. -2. Click **Sources** and then click **+ New source**. -3. On the Set up the source page, select **AlloyDB** from the Source type dropdown. -4. Enter a name for your source. -5. For the **Host**, **Port**, and **DB Name**, enter the hostname, port number, and name for your AlloyDB database. -6. List the **Schemas** you want to sync. - :::note - The schema names are case sensitive. The 'public' schema is set by default. Multiple schemas may be used at one time. No schemas set explicitly - will sync all of existing. - ::: -7. For **User** and **Password**, enter the username and password you created in [Step 1](#step-1-optional-create-a-dedicated-read-only-user). -8. To customize the JDBC connection beyond common options, specify additional supported [JDBC URL parameters](https://jdbc.postgresql.org/documentation/head/connect.html) as key-value pairs separated by the symbol & in the **JDBC URL Parameters (Advanced)** field. - - Example: key1=value1&key2=value2&key3=value3 - - These parameters will be added at the end of the JDBC URL that the AirByte will use to connect to your AlloyDB database. - - The connector now supports `connectTimeout` and defaults to 60 seconds. Setting connectTimeout to 0 seconds will set the timeout to the longest time available. - - **Note:** Do not use the following keys in JDBC URL Params field as they will be overwritten by Airbyte: - `currentSchema`, `user`, `password`, `ssl`, and `sslmode`. - - :::warning - This is an advanced configuration option. Users are advised to use it with caution. - ::: - -9. For Airbyte Open Source, toggle the switch to connect using SSL. Airbyte Cloud uses SSL by default. -10. For Replication Method, select Standard or [Logical CDC](https://www.postgresql.org/docs/10/logical-replication.html) from the dropdown. Refer to [Configuring AlloyDB connector with Change Data Capture (CDC)](#configuring-alloydb-connector-with-change-data-capture-cdc) for more information. -11. For SSH Tunnel Method, select: - - No Tunnel for a direct connection to the database - - SSH Key Authentication to use an RSA Private as your secret for establishing the SSH tunnel - - Password Authentication to use a password as your secret for establishing the SSH tunnel - Refer to [Connect via SSH Tunnel](#connect-via-ssh-tunnel​) for more information. -12. Click **Set up source**. - -### Connect via SSH Tunnel​ - -You can connect to a AlloyDB instance via an SSH tunnel. - -When using an SSH tunnel, you are configuring Airbyte to connect to an intermediate server (also called a bastion server) that has direct access to the database. Airbyte connects to the bastion and then asks the bastion to connect directly to the server. - -To connect to a AlloyDB instance via an SSH tunnel: - -1. While [setting up](#setup-guide) the AlloyDB source connector, from the SSH tunnel dropdown, select: - - SSH Key Authentication to use an RSA Private as your secret for establishing the SSH tunnel - - Password Authentication to use a password as your secret for establishing the SSH Tunnel -2. For **SSH Tunnel Jump Server Host**, enter the hostname or IP address for the intermediate (bastion) server that Airbyte will connect to. -3. For **SSH Connection Port**, enter the port on the bastion server. The default port for SSH connections is 22. -4. For **SSH Login Username**, enter the username to use when connecting to the bastion server. **Note:** This is the operating system username and not the AlloyDB username. -5. For authentication: - - If you selected **SSH Key Authentication**, set the **SSH Private Key** to the [RSA Private Key](#generating-an-rsa-private-key​) that you are using to create the SSH connection. - - If you selected **Password Authentication**, enter the password for the operating system user to connect to the bastion server. **Note:** This is the operating system password and not the AlloyDB password. - -#### Generating an RSA Private Key​ - -The connector expects an RSA key in PEM format. To generate this key, run: - -``` -ssh-keygen -t rsa -m PEM -f myuser_rsa -``` - -The command produces the private key in PEM format and the public key remains in the standard format used by the `authorized_keys` file on your bastion server. Add the public key to your bastion host to the user you want to use with Airbyte. The private key is provided via copy-and-paste to the Airbyte connector configuration screen to allow it to log into the bastion server. - -## Configuring AlloyDB connector with Change Data Capture (CDC) - -Airbyte uses [logical replication](https://www.postgresql.org/docs/10/logical-replication.html) of the Postgres write-ahead log (WAL) to incrementally capture deletes using a replication plugin. To learn more how Airbyte implements CDC, refer to [Change Data Capture (CDC)](https://docs.airbyte.com/understanding-airbyte/cdc/) - -### CDC Considerations - -- Incremental sync is only supported for tables with primary keys. For tables without primary keys, use [Full Refresh sync](https://docs.airbyte.com/understanding-airbyte/connections/full-refresh-overwrite). -- Data must be in tables and not views. -- The modifications you want to capture must be made using `DELETE`/`INSERT`/`UPDATE`. For example, changes made using `TRUNCATE`/`ALTER` will not appear in logs and therefore in your destination. -- Schema changes are not supported automatically for CDC sources. Reset and resync data if you make a schema change. -- The records produced by `DELETE` statements only contain primary keys. All other data fields are unset. -- Log-based replication only works for master instances of AlloyDB. -- Using logical replication increases disk space used on the database server. The additional data is stored until it is consumed. - - Set frequent syncs for CDC to ensure that the data doesn't fill up your disk space. - - If you stop syncing a CDC-configured AlloyDB instance with Airbyte, delete the replication slot. Otherwise, it may fill up your disk space. - -### Setting up CDC for AlloyDB - -Airbyte requires a replication slot configured only for its use. Only one source should be configured that uses this replication slot. See Setting up CDC for AlloyDB for instructions. - -#### Step 2: Select a replication plugin​ - -We recommend using a [pgoutput](https://www.postgresql.org/docs/9.6/logicaldecoding-output-plugin.html) plugin (the standard logical decoding plugin in AlloyDB). If the replication table contains multiple JSON blobs and the table size exceeds 1 GB, we recommend using a [wal2json](https://github.com/eulerto/wal2json) instead. Note that wal2json may require additional installation for Bare Metal, VMs (EC2/GCE/etc), Docker, etc. For more information read the [wal2json documentation](https://github.com/eulerto/wal2json). - -#### Step 3: Create replication slot​ - -To create a replication slot called `airbyte_slot` using pgoutput, run: - -``` -SELECT pg_create_logical_replication_slot('airbyte_slot', 'pgoutput'); -``` - -To create a replication slot called `airbyte_slot` using wal2json, run: - -``` -SELECT pg_create_logical_replication_slot('airbyte_slot', 'wal2json'); -``` - -#### Step 4: Create publications and replication identities for tables​ - -For each table you want to replicate with CDC, add the replication identity (the method of distinguishing between rows) first: - -To use primary keys to distinguish between rows, run: - -``` -ALTER TABLE tbl1 REPLICA IDENTITY DEFAULT; -``` - -After setting the replication identity, run: - -``` -CREATE PUBLICATION airbyte_publication FOR TABLE ;` -``` - -The publication name is customizable. Refer to the [Postgres docs](https://www.postgresql.org/docs/10/sql-alterpublication.html) if you need to add or remove tables from your publication in the future. - -:::note -You must add the replication identity before creating the publication. Otherwise, `ALTER`/`UPDATE`/`DELETE` statements may fail if AlloyDB cannot determine how to uniquely identify rows. -Also, the publication should include all the tables and only the tables that need to be synced. Otherwise, data from these tables may not be replicated correctly. -::: - -:::warning -The Airbyte UI currently allows selecting any tables for CDC. If a table is selected that is not part of the publication, it will not be replicated even though it is selected. If a table is part of the publication but does not have a replication identity, that replication identity will be created automatically on the first run if the Airbyte user has the necessary permissions. -::: - -#### Step 5: [Optional] Set up initial waiting time - -:::warning -This is an advanced feature. Use it if absolutely necessary. -::: - -The AlloyDB connector may need some time to start processing the data in the CDC mode in the following scenarios: - -- When the connection is set up for the first time and a snapshot is needed -- When the connector has a lot of change logs to process - -The connector waits for the default initial wait time of 5 minutes (300 seconds). Setting the parameter to a longer duration will result in slower syncs, while setting it to a shorter duration may cause the connector to not have enough time to create the initial snapshot or read through the change logs. The valid range is 120 seconds to 1200 seconds. - -If you know there are database changes to be synced, but the connector cannot read those changes, the root cause may be insufficient waiting time. In that case, you can increase the waiting time (example: set to 600 seconds) to test if it is indeed the root cause. On the other hand, if you know there are no database changes, you can decrease the wait time to speed up the zero record syncs. - -#### Step 6: Set up the AlloyDB source connector - -In [Step 2](#step-2-set-up-the-alloydb-connector-in-airbyte) of the connector setup guide, enter the replication slot and publication you just created. - -## Supported sync modes - -The AlloyDB source connector supports the following [sync modes](https://docs.airbyte.com/cloud/core-concepts#connection-sync-modes): - -- [Full Refresh - Overwrite](https://docs.airbyte.com/understanding-airbyte/connections/full-refresh-overwrite/) -- [Full Refresh - Append](https://docs.airbyte.com/understanding-airbyte/connections/full-refresh-append) -- [Incremental Sync - Append](https://docs.airbyte.com/understanding-airbyte/connections/incremental-append) -- [Incremental Sync - Append + Deduped](https://docs.airbyte.com/understanding-airbyte/connections/incremental-append-deduped) - -## Supported cursors - -- `TIMESTAMP` -- `TIMESTAMP_WITH_TIMEZONE` -- `TIME` -- `TIME_WITH_TIMEZONE` -- `DATE` -- `BIT` -- `BOOLEAN` -- `TINYINT/SMALLINT` -- `INTEGER` -- `BIGINT` -- `FLOAT/DOUBLE` -- `REAL` -- `NUMERIC/DECIMAL` -- `CHAR/NCHAR/NVARCHAR/VARCHAR/LONGVARCHAR` -- `BINARY/BLOB` - -## Data type mapping - -The AlloyDb is a fully managed PostgreSQL-compatible database service. - -According to Postgres [documentation](https://www.postgresql.org/docs/14/datatype.html), Postgres data types are mapped to the following data types when synchronizing data. You can check the test values examples [here](https://github.com/airbytehq/airbyte/blob/master/airbyte-integrations/connectors/source-postgres/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/PostgresSourceDatatypeTest.java). If you can't find the data type you are looking for or have any problems feel free to add a new test! - -| Postgres Type | Resulting Type | Notes | -| :------------------------------------ | :------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------- | -| `bigint` | number | | -| `bigserial`, `serial8` | number | | -| `bit` | string | Fixed-length bit string (e.g. "0100"). | -| `bit varying`, `varbit` | string | Variable-length bit string (e.g. "0100"). | -| `boolean`, `bool` | boolean | | -| `box` | string | | -| `bytea` | string | Variable length binary string with hex output format prefixed with "\x" (e.g. "\x6b707a"). | -| `character`, `char` | string | | -| `character varying`, `varchar` | string | | -| `cidr` | string | | -| `circle` | string | | -| `date` | string | Parsed as ISO8601 date time at midnight. CDC mode doesn't support era indicators. Issue: [#14590](https://github.com/airbytehq/airbyte/issues/14590) | -| `double precision`, `float`, `float8` | number | `Infinity`, `-Infinity`, and `NaN` are not supported and converted to `null`. Issue: [#8902](https://github.com/airbytehq/airbyte/issues/8902). | -| `hstore` | string | | -| `inet` | string | | -| `integer`, `int`, `int4` | number | | -| `interval` | string | | -| `json` | string | | -| `jsonb` | string | | -| `line` | string | | -| `lseg` | string | | -| `macaddr` | string | | -| `macaddr8` | string | | -| `money` | number | | -| `numeric`, `decimal` | number | `Infinity`, `-Infinity`, and `NaN` are not supported and converted to `null`. Issue: [#8902](https://github.com/airbytehq/airbyte/issues/8902). | -| `path` | string | | -| `pg_lsn` | string | | -| `point` | string | | -| `polygon` | string | | -| `real`, `float4` | number | | -| `smallint`, `int2` | number | | -| `smallserial`, `serial2` | number | | -| `serial`, `serial4` | number | | -| `text` | string | | -| `time` | string | Parsed as a time string without a time-zone in the ISO-8601 calendar system. | -| `timetz` | string | Parsed as a time string with time-zone in the ISO-8601 calendar system. | -| `timestamp` | string | Parsed as a date-time string without a time-zone in the ISO-8601 calendar system. | -| `timestamptz` | string | Parsed as a date-time string with time-zone in the ISO-8601 calendar system. | -| `tsquery` | string | | -| `tsvector` | string | | -| `uuid` | string | | -| `xml` | string | | -| `enum` | string | | -| `tsrange` | string | | -| `array` | array | E.g. "[\"10001\",\"10002\",\"10003\",\"10004\"]". | -| composite type | string | | - -## Limitations - -- The AlloyDB source connector currently does not handle schemas larger than 4MB. -- The AlloyDB source connector does not alter the schema present in your database. Depending on the destination connected to this source, however, the schema may be altered. See the destination's documentation for more details. -- The following two schema evolution actions are currently supported: - - Adding/removing tables without resetting the entire connection at the destination - Caveat: In the CDC mode, adding a new table to a connection may become a temporary bottleneck. When a new table is added, the next sync job takes a full snapshot of the new table before it proceeds to handle any changes. - - Resetting a single table within the connection without resetting the rest of the destination tables in that connection -- Changing a column data type or removing a column might break connections. - -## Changelog - -| Version | Date | Pull Request | Subject | -|:--------|:-----------| :------------------------------------------------------- |:------------------------------------------------------------------------------------------------------------------------------------------| -| 3.1.8 | 2023-09-20 | [30125](https://github.com/airbytehq/airbyte/pull/30125) | Improve initial load performance for older versions of PostgreSQL | -| 3.1.5 | 2023-08-22 | [29534](https://github.com/airbytehq/airbyte/pull/29534) | Support "options" JDBC URL parameter | -| 3.1.3 | 2023-08-03 | [28708](https://github.com/airbytehq/airbyte/pull/28708) | Enable checkpointing snapshots in CDC connections | -| 3.1.2 | 2023-08-01 | [28954](https://github.com/airbytehq/airbyte/pull/28954) | Fix an issue that prevented use of tables with names containing uppercase letters | -| 3.1.1 | 2023-07-31 | [28892](https://github.com/airbytehq/airbyte/pull/28892) | Fix an issue that prevented use of cursor columns with names containing uppercase letters | -| 3.1.0 | 2023-07-25 | [28339](https://github.com/airbytehq/airbyte/pull/28339) | Checkpointing initial load for incremental syncs: enabled for xmin and cursor based only. | -| 2.0.28 | 2023-04-26 | [25401](https://github.com/airbytehq/airbyte/pull/25401) | CDC : Upgrade Debezium to version 2.2.0 | -| 2.0.23 | 2023-04-19 | [24582](https://github.com/airbytehq/airbyte/pull/24582) | CDC : Enable frequent state emission during incremental syncs + refactor for performance improvement | -| 2.0.22 | 2023-04-17 | [25220](https://github.com/airbytehq/airbyte/pull/25220) | Logging changes : Log additional metadata & clean up noisy logs | -| 2.0.21 | 2023-04-12 | [25131](https://github.com/airbytehq/airbyte/pull/25131) | Make Client Certificate and Client Key always show | -| 2.0.19 | 2023-04-11 | [24656](https://github.com/airbytehq/airbyte/pull/24656) | CDC minor refactor | -| 2.0.17 | 2023-04-05 | [24622](https://github.com/airbytehq/airbyte/pull/24622) | Allow streams not in CDC publication to be synced in Full-refresh mode | -| 2.0.15 | 2023-04-04 | [24833](https://github.com/airbytehq/airbyte/pull/24833) | Disallow the "disable" SSL Modes; fix Debezium retry policy configuration | -| 2.0.13 | 2023-03-28 | [24166](https://github.com/airbytehq/airbyte/pull/24166) | Fix InterruptedException bug during Debezium shutdown | -| 2.0.11 | 2023-03-27 | [24529](https://github.com/airbytehq/airbyte/pull/24373) | Preparing the connector for CDC checkpointing | -| 2.0.10 | 2023-03-24 | [24529](https://github.com/airbytehq/airbyte/pull/24529) | Set SSL Mode to required on strict-encrypt variant | -| 2.0.9 | 2023-03-22 | [20760](https://github.com/airbytehq/airbyte/pull/20760) | Removed redundant date-time datatypes formatting | -| 2.0.6 | 2023-03-21 | [24271](https://github.com/airbytehq/airbyte/pull/24271) | Fix NPE in CDC mode | -| 2.0.3 | 2023-03-21 | [24147](https://github.com/airbytehq/airbyte/pull/24275) | Fix error with CDC checkpointing | -| 2.0.2 | 2023-03-13 | [23112](https://github.com/airbytehq/airbyte/pull/21727) | Add state checkpointing for CDC sync. | -| 2.0.1 | 2023-03-08 | [23596](https://github.com/airbytehq/airbyte/pull/23596) | For network isolation, source connector accepts a list of hosts it is allowed to connect | -| 2.0.0 | 2023-03-06 | [23112](https://github.com/airbytehq/airbyte/pull/23112) | Upgrade Debezium version to 2.1.2 | -| 1.0.51 | 2023-03-02 | [23642](https://github.com/airbytehq/airbyte/pull/23642) | Revert : Support JSONB datatype for Standard sync mode | -| 1.0.49 | 2023-02-27 | [21695](https://github.com/airbytehq/airbyte/pull/21695) | Support JSONB datatype for Standard sync mode | -| 1.0.48 | 2023-02-24 | [23383](https://github.com/airbytehq/airbyte/pull/23383) | Fixed bug with non readable double-quoted values within a database name or column name | -| 1.0.47 | 2023-02-22 | [22221](https://github.com/airbytehq/airbyte/pull/23138) | Fix previous versions which doesn't verify privileges correctly, preventing CDC syncs to run. | -| 1.0.46 | 2023-02-21 | [23105](https://github.com/airbytehq/airbyte/pull/23105) | Include log levels and location information (class, method and line number) with source connector logs published to Airbyte Platform. | -| 1.0.45 | 2023-02-09 | [22221](https://github.com/airbytehq/airbyte/pull/22371) | Ensures that user has required privileges for CDC syncs. | -| | 2023-02-15 | [23028](https://github.com/airbytehq/airbyte/pull/23028) | | -| 1.0.44 | 2023-02-06 | [22221](https://github.com/airbytehq/airbyte/pull/22221) | Exclude new set of system tables when using `pg_stat_statements` extension. | -| 1.0.43 | 2023-02-06 | [21634](https://github.com/airbytehq/airbyte/pull/21634) | Improve Standard sync performance by caching objects. | -| 1.0.36 | 2023-01-24 | [21825](https://github.com/airbytehq/airbyte/pull/21825) | Put back the original change that will cause an incremental sync to error if table contains a NULL value in cursor column. | -| 1.0.35 | 2022-12-14 | [20436](https://github.com/airbytehq/airbyte/pull/20346) | Consolidate date/time values mapping for JDBC sources | -| 1.0.34 | 2022-12-13 | [20378](https://github.com/airbytehq/airbyte/pull/20378) | Improve descriptions | -| 1.0.17 | 2022-10-31 | [18538](https://github.com/airbytehq/airbyte/pull/18538) | Encode database name | -| 1.0.16 | 2022-10-25 | [18256](https://github.com/airbytehq/airbyte/pull/18256) | Disable allow and prefer ssl modes in CDC mode | -| | 2022-10-13 | [15535](https://github.com/airbytehq/airbyte/pull/16238) | Update incremental query to avoid data missing when new data is inserted at the same time as a sync starts under non-CDC incremental mode | -| 1.0.15 | 2022-10-11 | [17782](https://github.com/airbytehq/airbyte/pull/17782) | Align with Postgres source v.1.0.15 | -| 1.0.0 | 2022-09-15 | [16776](https://github.com/airbytehq/airbyte/pull/16776) | Align with strict-encrypt version | -| 0.1.0 | 2022-09-05 | [16323](https://github.com/airbytehq/airbyte/pull/16323) | Initial commit. Based on source-postgres v.1.0.7 | diff --git a/docs/integrations/sources/amazon-ads.md b/docs/integrations/sources/amazon-ads.md index 680307eac499..4d860dc68f95 100644 --- a/docs/integrations/sources/amazon-ads.md +++ b/docs/integrations/sources/amazon-ads.md @@ -66,6 +66,7 @@ This source is capable of syncing the following streams: * [Sponsored Display Ad groups](https://advertising.amazon.com/API/docs/en-us/sponsored-display/3-0/openapi#/Ad%20groups) * [Sponsored Display Product Ads](https://advertising.amazon.com/API/docs/en-us/sponsored-display/3-0/openapi#/Product%20ads) * [Sponsored Display Targetings](https://advertising.amazon.com/API/docs/en-us/sponsored-display/3-0/openapi#/Targeting) +* [Sponsored Display Creatives](https://advertising.amazon.com/API/docs/en-us/sponsored-display/3-0/openapi#/Creatives) * [Sponsored Display Budget Rules](https://advertising.amazon.com/API/docs/en-us/sponsored-display/3-0/openapi/prod#/BudgetRules/GetSDBudgetRulesForAdvertiser) * [Sponsored Products Campaigns](https://advertising.amazon.com/API/docs/en-us/sponsored-display/3-0/openapi#/Campaigns) * [Sponsored Products Ad groups](https://advertising.amazon.com/API/docs/en-us/sponsored-products/2-0/openapi#/Ad%20groups) @@ -109,6 +110,7 @@ Information about expected report generation waiting time you may find [here](ht | Version | Date | Pull Request | Subject | |:--------|:-----------|:---------------------------------------------------------|:----------------------------------------------------------------------------------------------------------------| +| 3.4.0 | 2023-06-09 | [25913](https://github.com/airbytehq/airbyte/pull/26203) | Add Stream `DisplayCreatives` | | 3.3.0 | 2023-09-22 | [30679](https://github.com/airbytehq/airbyte/pull/30679) | Fix unexpected column for `SponsoredProductCampaigns` and `SponsoredBrandsKeywords` | | 3.2.0 | 2023-09-18 | [30517](https://github.com/airbytehq/airbyte/pull/30517) | Add suggested streams; fix unexpected column issue | | 3.1.2 | 2023-08-16 | [29233](https://github.com/airbytehq/airbyte/pull/29233) | Add filter for Marketplace IDs | diff --git a/docs/integrations/sources/apify-dataset-migrations.md b/docs/integrations/sources/apify-dataset-migrations.md index 9e1c23898419..e2c4a948a077 100644 --- a/docs/integrations/sources/apify-dataset-migrations.md +++ b/docs/integrations/sources/apify-dataset-migrations.md @@ -1,5 +1,9 @@ # Apify Dataset Migration Guide +## Upgrading to 2.0.0 + +Major update: The old broken Item Collection stream has been removed and replaced with a new Item Collection (WCC) stream specific for the datasets produced by [Website Content Crawler](https://apify.com/apify/website-content-crawler) Actor. Please update your connector configuration setup. Note: The schema of the Apify Dataset is at least Actor-specific, so we cannot have a general Stream with a static schema for getting data from a Dataset. + ## Upgrading to 1.0.0 A major update fixing the data ingestion to retrieve properly data from Apify. diff --git a/docs/integrations/sources/apify-dataset.md b/docs/integrations/sources/apify-dataset.md index 5d3e5fbb4359..69f060a2ab12 100644 --- a/docs/integrations/sources/apify-dataset.md +++ b/docs/integrations/sources/apify-dataset.md @@ -6,49 +6,64 @@ description: Web scraping and automation platform. ## Overview -[Apify](https://www.apify.com) is a web scraping and web automation platform providing both ready-made and custom solutions, an open-source [SDK](https://sdk.apify.com/) for web scraping, proxies, and many other tools to help you build and run web automation jobs at scale. +[Apify](https://apify.com/) is a web scraping and web automation platform providing both ready-made and custom solutions, an open-source [JavaScript SDK](https://docs.apify.com/sdk/js/) and [Python SDK](https://docs.apify.com/sdk/python/) for web scraping, proxies, and many other tools to help you build and run web automation jobs at scale. -The results of a scraping job are usually stored in [Apify Dataset](https://docs.apify.com/storage/dataset). This Airbyte connector allows you to automatically sync the contents of a dataset to your chosen destination using Airbyte. +The results of a scraping job are usually stored in the [Apify Dataset](https://docs.apify.com/storage/dataset). This Airbyte connector provides streams to work with the datasets, including syncing their contents to your chosen destination using Airbyte. To sync data from a dataset, all you need to know is its ID. You will find it in [Apify console](https://my.apify.com/) under storages. +Currently, only datasets provided by the Website Content Crawler Actor are supported. Adding streams for other Actors or a stream for the general dataset (with dynamic schema) will be added soon. + ### Running Airbyte sync from Apify webhook -When your Apify job \(aka [actor run](https://docs.apify.com/actors/running)\) finishes, it can trigger an Airbyte sync by calling the Airbyte [API](https://airbyte-public-api-docs.s3.us-east-2.amazonaws.com/rapidoc-api-docs.html#post-/v1/connections/sync) manual connection trigger \(`POST /v1/connections/sync`\). The API can be called from Apify [webhook](https://docs.apify.com/webhooks) which is executed when your Apify run finishes. +When your Apify job (aka [Actor run](https://docs.apify.com/platform/actors/running)) finishes, it can trigger an Airbyte sync by calling the Airbyte [API](https://airbyte-public-api-docs.s3.us-east-2.amazonaws.com/rapidoc-api-docs.html#post-/v1/connections/sync) manual connection trigger (`POST /v1/connections/sync`). The API can be called from Apify [webhook](https://docs.apify.com/platform/integrations/webhooks) which is executed when your Apify run finishes. ![](../../.gitbook/assets/apify_trigger_airbyte_connection.png) -### Output schema - -Since the dataset items do not have strongly typed schema, they are synced as objects stored in the `data` field, without any assumption on their content. - ### Features -| Feature | Supported? | -| :------------------------ | :--------------- | -| Full Refresh Sync | Yes | -| Incremental Sync | Yes | +| Feature | Supported? | +| :---------------- | :--------- | +| Full Refresh Sync | Yes | +| Incremental Sync | Yes | ### Performance considerations The Apify dataset connector uses [Apify Python Client](https://docs.apify.com/apify-client-python) under the hood and should handle any API limitations under normal usage. -## Getting started +## Streams + +### `dataset_collection` + +- Calls `api.apify.com/v2/datasets` ([docs](https://docs.apify.com/api/v2#/reference/datasets/dataset-collection/get-list-of-datasets)) +- Properties: + - Apify Personal API token (you can find it [here](https://console.apify.com/account/integrations)) + +### `dataset` -### Requirements +- Calls `https://api.apify.com/v2/datasets/{datasetId}` ([docs](https://docs.apify.com/api/v2#/reference/datasets/dataset/get-dataset)) +- Properties: + - Apify Personal API token (you can find it [here](https://console.apify.com/account/integrations)) + - Dataset ID (check the [docs](https://docs.apify.com/platform/storage/dataset)) -* Apify [token](https://console.apify.com/account/integrations) token -* Parameter clean: true or false +### `item_collection_website_content_crawler` -### Changelog +- Calls `api.apify.com/v2/datasets/{datasetId}/items` ([docs](https://docs.apify.com/api/v2#/reference/datasets/item-collection/get-items)) +- Properties: + - Apify Personal API token (you can find it [here](https://console.apify.com/account/integrations)) + - Dataset ID (check the [docs](https://docs.apify.com/platform/storage/dataset)) +- Limitations: + - Currently works only for the datasets produced by [Website Content Crawler](https://apify.com/apify/website-content-crawler). -| Version | Date | Pull Request | Subject | -| :-------- | :---------- | :------------------------------------------------------------ | :-------------------------------------------------------------------------- | -| 1.0.0 | 2023-08-25 | [29859](https://github.com/airbytehq/airbyte/pull/29859) | Migrate to lowcode | -| 0.2.0 | 2022-06-20 | [28290](https://github.com/airbytehq/airbyte/pull/28290) | Make connector work with platform changes not syncing empty stream schemas. | -| 0.1.11 | 2022-04-27 | [12397](https://github.com/airbytehq/airbyte/pull/12397) | No changes. Used connector to test publish workflow changes. | -| 0.1.9 | 2022-04-05 | [PR\#11712](https://github.com/airbytehq/airbyte/pull/11712) | No changes from 0.1.4. Used connector to test publish workflow changes. | -| 0.1.4 | 2021-12-23 | [PR\#8434](https://github.com/airbytehq/airbyte/pull/8434) | Update fields in source-connectors specifications | -| 0.1.2 | 2021-11-08 | [PR\#7499](https://github.com/airbytehq/airbyte/pull/7499) | Remove base-python dependencies | -| 0.1.0 | 2021-07-29 | [PR\#5069](https://github.com/airbytehq/airbyte/pull/5069) | Initial version of the connector | +## Changelog +| Version | Date | Pull Request | Subject | +| :------ | :--------- | :----------------------------------------------------------- | :-------------------------------------------------------------------------- | +| 2.0.0 | 2023-09-18 | [30428](https://github.com/airbytehq/airbyte/pull/30428) | Fix broken stream, manifest refactor | +| 1.0.0 | 2023-08-25 | [29859](https://github.com/airbytehq/airbyte/pull/29859) | Migrate to lowcode | +| 0.2.0 | 2022-06-20 | [28290](https://github.com/airbytehq/airbyte/pull/28290) | Make connector work with platform changes not syncing empty stream schemas. | +| 0.1.11 | 2022-04-27 | [12397](https://github.com/airbytehq/airbyte/pull/12397) | No changes. Used connector to test publish workflow changes. | +| 0.1.9 | 2022-04-05 | [PR\#11712](https://github.com/airbytehq/airbyte/pull/11712) | No changes from 0.1.4. Used connector to test publish workflow changes. | +| 0.1.4 | 2021-12-23 | [PR\#8434](https://github.com/airbytehq/airbyte/pull/8434) | Update fields in source-connectors specifications | +| 0.1.2 | 2021-11-08 | [PR\#7499](https://github.com/airbytehq/airbyte/pull/7499) | Remove base-python dependencies | +| 0.1.0 | 2021-07-29 | [PR\#5069](https://github.com/airbytehq/airbyte/pull/5069) | Initial version of the connector | diff --git a/docs/integrations/sources/auth0.md b/docs/integrations/sources/auth0.md index e6e39fc7d5e5..72ca3fb0c755 100644 --- a/docs/integrations/sources/auth0.md +++ b/docs/integrations/sources/auth0.md @@ -57,6 +57,7 @@ The connector is restricted by Auth0 [rate limits](https://auth0.com/docs/troubl | Version | Date | Pull Request | Subject | | :------ | :--------- | :------------------------------------------------------- | :---------------------------------------------------------------------- | +| 0.5.0 | 2023-10-11 | [30467](https://github.com/airbytehq/airbyte/pull/30467) | Use Python base image | | 0.4.1 | 2023-08-24 | [29804](https://github.com/airbytehq/airbyte/pull/29804) | Fix low code migration bugs | | 0.4.0 | 2023-08-03 | [28972](https://github.com/airbytehq/airbyte/pull/28972) | Migrate to Low-Code CDK | | 0.3.0 | 2023-06-20 | [29001](https://github.com/airbytehq/airbyte/pull/29001) | Add Organizations, OrganizationMembers, OrganizationMemberRoles streams | diff --git a/docs/integrations/sources/bing-ads-migrations.md b/docs/integrations/sources/bing-ads-migrations.md new file mode 100644 index 000000000000..3d378d2517ad --- /dev/null +++ b/docs/integrations/sources/bing-ads-migrations.md @@ -0,0 +1,10 @@ +# Bing Ads Migration Guide + +## Upgrading to 1.0.0 + +This version update only affects the geographic performance reports streams. + +Version 1.0.0 prevents the data loss by removing the primary keys from the `GeographicPerformanceReportMonthly`, `GeographicPerformanceReportWeekly`, `GeographicPerformanceReportDaily`, `GeographicPerformanceReportHourly` streams. +Due to multiple records with the same primary key, users could experience data loss in the incremental append+dedup mode because of deduplication. + +For the changes to take effect, please reset your data and refresh the stream schemas after you have applied the upgrade. \ No newline at end of file diff --git a/docs/integrations/sources/bing-ads.md b/docs/integrations/sources/bing-ads.md index 3f4453fbca2b..f5d8bbc64b88 100644 --- a/docs/integrations/sources/bing-ads.md +++ b/docs/integrations/sources/bing-ads.md @@ -123,6 +123,7 @@ The Bing Ads API limits the number of requests for all Microsoft Advertising cli | Version | Date | Pull Request | Subject | |:--------|:-----------|:---------------------------------------------------------------------------------------------------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------| +| 1.0.0 | 2023-10-11 | [31277](https://github.com/airbytehq/airbyte/pull/31277) | Remove primary keys from the geographic performance reports. | | 0.2.3 | 2023-09-28 | [30834](https://github.com/airbytehq/airbyte/pull/30834) | Wrap auth error with the config error. | | 0.2.2 | 2023-09-27 | [30791](https://github.com/airbytehq/airbyte/pull/30791) | Fix missing fields for geographic performance reports. | | 0.2.1 | 2023-09-04 | [30128](https://github.com/airbytehq/airbyte/pull/30128) | Add increasing download timeout if ReportingDownloadException occurs | diff --git a/docs/integrations/sources/chargebee.md b/docs/integrations/sources/chargebee.md index 81a64c2a707c..f369a67b5d67 100644 --- a/docs/integrations/sources/chargebee.md +++ b/docs/integrations/sources/chargebee.md @@ -4,7 +4,11 @@ This page contains the setup guide and reference information for the Chargebee s ## Prerequisites -To set up the Chargebee source connector, you'll need the [Chargebee API key](https://apidocs.chargebee.com/docs/api?prod_cat_ver=2#api_authentication) and the [Product Catalog version](https://apidocs.chargebee.com/docs/api?prod_cat_ver=2). +To set up the Chargebee source connector, you will need a valid [Chargebee API key](https://apidocs.chargebee.com/docs/api?prod_cat_ver=2#api_authentication) and the [Product Catalog version](https://www.chargebee.com/docs/1.0/upgrade-product-catalog.html) of the Chargebee site you are syncing data from. + +:::info +All Chargebee sites created from May 5, 2021 onward will have [Product Catalog 2.0](https://www.chargebee.com/docs/2.0/product-catalog.html) enabled by default. Sites created prior to this date will use [Product Catalog 1.0](https://www.chargebee.com/docs/1.0/product-catalog.html). +::: ## Set up the Chargebee connector in Airbyte @@ -26,45 +30,38 @@ The Chargebee source connector supports the following [sync modes](https://docs. * [Full Refresh - Append](https://docs.airbyte.com/understanding-airbyte/connections/full-refresh-append) * [Incremental - Append](https://docs.airbyte.com/understanding-airbyte/connections/incremental-append) -## Supported Streams - -* [Subscriptions](https://apidocs.chargebee.com/docs/api/subscriptions?prod_cat_ver=2#list_subscriptions) -* [Customers](https://apidocs.chargebee.com/docs/api/customers?prod_cat_ver=2#list_customers) -* [Invoices](https://apidocs.chargebee.com/docs/api/invoices?prod_cat_ver=2#list_invoices) -* [Orders](https://apidocs.chargebee.com/docs/api/orders?prod_cat_ver=2#list_orders) -* [Plans](https://apidocs.chargebee.com/docs/api/plans?prod_cat_ver=1&lang=curl#list_plans) -* [Addons](https://apidocs.chargebee.com/docs/api/addons?prod_cat_ver=1&lang=curl#list_addons) -* [Items](https://apidocs.chargebee.com/docs/api/items?prod_cat_ver=2#list_items) -* [Item Prices](https://apidocs.chargebee.com/docs/api/item_prices?prod_cat_ver=2#list_item_prices) -* [Attached Items](https://apidocs.chargebee.com/docs/api/attached_items?prod_cat_ver=2#list_attached_items) - -Some streams are available only for specific on Product Catalog versions: - -1. Available in `Product Catalog 1.0` and `Product Catalog 2.0`: - * Customers - * Events - * Invoices - * Credit Notes - * Orders - * Coupons - * Subscriptions - * Transactions -2. Available only in `Product Catalog 1.0`: - * Plans - * Addons -3. Available only in `Product Catalog 2.0`: - * Items - * Item Prices - * Attached Items - -Note that except the `Attached Items` stream, all the streams listed above are incremental streams, which means they: - -* Read only new records -* Output only new records - -The `Attached Items` stream is also incremental but it reads _all_ records and outputs only new records, which is why syncing the `Attached Items` stream, even in incremental mode, is expensive in terms of your Chargebee API quota. - -Generally speaking, it incurs a number of API calls equal to the total number of attached items in your chargebee instance divided by 100, regardless of how many `AttachedItems` were actually changed or synced in a particular sync job. +## Supported streams + +Most streams are supported regardless of your Chargebee site's [Product Catalog version](https://www.chargebee.com/docs/1.0/upgrade-product-catalog.html), with a few version-specific exceptions. + +| Stream | Product Catalog 1.0 | Product Catalog 2.0 | +|------------------------|---------------------|---------------------| +| [Addons](https://apidocs.chargebee.com/docs/api/addons?prod_cat_ver=1) | βœ” | | +| [Attached Items](https://apidocs.chargebee.com/docs/api/attached_items?prod_cat_ver=2) | | βœ” | +| [Contacts](https://apidocs.chargebee.com/docs/api/customers?lang=curl#list_of_contacts_for_a_customer) | βœ” | βœ” | +| [Coupons](https://apidocs.chargebee.com/docs/api/coupons) | βœ” | βœ” | +| [Credit Notes](https://apidocs.chargebee.com/docs/api/credit_notes) | βœ” | βœ” | +| [Customers](https://apidocs.chargebee.com/docs/api/customers) | βœ” | βœ” | +| [Events](https://apidocs.chargebee.com/docs/api/events) | βœ” | βœ” | +| [Gifts](https://apidocs.chargebee.com/docs/api/gifts) | βœ” | βœ” | +| [Hosted Pages](https://apidocs.chargebee.com/docs/api/hosted_pages) | βœ” | βœ” | +| [Invoices](https://apidocs.chargebee.com/docs/api/invoices) | βœ” | βœ” | +| [Items](https://apidocs.chargebee.com/docs/api/items?prod_cat_ver=2) | | βœ” | +| [Item Prices](https://apidocs.chargebee.com/docs/api/item_prices?prod_cat_ver=2) | | βœ” | +| [Orders](https://apidocs.chargebee.com/docs/api/orders) | βœ” | βœ” | +| [Payment Sources](https://apidocs.chargebee.com/docs/api/payment_sources) | βœ” | βœ” | +| [Plans](https://apidocs.chargebee.com/docs/api/plans?prod_cat_ver=1) | βœ” | | +| [Promotional Credits](https://apidocs.chargebee.com/docs/api/promotional_credits) | βœ” | βœ” | +| [Quotes](https://apidocs.chargebee.com/docs/api/quotes) | βœ” | βœ” | +| [Quote Line Groups](https://apidocs.chargebee.com/docs/api/quote_line_groups) | βœ” | βœ” | +| [Subscriptions](https://apidocs.chargebee.com/docs/api/subscriptions) | βœ” | βœ” | +| [Transactions](https://apidocs.chargebee.com/docs/api/transactions) | βœ” | βœ” | +| [Unbilled Charges](https://apidocs.chargebee.com/docs/api/unbilled_charges) | βœ” | βœ” | +| [Virtual Bank Accounts](https://apidocs.chargebee.com/docs/api/virtual_bank_accounts) | βœ” | βœ” | + +:::note +When using incremental sync mode, the `Attached Items` stream behaves differently than the other streams. Whereas other incremental streams read and output _only new_ records, the `Attached Items` stream reads _all_ records but only outputs _new_ records, making it more demanding on your Chargebee API quota. Each sync incurs API calls equal to the total number of attached items in your Chargebee instance divided by 100, regardless of the actual number of `Attached Items` changed or synced. +::: ## Performance considerations diff --git a/docs/integrations/sources/e2e-test-cloud.md b/docs/integrations/sources/e2e-test-cloud.md index f83816364112..be70af977245 100644 --- a/docs/integrations/sources/e2e-test-cloud.md +++ b/docs/integrations/sources/e2e-test-cloud.md @@ -30,5 +30,6 @@ The OSS and Cloud variants have the same version number. The Cloud variant was i | Version | Date | Pull request | Notes | |---------|------------|----------------------------------------------------------|-----------------------------------------------------| +| 2.1.5 | 2023-10-06 | [31092](https://github.com/airbytehq/airbyte/pull/31092) | Bring in changes from oss | | 2.1.4 | 2023-03-01 | [23656](https://github.com/airbytehq/airbyte/pull/23656) | Fix inheritance between e2e-test and e2e-test-cloud | | 0.1.0 | 2021-07-23 | [9720](https://github.com/airbytehq/airbyte/pull/9720) | Initial release. | diff --git a/docs/integrations/sources/e2e-test.md b/docs/integrations/sources/e2e-test.md index ad3de2470800..9988c9f497a7 100644 --- a/docs/integrations/sources/e2e-test.md +++ b/docs/integrations/sources/e2e-test.md @@ -70,15 +70,16 @@ This mode is also excluded from the Cloud variant of this connector. The OSS and Cloud variants have the same version number. The Cloud variant was initially released at version `1.0.0`. -| Version | Date | Pull request | Notes | -|---------|------------| ----------------------------------------------------------------------------------------------------------------- |-------------------------------------------------------------------------------------------------------| -| 2.1.4 | 2023-03-01 | [23656](https://github.com/airbytehq/airbyte/pull/23656) | Add speed benchmark mode to e2e test | -| 2.1.3 | 2022-08-25 | [15591](https://github.com/airbytehq/airbyte/pull/15591) | Declare supported sync modes in catalogs | -| 2.1.1 | 2022-06-17 | [13864](https://github.com/airbytehq/airbyte/pull/13864) | Updated stacktrace format for any trace message errors | -| 2.1.0 | 2021-02-12 | [\#10298](https://github.com/airbytehq/airbyte/pull/10298) | Support stream duplication to quickly create a multi-stream catalog. | -| 2.0.0 | 2021-02-01 | [\#9954](https://github.com/airbytehq/airbyte/pull/9954) | Remove legacy modes. Use more efficient Json generator. | -| 1.0.1 | 2021-01-29 | [\#9745](https://github.com/airbytehq/airbyte/pull/9745) | Integrate with Sentry. | -| 1.0.0 | 2021-01-23 | [\#9720](https://github.com/airbytehq/airbyte/pull/9720) | Add new continuous feed mode that supports arbitrary catalog specification. Initial release to cloud. | -| 0.1.2 | 2022-10-18 | [\#18100](https://github.com/airbytehq/airbyte/pull/18100) | Set supported sync mode on streams | -| 0.1.1 | 2021-12-16 | [\#8217](https://github.com/airbytehq/airbyte/pull/8217) | Fix sleep time in infinite feed mode. | +| Version | Date | Pull request | Notes | +|---------|------------| ------------------------------------------------------------------ |-------------------------------------------------------------------------------------------------------| +| 2.1.5 | 2023-10-04 | [31092](https://github.com/airbytehq/airbyte/pull/31092) | Bump jsonschemafriend dependency version to fix bug | +| 2.1.4 | 2023-03-01 | [23656](https://github.com/airbytehq/airbyte/pull/23656) | Add speed benchmark mode to e2e test | +| 2.1.3 | 2022-08-25 | [15591](https://github.com/airbytehq/airbyte/pull/15591) | Declare supported sync modes in catalogs | +| 2.1.1 | 2022-06-17 | [13864](https://github.com/airbytehq/airbyte/pull/13864) | Updated stacktrace format for any trace message errors | +| 2.1.0 | 2021-02-12 | [\#10298](https://github.com/airbytehq/airbyte/pull/10298) | Support stream duplication to quickly create a multi-stream catalog. | +| 2.0.0 | 2021-02-01 | [\#9954](https://github.com/airbytehq/airbyte/pull/9954) | Remove legacy modes. Use more efficient Json generator. | +| 1.0.1 | 2021-01-29 | [\#9745](https://github.com/airbytehq/airbyte/pull/9745) | Integrate with Sentry. | +| 1.0.0 | 2021-01-23 | [\#9720](https://github.com/airbytehq/airbyte/pull/9720) | Add new continuous feed mode that supports arbitrary catalog specification. Initial release to cloud. | +| 0.1.2 | 2022-10-18 | [\#18100](https://github.com/airbytehq/airbyte/pull/18100) | Set supported sync mode on streams | +| 0.1.1 | 2021-12-16 | [\#8217](https://github.com/airbytehq/airbyte/pull/8217) | Fix sleep time in infinite feed mode. | | 0.1.0 | 2021-07-23 | [\#3290](https://github.com/airbytehq/airbyte/pull/3290) [\#4939](https://github.com/airbytehq/airbyte/pull/4939) | Initial release. | diff --git a/docs/integrations/sources/everhour.md b/docs/integrations/sources/everhour.md index 3475806ec1f0..d8a99925fc5e 100644 --- a/docs/integrations/sources/everhour.md +++ b/docs/integrations/sources/everhour.md @@ -1,6 +1,6 @@ # Everhour -This page contains the setup guide and reference information for the Everhour source connector. +This page contains the setup guide and reference information for the [Everhour](https://everhour.com/) source connector. ## Prerequisites @@ -25,5 +25,4 @@ This project supports the following streams: | Version | Date | Pull Request | Subject | |:--------|:-----------|:---------------------------------------------------------|:-------------------------------------------------------------------------------| - | 0.1.0 | 2023-02-28 | [23593](https://github.com/airbytehq/airbyte/pull/23593) | Initial Release | diff --git a/docs/integrations/sources/facebook-marketing.md b/docs/integrations/sources/facebook-marketing.md index f0a6fb317fa5..818b8996f07d 100644 --- a/docs/integrations/sources/facebook-marketing.md +++ b/docs/integrations/sources/facebook-marketing.md @@ -178,6 +178,8 @@ The Facebook Marketing connector uses the `lookback_window` parameter to repeate | Version | Date | Pull Request | Subject | |:--------|:-----------|:---------------------------------------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 1.1.16 | 2023-10-11 | [31284](https://github.com/airbytehq/airbyte/pull/31284) | Fix error occurring when trying to access the `funding_source_details` field of the `AdAccount` stream | +| 1.1.15 | 2023-10-06 | [31132](https://github.com/airbytehq/airbyte/pull/31132) | Fix permission error for `AdAccount` stream | | 1.1.14 | 2023-09-26 | [30758](https://github.com/airbytehq/airbyte/pull/30758) | Exception should not be raises if a stream is not found | | 1.1.13 | 2023-09-22 | [30706](https://github.com/airbytehq/airbyte/pull/30706) | Performance testing - include socat binary in docker image | | 1.1.12 | 2023-09-22 | [30655](https://github.com/airbytehq/airbyte/pull/30655) | Updated doc; improved schema for custom insight streams; updated SAT or custom insight streams; removed obsolete optional max_batch_size option from spec | diff --git a/docs/integrations/sources/github.md b/docs/integrations/sources/github.md index 12230912edc3..99aed3ba0d76 100644 --- a/docs/integrations/sources/github.md +++ b/docs/integrations/sources/github.md @@ -45,7 +45,12 @@ Log into [GitHub](https://github.com) and then generate a [personal access token - **For Airbyte Open Source**: Authenticate with **Personal Access Token**. -6. **GitHub Repositories** - List of GitHub organizations/repositories, e.g. `airbytehq/airbyte` for single repository, `airbytehq/airbyte airbytehq/another-repo` for multiple repositories. If you want to specify the organization to receive data from all its repositories, then you should specify it according to the following example: `airbytehq/*`. Repositories with the wrong name, or repositories that do not exist, or have the wrong name format are not allowed. +6. **GitHub Repositories** - List of GitHub organizations/repositories, e.g. `airbytehq/airbyte` for single repository, `airbytehq/airbyte airbytehq/another-repo` for multiple repositories. If you want to specify the organization to receive data from all its repositories, then you should specify it according to the following example: `airbytehq/*`. + +:::caution +Repositories with the wrong name or repositories that do not exist or have the wrong name format will be skipped with `WARN` message in the logs. +::: + 7. **Start date (Optional)** - The date from which you'd like to replicate data for streams. If the date is not set, all data will be replicated. Using for streams: `Comments`, `Commit comment reactions`, `Commit comments`, `Commits`, `Deployments`, `Events`, `Issue comment reactions`, `Issue events`, `Issue milestones`, `Issue reactions`, `Issues`, `Project cards`, `Project columns`, `Projects`, `Pull request comment reactions`, `Pull requests`, `Pull request stats`, `Releases`, `Review comments`, `Reviews`, `Stargazers`, `Workflow runs`, `Workflows`. 8. **Branch (Optional)** - List of GitHub repository branches to pull commits for, e.g. `airbytehq/airbyte/master`. If no branches are specified for a repository, the default branch will be pulled. (e.g. `airbytehq/airbyte/master airbytehq/airbyte/my-branch`). 9. **Max requests per hour (Optional)** - The GitHub API allows for a maximum of 5000 requests per hour (15000 for Github Enterprise). You can specify a lower value to limit your use of the API quota. @@ -103,6 +108,7 @@ This connector outputs the following incremental streams: - [Review comments](https://docs.github.com/en/rest/pulls/comments?apiVersion=2022-11-28#list-review-comments-in-a-repository) - [Reviews](https://docs.github.com/en/rest/pulls/reviews?apiVersion=2022-11-28#list-reviews-for-a-pull-request) - [Stargazers](https://docs.github.com/en/rest/activity/starring?apiVersion=2022-11-28#list-stargazers) +- [WorkflowJobs](https://docs.github.com/pt/rest/actions/workflow-jobs?apiVersion=2022-11-28#list-jobs-for-a-workflow-run) - [WorkflowRuns](https://docs.github.com/en/rest/actions/workflow-runs?apiVersion=2022-11-28#list-workflow-runs-for-a-repository) - [Workflows](https://docs.github.com/en/rest/actions/workflows?apiVersion=2022-11-28#list-repository-workflows) @@ -158,6 +164,8 @@ The GitHub connector should not run into GitHub API limitations under normal usa | Version | Date | Pull Request | Subject | |:--------|:-----------|:------------------------------------------------------------------------------------------------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 1.5.1 | 2023-10-12 | [31307](https://github.com/airbytehq/airbyte/pull/31307) | Increase backoff_time for stream `ContributorActivity` | +| 1.5.0 | 2023-10-11 | [31300](https://github.com/airbytehq/airbyte/pull/31300) | Update Schemas: Add date-time format to fields | | 1.4.6 | 2023-10-04 | [31056](https://github.com/airbytehq/airbyte/pull/31056) | Migrate spec properties' `repository` and `branch` type to \ | | 1.4.5 | 2023-10-02 | [31023](https://github.com/airbytehq/airbyte/pull/31023) | Increase backoff for stream `Contributor Activity` | | 1.4.4 | 2023-10-02 | [30971](https://github.com/airbytehq/airbyte/pull/30971) | Mark `start_date` as optional. | diff --git a/docs/integrations/sources/gitlab.md b/docs/integrations/sources/gitlab.md index caf45350163f..dd1a84b8fd19 100644 --- a/docs/integrations/sources/gitlab.md +++ b/docs/integrations/sources/gitlab.md @@ -94,6 +94,7 @@ This connector outputs the following streams: - [Group and Project members](https://docs.gitlab.com/ee/api/members.html) - [Tags](https://docs.gitlab.com/ee/api/tags.html) - [Releases](https://docs.gitlab.com/ee/api/releases/index.html) +- [Deployments](https://docs.gitlab.com/ee/api/deployments/index.html) - [Group Labels](https://docs.gitlab.com/ee/api/group_labels.html) - [Project Labels](https://docs.gitlab.com/ee/api/labels.html) - [Epics](https://docs.gitlab.com/ee/api/epics.html) \(only available for GitLab Ultimate and GitLab.com Gold accounts\) @@ -111,6 +112,7 @@ Gitlab has the [rate limits](https://docs.gitlab.com/ee/user/gitlab_com/index.ht | Version | Date | Pull Request | Subject | | :------ | :--------- | :------------------------------------------------------- | :----------------------------------------------------------------------------------------- | +| 1.7.0 | 2023-08-08 | [27869](https://github.com/airbytehq/airbyte/pull/29203) | Add Deployments stream | | 1.6.0 | 2023-06-30 | [27869](https://github.com/airbytehq/airbyte/pull/27869) | Add `shared_runners_setting` field to groups | | 1.5.1 | 2023-06-24 | [27679](https://github.com/airbytehq/airbyte/pull/27679) | Fix formatting | | 1.5.0 | 2023-06-15 | [27392](https://github.com/airbytehq/airbyte/pull/27392) | Make API URL an optional parameter in spec. | diff --git a/docs/integrations/sources/google-sheets.md b/docs/integrations/sources/google-sheets.md index 7194cde645b2..92b8ec1ed73a 100644 --- a/docs/integrations/sources/google-sheets.md +++ b/docs/integrations/sources/google-sheets.md @@ -132,6 +132,7 @@ Airbyte batches requests to the API in order to efficiently pull data and respec | Version | Date | Pull Request | Subject | |---------|------------|----------------------------------------------------------|-----------------------------------------------------------------------------------| +| 0.3.10 | 2023-09-27 | [30487](https://github.com/airbytehq/airbyte/pull/30487) | Fix bug causing rows to be skipped when batch size increased due to rate limits. | | 0.3.9 | 2023-09-25 | [30749](https://github.com/airbytehq/airbyte/pull/30749) | Performance testing - include socat binary in docker image | | 0.3.8 | 2023-09-25 | [30747](https://github.com/airbytehq/airbyte/pull/30747) | Performance testing - include socat binary in docker image | | 0.3.7 | 2023-08-25 | [29826](https://github.com/airbytehq/airbyte/pull/29826) | Remove row batch size from spec, add auto increase this value when rate limits | diff --git a/docs/integrations/sources/linkedin-ads.md b/docs/integrations/sources/linkedin-ads.md index 0b752afae000..fde3a37c227b 100644 --- a/docs/integrations/sources/linkedin-ads.md +++ b/docs/integrations/sources/linkedin-ads.md @@ -171,6 +171,7 @@ After 5 unsuccessful attempts - the connector will stop the sync operation. In s | Version | Date | Pull Request | Subject | |:--------|:-----------|:---------------------------------------------------------|:----------------------------------------------------------------------------------------------------------------| +| 0.6.2 | 2023-08-23 | [29600](https://github.com/airbytehq/airbyte/pull/31221) | Increase max time between messages to 24 hours | | 0.6.1 | 2023-08-23 | [29600](https://github.com/airbytehq/airbyte/pull/29600) | Update field descriptions | | 0.6.0 | 2023-08-22 | [29721](https://github.com/airbytehq/airbyte/pull/29721) | Add `Conversions` stream | | 0.5.0 | 2023-08-14 | [29175](https://github.com/airbytehq/airbyte/pull/29175) | Add Custom report Constructor | diff --git a/docs/integrations/sources/mysql.md b/docs/integrations/sources/mysql.md index a6dd79349942..13f7644be39b 100644 --- a/docs/integrations/sources/mysql.md +++ b/docs/integrations/sources/mysql.md @@ -264,6 +264,8 @@ WHERE actor_definition_id ='435bb9a5-7887-4809-aa58-28c27df0d7ad' AND (configura | Version | Date | Pull Request | Subject | |:--------|:-----------|:-----------------------------------------------------------|:------------------------------------------------------------------------------------------------------------------------------------------------| +| 3.1.3 | 2023-10-11 | [31322](https://github.com/airbytehq/airbyte/pull/31322) | Correct pevious release | +| 3.1.2 | 2023-09-29 | [30806](https://github.com/airbytehq/airbyte/pull/30806) | Cap log line length to 32KB to prevent loss of records | | 3.1.1 | 2023-09-26 | [30744](https://github.com/airbytehq/airbyte/pull/30744) | Update MySQL JDBC connection configs to keep default auto-commit behavior | | 3.1.0 | 2023-09-21 | [30270](https://github.com/airbytehq/airbyte/pull/30270) | Enhanced Standard Sync with initial load via Primary Key with a switch to cursor for incremental syncs | | 3.0.9 | 2023-09-20 | [30620](https://github.com/airbytehq/airbyte/pull/30620) | Airbyte Certified MySQL Source connector | diff --git a/docs/integrations/sources/notion-migrations.md b/docs/integrations/sources/notion-migrations.md new file mode 100644 index 000000000000..d08cd0e331e0 --- /dev/null +++ b/docs/integrations/sources/notion-migrations.md @@ -0,0 +1,11 @@ +# Notion Migration Guide + +## Upgrading to 2.0.0 + +Version 2.0.0 introduces a number of changes to the JSON schemas of all streams. These changes are being introduced to reflect updates to the Notion API. Some breaking changes have been introduced that will affect the Blocks, Databases and Pages stream. + +- The type of the `rich_text` property in the Pages stream has been updated from an object to an array of `rich_text` objects +- The type of the `phone_number` property in the Pages stream has been updated from a string to an object +- The deprecated `text` property in content blocks has been renamed to `rich_text`. This change affects the Blocks, Databases and Pages streams. + +A full schema refresh and data reset are required when upgrading to this version. diff --git a/docs/integrations/sources/notion.inapp.md b/docs/integrations/sources/notion.inapp.md deleted file mode 100644 index 019885f44abf..000000000000 --- a/docs/integrations/sources/notion.inapp.md +++ /dev/null @@ -1,33 +0,0 @@ -## Prerequisite - -* Access to a Notion workspace -​ -## Setup guide - -1. Enter a **Source name** to help you identify this source in Airbyte. -2. Choose the method of authentication: - - -:::note -We highly recommend using OAuth2.0 authorization to connect to Notion, as this method significantly simplifies the setup process. If you use OAuth2.0 authorization, you do _not_ need to create and configure a new integration in Notion. Instead, you can authenticate your Notion account directly in Airbyte Cloud. -::: - -- **OAuth2.0** (Recommended): Click **Authenticate your Notion account**. When the popup appears, click **Select pages**. Check the pages you want to give Airbyte access to, and click **Allow access**. -- **Access Token**: Copy and paste the Access Token found in the **Secrets** tab of your Notion integration's page. For more information on how to create and configure an integration in Notion, refer to our -[full documentation](https://docs.airbyte.io/integrations/sources/notion#setup-guide). - - - -- **Access Token**: Copy and paste the Access Token found in the **Secrets** tab of your Notion integration's page. -- **OAuth2.0**: Copy and paste the Client ID, Client Secret and Access Token you acquired. - -To obtain the necessary authorization credentials, you need to create and configure an integration in Notion. For more information on how to create and configure an integration in Notion, refer to our -[full documentation](https://docs.airbyte.io/integrations/sources/notion#setup-guide). - - -3. Enter the **Start Date** using the provided datepicker, or by programmatically entering a UTC date and time in the format: `YYYY-MM-DDTHH:mm:ss.SSSZ`. All data generated after this date will be replicated. -4. Click **Set up source** and wait for the tests to complete. -​ - -For detailed information on supported sync modes, supported streams, performance considerations, refer to the -[full documentation for Notion](https://docs.airbyte.com/integrations/sources/notion). diff --git a/docs/integrations/sources/notion.md b/docs/integrations/sources/notion.md index 1cb3e43f6af6..aa07862e0649 100644 --- a/docs/integrations/sources/notion.md +++ b/docs/integrations/sources/notion.md @@ -4,7 +4,7 @@ This page contains the setup guide and reference information for the Notion sour ## Prerequisites -- Access to a Notion workspace +- Access to a [Notion](https://notion.so/login) workspace ## Setup guide​ @@ -14,14 +14,12 @@ To authenticate the Notion source connector, you need to use **one** of the foll - Access Token :::note -**For Airbyte Cloud users:** We highly recommend using OAuth2.0 authorization to connect to Notion, as this method significantly simplifies the setup process. If you use OAuth2.0 authorization in Airbyte Cloud, you do **not** need to create and configure a new integration in Notion. Instead, you can proceed straight to -[setting up the connector in Airbyte](#step-3-set-up-the-notion-connector-in-airbyte). +**For Airbyte Cloud users:** We highly recommend using OAuth2.0 authorization to connect to Notion, as this method significantly simplifies the setup process. If you use OAuth2.0 authorization in Airbyte Cloud, you do **not** need to create and configure a new integration in Notion. Instead, you can proceed straight to [setting up the connector in Airbyte](#step-3-set-up-the-notion-connector-in-airbyte). ::: -We have provided a quick setup guide for creating an integration in Notion below. If you would like more detailed information and context on Notion integrations, or experience any difficulties with the integration setup process, please refer to the -[official Notion documentation](https://developers.notion.com/docs). +We have provided a quick setup guide for creating an integration in Notion below. If you would like more detailed information and context on Notion integrations, or experience any difficulties with the integration setup process, please refer to the [official Notion documentation](https://developers.notion.com/docs). -### Step 1: Create an integration in Notion​ +### Step 1: Create an integration in Notion​ and set capabilities 1. Log in to your Notion workspace and navigate to the [My integrations](https://www.notion.so/my-integrations) page. Select **+ New integration**. @@ -29,24 +27,27 @@ We have provided a quick setup guide for creating an integration in Notion below You must be the owner of the Notion workspace to create a new integration associated with it. ::: -2. Enter a **Name** for your integration. Make sure you have selected the workspace containing your data to replicate from the **Associated workspace** dropdown menu, and click **Submit**. -3. In the navbar, select **Capabilities** and make sure to check the **Read content** checkbox to authorize Airbyte to read the content of your pages. You may also wish to check the **Read comments** box, as well as set a User capability to allow access to user information. For more details on the capabilities you can enable, please refer to the [Notion documentation on capabilities](https://developers.notion.com/reference/capabilities). +2. Enter a **Name** for your integration. Make sure you have selected the correct workspace from the **Associated workspace** dropdown menu, and click **Submit**. +3. In the navbar, select [**Capabilities**](https://developers.notion.com/reference/capabilities). Check the following capabilities based on your use case: -### Step 2: Set permissions and acquire authorization credentials +- [**Read content**](https://developers.notion.com/reference/capabilities#content-capabilities): required for all connections. +- [**Read comments**](https://developers.notion.com/reference/capabilities#comment-capabilities): required if you wish to sync the `Comments` stream +- [**Read user information**](https://developers.notion.com/reference/capabilities#user-capabilities) (either with or without emails): required if you wish to sync the `Users` stream + +### Step 2: Share pages and acquire authorization credentials #### Access Token (Cloud and Open Source) -If you are authenticating via Access Token, you will need to manually set permissions for each page you want to share with Airbyte. +If you are authenticating via Access Token, you will need to manually share each page you want to sync with Airbyte. 1. Navigate to the page(s) you want to share with Airbyte. Click the **β€’β€’β€’** menu at the top right of the page, select **Add connections**, and choose the integration you created in Step 1. -2. Once you have selected all the pages to share, you can find and copy the Access Token from the **Secrets** tab of your Notion integration's page. Then proceed to - [setting up the connector in Airbyte](#step-2-set-up-the-notion-connector-in-airbyte). +2. Once you have selected all the pages to share, you can find and copy the Access Token from the **Secrets** tab of your Notion integration's page. Then proceed to [setting up the connector in Airbyte](#step-2-set-up-the-notion-connector-in-airbyte). #### OAuth2.0 (Open Source only) -If you are authenticating via OAuth2.0 for Airbyte Open Source, you will need to make your integration public and acquire your Client ID, Client Secret and Access Token. +If you are authenticating via OAuth2.0 for **Airbyte Open Source**, you will need to make your integration public and acquire your Client ID, Client Secret and Access Token. 1. Navigate to the **Distribution** tab in your integration page, and toggle the switch to make the integration public. 2. Fill out the required fields in the **Organization information** and **OAuth Domain & URIs** section, then click **Submit**. @@ -65,39 +66,37 @@ If you are authenticating via OAuth2.0 for Airbyte Open Source, you will need to #### Authentication for Airbyte Cloud - **OAuth2.0** (Recommended): Click **Authenticate your Notion account**. When the popup appears, click **Select pages**. Check the pages you want to give Airbyte access to, and click **Allow access**. -- **Access Token**: Copy and paste the Access Token found in the **Secrets** tab of your Notion integration's page. +- **Access Token**: Copy and paste the Access Token found in the **Secrets** tab of your private integration's page. #### Authentication for Airbyte Open Source -- **Access Token**: Copy and paste the Access Token found in the **Secrets** tab of your Notion integration's page. -- **OAuth2.0**: Copy and paste the Client ID, Client Secret and Access Token you acquired. +- **Access Token**: Copy and paste the Access Token found in the **Secrets** tab of your private integration's page. +- **OAuth2.0**: Copy and paste the Client ID, Client Secret and Access Token you acquired after setting up your public integration. -6. Enter the **Start Date** using the provided datepicker, or by programmatically entering a UTC date and time in the format: `YYYY-MM-DDTHH:mm:ss.SSSZ`. All data generated after this date will be replicated. +6. (Optional) You may optionally provide a **Start Date** using the provided datepicker, or by programmatically entering a UTC date and time in the format: `YYYY-MM-DDTHH:mm:ss.SSSZ`. When using incremental syncs, only data generated after this date will be replicated. If left blank, Airbyte will set the start date two years from the current date by default. 7. Click **Set up source** and wait for the tests to complete. ## Supported sync modes The Notion source connector supports the following [sync modes](https://docs.airbyte.com/cloud/core-concepts#connection-sync-modes): -- [Full Refresh - Overwrite](https://docs.airbyte.com/understanding-airbyte/connections/full-refresh-overwrite/) -- [Full Refresh - Append](https://docs.airbyte.com/understanding-airbyte/connections/full-refresh-append) -- [Incremental - Append](https://docs.airbyte.com/understanding-airbyte/connections/incremental-append) (partially) -- [Incremental - Append + Deduped](https://docs.airbyte.com/understanding-airbyte/connections/incremental-append-deduped) +| Stream | Full Refresh (Overwrite/Append) | Incremental (Append/Append + Deduped) | +|-----------|:------------:|:-----------:| +| Blocks | βœ“ | βœ“ | +| Comments | βœ“ | βœ“ | +| Databases | βœ“ | βœ“ | +| Pages | βœ“ | βœ“ | +| Users | βœ“ | | ## Supported Streams -The Notion source connector supports the following streams. For more information, see the [Notion API](https://developers.notion.com/reference/intro). - -- [blocks](https://developers.notion.com/reference/retrieve-a-block) -- [databases](https://developers.notion.com/reference/retrieve-a-database) -- [pages](https://developers.notion.com/reference/retrieve-a-page) -- [users](https://developers.notion.com/reference/get-user) - -:::note - -The users stream does not support Incremental - Append sync mode. +The Notion source connector supports the following streams: -::: +- [Blocks](https://developers.notion.com/reference/retrieve-a-block) +- [Comments](https://developers.notion.com/reference/retrieve-a-comment) +- [Databases](https://developers.notion.com/reference/retrieve-a-database) +- [Pages](https://developers.notion.com/reference/retrieve-a-page) +- [Users](https://developers.notion.com/reference/get-users) ## Performance considerations @@ -107,7 +106,12 @@ The connector is restricted by Notion [request limits](https://developers.notion | Version | Date | Pull Request | Subject | | :------ | :--------- | :------------------------------------------------------- | :--------------------------------------------------------------------------- | -| 1.1.2 | 2023-08-30 | [29999](https://github.com/airbytehq/airbyte/pull/29999) | Update error handling during connection check +| 2.0.0 | 2023-10-09 | [30587](https://github.com/airbytehq/airbyte/pull/30587) | Source-wide schema update | +| 1.3.0 | 2023-10-09 | [30324](https://github.com/airbytehq/airbyte/pull/30324) | Add `Comments` stream | +| 1.2.2 | 2023-10-09 | [30780](https://github.com/airbytehq/airbyte/pull/30780) | Update Start Date in config to optional field | +| 1.2.1 | 2023-10-08 | [30750](https://github.com/airbytehq/airbyte/pull/30750) | Add availability strategy | +| 1.2.0 | 2023-10-04 | [31053](https://github.com/airbytehq/airbyte/pull/31053) | Add undeclared fields for blocks and pages streams | +| 1.1.2 | 2023-08-30 | [29999](https://github.com/airbytehq/airbyte/pull/29999) | Update error handling during connection check | | 1.1.1 | 2023-06-14 | [26535](https://github.com/airbytehq/airbyte/pull/26535) | Migrate from deprecated `authSpecification` to `advancedAuth` | | 1.1.0 | 2023-06-08 | [27170](https://github.com/airbytehq/airbyte/pull/27170) | Fix typo in `blocks` schema | | 1.0.9 | 2023-06-08 | [27062](https://github.com/airbytehq/airbyte/pull/27062) | Skip streams with `invalid_start_cursor` error | diff --git a/docs/integrations/sources/pokeapi.md b/docs/integrations/sources/pokeapi.md index 797a58d71857..dd6605758c33 100644 --- a/docs/integrations/sources/pokeapi.md +++ b/docs/integrations/sources/pokeapi.md @@ -36,6 +36,8 @@ The PokΓ©API uses the same [JSONSchema](https://json-schema.org/understanding-js | Version | Date | Pull Request | Subject | | :------ | :--------- | :------------------------------------------------------- | :---------------------------------------------- | +| 0.2.0 | 2023-10-02 | [30969](https://github.com/airbytehq/airbyte/pull/30969) | Migrated to Low code + | | 0.1.5 | 2022-05-18 | [12942](https://github.com/airbytehq/airbyte/pull/12942) | Fix example inputs | | 0.1.4 | 2021-12-07 | [8582](https://github.com/airbytehq/airbyte/pull/8582) | Update connector fields title/description | | 0.1.3 | 2021-12-03 | [8432](https://github.com/airbytehq/airbyte/pull/8432) | Migrate from base_python to CDK, add SAT tests. | diff --git a/docs/integrations/sources/postgres.md b/docs/integrations/sources/postgres.md index 564d461619fd..5af77f7d88ed 100644 --- a/docs/integrations/sources/postgres.md +++ b/docs/integrations/sources/postgres.md @@ -291,6 +291,8 @@ According to Postgres [documentation](https://www.postgresql.org/docs/14/datatyp | Version | Date | Pull Request | Subject | |---------|------------|----------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 3.1.11 | 2023-10-11 | [31322](https://github.com/airbytehq/airbyte/pull/31322) | Correct pevious release | +| 3.1.10 | 2023-09-29 | [30806](https://github.com/airbytehq/airbyte/pull/30806) | Cap log line length to 32KB to prevent loss of records. | | 3.1.9 | 2023-09-25 | [30534](https://github.com/airbytehq/airbyte/pull/30534) | Fix JSONB[] column type handling bug. | | 3.1.8 | 2023-09-20 | [30125](https://github.com/airbytehq/airbyte/pull/30125) | Improve initial load performance for older versions of PostgreSQL. | | 3.1.7 | 2023-09-05 | [29672](https://github.com/airbytehq/airbyte/pull/29672) | Handle VACUUM happening during initial sync | diff --git a/docs/integrations/sources/slack.md b/docs/integrations/sources/slack.md index 1996d2791733..9eaea88e101d 100644 --- a/docs/integrations/sources/slack.md +++ b/docs/integrations/sources/slack.md @@ -92,7 +92,7 @@ We recommend creating a restricted, read-only key specifically for Airbyte acces 3. **Required** Enter your `start_date`. 4. **Required** Enter your `lookback_window`, which corresponds to amount of days in the past from which you want to sync data. 5. Toggle `join_channels`, if you want to join all channels or to sync data only from channels the bot is already in. If not set, you'll need to manually add the bot to all the channels from which you'd like to sync messages. -6. Enter your `channel_filter`, this should be list of channel names (without leading '#' char) that limits the channels from which you'd like to sync. If no channels are specified, Airbyte will replicate all data. +6. Enter your `channel_filter`, this should be list of channel names (without leading '#' char) that limits the channels from which you'd like to sync. If no channels are specified, Airbyte will replicate all data. 7. Enter your `api_token`. 8. Click **Set up source**. @@ -137,6 +137,7 @@ It is recommended to sync required channels only, this can be done by specifying | Version | Date | Pull Request | Subject | |:--------|:-----------|:---------------------------------------------------------|:------------------------------------------------------------------------------------| +| 0.3.4 | 2023-10-06 | [31134](https://github.com/airbytehq/airbyte/pull/31134) | Update CDK and remove non iterable return from records | | 0.3.3 | 2023-09-28 | [30580](https://github.com/airbytehq/airbyte/pull/30580) | Add `bot_id` field to threads schema | | 0.3.2 | 2023-09-20 | [30613](https://github.com/airbytehq/airbyte/pull/30613) | Set default value for channel_filters during discover | | 0.3.1 | 2023-09-19 | [30570](https://github.com/airbytehq/airbyte/pull/30570) | Use default availability strategy | diff --git a/docs/integrations/sources/snowflake.md b/docs/integrations/sources/snowflake.md index 0e93412be2e1..f79171a7fe0d 100644 --- a/docs/integrations/sources/snowflake.md +++ b/docs/integrations/sources/snowflake.md @@ -4,7 +4,7 @@ The Snowflake source allows you to sync data from Snowflake. It supports both Full Refresh and Incremental syncs. You can choose if this connector will copy only the new or updated data, or all rows in the tables and columns you set up for replication, every time a sync is run. -This Snowflake source connector is built on top of the source-jdbc code base and is configured to rely on JDBC 3.13.22 [Snowflake driver](https://github.com/snowflakedb/snowflake-jdbc) as described in Snowflake [documentation](https://docs.snowflake.com/en/user-guide/jdbc.html). +This Snowflake source connector is built on top of the source-jdbc code base and is configured to rely on JDBC 3.14.1 [Snowflake driver](https://github.com/snowflakedb/snowflake-jdbc) as described in Snowflake [documentation](https://docs.snowflake.com/en/user-guide/jdbc.html). #### Resulting schema @@ -121,41 +121,42 @@ To read more please check official [Snowflake documentation](https://docs.snowfl ## Changelog -| Version | Date | Pull Request | Subject | -| :------ | :--------- | :------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------- | -| 0.2.0 | 2023-06-26 | [27737](https://github.com/airbytehq/airbyte/pull/27737) | License Update: Elv2 | -| 0.1.36 | 2023-06-20 | [27212](https://github.com/airbytehq/airbyte/pull/27212) | Fix silent exception swallowing in StreamingJdbcDatabase | -| 0.1.35 | 2023-06-14 | [27335](https://github.com/airbytehq/airbyte/pull/27335) | Remove noisy debug logs | -| 0.1.34 | 2023-03-30 | [24693](https://github.com/airbytehq/airbyte/pull/24693) | Fix failure with TIMESTAMP_WITH_TIMEZONE column being used as cursor | -| 0.1.33 | 2023-03-29 | [24667](https://github.com/airbytehq/airbyte/pull/24667) | Fix bug which wont allow TIMESTAMP_WITH_TIMEZONE column to be used as a cursor | -| 0.1.32 | 2023-03-22 | [20760](https://github.com/airbytehq/airbyte/pull/20760) | Removed redundant date-time datatypes formatting | -| 0.1.31 | 2023-03-06 | [23455](https://github.com/airbytehq/airbyte/pull/23455) | For network isolation, source connector accepts a list of hosts it is allowed to connect to | -| 0.1.30 | 2023-02-21 | [22358](https://github.com/airbytehq/airbyte/pull/22358) | Improved handling of big integer cursor type values. | -| 0.1.29 | 2022-12-14 | [20436](https://github.com/airbytehq/airbyte/pull/20346) | Consolidate date/time values mapping for JDBC sources. | -| 0.1.28 | 2023-01-06 | [20465](https://github.com/airbytehq/airbyte/pull/20465) | Improve the schema config field to only discover tables from the specified scehma and make the field optional | -| 0.1.27 | 2022-12-14 | [20407](https://github.com/airbytehq/airbyte/pull/20407) | Fix an issue with integer values converted to floats during replication | -| 0.1.26 | 2022-11-10 | [19314](https://github.com/airbytehq/airbyte/pull/19314) | Set application id in JDBC URL params based on OSS/Cloud environment | -| 0.1.25 | 2022-11-10 | [15535](https://github.com/airbytehq/airbyte/pull/15535) | Update incremental query to avoid data missing when new data is inserted at the same time as a sync starts under non-CDC incremental mode | -| 0.1.24 | 2022-09-26 | [17144](https://github.com/airbytehq/airbyte/pull/17144) | Fixed bug with incorrect date-time datatypes handling | -| 0.1.23 | 2022-09-26 | [17116](https://github.com/airbytehq/airbyte/pull/17116) | added connection string identifier | -| 0.1.22 | 2022-09-21 | [16766](https://github.com/airbytehq/airbyte/pull/16766) | Update JDBC Driver version to 3.13.22 | -| 0.1.21 | 2022-09-14 | [15668](https://github.com/airbytehq/airbyte/pull/15668) | Wrap logs in AirbyteLogMessage | -| 0.1.20 | 2022-09-01 | [16258](https://github.com/airbytehq/airbyte/pull/16258) | Emit state messages more frequently | -| 0.1.19 | 2022-08-19 | [15797](https://github.com/airbytehq/airbyte/pull/15797) | Allow using role during oauth | -| 0.1.18 | 2022-08-18 | [14356](https://github.com/airbytehq/airbyte/pull/14356) | DB Sources: only show a table can sync incrementally if at least one column can be used as a cursor field | -| 0.1.17 | 2022-08-09 | [15314](https://github.com/airbytehq/airbyte/pull/15314) | Discover integer columns as integers rather than floats | -| 0.1.16 | 2022-08-04 | [15314](https://github.com/airbytehq/airbyte/pull/15314) | (broken, do not use) Discover integer columns as integers rather than floats | -| 0.1.15 | 2022-07-22 | [14828](https://github.com/airbytehq/airbyte/pull/14828) | Source Snowflake: Source/Destination doesn't respect DATE data type | -| 0.1.14 | 2022-07-22 | [14714](https://github.com/airbytehq/airbyte/pull/14714) | Clarified error message when invalid cursor column selected | -| 0.1.13 | 2022-07-14 | [14574](https://github.com/airbytehq/airbyte/pull/14574) | Removed additionalProperties:false from JDBC source connectors | -| 0.1.12 | 2022-04-29 | [12480](https://github.com/airbytehq/airbyte/pull/12480) | Query tables with adaptive fetch size to optimize JDBC memory consumption | -| 0.1.11 | 2022-04-27 | [10953](https://github.com/airbytehq/airbyte/pull/10953) | Implement OAuth flow | -| 0.1.9 | 2022-02-21 | [10242](https://github.com/airbytehq/airbyte/pull/10242) | Fixed cursor for old connectors that use non-microsecond format. Now connectors work with both formats | -| 0.1.8 | 2022-02-18 | [10242](https://github.com/airbytehq/airbyte/pull/10242) | Updated timestamp transformation with microseconds | -| 0.1.7 | 2022-02-14 | [10256](https://github.com/airbytehq/airbyte/pull/10256) | Add `-XX:+ExitOnOutOfMemoryError` JVM option | -| 0.1.6 | 2022-01-25 | [9623](https://github.com/airbytehq/airbyte/pull/9623) | Add jdbc_url_params support for optional JDBC parameters | -| 0.1.5 | 2022-01-19 | [9567](https://github.com/airbytehq/airbyte/pull/9567) | Added parameter for keeping JDBC session alive | -| 0.1.4 | 2021-12-30 | [9203](https://github.com/airbytehq/airbyte/pull/9203) | Update connector fields title/description | -| 0.1.3 | 2021-01-11 | [9304](https://github.com/airbytehq/airbyte/pull/9304) | Upgrade version of JDBC driver | -| 0.1.2 | 2021-10-21 | [7257](https://github.com/airbytehq/airbyte/pull/7257) | Fixed parsing of extreme values for FLOAT and NUMBER data types | -| 0.1.1 | 2021-08-13 | [4699](https://github.com/airbytehq/airbyte/pull/4699) | Added json config validator | +| Version | Date | Pull Request | Subject | +|:--------|:-----------|:---------------------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------| +| 0.2.1 | 2023-10-11 | [31252](https://github.com/airbytehq/airbyte/pull/31252) | Snowflake JDBC version upgrade | +| 0.2.0 | 2023-06-26 | [27737](https://github.com/airbytehq/airbyte/pull/27737) | License Update: Elv2 | +| 0.1.36 | 2023-06-20 | [27212](https://github.com/airbytehq/airbyte/pull/27212) | Fix silent exception swallowing in StreamingJdbcDatabase | +| 0.1.35 | 2023-06-14 | [27335](https://github.com/airbytehq/airbyte/pull/27335) | Remove noisy debug logs | +| 0.1.34 | 2023-03-30 | [24693](https://github.com/airbytehq/airbyte/pull/24693) | Fix failure with TIMESTAMP_WITH_TIMEZONE column being used as cursor | +| 0.1.33 | 2023-03-29 | [24667](https://github.com/airbytehq/airbyte/pull/24667) | Fix bug which wont allow TIMESTAMP_WITH_TIMEZONE column to be used as a cursor | +| 0.1.32 | 2023-03-22 | [20760](https://github.com/airbytehq/airbyte/pull/20760) | Removed redundant date-time datatypes formatting | +| 0.1.31 | 2023-03-06 | [23455](https://github.com/airbytehq/airbyte/pull/23455) | For network isolation, source connector accepts a list of hosts it is allowed to connect to | +| 0.1.30 | 2023-02-21 | [22358](https://github.com/airbytehq/airbyte/pull/22358) | Improved handling of big integer cursor type values. | +| 0.1.29 | 2022-12-14 | [20436](https://github.com/airbytehq/airbyte/pull/20346) | Consolidate date/time values mapping for JDBC sources. | +| 0.1.28 | 2023-01-06 | [20465](https://github.com/airbytehq/airbyte/pull/20465) | Improve the schema config field to only discover tables from the specified scehma and make the field optional | +| 0.1.27 | 2022-12-14 | [20407](https://github.com/airbytehq/airbyte/pull/20407) | Fix an issue with integer values converted to floats during replication | +| 0.1.26 | 2022-11-10 | [19314](https://github.com/airbytehq/airbyte/pull/19314) | Set application id in JDBC URL params based on OSS/Cloud environment | +| 0.1.25 | 2022-11-10 | [15535](https://github.com/airbytehq/airbyte/pull/15535) | Update incremental query to avoid data missing when new data is inserted at the same time as a sync starts under non-CDC incremental mode | +| 0.1.24 | 2022-09-26 | [17144](https://github.com/airbytehq/airbyte/pull/17144) | Fixed bug with incorrect date-time datatypes handling | +| 0.1.23 | 2022-09-26 | [17116](https://github.com/airbytehq/airbyte/pull/17116) | added connection string identifier | +| 0.1.22 | 2022-09-21 | [16766](https://github.com/airbytehq/airbyte/pull/16766) | Update JDBC Driver version to 3.13.22 | +| 0.1.21 | 2022-09-14 | [15668](https://github.com/airbytehq/airbyte/pull/15668) | Wrap logs in AirbyteLogMessage | +| 0.1.20 | 2022-09-01 | [16258](https://github.com/airbytehq/airbyte/pull/16258) | Emit state messages more frequently | +| 0.1.19 | 2022-08-19 | [15797](https://github.com/airbytehq/airbyte/pull/15797) | Allow using role during oauth | +| 0.1.18 | 2022-08-18 | [14356](https://github.com/airbytehq/airbyte/pull/14356) | DB Sources: only show a table can sync incrementally if at least one column can be used as a cursor field | +| 0.1.17 | 2022-08-09 | [15314](https://github.com/airbytehq/airbyte/pull/15314) | Discover integer columns as integers rather than floats | +| 0.1.16 | 2022-08-04 | [15314](https://github.com/airbytehq/airbyte/pull/15314) | (broken, do not use) Discover integer columns as integers rather than floats | +| 0.1.15 | 2022-07-22 | [14828](https://github.com/airbytehq/airbyte/pull/14828) | Source Snowflake: Source/Destination doesn't respect DATE data type | +| 0.1.14 | 2022-07-22 | [14714](https://github.com/airbytehq/airbyte/pull/14714) | Clarified error message when invalid cursor column selected | +| 0.1.13 | 2022-07-14 | [14574](https://github.com/airbytehq/airbyte/pull/14574) | Removed additionalProperties:false from JDBC source connectors | +| 0.1.12 | 2022-04-29 | [12480](https://github.com/airbytehq/airbyte/pull/12480) | Query tables with adaptive fetch size to optimize JDBC memory consumption | +| 0.1.11 | 2022-04-27 | [10953](https://github.com/airbytehq/airbyte/pull/10953) | Implement OAuth flow | +| 0.1.9 | 2022-02-21 | [10242](https://github.com/airbytehq/airbyte/pull/10242) | Fixed cursor for old connectors that use non-microsecond format. Now connectors work with both formats | +| 0.1.8 | 2022-02-18 | [10242](https://github.com/airbytehq/airbyte/pull/10242) | Updated timestamp transformation with microseconds | +| 0.1.7 | 2022-02-14 | [10256](https://github.com/airbytehq/airbyte/pull/10256) | Add `-XX:+ExitOnOutOfMemoryError` JVM option | +| 0.1.6 | 2022-01-25 | [9623](https://github.com/airbytehq/airbyte/pull/9623) | Add jdbc_url_params support for optional JDBC parameters | +| 0.1.5 | 2022-01-19 | [9567](https://github.com/airbytehq/airbyte/pull/9567) | Added parameter for keeping JDBC session alive | +| 0.1.4 | 2021-12-30 | [9203](https://github.com/airbytehq/airbyte/pull/9203) | Update connector fields title/description | +| 0.1.3 | 2021-01-11 | [9304](https://github.com/airbytehq/airbyte/pull/9304) | Upgrade version of JDBC driver | +| 0.1.2 | 2021-10-21 | [7257](https://github.com/airbytehq/airbyte/pull/7257) | Fixed parsing of extreme values for FLOAT and NUMBER data types | +| 0.1.1 | 2021-08-13 | [4699](https://github.com/airbytehq/airbyte/pull/4699) | Added json config validator | diff --git a/docs/integrations/sources/square.md b/docs/integrations/sources/square.md index 2dfa772284b3..fe9a86105d42 100644 --- a/docs/integrations/sources/square.md +++ b/docs/integrations/sources/square.md @@ -69,6 +69,7 @@ The Square source connector supports the following [ sync modes](https://docs.ai - [Customers](https://developer.squareup.com/explorer/square/customers-api/list-customers) - [Shifts](https://developer.squareup.com/reference/square/labor-api/search-shifts) - [Orders](https://developer.squareup.com/reference/square/orders-api/search-orders) +- [Cash drawers](https://developer.squareup.com/explorer/square/cash-drawers-api/list-cash-drawer-shifts) ## Connector-specific features & highlights @@ -96,7 +97,9 @@ Exponential [Backoff](https://developer.squareup.com/forums/t/current-square-api ## Changelog | Version | Date | Pull Request | Subject | -| :------ | :--------- | :------------------------------------------------------- | :------------------------------------------------------------------------ | +| :------ |:-----------| :------------------------------------------------------- |:--------------------------------------------------------------------------| +| 1.2.0 | 2023-10-10 | [31065](https://github.com/airbytehq/airbyte/pull/31065) | Add new stream Cash drawers shifts | +| 1.1.3 | 2023-10-10 | [30960](https://github.com/airbytehq/airbyte/pull/30960) | Update `airbyte-cdk` version to `>=0.51.31` | | 1.1.2 | 2023-07-10 | [28019](https://github.com/airbytehq/airbyte/pull/28019) | fix display order of spec fields | | 1.1.1 | 2023-06-28 | [27762](https://github.com/airbytehq/airbyte/pull/27762) | Update following state breaking changes | | 1.1.0 | 2023-05-24 | [26485](https://github.com/airbytehq/airbyte/pull/26485) | Remove deprecated authSpecification in favour of advancedAuth | diff --git a/docs/integrations/sources/stripe.md b/docs/integrations/sources/stripe.md index 7c4478034289..bb73919c3236 100644 --- a/docs/integrations/sources/stripe.md +++ b/docs/integrations/sources/stripe.md @@ -192,6 +192,7 @@ The Stripe connector should not run into Stripe API limitations under normal usa | Version | Date | Pull Request | Subject | |:--------|:-----------|:---------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------| +| 4.4.0 | 2023-10-04 | [31046](https://github.com/airbytehq/airbyte/pull/31046) | Added margins field to invoice_line_items stream. | | 4.3.1 | 2023-09-27 | [30800](https://github.com/airbytehq/airbyte/pull/30800) | Handle permission issues a non breaking | | 4.3.0 | 2023-09-26 | [30752](https://github.com/airbytehq/airbyte/pull/30752) | Do not sync upcoming invoices, extend stream schemas | | 4.2.0 | 2023-09-21 | [30660](https://github.com/airbytehq/airbyte/pull/30660) | Fix updated state for the incremental syncs | diff --git a/docs/integrations/sources/zendesk-chat.md b/docs/integrations/sources/zendesk-chat.md index eab821953fd8..31cfcba59e2c 100644 --- a/docs/integrations/sources/zendesk-chat.md +++ b/docs/integrations/sources/zendesk-chat.md @@ -80,6 +80,7 @@ The connector is restricted by Zendesk's [requests limitation](https://developer | Version | Date | Pull Request | Subject | | :------ | :--------- | :------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------- | +| 0.2.0 | 2023-10-11 | [30526](https://github.com/airbytehq/airbyte/pull/30526) | Use the python connector base image, remove dockerfile and implement build_customization.py | | 0.1.14 | 2023-02-10 | [24190](https://github.com/airbytehq/airbyte/pull/24190) | Fix remove too high min/max from account stream | | 0.1.13 | 2023-02-10 | [22819](https://github.com/airbytehq/airbyte/pull/22819) | Specified date formatting in specification | | 0.1.12 | 2023-01-27 | [22026](https://github.com/airbytehq/airbyte/pull/22026) | Set `AvailabilityStrategy` for streams explicitly to `None` | diff --git a/docs/snowflake-native-apps/facebook-marketing.md b/docs/snowflake-native-apps/facebook-marketing.md new file mode 100644 index 000000000000..f461d3cdf2df --- /dev/null +++ b/docs/snowflake-native-apps/facebook-marketing.md @@ -0,0 +1,207 @@ +# Facebook Marketing Connector + +The Facebook Marketing Connector by Airbyte is a Snowflake Native Application that allows you to extract data from your Facebook Marketing account and load records into a Snowflake database of your choice. + +:::info +The Snowflake Native Apps platform is new and rapidly evolving. The Facebook Marketing Connector by Airbyte is in _private preview_ and is subject to further development that may affect setup and configuration of the application. Please note that, at this time, only a [full table refresh](../understanding-airbyte/connections/full-refresh-overwrite.md) without deduplication is supported. +::: + +# Getting started + +## Prerequisites +A Facebook Marketing account with permission to access data from accounts you want to sync. + +## Installing the App + +:::warning +Do not refresh the Apps page while the application is being installed. This may cause installation to fail. +::: + +1. Log into your Snowflake account. +2. On the left sidebar, click `Marketplace`. +3. Search for `Facebook Marketing Connector` by Airbyte or navigate to https://app.snowflake.com/marketplace/listing/GZTYZ9BCRT8/airbyte-facebook-marketing-connector-by-airbyte +4. Click `Request`. This will send a request that we will manually service as soon as we can. +5. On the left sidebar, click `Apps`. +6. Under the `Recently Shared with You` section, you should see the `Facebook Marketing Connector by Airbyte`. Click `Get`. +7. Expand `Options`. + 1. You can rename the application or leave the default. This is how you will reference the application from a worksheet. + 2. Specify the warehouse that the application will be installed to. +8. Click `Get`. +9. Wait for the application to install. Once complete, the pop-up window should automatically close. + +You should now see the Facebook Marketing Connector by Airbyte application under `Installed Apps`. You may need to refresh the page. + +## Facebook Marketing Account +In order for the Facebook Marketing Connector by Airbyte to query Facebook's APIs, you will need an account with the right permissions. Please follow the [Facebook Marketing authentication guide](https://docs.airbyte.com/integrations/sources/facebook-marketing#for-airbyte-open-source-generate-an-access-token-and-request-a-rate-limit-increase) for further information. + +## Snowflake Native App Authorizations + +:::note +By default the app will be installed using the name `AIRBYTE_FACEBOOK_MARKETING`, but if you renamed the app during installation, you will have to use that name as a reference. +::: + +1. Create the database where the app will access the authorization. This database can be different from the database where the sync will output records. +``` +CREATE DATABASE ; +USE ; +``` + +2. The native app will validate the output database and create it if it does not exist. In order to do that, the app needs access to the database: +``` +GRANT CREATE DATABASE ON ACCOUNT TO APPLICATION ; +``` + +3. You will need to allow outgoing network traffic based on the domain of the source. In the case of Facebook Marketing, simply run: +``` +CREATE OR REPLACE NETWORK RULE facebook_marketing_apis_network_rule + MODE = EGRESS + TYPE = HOST_PORT + VALUE_LIST = ('graph.facebook.com'); +``` + +:::note +As of 2023-09-13, the [Snowflake documentation](https://docs.snowflake.com/en/sql-reference/sql/create-external-access-integration) mentions that direct external access is a preview feature and that it is `available to all accounts on AWS` which might restrict the number of users able to use the connector. +::: + +4. Once you have external access configured, you need define your authorization/authentication. Provide the credentials to the app as such: +``` +CREATE OR REPLACE SECRET integration_facebook_marketing_oauth + TYPE = GENERIC_STRING + SECRET_STRING = '{ + "access_token": "" + }'; +``` +... where `client_id`, `client_secret` and `refresh_token` are strings. For more information, see the [Facebook Marketing authentication guide](https://docs.airbyte.com/integrations/sources/facebook-marketing#for-airbyte-open-source-generate-an-access-token-and-request-a-rate-limit-increase). + +5. Once the network rule and the secret are defined in Snowflake, you need to make them available to the app by using an external access integration. +``` +CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION integration_facebook_marketing + ALLOWED_NETWORK_RULES = (facebook_marketing_apis_network_rule) + ALLOWED_AUTHENTICATION_SECRETS = (integration_facebook_marketing_oauth) + ENABLED = true; +``` + +6. Grant permission for the app to access the integration. +``` +GRANT USAGE ON INTEGRATION integration_facebook_marketing TO APPLICATION AIRBYTE_FACEBOOK_MARKETING; +``` + +7. Grant permissions for the app to access the database that houses the secret and read the secret. +``` +GRANT USAGE ON DATABASE TO APPLICATION AIRBYTE_FACEBOOK_MARKETING; +GRANT USAGE ON SCHEMA TO APPLICATION AIRBYTE_FACEBOOK_MARKETING; +GRANT READ ON SECRET integration_facebook_marketing_oauth TO APPLICATION AIRBYTE_FACEBOOK_MARKETING; +``` + + +## Configure a connection +Once this is all set up, you can now configure a connection. To do so, use the Streamlit app by going in the `Apps` section and selecting `AIRBYTE_FACEBOOK_MARKETING`. You will have to accept the Anaconda terms in order to use Streamlit. + +Once you have access to the app, select `New Connection` and fill the following fields: + +--- + +`Secret` + +The name of the secret prefixed by which database and schema. Based on the previous steps: `..integration_facebook_marketing_oauth`. + +--- + +`External Access Integration` + +Name of the Snowflake integration where the secret and network rules are configured. Based on the previous steps: `integration_facebook_marketing`. + +--- + +`account_id` + +The Facebook Ad account ID to use when pulling data from the Facebook Marketing API. The Ad account ID number is in the account dropdown menu or in your browser's address bar of your [Meta Ads Manager](https://adsmanager.facebook.com/adsmanager/). + +--- + +`start_date` + +UTC date in the format 2021-09-29T12:13:14Z. Any data before this date will not be replicated. + +--- + +`end_date` + +UTC date in the format 2021-09-29T12:13:14Z. Any data after this date will not be replicated. + +--- + +`include_deleted` + +The Facebook Marketing API does not have a concept of deleting records, and it maintains a record of Campaigns, Ads, and Ad Sets. Enabling this setting allows you to extract data that includes these objects that were archived or deleted from the Facebook platform. + +--- + +`fetch_thumbnail_images` + +When extracting Ad Creatives, retrieve the thumbnail_url and store it as thumbnail_data_url in each record. + +--- + +`custom_insights` + +Custom insights allow you to define ad statistic entries representing the performance of your campaigns against specific metrics. For more information about how to configure custom insights, please refer to the [Facebook Marketing documentation](https://docs.airbyte.com/integrations/sources/facebook-marketing#set-up-facebook-marketing-as-a-source-in-airbyte). + +--- + +`page_size` + +The number of records per page for paginated responses. The default is 100, but most users should not need to set this field except for unique use cases that require tuning the settings. + +--- + +`insights_lookback_window` + +The window in days to revisit data during syncing to capture updated conversion data from the API. Facebook allows for attribution windows of up to 28 days, during which time a conversion can be attributed to an ad. If you have set a custom attribution window in your Facebook account, please set the same value here. + +--- + +`Output Database` + +The database where the records will be saved. Snowflake's database [naming convention](https://docs.snowflake.com/en/sql-reference/identifiers-syntax) applies here. + +--- + +`Output Schema` + +The table where the schema will be saved. Snowflake's table [naming convention](https://docs.snowflake.com/en/sql-reference/identifiers-syntax) applies here. + +--- + +`Connection name` + +How the connection will be referred in the Streamlit app. + +--- + +`Replication Frequency` + +How often records are fetched. + +--- + +## Enabling Logging and Event Sharing for an Application +Sharing the logging and telemetry data of your installed application helps us improve the application and can allow us to better triage problems that your run into. To configure your application for logging and telemetry data please refer to the documentation for [Enabling Logging and Event Sharing](event-sharing.md). + +## Run a sync +Once a connection is configured, go in `Connections List` and click on `Sync Now` for the connection you want to sync. Once the sync is complete, you should be able to validate that the records have been stored in `.` + +### Supported Streams +As of now, all supported streams perform a full refresh. Incremental syncs are not yet supported. Here are the list of supported streams: +* Activities +* Ad Account +* Ad Creatives +* Ad Insights +* Ad Sets +* Ads +* Campaigns +* Custom Audiences +* Custom Conversions + +# Contact Us +snowflake-native-apps@airbyte.io diff --git a/docs/snowflake-native-apps/linkedin-ads.md b/docs/snowflake-native-apps/linkedin-ads.md index d9c0b33a0f7a..7cc1cf3a1ae0 100644 --- a/docs/snowflake-native-apps/linkedin-ads.md +++ b/docs/snowflake-native-apps/linkedin-ads.md @@ -3,7 +3,7 @@ The LinkedIn Ads Connector by Airbyte is a Snowflake Native Application that allows you to extract data from your LinkedIn Ads account and load records into a Snowflake database of your choice. :::info -The Snowflake Native Apps platform is new and rapidly evolving. The LinkedIn Ads Connector by Airbyte is in _private preview_ and is subject to further development that may affect setup and configuration of the application. Please note that, at this time, only a full table refresh without dedupe is supported. +The Snowflake Native Apps platform is new and rapidly evolving. The LinkedIn Ads Connector by Airbyte is in _private preview_ and is subject to further development that may affect setup and configuration of the application. Please note that, at this time, only a [full table refresh](../understanding-airbyte/connections/full-refresh-overwrite.md) without deduplication is supported. ::: # Getting started @@ -96,6 +96,12 @@ GRANT USAGE ON SCHEMA TO APPLICATION AIRBYTE_LINKEDIN_ADS; GRANT READ ON SECRET integration_linkedin_ads_oauth TO APPLICATION AIRBYTE_LINKEDIN_ADS; ``` +8. Grant permissions for the app to create a warehouse on which to execute sync tasks, and to execute tasks. +``` +GRANT CREATE WAREHOUSE ON ACCOUNT TO APPLICATION AIRBYTE_LINKEDIN_ADS; +GRANT EXECUTE TASK ON ACCOUNT TO APPLICATION AIRBYTE_LINKEDIN_ADS; +``` + ## Configure a connection Once this is all set up, you can now configure a connection. To do so, use the Streamlit app by going in the `Apps` section and selecting `AIRBYTE_LINKEDIN_ADS`. You will have to accept the Anaconda terms in order to use Streamlit. @@ -132,13 +138,13 @@ Leave empty, if you want to pull the data from all associated accounts. To speci `Output Database` -The database where the records will be saved. Snowflake's database naming restriction applies here. +The database where the records will be saved. Snowflake's database [naming convention](https://docs.snowflake.com/en/sql-reference/identifiers-syntax) applies here. --- `Output Schema` -The table where the schema will be saved. Snowflake's table naming restriction applies here. +The table where the schema will be saved. Snowflake's table [naming convention](https://docs.snowflake.com/en/sql-reference/identifiers-syntax) applies here. --- @@ -154,6 +160,9 @@ How often records are fetched. --- +## Enabling Logging and Event Sharing for an Application +Sharing the logging and telemetry data of your installed application helps us improve the application and can allow us to better triage problems that your run into. To configure your application for logging and telemetry data please refer to the documentation for [Enabling Logging and Event Sharing](event-sharing.md). + ## Run a sync Once a connection is configured, go in `Connections List` and click on `Sync Now` for the connection you want to sync. Once the sync is complete, you should be able to validate that the records have been stored in `.` diff --git a/docusaurus/src/theme/TOCItems/index.js b/docusaurus/src/theme/TOCItems/index.js index 19c94f110e74..db6c6d1733cd 100644 --- a/docusaurus/src/theme/TOCItems/index.js +++ b/docusaurus/src/theme/TOCItems/index.js @@ -5,6 +5,23 @@ import { faThumbsDown, faThumbsUp } from '@fortawesome/free-regular-svg-icons'; import styles from "./TOCItemsWrapper.module.css"; +function showDocSurvey() { + const showSurvey = () => { + chmln.show("6525a7ef3f4f150011627c9f"); + } + + if (!window.chmln) { + // Initialize Chameleon if it's not loaded already + !function(d,w){var t="SaG54hxuMI4CDIZa2yBv4lX1NHVB0jQBNTORqyAN2p2tE4-1OtIxC-DS9ywbXXIr2TPyYr",c="chmln",i=d.createElement("script");if(w[c]||(w[c]={}),!w[c].root){w[c].accountToken=t,w[c].location=w.location.href.toString(),w[c].now=new Date,w[c].fastUrl='https://fast.chameleon.io/';var m="identify alias track clear set show on off custom help _data".split(" ");for(var s=0;s { @@ -15,6 +32,9 @@ export default function TOCItemsWrapper(props) { vote, }); setVoted(true); + if (vote === "down") { + showDocSurvey(); + } }; return ( <>