diff --git a/source-google-analytics-data-api/acmeCo/daily_active_users.schema.yaml b/source-google-analytics-data-api/acmeCo/daily_active_users.schema.yaml new file mode 100644 index 0000000000..4eb28ff9f8 --- /dev/null +++ b/source-google-analytics-data-api/acmeCo/daily_active_users.schema.yaml @@ -0,0 +1,27 @@ +--- +$schema: "https://json-schema.org/draft-07/schema#" +type: + - object +additionalProperties: true +properties: + property_id: + type: + - string + date: + type: string + description: "The date of the event, formatted as YYYYMMDD." + active1DayUsers: + type: + - "null" + - integer + description: "The number of distinct active users on your site or app within a 1 day period. The 1 day period includes the last day in the report's date range. Note: this is the same as Active Users." + _meta: + type: object + properties: + row_id: + type: integer + required: + - row_id +required: + - date + - property_id diff --git a/source-google-analytics-data-api/acmeCo/devices.schema.yaml b/source-google-analytics-data-api/acmeCo/devices.schema.yaml new file mode 100644 index 0000000000..8d55fad8ac --- /dev/null +++ b/source-google-analytics-data-api/acmeCo/devices.schema.yaml @@ -0,0 +1,74 @@ +--- +$schema: "https://json-schema.org/draft-07/schema#" +type: + - object +additionalProperties: true +properties: + property_id: + type: + - string + date: + type: string + description: "The date of the event, formatted as YYYYMMDD." + deviceCategory: + type: string + description: "The type of device: Desktop, Tablet, or Mobile." + operatingSystem: + type: string + description: The operating systems used by visitors to your app or website. Includes desktop and mobile operating systems such as Windows and Android. + browser: + type: string + description: The browsers used to view your website. + totalUsers: + type: + - "null" + - integer + description: "The number of distinct users who have logged at least one event, regardless of whether the site or app was in use when that event was logged." + newUsers: + type: + - "null" + - integer + description: "The number of users who interacted with your site or launched your app for the first time (event triggered: first_open or first_visit)." + sessions: + type: + - "null" + - integer + description: "The number of sessions that began on your site or app (event triggered: session_start)." + sessionsPerUser: + type: + - "null" + - number + description: The average number of sessions per user (Sessions divided by Active Users). + averageSessionDuration: + type: + - "null" + - number + description: "The average duration (in seconds) of users` sessions." + screenPageViews: + type: + - "null" + - integer + description: The number of app screens or web pages your users viewed. Repeated views of a single page or screen are counted. (screen_view + page_view events). + screenPageViewsPerSession: + type: + - "null" + - number + description: The number of app screens or web pages your users viewed per session. Repeated views of a single page or screen are counted. (screen_view + page_view events) / sessions. + bounceRate: + type: + - "null" + - number + description: "The percentage of sessions that were not engaged ((Sessions Minus Engaged sessions) divided by Sessions). This metric is returned as a fraction; for example, 0.2761 means 27.61% of sessions were bounces." + _meta: + type: object + properties: + row_id: + type: integer + required: + - row_id +required: + - date + - deviceCategory + - operatingSystem + - browser + - property_id diff --git a/source-google-analytics-data-api/acmeCo/flow.yaml b/source-google-analytics-data-api/acmeCo/flow.yaml new file mode 100644 index 0000000000..47c8d4b6a5 --- /dev/null +++ b/source-google-analytics-data-api/acmeCo/flow.yaml @@ -0,0 +1,52 @@ +--- +collections: + acmeCo/daily_active_users: + schema: daily_active_users.schema.yaml + key: + - /date + - /property_id + acmeCo/devices: + schema: devices.schema.yaml + key: + - /date + - /deviceCategory + - /operatingSystem + - /browser + - /property_id + acmeCo/four_weekly_active_users: + schema: four_weekly_active_users.schema.yaml + key: + - /date + - /property_id + acmeCo/locations: + schema: locations.schema.yaml + key: + - /region + - /country + - /city + - /date + - /property_id + acmeCo/pages: + schema: pages.schema.yaml + key: + - /date + - /hostName + - /pagePathPlusQueryString + - /property_id + acmeCo/traffic_sources: + schema: traffic_sources.schema.yaml + key: + - /date + - /sessionSource + - /sessionMedium + - /property_id + acmeCo/website_overview: + schema: website_overview.schema.yaml + key: + - /date + - /property_id + acmeCo/weekly_active_users: + schema: weekly_active_users.schema.yaml + key: + - /date + - /property_id diff --git a/source-google-analytics-data-api/acmeCo/four_weekly_active_users.schema.yaml b/source-google-analytics-data-api/acmeCo/four_weekly_active_users.schema.yaml new file mode 100644 index 0000000000..7ebcf080b9 --- /dev/null +++ b/source-google-analytics-data-api/acmeCo/four_weekly_active_users.schema.yaml @@ -0,0 +1,27 @@ +--- +$schema: "https://json-schema.org/draft-07/schema#" +type: + - object +additionalProperties: true +properties: + property_id: + type: + - string + date: + type: string + description: "The date of the event, formatted as YYYYMMDD." + active28DayUsers: + type: + - "null" + - integer + description: "The number of distinct active users on your site or app within a 28 day period. The 28 day period includes the last day in the report's date range." + _meta: + type: object + properties: + row_id: + type: integer + required: + - row_id +required: + - date + - property_id diff --git a/source-google-analytics-data-api/acmeCo/locations.schema.yaml b/source-google-analytics-data-api/acmeCo/locations.schema.yaml new file mode 100644 index 0000000000..7fccdcef5a --- /dev/null +++ b/source-google-analytics-data-api/acmeCo/locations.schema.yaml @@ -0,0 +1,74 @@ +--- +$schema: "https://json-schema.org/draft-07/schema#" +type: + - object +additionalProperties: true +properties: + property_id: + type: + - string + region: + type: string + description: "The geographic region from which the user activity originated, derived from their IP address." + country: + type: string + description: The country from which the user activity originated. + city: + type: string + description: The city from which the user activity originated. + date: + type: string + description: "The date of the event, formatted as YYYYMMDD." + totalUsers: + type: + - "null" + - integer + description: "The number of distinct users who have logged at least one event, regardless of whether the site or app was in use when that event was logged." + newUsers: + type: + - "null" + - integer + description: "The number of users who interacted with your site or launched your app for the first time (event triggered: first_open or first_visit)." + sessions: + type: + - "null" + - integer + description: "The number of sessions that began on your site or app (event triggered: session_start)." + sessionsPerUser: + type: + - "null" + - number + description: The average number of sessions per user (Sessions divided by Active Users). + averageSessionDuration: + type: + - "null" + - number + description: "The average duration (in seconds) of users` sessions." + screenPageViews: + type: + - "null" + - integer + description: The number of app screens or web pages your users viewed. Repeated views of a single page or screen are counted. (screen_view + page_view events). + screenPageViewsPerSession: + type: + - "null" + - number + description: The number of app screens or web pages your users viewed per session. Repeated views of a single page or screen are counted. (screen_view + page_view events) / sessions. + bounceRate: + type: + - "null" + - number + description: "The percentage of sessions that were not engaged ((Sessions Minus Engaged sessions) divided by Sessions). This metric is returned as a fraction; for example, 0.2761 means 27.61% of sessions were bounces." + _meta: + type: object + properties: + row_id: + type: integer + required: + - row_id +required: + - region + - country + - city + - date + - property_id diff --git a/source-google-analytics-data-api/acmeCo/pages.schema.yaml b/source-google-analytics-data-api/acmeCo/pages.schema.yaml new file mode 100644 index 0000000000..0881d66569 --- /dev/null +++ b/source-google-analytics-data-api/acmeCo/pages.schema.yaml @@ -0,0 +1,40 @@ +--- +$schema: "https://json-schema.org/draft-07/schema#" +type: + - object +additionalProperties: true +properties: + property_id: + type: + - string + date: + type: string + description: "The date of the event, formatted as YYYYMMDD." + hostName: + type: string + description: "Includes the subdomain and domain names of a URL; for example, the Host Name of www.example.com/contact.html is www.example.com." + pagePathPlusQueryString: + type: string + description: "The portion of the URL following the hostname for web pages visited; for example, the `pagePathPlusQueryString` portion of `https://www.example.com/store/contact-us?query_string=true` is `/store/contact-us?query_string=true`." + screenPageViews: + type: + - "null" + - integer + description: The number of app screens or web pages your users viewed. Repeated views of a single page or screen are counted. (screen_view + page_view events). + bounceRate: + type: + - "null" + - number + description: "The percentage of sessions that were not engaged ((Sessions Minus Engaged sessions) divided by Sessions). This metric is returned as a fraction; for example, 0.2761 means 27.61% of sessions were bounces." + _meta: + type: object + properties: + row_id: + type: integer + required: + - row_id +required: + - date + - hostName + - pagePathPlusQueryString + - property_id diff --git a/source-google-analytics-data-api/acmeCo/traffic_sources.schema.yaml b/source-google-analytics-data-api/acmeCo/traffic_sources.schema.yaml new file mode 100644 index 0000000000..460968813a --- /dev/null +++ b/source-google-analytics-data-api/acmeCo/traffic_sources.schema.yaml @@ -0,0 +1,70 @@ +--- +$schema: "https://json-schema.org/draft-07/schema#" +type: + - object +additionalProperties: true +properties: + property_id: + type: + - string + date: + type: string + description: "The date of the event, formatted as YYYYMMDD." + sessionSource: + type: string + description: The source that initiated a session on your website or app. + sessionMedium: + type: string + description: The medium that initiated a session on your website or app. + totalUsers: + type: + - "null" + - integer + description: "The number of distinct users who have logged at least one event, regardless of whether the site or app was in use when that event was logged." + newUsers: + type: + - "null" + - integer + description: "The number of users who interacted with your site or launched your app for the first time (event triggered: first_open or first_visit)." + sessions: + type: + - "null" + - integer + description: "The number of sessions that began on your site or app (event triggered: session_start)." + sessionsPerUser: + type: + - "null" + - number + description: The average number of sessions per user (Sessions divided by Active Users). + averageSessionDuration: + type: + - "null" + - number + description: "The average duration (in seconds) of users` sessions." + screenPageViews: + type: + - "null" + - integer + description: The number of app screens or web pages your users viewed. Repeated views of a single page or screen are counted. (screen_view + page_view events). + screenPageViewsPerSession: + type: + - "null" + - number + description: The number of app screens or web pages your users viewed per session. Repeated views of a single page or screen are counted. (screen_view + page_view events) / sessions. + bounceRate: + type: + - "null" + - number + description: "The percentage of sessions that were not engaged ((Sessions Minus Engaged sessions) divided by Sessions). This metric is returned as a fraction; for example, 0.2761 means 27.61% of sessions were bounces." + _meta: + type: object + properties: + row_id: + type: integer + required: + - row_id +required: + - date + - sessionSource + - sessionMedium + - property_id diff --git a/source-google-analytics-data-api/acmeCo/website_overview.schema.yaml b/source-google-analytics-data-api/acmeCo/website_overview.schema.yaml new file mode 100644 index 0000000000..c4a023557f --- /dev/null +++ b/source-google-analytics-data-api/acmeCo/website_overview.schema.yaml @@ -0,0 +1,62 @@ +--- +$schema: "https://json-schema.org/draft-07/schema#" +type: + - object +additionalProperties: true +properties: + property_id: + type: + - string + date: + type: string + description: "The date of the event, formatted as YYYYMMDD." + totalUsers: + type: + - "null" + - integer + description: "The number of distinct users who have logged at least one event, regardless of whether the site or app was in use when that event was logged." + newUsers: + type: + - "null" + - integer + description: "The number of users who interacted with your site or launched your app for the first time (event triggered: first_open or first_visit)." + sessions: + type: + - "null" + - integer + description: "The number of sessions that began on your site or app (event triggered: session_start)." + sessionsPerUser: + type: + - "null" + - number + description: The average number of sessions per user (Sessions divided by Active Users). + averageSessionDuration: + type: + - "null" + - number + description: "The average duration (in seconds) of users` sessions." + screenPageViews: + type: + - "null" + - integer + description: The number of app screens or web pages your users viewed. Repeated views of a single page or screen are counted. (screen_view + page_view events). + screenPageViewsPerSession: + type: + - "null" + - number + description: The number of app screens or web pages your users viewed per session. Repeated views of a single page or screen are counted. (screen_view + page_view events) / sessions. + bounceRate: + type: + - "null" + - number + description: "The percentage of sessions that were not engaged ((Sessions Minus Engaged sessions) divided by Sessions). This metric is returned as a fraction; for example, 0.2761 means 27.61% of sessions were bounces." + _meta: + type: object + properties: + row_id: + type: integer + required: + - row_id +required: + - date + - property_id diff --git a/source-google-analytics-data-api/acmeCo/weekly_active_users.schema.yaml b/source-google-analytics-data-api/acmeCo/weekly_active_users.schema.yaml new file mode 100644 index 0000000000..20947bdf4f --- /dev/null +++ b/source-google-analytics-data-api/acmeCo/weekly_active_users.schema.yaml @@ -0,0 +1,27 @@ +--- +$schema: "https://json-schema.org/draft-07/schema#" +type: + - object +additionalProperties: true +properties: + property_id: + type: + - string + date: + type: string + description: "The date of the event, formatted as YYYYMMDD." + active7DayUsers: + type: + - "null" + - integer + description: "The number of distinct active users on your site or app within a 7 day period. The 7 day period includes the last day in the report's date range." + _meta: + type: object + properties: + row_id: + type: integer + required: + - row_id +required: + - date + - property_id diff --git a/source-google-analytics-data-api/config.yaml b/source-google-analytics-data-api/config.yaml index 5b78e31eb2..1b402d9dfa 100644 --- a/source-google-analytics-data-api/config.yaml +++ b/source-google-analytics-data-api/config.yaml @@ -1,23 +1,23 @@ credentials: access_token_sops: "" auth_type: Client - client_id_sops: ENC[AES256_GCM,data:apqcTdUGMn2LsZTY1oeY2TXRiviAVL1+9OuDSERdegEbLornGOfYdgLKYvLGYZKWDB3Yjgn2Wet6sKzUvx9x6VV3jOWg5+Ao,iv:GamkfGuhn8sExbammSWlz1tFsnkoYAgfK3wjXBBlmIY=,tag:sibLOJapEMVVdAk2dLFd0g==,type:str] - client_secret_sops: ENC[AES256_GCM,data:lSuQS9Mm2JLTc37rTDON97nsSey78TCTfFVz56HGMzdwzTM=,iv:FbZZgx/O981rJJ3vWiuI1IvfyYFqUElICzAzta1HwR0=,tag:ed695eI+RYxKG5qTfjFDBQ==,type:str] - refresh_token_sops: ENC[AES256_GCM,data:CgUOI2ATLA+L4qCtttsTwVEvbPoLCrbDnTM+Nh20IBxhRmBRh942TkNCBxrQqXCNnqhQvNTGYtd0PzFtloQHgBtCj32R2PwWY8ChyXLSkEn/c+ERq4dOkj9OYG0ALSPHMPbS7aO2oA==,iv:sPgwJK3OgTKFaZezj0qykYI+qTDVQuH0rYs8nG7UPlE=,tag:oB9YUUXNylOgLDnI7ExJ5g==,type:str] -date_ranges_start_date: "2020-01-01" + client_id_sops: ENC[AES256_GCM,data:nKYrLSJa8tX4AIud6zEjAJArzfXZ8nJhbJy1jvrZCQUF+FwY8aSBBjYm2DULDwjFavY71Lg9xs0tBVMztg5ERwreJDv7ZhZmUQ==,iv:xTIsdgelxfuYKqsHa4wWJrAnuVhoZZ5gJMYwphJhqEA=,tag:dS7rZCH1oKE0dkPA8cAX8w==,type:str] + client_secret_sops: ENC[AES256_GCM,data:lTaxOBRDGT1FzNcwhEjPZzB1UJhOdjpFsWviEEMfXkkCdd4=,iv:SzIH9vkXctgh9EO/NAeUfPgZBWRv/0QQyBoVG+b6AQE=,tag:OYcbeln0r4QQhhZWndWuwg==,type:str] + refresh_token_sops: ENC[AES256_GCM,data:S4bW08hyZuMnB+VIExQHon5cAED+CKUw015ZLjw1NGKHwJqYNuhMwhEDwS0Vr4TCq/a5/eJa7vVbJldGZbLvo8b3aJtOSXLmylOt66Gq4TZYXoE1DVAQqIJMAlQg/fO59UsoSXkt2g==,iv:GmgFm8/zEs2/EX8nipgJ65DO2JjGqpqUqTuxbzEpnF4=,tag:1oXaulNxwVcc7VDTn+LwiA==,type:str] +date_ranges_start_date: "2024-04-01" property_id: "431462875" window_in_days: 1 sops: kms: [] gcp_kms: - resource_id: projects/estuary-theatre/locations/us-central1/keyRings/connector-keyring/cryptoKeys/connector-repository - created_at: "2024-03-12T13:46:55Z" - enc: CiQAdmEdwjHmP42OLOT4KJpi3gOzUMIY4//76mYntIqSqaZ5iVwSSQCVvC1zjkDrRQQZF8dltgIUABTeVllt365mSCgVlZbxJ0GFB6zW0T6aRj4prngkjBcHwrISTkQfreWYj6ugEIOTUuyB/ULSPe0= + created_at: "2024-03-21T18:45:08Z" + enc: CiQAdmEdwt1N/pN5+OV1sli/b0qNy+Gc2o2mWE8lhej5FiwhZs8SSQCSobQjwPAxI+9zMwM9cYCzoGQ7f5KGNvHrQHgUxcPL5tivIssUv1QUV5TS6/kMoqr6ElvAop+ETXgE/gvv6KYm2nHv+amBL38= azure_kv: [] hc_vault: [] age: [] - lastmodified: "2024-03-12T18:21:00Z" - mac: ENC[AES256_GCM,data:1OGTPPdqpqRCZ/bRcHNrRy14j3QTDDy0GRrPthJKC2rh4jmnOZo7jgRfy1RvI6gErNz574uOrWnRLmBoLW0M2bvbtyTAmu4uSZcgecPANKCV1miCh5fKcDVVHLh31OfROr8jPQgsVmPhc/UgxuBnqwlNzNXoUFq9u1m7gqC3gEU=,iv:glDa4HPJTPNicNhzZiBGym8xqlmz7pVFBRlWN/1DM0I=,tag:JPzPEtQE1/5jGzceJxRK5w==,type:str] + lastmodified: "2024-04-08T20:17:08Z" + mac: ENC[AES256_GCM,data:4cGuunX3pZZu90iOAYn70+BijSebkzHogwGsb0tmCmkSSuDUTecS76lwUtWoEzG3mUpjtA5QdkTlcuG699tL7anjVQp/nm6UONaQM1YKHgGpYjZsiYuZaOrD92v8LKhEIbNxzlU+se0/ahRUKrQzYeSLX4Juprr50H4SQG6PZ4A=,iv:oO6vY8QqzU17j2Ou6DAiiZTSFu4fCedFMRpOyAFfLs4=,tag:wrD0ttB5AoNRg0hvVn2itw==,type:str] pgp: [] encrypted_suffix: _sops version: 3.8.1 diff --git a/source-google-analytics-data-api/poetry.lock b/source-google-analytics-data-api/poetry.lock index 6f3b90fa5a..e06ea6df74 100644 --- a/source-google-analytics-data-api/poetry.lock +++ b/source-google-analytics-data-api/poetry.lock @@ -2,13 +2,13 @@ [[package]] name = "aiodns" -version = "3.1.1" +version = "3.2.0" description = "Simple DNS resolver for asyncio" optional = false python-versions = "*" files = [ - {file = "aiodns-3.1.1-py3-none-any.whl", hash = "sha256:a387b63da4ced6aad35b1dda2d09620ad608a1c7c0fb71efa07ebb4cd511928d"}, - {file = "aiodns-3.1.1.tar.gz", hash = "sha256:1073eac48185f7a4150cad7f96a5192d6911f12b4fb894de80a088508c9b3a99"}, + {file = "aiodns-3.2.0-py3-none-any.whl", hash = "sha256:e443c0c27b07da3174a109fd9e736d69058d808f144d3c9d56dbd1776964c5f5"}, + {file = "aiodns-3.2.0.tar.gz", hash = "sha256:62869b23409349c21b072883ec8998316b234c9a9e36675756e8e317e8768f72"}, ] [package.dependencies] @@ -125,17 +125,17 @@ frozenlist = ">=1.1.0" [[package]] name = "airbyte-cdk" -version = "0.51.14" +version = "0.52.10" description = "A framework for writing Airbyte Connectors." optional = false python-versions = ">=3.8" files = [ - {file = "airbyte-cdk-0.51.14.tar.gz", hash = "sha256:b5cdad2da796f8b42ab538cc7af53a531529c94f881d1fec0a8f03f745080ea5"}, - {file = "airbyte_cdk-0.51.14-py3-none-any.whl", hash = "sha256:8e96c7cf57dfa41b1292deed756978619ad2a1d8c7d9f42df8e12b8484ef8079"}, + {file = "airbyte-cdk-0.52.10.tar.gz", hash = "sha256:0daee950fe0d4453e6ceea2633090fc1d2144224e6f170b3c6cb4c6392811b47"}, + {file = "airbyte_cdk-0.52.10-py3-none-any.whl", hash = "sha256:366fd7bbbba317223edc1571d22b91c6f5bcff4ba65b3131e42f9b37e29932f4"}, ] [package.dependencies] -airbyte-protocol-models = "0.4.0" +airbyte-protocol-models = "0.4.2" backoff = "*" cachetools = "*" Deprecated = ">=1.2,<2.0" @@ -154,20 +154,20 @@ requests-cache = "*" wcmatch = "8.4" [package.extras] -dev = ["avro (>=1.11.2,<1.12.0)", "cohere (==4.21)", "fastavro (>=1.8.0,<1.9.0)", "freezegun", "langchain (==0.0.271)", "mypy", "openai[embeddings] (==0.27.9)", "pandas (==2.0.3)", "pyarrow (==12.0.1)", "pytest", "pytest-cov", "pytest-httpserver", "pytest-mock", "requests-mock", "tiktoken (==0.4.0)"] -file-based = ["avro (>=1.11.2,<1.12.0)", "fastavro (>=1.8.0,<1.9.0)", "pyarrow (==12.0.1)"] +dev = ["avro (>=1.11.2,<1.12.0)", "cohere (==4.21)", "fastavro (>=1.8.0,<1.9.0)", "freezegun", "langchain (==0.0.271)", "markdown", "mypy", "openai[embeddings] (==0.27.9)", "pandas (==2.0.3)", "pdf2image (==1.16.3)", "pdfminer.six (==20221105)", "pyarrow (==12.0.1)", "pytesseract (==0.3.10)", "pytest", "pytest-cov", "pytest-httpserver", "pytest-mock", "requests-mock", "tiktoken (==0.4.0)", "unstructured (==0.10.19)", "unstructured.pytesseract (>=0.3.12)", "unstructured[docx,pptx] (==0.10.19)"] +file-based = ["avro (>=1.11.2,<1.12.0)", "fastavro (>=1.8.0,<1.9.0)", "markdown", "pdf2image (==1.16.3)", "pdfminer.six (==20221105)", "pyarrow (==12.0.1)", "pytesseract (==0.3.10)", "unstructured (==0.10.19)", "unstructured.pytesseract (>=0.3.12)", "unstructured[docx,pptx] (==0.10.19)"] sphinx-docs = ["Sphinx (>=4.2,<5.0)", "sphinx-rtd-theme (>=1.0,<2.0)"] vector-db-based = ["cohere (==4.21)", "langchain (==0.0.271)", "openai[embeddings] (==0.27.9)", "tiktoken (==0.4.0)"] [[package]] name = "airbyte-protocol-models" -version = "0.4.0" +version = "0.4.2" description = "Declares the Airbyte Protocol." optional = false python-versions = ">=3.8" files = [ - {file = "airbyte_protocol_models-0.4.0-py3-none-any.whl", hash = "sha256:e6a31fcd237504198a678d02c0040a8798f281c39203da61a5abce67842c5360"}, - {file = "airbyte_protocol_models-0.4.0.tar.gz", hash = "sha256:518736015c29ac60b6b8964a1b0d9b52e40020bcbd89e2545cc781f0b37d0f2b"}, + {file = "airbyte_protocol_models-0.4.2-py3-none-any.whl", hash = "sha256:d3bbb14d4af9483bd7b08f5eb06f87e7113553bf4baed3998af95be873a0d821"}, + {file = "airbyte_protocol_models-0.4.2.tar.gz", hash = "sha256:67b149d4812f8fdb88396b161274aa73cf0e16f22e35ce44f2bfc4d47e51915c"}, ] [package.dependencies] @@ -935,61 +935,62 @@ files = [ [[package]] name = "orjson" -version = "3.9.15" +version = "3.10.0" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ - {file = "orjson-3.9.15-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:d61f7ce4727a9fa7680cd6f3986b0e2c732639f46a5e0156e550e35258aa313a"}, - {file = "orjson-3.9.15-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4feeb41882e8aa17634b589533baafdceb387e01e117b1ec65534ec724023d04"}, - {file = "orjson-3.9.15-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fbbeb3c9b2edb5fd044b2a070f127a0ac456ffd079cb82746fc84af01ef021a4"}, - {file = "orjson-3.9.15-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b66bcc5670e8a6b78f0313bcb74774c8291f6f8aeef10fe70e910b8040f3ab75"}, - {file = "orjson-3.9.15-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2973474811db7b35c30248d1129c64fd2bdf40d57d84beed2a9a379a6f57d0ab"}, - {file = "orjson-3.9.15-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fe41b6f72f52d3da4db524c8653e46243c8c92df826ab5ffaece2dba9cccd58"}, - {file = "orjson-3.9.15-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4228aace81781cc9d05a3ec3a6d2673a1ad0d8725b4e915f1089803e9efd2b99"}, - {file = "orjson-3.9.15-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6f7b65bfaf69493c73423ce9db66cfe9138b2f9ef62897486417a8fcb0a92bfe"}, - {file = "orjson-3.9.15-cp310-none-win32.whl", hash = "sha256:2d99e3c4c13a7b0fb3792cc04c2829c9db07838fb6973e578b85c1745e7d0ce7"}, - {file = "orjson-3.9.15-cp310-none-win_amd64.whl", hash = "sha256:b725da33e6e58e4a5d27958568484aa766e825e93aa20c26c91168be58e08cbb"}, - {file = "orjson-3.9.15-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c8e8fe01e435005d4421f183038fc70ca85d2c1e490f51fb972db92af6e047c2"}, - {file = "orjson-3.9.15-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87f1097acb569dde17f246faa268759a71a2cb8c96dd392cd25c668b104cad2f"}, - {file = "orjson-3.9.15-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ff0f9913d82e1d1fadbd976424c316fbc4d9c525c81d047bbdd16bd27dd98cfc"}, - {file = "orjson-3.9.15-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8055ec598605b0077e29652ccfe9372247474375e0e3f5775c91d9434e12d6b1"}, - {file = "orjson-3.9.15-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d6768a327ea1ba44c9114dba5fdda4a214bdb70129065cd0807eb5f010bfcbb5"}, - {file = "orjson-3.9.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:12365576039b1a5a47df01aadb353b68223da413e2e7f98c02403061aad34bde"}, - {file = "orjson-3.9.15-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:71c6b009d431b3839d7c14c3af86788b3cfac41e969e3e1c22f8a6ea13139404"}, - {file = "orjson-3.9.15-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e18668f1bd39e69b7fed19fa7cd1cd110a121ec25439328b5c89934e6d30d357"}, - {file = "orjson-3.9.15-cp311-none-win32.whl", hash = "sha256:62482873e0289cf7313461009bf62ac8b2e54bc6f00c6fabcde785709231a5d7"}, - {file = "orjson-3.9.15-cp311-none-win_amd64.whl", hash = "sha256:b3d336ed75d17c7b1af233a6561cf421dee41d9204aa3cfcc6c9c65cd5bb69a8"}, - {file = "orjson-3.9.15-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:82425dd5c7bd3adfe4e94c78e27e2fa02971750c2b7ffba648b0f5d5cc016a73"}, - {file = "orjson-3.9.15-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c51378d4a8255b2e7c1e5cc430644f0939539deddfa77f6fac7b56a9784160a"}, - {file = "orjson-3.9.15-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6ae4e06be04dc00618247c4ae3f7c3e561d5bc19ab6941427f6d3722a0875ef7"}, - {file = "orjson-3.9.15-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bcef128f970bb63ecf9a65f7beafd9b55e3aaf0efc271a4154050fc15cdb386e"}, - {file = "orjson-3.9.15-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b72758f3ffc36ca566ba98a8e7f4f373b6c17c646ff8ad9b21ad10c29186f00d"}, - {file = "orjson-3.9.15-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c57bc7b946cf2efa67ac55766e41764b66d40cbd9489041e637c1304400494"}, - {file = "orjson-3.9.15-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:946c3a1ef25338e78107fba746f299f926db408d34553b4754e90a7de1d44068"}, - {file = "orjson-3.9.15-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2f256d03957075fcb5923410058982aea85455d035607486ccb847f095442bda"}, - {file = "orjson-3.9.15-cp312-none-win_amd64.whl", hash = "sha256:5bb399e1b49db120653a31463b4a7b27cf2fbfe60469546baf681d1b39f4edf2"}, - {file = "orjson-3.9.15-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:b17f0f14a9c0ba55ff6279a922d1932e24b13fc218a3e968ecdbf791b3682b25"}, - {file = "orjson-3.9.15-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f6cbd8e6e446fb7e4ed5bac4661a29e43f38aeecbf60c4b900b825a353276a1"}, - {file = "orjson-3.9.15-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:76bc6356d07c1d9f4b782813094d0caf1703b729d876ab6a676f3aaa9a47e37c"}, - {file = "orjson-3.9.15-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fdfa97090e2d6f73dced247a2f2d8004ac6449df6568f30e7fa1a045767c69a6"}, - {file = "orjson-3.9.15-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7413070a3e927e4207d00bd65f42d1b780fb0d32d7b1d951f6dc6ade318e1b5a"}, - {file = "orjson-3.9.15-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9cf1596680ac1f01839dba32d496136bdd5d8ffb858c280fa82bbfeb173bdd40"}, - {file = "orjson-3.9.15-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:809d653c155e2cc4fd39ad69c08fdff7f4016c355ae4b88905219d3579e31eb7"}, - {file = "orjson-3.9.15-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:920fa5a0c5175ab14b9c78f6f820b75804fb4984423ee4c4f1e6d748f8b22bc1"}, - {file = "orjson-3.9.15-cp38-none-win32.whl", hash = "sha256:2b5c0f532905e60cf22a511120e3719b85d9c25d0e1c2a8abb20c4dede3b05a5"}, - {file = "orjson-3.9.15-cp38-none-win_amd64.whl", hash = "sha256:67384f588f7f8daf040114337d34a5188346e3fae6c38b6a19a2fe8c663a2f9b"}, - {file = "orjson-3.9.15-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6fc2fe4647927070df3d93f561d7e588a38865ea0040027662e3e541d592811e"}, - {file = "orjson-3.9.15-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34cbcd216e7af5270f2ffa63a963346845eb71e174ea530867b7443892d77180"}, - {file = "orjson-3.9.15-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f541587f5c558abd93cb0de491ce99a9ef8d1ae29dd6ab4dbb5a13281ae04cbd"}, - {file = "orjson-3.9.15-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:92255879280ef9c3c0bcb327c5a1b8ed694c290d61a6a532458264f887f052cb"}, - {file = "orjson-3.9.15-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:05a1f57fb601c426635fcae9ddbe90dfc1ed42245eb4c75e4960440cac667262"}, - {file = "orjson-3.9.15-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ede0bde16cc6e9b96633df1631fbcd66491d1063667f260a4f2386a098393790"}, - {file = "orjson-3.9.15-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:e88b97ef13910e5f87bcbc4dd7979a7de9ba8702b54d3204ac587e83639c0c2b"}, - {file = "orjson-3.9.15-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:57d5d8cf9c27f7ef6bc56a5925c7fbc76b61288ab674eb352c26ac780caa5b10"}, - {file = "orjson-3.9.15-cp39-none-win32.whl", hash = "sha256:001f4eb0ecd8e9ebd295722d0cbedf0748680fb9998d3993abaed2f40587257a"}, - {file = "orjson-3.9.15-cp39-none-win_amd64.whl", hash = "sha256:ea0b183a5fe6b2b45f3b854b0d19c4e932d6f5934ae1f723b07cf9560edd4ec7"}, - {file = "orjson-3.9.15.tar.gz", hash = "sha256:95cae920959d772f30ab36d3b25f83bb0f3be671e986c72ce22f8fa700dae061"}, + {file = "orjson-3.10.0-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:47af5d4b850a2d1328660661f0881b67fdbe712aea905dadd413bdea6f792c33"}, + {file = "orjson-3.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c90681333619d78360d13840c7235fdaf01b2b129cb3a4f1647783b1971542b6"}, + {file = "orjson-3.10.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:400c5b7c4222cb27b5059adf1fb12302eebcabf1978f33d0824aa5277ca899bd"}, + {file = "orjson-3.10.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5dcb32e949eae80fb335e63b90e5808b4b0f64e31476b3777707416b41682db5"}, + {file = "orjson-3.10.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa7d507c7493252c0a0264b5cc7e20fa2f8622b8a83b04d819b5ce32c97cf57b"}, + {file = "orjson-3.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e286a51def6626f1e0cc134ba2067dcf14f7f4b9550f6dd4535fd9d79000040b"}, + {file = "orjson-3.10.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8acd4b82a5f3a3ec8b1dc83452941d22b4711964c34727eb1e65449eead353ca"}, + {file = "orjson-3.10.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:30707e646080dd3c791f22ce7e4a2fc2438765408547c10510f1f690bd336217"}, + {file = "orjson-3.10.0-cp310-none-win32.whl", hash = "sha256:115498c4ad34188dcb73464e8dc80e490a3e5e88a925907b6fedcf20e545001a"}, + {file = "orjson-3.10.0-cp310-none-win_amd64.whl", hash = "sha256:6735dd4a5a7b6df00a87d1d7a02b84b54d215fb7adac50dd24da5997ffb4798d"}, + {file = "orjson-3.10.0-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9587053e0cefc284e4d1cd113c34468b7d3f17666d22b185ea654f0775316a26"}, + {file = "orjson-3.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bef1050b1bdc9ea6c0d08468e3e61c9386723633b397e50b82fda37b3563d72"}, + {file = "orjson-3.10.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d16c6963ddf3b28c0d461641517cd312ad6b3cf303d8b87d5ef3fa59d6844337"}, + {file = "orjson-3.10.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4251964db47ef090c462a2d909f16c7c7d5fe68e341dabce6702879ec26d1134"}, + {file = "orjson-3.10.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:73bbbdc43d520204d9ef0817ac03fa49c103c7f9ea94f410d2950755be2c349c"}, + {file = "orjson-3.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:414e5293b82373606acf0d66313aecb52d9c8c2404b1900683eb32c3d042dbd7"}, + {file = "orjson-3.10.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:feaed5bb09877dc27ed0d37f037ddef6cb76d19aa34b108db270d27d3d2ef747"}, + {file = "orjson-3.10.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5127478260db640323cea131ee88541cb1a9fbce051f0b22fa2f0892f44da302"}, + {file = "orjson-3.10.0-cp311-none-win32.whl", hash = "sha256:b98345529bafe3c06c09996b303fc0a21961820d634409b8639bc16bd4f21b63"}, + {file = "orjson-3.10.0-cp311-none-win_amd64.whl", hash = "sha256:658ca5cee3379dd3d37dbacd43d42c1b4feee99a29d847ef27a1cb18abdfb23f"}, + {file = "orjson-3.10.0-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:4329c1d24fd130ee377e32a72dc54a3c251e6706fccd9a2ecb91b3606fddd998"}, + {file = "orjson-3.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef0f19fdfb6553342b1882f438afd53c7cb7aea57894c4490c43e4431739c700"}, + {file = "orjson-3.10.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c4f60db24161534764277f798ef53b9d3063092f6d23f8f962b4a97edfa997a0"}, + {file = "orjson-3.10.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1de3fd5c7b208d836f8ecb4526995f0d5877153a4f6f12f3e9bf11e49357de98"}, + {file = "orjson-3.10.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f93e33f67729d460a177ba285002035d3f11425ed3cebac5f6ded4ef36b28344"}, + {file = "orjson-3.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:237ba922aef472761acd697eef77fef4831ab769a42e83c04ac91e9f9e08fa0e"}, + {file = "orjson-3.10.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:98c1bfc6a9bec52bc8f0ab9b86cc0874b0299fccef3562b793c1576cf3abb570"}, + {file = "orjson-3.10.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:30d795a24be16c03dca0c35ca8f9c8eaaa51e3342f2c162d327bd0225118794a"}, + {file = "orjson-3.10.0-cp312-none-win32.whl", hash = "sha256:6a3f53dc650bc860eb26ec293dfb489b2f6ae1cbfc409a127b01229980e372f7"}, + {file = "orjson-3.10.0-cp312-none-win_amd64.whl", hash = "sha256:983db1f87c371dc6ffc52931eb75f9fe17dc621273e43ce67bee407d3e5476e9"}, + {file = "orjson-3.10.0-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9a667769a96a72ca67237224a36faf57db0c82ab07d09c3aafc6f956196cfa1b"}, + {file = "orjson-3.10.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ade1e21dfde1d37feee8cf6464c20a2f41fa46c8bcd5251e761903e46102dc6b"}, + {file = "orjson-3.10.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:23c12bb4ced1c3308eff7ba5c63ef8f0edb3e4c43c026440247dd6c1c61cea4b"}, + {file = "orjson-3.10.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2d014cf8d4dc9f03fc9f870de191a49a03b1bcda51f2a957943fb9fafe55aac"}, + {file = "orjson-3.10.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eadecaa16d9783affca33597781328e4981b048615c2ddc31c47a51b833d6319"}, + {file = "orjson-3.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd583341218826f48bd7c6ebf3310b4126216920853cbc471e8dbeaf07b0b80e"}, + {file = "orjson-3.10.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:90bfc137c75c31d32308fd61951d424424426ddc39a40e367704661a9ee97095"}, + {file = "orjson-3.10.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:13b5d3c795b09a466ec9fcf0bd3ad7b85467d91a60113885df7b8d639a9d374b"}, + {file = "orjson-3.10.0-cp38-none-win32.whl", hash = "sha256:5d42768db6f2ce0162544845facb7c081e9364a5eb6d2ef06cd17f6050b048d8"}, + {file = "orjson-3.10.0-cp38-none-win_amd64.whl", hash = "sha256:33e6655a2542195d6fd9f850b428926559dee382f7a862dae92ca97fea03a5ad"}, + {file = "orjson-3.10.0-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:4050920e831a49d8782a1720d3ca2f1c49b150953667eed6e5d63a62e80f46a2"}, + {file = "orjson-3.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1897aa25a944cec774ce4a0e1c8e98fb50523e97366c637b7d0cddabc42e6643"}, + {file = "orjson-3.10.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9bf565a69e0082ea348c5657401acec3cbbb31564d89afebaee884614fba36b4"}, + {file = "orjson-3.10.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b6ebc17cfbbf741f5c1a888d1854354536f63d84bee537c9a7c0335791bb9009"}, + {file = "orjson-3.10.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2817877d0b69f78f146ab305c5975d0618df41acf8811249ee64231f5953fee"}, + {file = "orjson-3.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57d017863ec8aa4589be30a328dacd13c2dc49de1c170bc8d8c8a98ece0f2925"}, + {file = "orjson-3.10.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:22c2f7e377ac757bd3476ecb7480c8ed79d98ef89648f0176deb1da5cd014eb7"}, + {file = "orjson-3.10.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e62ba42bfe64c60c1bc84799944f80704e996592c6b9e14789c8e2a303279912"}, + {file = "orjson-3.10.0-cp39-none-win32.whl", hash = "sha256:60c0b1bdbccd959ebd1575bd0147bd5e10fc76f26216188be4a36b691c937077"}, + {file = "orjson-3.10.0-cp39-none-win_amd64.whl", hash = "sha256:175a41500ebb2fdf320bf78e8b9a75a1279525b62ba400b2b2444e274c2c8bee"}, + {file = "orjson-3.10.0.tar.gz", hash = "sha256:ba4d8cac5f2e2cff36bea6b6481cdb92b38c202bcec603d6f5ff91960595a1ed"}, ] [[package]] @@ -1200,13 +1201,13 @@ idna = ["idna (>=2.1)"] [[package]] name = "pycparser" -version = "2.21" +version = "2.22" description = "C parser in Python" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.8" files = [ - {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, - {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, + {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, + {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, ] [[package]] @@ -1356,17 +1357,17 @@ wrapt = ">=1.14.1,<2.0.0" [[package]] name = "pytest-mock" -version = "3.12.0" +version = "3.14.0" description = "Thin-wrapper around the mock package for easier use with pytest" optional = false python-versions = ">=3.8" files = [ - {file = "pytest-mock-3.12.0.tar.gz", hash = "sha256:31a40f038c22cad32287bb43932054451ff5583ff094bca6f675df2f8bc1a6e9"}, - {file = "pytest_mock-3.12.0-py3-none-any.whl", hash = "sha256:0972719a7263072da3a21c7f4773069bcc7486027d7e8e1f81d98a47e701bc4f"}, + {file = "pytest-mock-3.14.0.tar.gz", hash = "sha256:2719255a1efeceadbc056d6bf3df3d1c5015530fb40cf347c0f9afac88410bd0"}, + {file = "pytest_mock-3.14.0-py3-none-any.whl", hash = "sha256:0b72c38033392a5f4621342fe11e9219ac11ec9d375f8e2a0c164539e0d70f6f"}, ] [package.dependencies] -pytest = ">=5.0" +pytest = ">=6.2.5" [package.extras] dev = ["pre-commit", "pytest-asyncio", "tox"] @@ -1498,37 +1499,35 @@ yaml = ["pyyaml (>=6.0.1)"] [[package]] name = "requests-mock" -version = "1.11.0" +version = "1.12.1" description = "Mock out responses from the requests package" optional = false -python-versions = "*" +python-versions = ">=3.5" files = [ - {file = "requests-mock-1.11.0.tar.gz", hash = "sha256:ef10b572b489a5f28e09b708697208c4a3b2b89ef80a9f01584340ea357ec3c4"}, - {file = "requests_mock-1.11.0-py2.py3-none-any.whl", hash = "sha256:f7fae383f228633f6bececebdab236c478ace2284d6292c6e7e2867b9ab74d15"}, + {file = "requests-mock-1.12.1.tar.gz", hash = "sha256:e9e12e333b525156e82a3c852f22016b9158220d2f47454de9cae8a77d371401"}, + {file = "requests_mock-1.12.1-py2.py3-none-any.whl", hash = "sha256:b1e37054004cdd5e56c84454cc7df12b25f90f382159087f4b6915aaeef39563"}, ] [package.dependencies] -requests = ">=2.3,<3" -six = "*" +requests = ">=2.22,<3" [package.extras] fixture = ["fixtures"] -test = ["fixtures", "mock", "purl", "pytest", "requests-futures", "sphinx", "testtools"] [[package]] name = "setuptools" -version = "69.1.1" +version = "69.2.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-69.1.1-py3-none-any.whl", hash = "sha256:02fa291a0471b3a18b2b2481ed902af520c69e8ae0919c13da936542754b4c56"}, - {file = "setuptools-69.1.1.tar.gz", hash = "sha256:5c0806c7d9af348e6dd3777b4f4dbb42c7ad85b190104837488eab9a7c945cf8"}, + {file = "setuptools-69.2.0-py3-none-any.whl", hash = "sha256:c21c49fb1042386df081cb5d86759792ab89efca84cf114889191cd09aacc80c"}, + {file = "setuptools-69.2.0.tar.gz", hash = "sha256:0ff4183f8f42cd8fa3acea16c45205521a4ef28f73c6391d8a25e92893134f2e"}, ] [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] @@ -1544,13 +1543,13 @@ files = [ [[package]] name = "typing-extensions" -version = "4.10.0" +version = "4.11.0" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.10.0-py3-none-any.whl", hash = "sha256:69b1a937c3a517342112fb4c6df7e72fc39a38e7891a5730ed4985b5214b5475"}, - {file = "typing_extensions-4.10.0.tar.gz", hash = "sha256:b0abd7c89e8fb96f98db18d86106ff1d90ab692004eb746cf6eda2682f91b3cb"}, + {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"}, + {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"}, ] [[package]] @@ -1911,4 +1910,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = ">=3.11,<3.12" -content-hash = "88bcbf3f23ef4524c7a69e6b2eb720618ff2e6882abb68d3d4c9bba736ace453" +content-hash = "22be11f5e2b9db7c04f010d300ea0edad1ff45a57bed2e67deef3e344a4be71d" diff --git a/source-google-analytics-data-api/pyproject.toml b/source-google-analytics-data-api/pyproject.toml index 14744ce08d..b9fe885664 100644 --- a/source-google-analytics-data-api/pyproject.toml +++ b/source-google-analytics-data-api/pyproject.toml @@ -1,13 +1,14 @@ [tool.poetry] name = "source-google-analytics-data-api" -version = "0.1.0" +version = "0.1.2" description = "" authors = ["Luishfs "] [tool.poetry.dependencies] python = ">=3.11,<3.12" estuary-cdk = {path="../estuary-cdk", develop = true} -airbyte-cdk = "0.51.14" +airbyte-cdk = "^0.52" +pydantic = "1.10.14" pendulum = "^3.0.0" cryptography = "==37.0.4" diff --git a/source-google-analytics-data-api/source_google_analytics_data_api/__main__.py b/source-google-analytics-data-api/source_google_analytics_data_api/__main__.py index 71b5189abd..1f8346440f 100644 --- a/source-google-analytics-data-api/source_google_analytics_data_api/__main__.py +++ b/source-google-analytics-data-api/source_google_analytics_data_api/__main__.py @@ -2,9 +2,19 @@ import asyncio import urllib +import json from estuary_cdk import shim_airbyte_cdk, flow from source_google_analytics_data_api import SourceGoogleAnalyticsDataApi +accessTokenBody = { + "grant_type": "authorization_code", + "client_id": "{{{ client_id }}}", + "client_secret": "{{{ client_secret }}}", + "redirect_uri": "{{{ redirect_uri }}}", + "code": "{{{ code }}}", +} + + asyncio.run( shim_airbyte_cdk.CaptureShim( delegate=SourceGoogleAnalyticsDataApi(), @@ -20,13 +30,7 @@ ), accessTokenUrlTemplate="https://oauth2.googleapis.com/token", accessTokenHeaders={}, - accessTokenBody=( - "grant_type=authorization_code" - r"&client_id={{#urlencode}}{{{ client_id }}}{{/urlencode}}" - r"&client_secret={{#urlencode}}{{{ client_secret }}}{{/urlencode}}" - r"&redirect_uri={{#urlencode}}{{{ redirect_uri }}}{{/urlencode}}" - r"&code={{#urlencode}}{{{ code }}}{{/urlencode}}" - ), + accessTokenBody=json.dumps(accessTokenBody), accessTokenResponseMap={ "refresh_token": "/refresh_token", }, diff --git a/source-google-analytics-data-api/source_google_analytics_data_api/source.py b/source-google-analytics-data-api/source_google_analytics_data_api/source.py index 2a294727c1..031a3e4367 100644 --- a/source-google-analytics-data-api/source_google_analytics_data_api/source.py +++ b/source-google-analytics-data-api/source_google_analytics_data_api/source.py @@ -114,7 +114,7 @@ def cursor_field(self) -> Optional[str]: @property def primary_key(self): - pk = ["property_id"] + self.config.get("dimensions", []) + pk = self.config.get("dimensions", []) + ["property_id"] if "cohort_spec" not in self.config and "date" not in pk: pk.append("startDate") pk.append("endDate") @@ -139,7 +139,7 @@ def get_json_schema(self) -> Mapping[str, Any]: """ schema: Dict[str, Any] = { "$schema": "https://json-schema.org/draft-07/schema#", - "type": ["null", "object"], + "type": ["object"], "additionalProperties": True, "properties": { "property_id": {"type": ["string"]}, @@ -171,6 +171,8 @@ def get_json_schema(self) -> Mapping[str, Any]: } ) + schema["required"] = self.config["dimensions"] + ["property_id"] + return schema def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: @@ -230,10 +232,10 @@ def parse_response( yield record def get_updated_state(self, current_stream_state: MutableMapping[str, Any], latest_record: Mapping[str, Any]): - updated_state = utils.string_to_date(latest_record[self.cursor_field], self._record_date_format) + updated_state = utils.string_to_date(latest_record[self.cursor_field], old_format=self._record_date_format) stream_state_value = current_stream_state.get(self.cursor_field) if stream_state_value: - stream_state_value = utils.string_to_date(stream_state_value, self._record_date_format, old_format=DATE_FORMAT) + stream_state_value = utils.string_to_date(stream_state_value, old_format=self._record_date_format) updated_state = max(updated_state, stream_state_value) current_stream_state[self.cursor_field] = updated_state.strftime(self._record_date_format) return current_stream_state @@ -261,15 +263,15 @@ def stream_slices( self, *, sync_mode: SyncMode, cursor_field: List[str] = None, stream_state: Mapping[str, Any] = None ) -> Iterable[Optional[Mapping[str, Any]]]: - today: datetime.date = datetime.date.today() + today: datetime.datetime = datetime.datetime.today() start_date = stream_state and stream_state.get(self.cursor_field) if start_date: start_date = utils.string_to_date(start_date, self._record_date_format, old_format=DATE_FORMAT) start_date -= LOOKBACK_WINDOW - start_date = max(start_date, self.config["date_ranges_start_date"]) + start_date = datetime.datetime.strptime(max(start_date, self.config["date_ranges_start_date"]), "%Y-%m-%d") else: - start_date = self.config["date_ranges_start_date"] + start_date = datetime.datetime.strptime(self.config["date_ranges_start_date"], "%Y-%m-%d") while start_date <= today: # stop producing slices if 429 + specific scenario is hit @@ -395,7 +397,7 @@ def _validate_and_transform(self, config: Mapping[str, Any], report_names: Set[s if not config.get("window_in_days"): source_spec = self.spec(logging.getLogger("airbyte")) - config["window_in_days"] = 1 + config["window_in_days"] = source_spec.connectionSpecification["properties"]["window_in_days"]["default"] return config diff --git a/source-google-analytics-data-api/source_google_analytics_data_api/utils.py b/source-google-analytics-data-api/source_google_analytics_data_api/utils.py index c4336453ca..35ce56b373 100644 --- a/source-google-analytics-data-api/source_google_analytics_data_api/utils.py +++ b/source-google-analytics-data-api/source_google_analytics_data_api/utils.py @@ -84,7 +84,7 @@ def string_to_date(d: str, f: str = DATE_FORMAT, old_format=None) -> datetime.da return datetime.datetime.strptime(d, old_format).date() except ValueError: pass - return datetime.datetime.strptime(d, f).date() + return d def date_to_string(d: datetime.date, f: str = DATE_FORMAT) -> str: diff --git a/source-google-analytics-data-api/test.flow.yaml b/source-google-analytics-data-api/test.flow.yaml index 42c2ad717b..538976bf6f 100644 --- a/source-google-analytics-data-api/test.flow.yaml +++ b/source-google-analytics-data-api/test.flow.yaml @@ -1,19 +1,63 @@ --- +import: + - acmeCo/flow.yaml captures: acmeCo/source-google-analytics-data-api: - shards: - logLevel: debug endpoint: local: command: - python - # - "-Xfrozen_modules=off" - # - "-m" - # - debugpy - # - "--listen" - # - "0.0.0.0:5678" - # - "--wait-for-client" - "-m" - source_google_analytics_data_api config: config.yaml - bindings: [] \ No newline at end of file + bindings: + - resource: + stream: daily_active_users + syncMode: incremental + cursorField: + - date + target: acmeCo/daily_active_users + - resource: + stream: weekly_active_users + syncMode: incremental + cursorField: + - date + target: acmeCo/weekly_active_users + - resource: + stream: four_weekly_active_users + syncMode: incremental + cursorField: + - date + target: acmeCo/four_weekly_active_users + - resource: + stream: devices + syncMode: incremental + cursorField: + - date + target: acmeCo/devices + - resource: + stream: locations + syncMode: incremental + cursorField: + - date + target: acmeCo/locations + - resource: + stream: pages + syncMode: incremental + cursorField: + - date + target: acmeCo/pages + - resource: + stream: traffic_sources + syncMode: incremental + cursorField: + - date + target: acmeCo/traffic_sources + - resource: + stream: website_overview + syncMode: incremental + cursorField: + - date + target: acmeCo/website_overview + shards: + logLevel: debug diff --git a/source-google-analytics-data-api/tests/snapshots/snapshots__capture__capture.stdout.json b/source-google-analytics-data-api/tests/snapshots/snapshots__capture__capture.stdout.json new file mode 100644 index 0000000000..a69c8fef6b --- /dev/null +++ b/source-google-analytics-data-api/tests/snapshots/snapshots__capture__capture.stdout.json @@ -0,0 +1,249 @@ +[ + [ + "acmeCo/daily_active_users", + { + "_meta": { + "op": "u", + "row_id": 0 + }, + "active1DayUsers": 2, + "date": "20240408", + "property_id": "431462875" + } + ], + [ + "acmeCo/weekly_active_users", + { + "_meta": { + "op": "u", + "row_id": 0 + }, + "active7DayUsers": 2, + "date": "20240408", + "property_id": "431462875" + } + ], + [ + "acmeCo/weekly_active_users", + { + "_meta": { + "op": "u", + "row_id": 1 + }, + "active7DayUsers": 2, + "date": "20240409", + "property_id": "431462875" + } + ], + [ + "acmeCo/four_weekly_active_users", + { + "_meta": { + "op": "u", + "row_id": 0 + }, + "active28DayUsers": 2, + "date": "20240408", + "property_id": "431462875" + } + ], + [ + "acmeCo/four_weekly_active_users", + { + "_meta": { + "op": "u", + "row_id": 1 + }, + "active28DayUsers": 2, + "date": "20240409", + "property_id": "431462875" + } + ], + [ + "acmeCo/devices", + { + "_meta": { + "op": "u", + "row_id": 0 + }, + "averageSessionDuration": 1744.051628, + "bounceRate": 0.5, + "browser": "Chrome", + "date": "20240408", + "deviceCategory": "desktop", + "newUsers": 1, + "operatingSystem": "Linux", + "property_id": "431462875", + "screenPageViews": 18, + "screenPageViewsPerSession": 9.0, + "sessions": 2, + "sessionsPerUser": 2.0, + "totalUsers": 1 + } + ], + [ + "acmeCo/devices", + { + "_meta": { + "op": "u", + "row_id": 1 + }, + "averageSessionDuration": 237.4445105, + "bounceRate": 0.0, + "browser": "Firefox", + "date": "20240408", + "deviceCategory": "desktop", + "newUsers": 1, + "operatingSystem": "Linux", + "property_id": "431462875", + "screenPageViews": 5, + "screenPageViewsPerSession": 2.5, + "sessions": 2, + "sessionsPerUser": 2.0, + "totalUsers": 1 + } + ], + [ + "acmeCo/locations", + { + "_meta": { + "op": "u", + "row_id": 0 + }, + "averageSessionDuration": 990.74806925, + "bounceRate": 0.25, + "city": "Maringa", + "country": "Brazil", + "date": "20240408", + "newUsers": 2, + "property_id": "431462875", + "region": "State of Parana", + "screenPageViews": 23, + "screenPageViewsPerSession": 5.75, + "sessions": 4, + "sessionsPerUser": 2.0, + "totalUsers": 2 + } + ], + [ + "acmeCo/pages", + { + "_meta": { + "op": "u", + "row_id": 0 + }, + "bounceRate": 0.25, + "date": "20240408", + "hostName": "127.0.0.1", + "pagePathPlusQueryString": "/", + "property_id": "431462875", + "screenPageViews": 20 + } + ], + [ + "acmeCo/pages", + { + "_meta": { + "op": "u", + "row_id": 1 + }, + "bounceRate": 1.0, + "date": "20240408", + "hostName": "127.0.0.1", + "pagePathPlusQueryString": "/?gtm_debug=1712598706686", + "property_id": "431462875", + "screenPageViews": 1 + } + ], + [ + "acmeCo/pages", + { + "_meta": { + "op": "u", + "row_id": 2 + }, + "bounceRate": 0.0, + "date": "20240408", + "hostName": "127.0.0.1", + "pagePathPlusQueryString": "/?gtm_debug=1712598724794", + "property_id": "431462875", + "screenPageViews": 1 + } + ], + [ + "acmeCo/pages", + { + "_meta": { + "op": "u", + "row_id": 3 + }, + "bounceRate": 0.0, + "date": "20240408", + "hostName": "127.0.0.1", + "pagePathPlusQueryString": "/?gtm_debug=1712598763697", + "property_id": "431462875", + "screenPageViews": 1 + } + ], + [ + "acmeCo/traffic_sources", + { + "_meta": { + "op": "u", + "row_id": 0 + }, + "averageSessionDuration": 1015.1676726666666, + "bounceRate": 0.0, + "date": "20240408", + "newUsers": 2, + "property_id": "431462875", + "screenPageViews": 15, + "screenPageViewsPerSession": 5.0, + "sessionMedium": "(none)", + "sessionSource": "(direct)", + "sessions": 3, + "sessionsPerUser": 1.5, + "totalUsers": 2 + } + ], + [ + "acmeCo/traffic_sources", + { + "_meta": { + "op": "u", + "row_id": 1 + }, + "averageSessionDuration": 305.829753, + "bounceRate": 1.0, + "date": "20240408", + "newUsers": 0, + "property_id": "431462875", + "screenPageViews": 8, + "screenPageViewsPerSession": 2.6666666666666665, + "sessionMedium": "(not set)", + "sessionSource": "(not set)", + "sessions": 3, + "sessionsPerUser": 1.5, + "totalUsers": 2 + } + ], + [ + "acmeCo/website_overview", + { + "_meta": { + "op": "u", + "row_id": 0 + }, + "averageSessionDuration": 990.74806925, + "bounceRate": 0.25, + "date": "20240408", + "newUsers": 2, + "property_id": "431462875", + "screenPageViews": 23, + "screenPageViewsPerSession": 5.75, + "sessions": 4, + "sessionsPerUser": 2.0, + "totalUsers": 2 + } + ] +] diff --git a/source-google-analytics-data-api/tests/snapshots/snapshots__discover__capture.stdout.json b/source-google-analytics-data-api/tests/snapshots/snapshots__discover__capture.stdout.json index 3a18bc2f54..fcff027c0d 100644 --- a/source-google-analytics-data-api/tests/snapshots/snapshots__discover__capture.stdout.json +++ b/source-google-analytics-data-api/tests/snapshots/snapshots__discover__capture.stdout.json @@ -32,14 +32,17 @@ ] } }, + "required": [ + "date", + "property_id" + ], "type": [ - "null", "object" ] }, "key": [ - "/property_id", - "/date" + "/date", + "/property_id" ], "recommendedName": "daily_active_users", "resourceConfig": { @@ -83,14 +86,17 @@ ] } }, + "required": [ + "date", + "property_id" + ], "type": [ - "null", "object" ] }, "key": [ - "/property_id", - "/date" + "/date", + "/property_id" ], "recommendedName": "weekly_active_users", "resourceConfig": { @@ -134,14 +140,17 @@ ] } }, + "required": [ + "date", + "property_id" + ], "type": [ - "null", "object" ] }, "key": [ - "/property_id", - "/date" + "/date", + "/property_id" ], "recommendedName": "four_weekly_active_users", "resourceConfig": { @@ -246,17 +255,23 @@ ] } }, + "required": [ + "date", + "deviceCategory", + "operatingSystem", + "browser", + "property_id" + ], "type": [ - "null", "object" ] }, "key": [ - "/property_id", "/date", "/deviceCategory", "/operatingSystem", - "/browser" + "/browser", + "/property_id" ], "recommendedName": "devices", "resourceConfig": { @@ -361,17 +376,23 @@ ] } }, + "required": [ + "region", + "country", + "city", + "date", + "property_id" + ], "type": [ - "null", "object" ] }, "key": [ - "/property_id", "/region", "/country", "/city", - "/date" + "/date", + "/property_id" ], "recommendedName": "locations", "resourceConfig": { @@ -430,16 +451,21 @@ ] } }, + "required": [ + "date", + "hostName", + "pagePathPlusQueryString", + "property_id" + ], "type": [ - "null", "object" ] }, "key": [ - "/property_id", "/date", "/hostName", - "/pagePathPlusQueryString" + "/pagePathPlusQueryString", + "/property_id" ], "recommendedName": "pages", "resourceConfig": { @@ -540,16 +566,21 @@ ] } }, + "required": [ + "date", + "sessionSource", + "sessionMedium", + "property_id" + ], "type": [ - "null", "object" ] }, "key": [ - "/property_id", "/date", "/sessionSource", - "/sessionMedium" + "/sessionMedium", + "/property_id" ], "recommendedName": "traffic_sources", "resourceConfig": { @@ -642,14 +673,17 @@ ] } }, + "required": [ + "date", + "property_id" + ], "type": [ - "null", "object" ] }, "key": [ - "/property_id", - "/date" + "/date", + "/property_id" ], "recommendedName": "website_overview", "resourceConfig": { diff --git a/source-google-analytics-data-api/tests/snapshots/snapshots__spec__capture.stdout.json b/source-google-analytics-data-api/tests/snapshots/snapshots__spec__capture.stdout.json index a93bafbc34..3c51d56ed6 100644 --- a/source-google-analytics-data-api/tests/snapshots/snapshots__spec__capture.stdout.json +++ b/source-google-analytics-data-api/tests/snapshots/snapshots__spec__capture.stdout.json @@ -107,7 +107,7 @@ }, "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-analytics-data-api", "oauth2": { - "accessTokenBody": "grant_type=authorization_code&client_id={{#urlencode}}{{{ client_id }}}{{/urlencode}}&client_secret={{#urlencode}}{{{ client_secret }}}{{/urlencode}}&redirect_uri={{#urlencode}}{{{ redirect_uri }}}{{/urlencode}}&code={{#urlencode}}{{{ code }}}{{/urlencode}}", + "accessTokenBody": "{\"grant_type\": \"authorization_code\", \"client_id\": \"{{{ client_id }}}\", \"client_secret\": \"{{{ client_secret }}}\", \"redirect_uri\": \"{{{ redirect_uri }}}\", \"code\": \"{{{ code }}}\"}", "accessTokenResponseMap": { "refresh_token": "/refresh_token" }, diff --git a/source-google-analytics-data-api/tests/test_snapshots.py b/source-google-analytics-data-api/tests/test_snapshots.py index 06694b3eac..324c05d13b 100644 --- a/source-google-analytics-data-api/tests/test_snapshots.py +++ b/source-google-analytics-data-api/tests/test_snapshots.py @@ -4,21 +4,21 @@ import pytest_insta.format as insta_format insta_format.FmtJson.dump = lambda _self, path, value: path.write_text(json.dumps(value, sort_keys=True, indent=2) + "\n", "utf-8") -# def test_capture(request, snapshot): -# result = subprocess.run( -# [ -# "flowctl", -# "preview", -# "--source", -# request.fspath.dirname + "/../test.flow.yaml", -# ], -# stdout=subprocess.PIPE, -# text=True, -# ) -# assert result.returncode == 0 -# lines = [json.loads(l) for l in result.stdout.splitlines()] +def test_capture(request, snapshot): + result = subprocess.run( + [ + "flowctl", + "preview", + "--source", + request.fspath.dirname + "/../test.flow.yaml", + ], + stdout=subprocess.PIPE, + text=True, + ) + assert result.returncode == 0 + lines = [json.loads(l) for l in result.stdout.splitlines()] -# assert snapshot("capture.stdout.json") == lines + assert snapshot("capture.stdout.json") == lines def test_discover(request, snapshot): result = subprocess.run(