diff --git a/README.md b/README.md
new file mode 100755
index 00000000..7d883a0a
--- /dev/null
+++ b/README.md
@@ -0,0 +1,89 @@
+# public-api
+
+
+## SDK Installation
+
+```bash
+pip install git+https://github.com/airbytehq/airbyte-api-python-sdk.git
+```
+
+
+## SDK Example Usage
+
+```python
+import sdk
+from sdk.models import operations, shared
+
+s = sdk.SDK(
+ security=shared.Security(
+ bearer_auth="Bearer YOUR_BEARER_TOKEN_HERE",
+ ),
+)
+
+
+req = shared.ConnectionCreateRequest(
+ destination_id="89bd9d8d-69a6-474e-8f46-7cc8796ed151",
+ geography="us",
+ name="perferendis",
+ schedule=shared.ConnectionScheduleCreate(
+ cron_expression="ipsam",
+ schedule_type="cron",
+ ),
+ source_id="fc2ddf7c-c78c-4a1b-a928-fc816742cb73",
+)
+
+res = s.connections.create_connection(req)
+
+if res.connection_response is not None:
+ # handle response
+```
+
+
+
+## Available Resources and Operations
+
+
+### connections
+
+* `create_connection` - Create a connection
+* `get_connection` - Get Connection details
+* `list_connections` - List connections
+
+### destinations
+
+* `create_destination` - Create a destination
+* `get_destination` - Get Destination details
+* `list_destinations` - List destinations
+
+### jobs
+
+* `cancel_job` - Cancel a running Job
+* `create_job` - Trigger a sync or reset job of a connection
+* `get_job` - Get Job status and details
+* `list_jobs` - List Jobs by sync type
+
+### sources
+
+* `create_source` - Create a source
+* `get_source` - Get Source details
+* `list_sources` - List sources
+
+### workspaces
+
+* `create_workspace` - Create a workspace
+* `get_workspace` - Get Workspace details
+* `list_workspaces` - List workspaces
+
+
+### Maturity
+
+This SDK is in beta, and there may be breaking changes between versions without a major version update. Therefore, we recommend pinning usage
+to a specific package version. This way, you can install the same version each time without breaking changes unless you are intentionally
+looking for the latest version.
+
+### Contributions
+
+While we value open-source contributions to this SDK, this library is generated programmatically.
+Feel free to open a PR or a Github issue as a proof of concept and we'll do our best to include it in a future release !
+
+### SDK Created by [Speakeasy](https://docs.speakeasyapi.dev/docs/using-speakeasy/client-sdks)
diff --git a/RELEASES.md b/RELEASES.md
new file mode 100644
index 00000000..b213b546
--- /dev/null
+++ b/RELEASES.md
@@ -0,0 +1,19 @@
+
+
+## 2023-04-05 08:43:00
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://prod.speakeasyapi.dev/v1/apis/public-api/version/v0.1.0/schema/download
+- Speakeasy CLI 1.19.3 (2.16.7) https://github.com/speakeasy-api/speakeasy
+
+## 2023-04-05 08:46:06
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://prod.speakeasyapi.dev/v1/apis/public-api/version/v0.1.0/schema/download
+- Speakeasy CLI 1.19.3 (2.16.7) https://github.com/speakeasy-api/speakeasy
+
+## 2023-04-05 09:04:33
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://prod.speakeasyapi.dev/v1/apis/public-api/version/v0.1.0/schema/download
+- Speakeasy CLI 1.19.3 (2.16.7) https://github.com/speakeasy-api/speakeasy
\ No newline at end of file
diff --git a/USAGE.md b/USAGE.md
new file mode 100755
index 00000000..e0705181
--- /dev/null
+++ b/USAGE.md
@@ -0,0 +1,29 @@
+
+```python
+import sdk
+from sdk.models import operations, shared
+
+s = sdk.SDK(
+ security=shared.Security(
+ bearer_auth="Bearer YOUR_BEARER_TOKEN_HERE",
+ ),
+)
+
+
+req = shared.ConnectionCreateRequest(
+ destination_id="89bd9d8d-69a6-474e-8f46-7cc8796ed151",
+ geography="us",
+ name="perferendis",
+ schedule=shared.ConnectionScheduleCreate(
+ cron_expression="ipsam",
+ schedule_type="cron",
+ ),
+ source_id="fc2ddf7c-c78c-4a1b-a928-fc816742cb73",
+)
+
+res = s.connections.create_connection(req)
+
+if res.connection_response is not None:
+ # handle response
+```
+
\ No newline at end of file
diff --git a/files.gen b/files.gen
new file mode 100755
index 00000000..5ee3f9d2
--- /dev/null
+++ b/files.gen
@@ -0,0 +1,281 @@
+src/sdk/connections.py
+src/sdk/destinations.py
+src/sdk/jobs.py
+src/sdk/sources.py
+src/sdk/workspaces.py
+src/sdk/sdk.py
+pylintrc
+setup.py
+src/sdk/__init__.py
+src/sdk/models/__init__.py
+src/sdk/utils/__init__.py
+src/sdk/utils/retries.py
+src/sdk/utils/utils.py
+src/sdk/models/operations/createconnection.py
+src/sdk/models/operations/getconnection.py
+src/sdk/models/operations/listconnections.py
+src/sdk/models/operations/createdestination.py
+src/sdk/models/operations/getdestination.py
+src/sdk/models/operations/listdestinations.py
+src/sdk/models/operations/canceljob.py
+src/sdk/models/operations/createjob.py
+src/sdk/models/operations/getjob.py
+src/sdk/models/operations/listjobs.py
+src/sdk/models/operations/createsource.py
+src/sdk/models/operations/getsource.py
+src/sdk/models/operations/listsources.py
+src/sdk/models/operations/createworkspace.py
+src/sdk/models/operations/getworkspace.py
+src/sdk/models/operations/listworkspaces.py
+src/sdk/models/operations/__init__.py
+src/sdk/models/shared/connectionresponse.py
+src/sdk/models/shared/connectionstatusenum_enum.py
+src/sdk/models/shared/connectionscheduleresponse.py
+src/sdk/models/shared/scheduletypewithbasicenum_enum.py
+src/sdk/models/shared/geographyenum_enum.py
+src/sdk/models/shared/connectioncreaterequest.py
+src/sdk/models/shared/connectionschedulecreate.py
+src/sdk/models/shared/scheduletypeenum_enum.py
+src/sdk/models/shared/connectionsresponse.py
+src/sdk/models/shared/destinationresponse.py
+src/sdk/models/shared/destinationcreaterequest.py
+src/sdk/models/shared/destination_amazon_sqs.py
+src/sdk/models/shared/destination_aws_datalake.py
+src/sdk/models/shared/destination_azure_blob_storage.py
+src/sdk/models/shared/destination_bigquery.py
+src/sdk/models/shared/destination_bigquery_denormalized.py
+src/sdk/models/shared/destination_cassandra.py
+src/sdk/models/shared/destination_clickhouse.py
+src/sdk/models/shared/destination_convex.py
+src/sdk/models/shared/destination_databend.py
+src/sdk/models/shared/destination_databricks.py
+src/sdk/models/shared/destination_dynamodb.py
+src/sdk/models/shared/destination_elasticsearch.py
+src/sdk/models/shared/destination_firebolt.py
+src/sdk/models/shared/destination_firestore.py
+src/sdk/models/shared/destination_gcs.py
+src/sdk/models/shared/destination_google_sheets.py
+src/sdk/models/shared/destination_keen.py
+src/sdk/models/shared/destination_kinesis.py
+src/sdk/models/shared/destination_mariadb_columnstore.py
+src/sdk/models/shared/destination_meilisearch.py
+src/sdk/models/shared/destination_mongodb.py
+src/sdk/models/shared/destination_mssql.py
+src/sdk/models/shared/destination_mysql.py
+src/sdk/models/shared/destination_oracle.py
+src/sdk/models/shared/destination_postgres.py
+src/sdk/models/shared/destination_pubsub.py
+src/sdk/models/shared/destination_pulsar.py
+src/sdk/models/shared/destination_rabbitmq.py
+src/sdk/models/shared/destination_redis.py
+src/sdk/models/shared/destination_redshift.py
+src/sdk/models/shared/destination_rockset.py
+src/sdk/models/shared/destination_s3.py
+src/sdk/models/shared/destination_s3_glue.py
+src/sdk/models/shared/destination_scylla.py
+src/sdk/models/shared/destination_sftp_json.py
+src/sdk/models/shared/destination_snowflake.py
+src/sdk/models/shared/destination_typesense.py
+src/sdk/models/shared/destinationsresponse.py
+src/sdk/models/shared/jobresponse.py
+src/sdk/models/shared/jobstatusenum_enum.py
+src/sdk/models/shared/jobtypeenum_enum.py
+src/sdk/models/shared/jobcreaterequest.py
+src/sdk/models/shared/jobsresponse.py
+src/sdk/models/shared/sourceresponse.py
+src/sdk/models/shared/sourcecreaterequest.py
+src/sdk/models/shared/source_pokeapi.py
+src/sdk/models/shared/source_airtable.py
+src/sdk/models/shared/source_alloydb.py
+src/sdk/models/shared/source_amazon_ads.py
+src/sdk/models/shared/source_amazon_seller_partner.py
+src/sdk/models/shared/source_amazon_sqs.py
+src/sdk/models/shared/source_amplitude.py
+src/sdk/models/shared/source_apify_dataset.py
+src/sdk/models/shared/source_asana.py
+src/sdk/models/shared/source_auth0.py
+src/sdk/models/shared/source_aws_cloudtrail.py
+src/sdk/models/shared/source_azure_table.py
+src/sdk/models/shared/source_bamboo_hr.py
+src/sdk/models/shared/source_bigcommerce.py
+src/sdk/models/shared/source_bigquery.py
+src/sdk/models/shared/source_bing_ads.py
+src/sdk/models/shared/source_braintree.py
+src/sdk/models/shared/source_braze.py
+src/sdk/models/shared/source_chargebee.py
+src/sdk/models/shared/source_chartmogul.py
+src/sdk/models/shared/source_clickhouse.py
+src/sdk/models/shared/source_clickup_api.py
+src/sdk/models/shared/source_close_com.py
+src/sdk/models/shared/source_coda.py
+src/sdk/models/shared/source_coin_api.py
+src/sdk/models/shared/source_coinmarketcap.py
+src/sdk/models/shared/source_configcat.py
+src/sdk/models/shared/source_confluence.py
+src/sdk/models/shared/source_datascope.py
+src/sdk/models/shared/source_delighted.py
+src/sdk/models/shared/source_dixa.py
+src/sdk/models/shared/source_dockerhub.py
+src/sdk/models/shared/source_dremio.py
+src/sdk/models/shared/source_dynamodb.py
+src/sdk/models/shared/source_e2e_test_cloud.py
+src/sdk/models/shared/source_emailoctopus.py
+src/sdk/models/shared/source_exchange_rates.py
+src/sdk/models/shared/source_facebook_marketing.py
+src/sdk/models/shared/source_facebook_pages.py
+src/sdk/models/shared/source_faker.py
+src/sdk/models/shared/source_fauna.py
+src/sdk/models/shared/source_file_secure.py
+src/sdk/models/shared/source_firebolt.py
+src/sdk/models/shared/source_freshcaller.py
+src/sdk/models/shared/source_freshdesk.py
+src/sdk/models/shared/source_freshsales.py
+src/sdk/models/shared/source_gcs.py
+src/sdk/models/shared/source_getlago.py
+src/sdk/models/shared/source_github.py
+src/sdk/models/shared/source_gitlab.py
+src/sdk/models/shared/source_glassfrog.py
+src/sdk/models/shared/source_gnews.py
+src/sdk/models/shared/source_google_ads.py
+src/sdk/models/shared/source_google_analytics_data_api.py
+src/sdk/models/shared/source_google_analytics_v4.py
+src/sdk/models/shared/source_google_directory.py
+src/sdk/models/shared/source_google_search_console.py
+src/sdk/models/shared/source_google_sheets.py
+src/sdk/models/shared/source_google_webfonts.py
+src/sdk/models/shared/source_google_workspace_admin_reports.py
+src/sdk/models/shared/source_greenhouse.py
+src/sdk/models/shared/source_gridly.py
+src/sdk/models/shared/source_harvest.py
+src/sdk/models/shared/source_hubplanner.py
+src/sdk/models/shared/source_hubspot.py
+src/sdk/models/shared/source_insightly.py
+src/sdk/models/shared/source_instagram.py
+src/sdk/models/shared/source_instatus.py
+src/sdk/models/shared/source_intercom.py
+src/sdk/models/shared/source_ip2whois.py
+src/sdk/models/shared/source_iterable.py
+src/sdk/models/shared/source_jira.py
+src/sdk/models/shared/source_k6_cloud.py
+src/sdk/models/shared/source_klarna.py
+src/sdk/models/shared/source_klaviyo.py
+src/sdk/models/shared/source_kustomer_singer.py
+src/sdk/models/shared/source_launchdarkly.py
+src/sdk/models/shared/source_lemlist.py
+src/sdk/models/shared/source_linkedin_ads.py
+src/sdk/models/shared/source_linkedin_pages.py
+src/sdk/models/shared/source_linnworks.py
+src/sdk/models/shared/source_lokalise.py
+src/sdk/models/shared/source_mailchimp.py
+src/sdk/models/shared/source_mailgun.py
+src/sdk/models/shared/source_mailjet_sms.py
+src/sdk/models/shared/source_marketo.py
+src/sdk/models/shared/source_metabase.py
+src/sdk/models/shared/source_microsoft_teams.py
+src/sdk/models/shared/source_mixpanel.py
+src/sdk/models/shared/source_monday.py
+src/sdk/models/shared/source_mongodb.py
+src/sdk/models/shared/source_mssql.py
+src/sdk/models/shared/source_my_hours.py
+src/sdk/models/shared/source_mysql.py
+src/sdk/models/shared/source_netsuite.py
+src/sdk/models/shared/source_notion.py
+src/sdk/models/shared/source_nytimes.py
+src/sdk/models/shared/source_okta.py
+src/sdk/models/shared/source_omnisend.py
+src/sdk/models/shared/source_onesignal.py
+src/sdk/models/shared/source_openweather.py
+src/sdk/models/shared/source_oracle.py
+src/sdk/models/shared/source_orb.py
+src/sdk/models/shared/source_orbit.py
+src/sdk/models/shared/source_outreach.py
+src/sdk/models/shared/source_paypal_transaction.py
+src/sdk/models/shared/source_paystack.py
+src/sdk/models/shared/source_pendo.py
+src/sdk/models/shared/source_persistiq.py
+src/sdk/models/shared/source_pexels_api.py
+src/sdk/models/shared/source_pinterest.py
+src/sdk/models/shared/source_pipedrive.py
+src/sdk/models/shared/source_pocket.py
+src/sdk/models/shared/source_polygon_stock_api.py
+src/sdk/models/shared/source_postgres.py
+src/sdk/models/shared/source_posthog.py
+src/sdk/models/shared/source_postmarkapp.py
+src/sdk/models/shared/source_prestashop.py
+src/sdk/models/shared/source_public_apis.py
+src/sdk/models/shared/source_punk_api.py
+src/sdk/models/shared/source_pypi.py
+src/sdk/models/shared/source_qualaroo.py
+src/sdk/models/shared/source_railz.py
+src/sdk/models/shared/source_recharge.py
+src/sdk/models/shared/source_recreation.py
+src/sdk/models/shared/source_recruitee.py
+src/sdk/models/shared/source_recurly.py
+src/sdk/models/shared/source_redshift.py
+src/sdk/models/shared/source_retently.py
+src/sdk/models/shared/source_rki_covid.py
+src/sdk/models/shared/source_rss.py
+src/sdk/models/shared/source_s3.py
+src/sdk/models/shared/source_salesforce.py
+src/sdk/models/shared/source_salesforce_singer.py
+src/sdk/models/shared/source_salesloft.py
+src/sdk/models/shared/source_sap_fieldglass.py
+src/sdk/models/shared/source_secoda.py
+src/sdk/models/shared/source_sendgrid.py
+src/sdk/models/shared/source_sendinblue.py
+src/sdk/models/shared/source_senseforce.py
+src/sdk/models/shared/source_sentry.py
+src/sdk/models/shared/source_sftp.py
+src/sdk/models/shared/source_sftp_bulk.py
+src/sdk/models/shared/source_shopify.py
+src/sdk/models/shared/source_shortio.py
+src/sdk/models/shared/source_slack.py
+src/sdk/models/shared/source_smaily.py
+src/sdk/models/shared/source_smartengage.py
+src/sdk/models/shared/source_smartsheets.py
+src/sdk/models/shared/source_snapchat_marketing.py
+src/sdk/models/shared/source_snowflake.py
+src/sdk/models/shared/source_sonar_cloud.py
+src/sdk/models/shared/source_spacex_api.py
+src/sdk/models/shared/source_square.py
+src/sdk/models/shared/source_strava.py
+src/sdk/models/shared/source_stripe.py
+src/sdk/models/shared/source_survey_sparrow.py
+src/sdk/models/shared/source_surveymonkey.py
+src/sdk/models/shared/source_tempo.py
+src/sdk/models/shared/source_the_guardian_api.py
+src/sdk/models/shared/source_tiktok_marketing.py
+src/sdk/models/shared/source_todoist.py
+src/sdk/models/shared/source_trello.py
+src/sdk/models/shared/source_trustpilot.py
+src/sdk/models/shared/source_tvmaze_schedule.py
+src/sdk/models/shared/source_twilio.py
+src/sdk/models/shared/source_twilio_taskrouter.py
+src/sdk/models/shared/source_twitter.py
+src/sdk/models/shared/source_typeform.py
+src/sdk/models/shared/source_us_census.py
+src/sdk/models/shared/source_vantage.py
+src/sdk/models/shared/source_webflow.py
+src/sdk/models/shared/source_whisky_hunter.py
+src/sdk/models/shared/source_wikipedia_pageviews.py
+src/sdk/models/shared/source_woocommerce.py
+src/sdk/models/shared/source_xero.py
+src/sdk/models/shared/source_xkcd.py
+src/sdk/models/shared/source_yandex_metrica.py
+src/sdk/models/shared/source_younium.py
+src/sdk/models/shared/source_youtube_analytics.py
+src/sdk/models/shared/source_zendesk_chat.py
+src/sdk/models/shared/source_zendesk_sunshine.py
+src/sdk/models/shared/source_zendesk_support.py
+src/sdk/models/shared/source_zendesk_talk.py
+src/sdk/models/shared/source_zenloop.py
+src/sdk/models/shared/source_zoho_crm.py
+src/sdk/models/shared/source_zoom.py
+src/sdk/models/shared/source_zuora.py
+src/sdk/models/shared/sourcesresponse.py
+src/sdk/models/shared/workspaceresponse.py
+src/sdk/models/shared/workspacecreaterequest.py
+src/sdk/models/shared/workspacesresponse.py
+src/sdk/models/shared/security.py
+src/sdk/models/shared/__init__.py
+USAGE.md
\ No newline at end of file
diff --git a/gen.yaml b/gen.yaml
index a5cd722a..3aff424c 100644
--- a/gen.yaml
+++ b/gen.yaml
@@ -1,11 +1,16 @@
configVersion: 1.0.0
+management:
+ docChecksum: 0ef6c4b2917927fcb43d7d40bb0564a8
+ docVersion: 1.0.0
+ speakeasyVersion: 1.19.3
+ generationVersion: 2.16.7
generation:
telemetryEnabled: false
sdkClassName: airbyte
sdkFlattening: true
singleTagPerOp: false
python:
- version: ""
+ version: 1.0.2
author: airbyte
- description: Python Client SDK for the Airbyte API
+ description: Python Client SDK Generated by Speakeasy
packageName: public-api
diff --git a/pylintrc b/pylintrc
new file mode 100755
index 00000000..1a0ea35b
--- /dev/null
+++ b/pylintrc
@@ -0,0 +1,640 @@
+[MAIN]
+
+# Analyse import fallback blocks. This can be used to support both Python 2 and
+# 3 compatible code, which means that the block might have code that exists
+# only in one or another interpreter, leading to false positives when analysed.
+analyse-fallback-blocks=no
+
+# Clear in-memory caches upon conclusion of linting. Useful if running pylint
+# in a server-like mode.
+clear-cache-post-run=no
+
+# Load and enable all available extensions. Use --list-extensions to see a list
+# all available extensions.
+#enable-all-extensions=
+
+# In error mode, messages with a category besides ERROR or FATAL are
+# suppressed, and no reports are done by default. Error mode is compatible with
+# disabling specific errors.
+#errors-only=
+
+# Always return a 0 (non-error) status code, even if lint errors are found.
+# This is primarily useful in continuous integration scripts.
+#exit-zero=
+
+# A comma-separated list of package or module names from where C extensions may
+# be loaded. Extensions are loading into the active Python interpreter and may
+# run arbitrary code.
+extension-pkg-allow-list=
+
+# A comma-separated list of package or module names from where C extensions may
+# be loaded. Extensions are loading into the active Python interpreter and may
+# run arbitrary code. (This is an alternative name to extension-pkg-allow-list
+# for backward compatibility.)
+extension-pkg-whitelist=
+
+# Return non-zero exit code if any of these messages/categories are detected,
+# even if score is above --fail-under value. Syntax same as enable. Messages
+# specified are enabled, while categories only check already-enabled messages.
+fail-on=
+
+# Specify a score threshold under which the program will exit with error.
+fail-under=10
+
+# Interpret the stdin as a python script, whose filename needs to be passed as
+# the module_or_package argument.
+#from-stdin=
+
+# Files or directories to be skipped. They should be base names, not paths.
+ignore=CVS
+
+# Add files or directories matching the regular expressions patterns to the
+# ignore-list. The regex matches against paths and can be in Posix or Windows
+# format. Because '\\' represents the directory delimiter on Windows systems,
+# it can't be used as an escape character.
+ignore-paths=
+
+# Files or directories matching the regular expression patterns are skipped.
+# The regex matches against base names, not paths. The default value ignores
+# Emacs file locks
+ignore-patterns=^\.#
+
+# List of module names for which member attributes should not be checked
+# (useful for modules/projects where namespaces are manipulated during runtime
+# and thus existing member attributes cannot be deduced by static analysis). It
+# supports qualified module names, as well as Unix pattern matching.
+ignored-modules=
+
+# Python code to execute, usually for sys.path manipulation such as
+# pygtk.require().
+#init-hook=
+
+# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the
+# number of processors available to use, and will cap the count on Windows to
+# avoid hangs.
+jobs=1
+
+# Control the amount of potential inferred values when inferring a single
+# object. This can help the performance when dealing with large functions or
+# complex, nested conditions.
+limit-inference-results=100
+
+# List of plugins (as comma separated values of python module names) to load,
+# usually to register additional checkers.
+load-plugins=
+
+# Pickle collected data for later comparisons.
+persistent=yes
+
+# Minimum Python version to use for version dependent checks. Will default to
+# the version used to run pylint.
+py-version=3.9
+
+# Discover python modules and packages in the file system subtree.
+recursive=no
+
+# When enabled, pylint would attempt to guess common misconfiguration and emit
+# user-friendly hints instead of false-positive error messages.
+suggestion-mode=yes
+
+# Allow loading of arbitrary C extensions. Extensions are imported into the
+# active Python interpreter and may run arbitrary code.
+unsafe-load-any-extension=no
+
+# In verbose mode, extra non-checker-related info will be displayed.
+#verbose=
+
+
+[BASIC]
+
+# Naming style matching correct argument names.
+argument-naming-style=snake_case
+
+# Regular expression matching correct argument names. Overrides argument-
+# naming-style. If left empty, argument names will be checked with the set
+# naming style.
+#argument-rgx=
+
+# Naming style matching correct attribute names.
+attr-naming-style=snake_case
+
+# Regular expression matching correct attribute names. Overrides attr-naming-
+# style. If left empty, attribute names will be checked with the set naming
+# style.
+#attr-rgx=
+
+# Bad variable names which should always be refused, separated by a comma.
+bad-names=
+
+# Bad variable names regexes, separated by a comma. If names match any regex,
+# they will always be refused
+bad-names-rgxs=
+
+# Naming style matching correct class attribute names.
+class-attribute-naming-style=any
+
+# Regular expression matching correct class attribute names. Overrides class-
+# attribute-naming-style. If left empty, class attribute names will be checked
+# with the set naming style.
+#class-attribute-rgx=
+
+# Naming style matching correct class constant names.
+class-const-naming-style=UPPER_CASE
+
+# Regular expression matching correct class constant names. Overrides class-
+# const-naming-style. If left empty, class constant names will be checked with
+# the set naming style.
+#class-const-rgx=
+
+# Naming style matching correct class names.
+class-naming-style=PascalCase
+
+# Regular expression matching correct class names. Overrides class-naming-
+# style. If left empty, class names will be checked with the set naming style.
+#class-rgx=
+
+# Naming style matching correct constant names.
+const-naming-style=UPPER_CASE
+
+# Regular expression matching correct constant names. Overrides const-naming-
+# style. If left empty, constant names will be checked with the set naming
+# style.
+#const-rgx=
+
+# Minimum line length for functions/classes that require docstrings, shorter
+# ones are exempt.
+docstring-min-length=-1
+
+# Naming style matching correct function names.
+function-naming-style=snake_case
+
+# Regular expression matching correct function names. Overrides function-
+# naming-style. If left empty, function names will be checked with the set
+# naming style.
+#function-rgx=
+
+# Good variable names which should always be accepted, separated by a comma.
+good-names=i,
+ j,
+ k,
+ ex,
+ Run,
+ _,
+ id
+
+# Good variable names regexes, separated by a comma. If names match any regex,
+# they will always be accepted
+good-names-rgxs=
+
+# Include a hint for the correct naming format with invalid-name.
+include-naming-hint=no
+
+# Naming style matching correct inline iteration names.
+inlinevar-naming-style=any
+
+# Regular expression matching correct inline iteration names. Overrides
+# inlinevar-naming-style. If left empty, inline iteration names will be checked
+# with the set naming style.
+#inlinevar-rgx=
+
+# Naming style matching correct method names.
+method-naming-style=snake_case
+
+# Regular expression matching correct method names. Overrides method-naming-
+# style. If left empty, method names will be checked with the set naming style.
+#method-rgx=
+
+# Naming style matching correct module names.
+module-naming-style=snake_case
+
+# Regular expression matching correct module names. Overrides module-naming-
+# style. If left empty, module names will be checked with the set naming style.
+#module-rgx=
+
+# Colon-delimited sets of names that determine each other's naming style when
+# the name regexes allow several styles.
+name-group=
+
+# Regular expression which should only match function or class names that do
+# not require a docstring.
+no-docstring-rgx=^_
+
+# List of decorators that produce properties, such as abc.abstractproperty. Add
+# to this list to register other decorators that produce valid properties.
+# These decorators are taken in consideration only for invalid-name.
+property-classes=abc.abstractproperty
+
+# Regular expression matching correct type variable names. If left empty, type
+# variable names will be checked with the set naming style.
+#typevar-rgx=
+
+# Naming style matching correct variable names.
+variable-naming-style=snake_case
+
+# Regular expression matching correct variable names. Overrides variable-
+# naming-style. If left empty, variable names will be checked with the set
+# naming style.
+#variable-rgx=
+
+
+[CLASSES]
+
+# Warn about protected attribute access inside special methods
+check-protected-access-in-special-methods=no
+
+# List of method names used to declare (i.e. assign) instance attributes.
+defining-attr-methods=__init__,
+ __new__,
+ setUp,
+ __post_init__
+
+# List of member names, which should be excluded from the protected access
+# warning.
+exclude-protected=_asdict,
+ _fields,
+ _replace,
+ _source,
+ _make
+
+# List of valid names for the first argument in a class method.
+valid-classmethod-first-arg=cls
+
+# List of valid names for the first argument in a metaclass class method.
+valid-metaclass-classmethod-first-arg=mcs
+
+
+[DESIGN]
+
+# List of regular expressions of class ancestor names to ignore when counting
+# public methods (see R0903)
+exclude-too-few-public-methods=
+
+# List of qualified class names to ignore when counting class parents (see
+# R0901)
+ignored-parents=
+
+# Maximum number of arguments for function / method.
+max-args=5
+
+# Maximum number of attributes for a class (see R0902).
+max-attributes=7
+
+# Maximum number of boolean expressions in an if statement (see R0916).
+max-bool-expr=5
+
+# Maximum number of branch for function / method body.
+max-branches=12
+
+# Maximum number of locals for function / method body.
+max-locals=15
+
+# Maximum number of parents for a class (see R0901).
+max-parents=7
+
+# Maximum number of public methods for a class (see R0904).
+max-public-methods=25
+
+# Maximum number of return / yield for function / method body.
+max-returns=6
+
+# Maximum number of statements in function / method body.
+max-statements=50
+
+# Minimum number of public methods for a class (see R0903).
+min-public-methods=2
+
+
+[EXCEPTIONS]
+
+# Exceptions that will emit a warning when caught.
+overgeneral-exceptions=builtins.BaseException,builtins.Exception
+
+
+[FORMAT]
+
+# Expected format of line ending, e.g. empty (any line ending), LF or CRLF.
+expected-line-ending-format=
+
+# Regexp for a line that is allowed to be longer than the limit.
+ignore-long-lines=^\s*(# )??$
+
+# Number of spaces of indent required inside a hanging or continued line.
+indent-after-paren=4
+
+# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1
+# tab).
+indent-string=' '
+
+# Maximum number of characters on a single line.
+max-line-length=100
+
+# Maximum number of lines in a module.
+max-module-lines=1000
+
+# Allow the body of a class to be on the same line as the declaration if body
+# contains single statement.
+single-line-class-stmt=no
+
+# Allow the body of an if to be on the same line as the test if there is no
+# else.
+single-line-if-stmt=no
+
+
+[IMPORTS]
+
+# List of modules that can be imported at any level, not just the top level
+# one.
+allow-any-import-level=
+
+# Allow explicit reexports by alias from a package __init__.
+allow-reexport-from-package=no
+
+# Allow wildcard imports from modules that define __all__.
+allow-wildcard-with-all=no
+
+# Deprecated modules which should not be used, separated by a comma.
+deprecated-modules=
+
+# Output a graph (.gv or any supported image format) of external dependencies
+# to the given file (report RP0402 must not be disabled).
+ext-import-graph=
+
+# Output a graph (.gv or any supported image format) of all (i.e. internal and
+# external) dependencies to the given file (report RP0402 must not be
+# disabled).
+import-graph=
+
+# Output a graph (.gv or any supported image format) of internal dependencies
+# to the given file (report RP0402 must not be disabled).
+int-import-graph=
+
+# Force import order to recognize a module as part of the standard
+# compatibility libraries.
+known-standard-library=
+
+# Force import order to recognize a module as part of a third party library.
+known-third-party=enchant
+
+# Couples of modules and preferred modules, separated by a comma.
+preferred-modules=
+
+
+[LOGGING]
+
+# The type of string formatting that logging methods do. `old` means using %
+# formatting, `new` is for `{}` formatting.
+logging-format-style=old
+
+# Logging modules to check that the string format arguments are in logging
+# function parameter format.
+logging-modules=logging
+
+
+[MESSAGES CONTROL]
+
+# Only show warnings with the listed confidence levels. Leave empty to show
+# all. Valid levels: HIGH, CONTROL_FLOW, INFERENCE, INFERENCE_FAILURE,
+# UNDEFINED.
+confidence=HIGH,
+ CONTROL_FLOW,
+ INFERENCE,
+ INFERENCE_FAILURE,
+ UNDEFINED
+
+# Disable the message, report, category or checker with the given id(s). You
+# can either give multiple identifiers separated by comma (,) or put this
+# option multiple times (only on the command line, not in the configuration
+# file where it should appear only once). You can also use "--disable=all" to
+# disable everything first and then re-enable specific checks. For example, if
+# you want to run only the similarities checker, you can use "--disable=all
+# --enable=similarities". If you want to run only the classes checker, but have
+# no Warning level messages displayed, use "--disable=all --enable=classes
+# --disable=W".
+disable=raw-checker-failed,
+ bad-inline-option,
+ locally-disabled,
+ file-ignored,
+ suppressed-message,
+ useless-suppression,
+ deprecated-pragma,
+ use-symbolic-message-instead,
+ trailing-whitespace,
+ line-too-long,
+ missing-class-docstring,
+ missing-module-docstring,
+ missing-function-docstring,
+ too-many-instance-attributes,
+ wrong-import-order,
+ too-many-arguments,
+ broad-exception-raised,
+ too-few-public-methods,
+ too-many-branches,
+ chained-comparison,
+ duplicate-code,
+ trailing-newlines,
+ too-many-public-methods,
+ too-many-locals,
+ too-many-lines,
+ using-constant-test,
+ too-many-statements,
+ cyclic-import,
+
+# Enable the message, report, category or checker with the given id(s). You can
+# either give multiple identifier separated by comma (,) or put this option
+# multiple time (only on the command line, not in the configuration file where
+# it should appear only once). See also the "--disable" option for examples.
+enable=c-extension-no-member
+
+
+[METHOD_ARGS]
+
+# List of qualified names (i.e., library.method) which require a timeout
+# parameter e.g. 'requests.api.get,requests.api.post'
+timeout-methods=requests.api.delete,requests.api.get,requests.api.head,requests.api.options,requests.api.patch,requests.api.post,requests.api.put,requests.api.request
+
+
+[MISCELLANEOUS]
+
+# List of note tags to take in consideration, separated by a comma.
+notes=FIXME,
+ XXX,
+ TODO
+
+# Regular expression of note tags to take in consideration.
+notes-rgx=
+
+
+[REFACTORING]
+
+# Maximum number of nested blocks for function / method body
+max-nested-blocks=5
+
+# Complete name of functions that never returns. When checking for
+# inconsistent-return-statements if a never returning function is called then
+# it will be considered as an explicit return statement and no message will be
+# printed.
+never-returning-functions=sys.exit,argparse.parse_error
+
+
+[REPORTS]
+
+# Python expression which should return a score less than or equal to 10. You
+# have access to the variables 'fatal', 'error', 'warning', 'refactor',
+# 'convention', and 'info' which contain the number of messages in each
+# category, as well as 'statement' which is the total number of statements
+# analyzed. This score is used by the global evaluation report (RP0004).
+evaluation=max(0, 0 if fatal else 10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10))
+
+# Template used to display messages. This is a python new-style format string
+# used to format the message information. See doc for all details.
+msg-template=
+
+# Set the output format. Available formats are text, parseable, colorized, json
+# and msvs (visual studio). You can also give a reporter class, e.g.
+# mypackage.mymodule.MyReporterClass.
+#output-format=
+
+# Tells whether to display a full report or only the messages.
+reports=no
+
+# Activate the evaluation score.
+score=yes
+
+
+[SIMILARITIES]
+
+# Comments are removed from the similarity computation
+ignore-comments=yes
+
+# Docstrings are removed from the similarity computation
+ignore-docstrings=yes
+
+# Imports are removed from the similarity computation
+ignore-imports=yes
+
+# Signatures are removed from the similarity computation
+ignore-signatures=yes
+
+# Minimum lines number of a similarity.
+min-similarity-lines=4
+
+
+[SPELLING]
+
+# Limits count of emitted suggestions for spelling mistakes.
+max-spelling-suggestions=4
+
+# Spelling dictionary name. Available dictionaries: none. To make it work,
+# install the 'python-enchant' package.
+spelling-dict=
+
+# List of comma separated words that should be considered directives if they
+# appear at the beginning of a comment and should not be checked.
+spelling-ignore-comment-directives=fmt: on,fmt: off,noqa:,noqa,nosec,isort:skip,mypy:
+
+# List of comma separated words that should not be checked.
+spelling-ignore-words=
+
+# A path to a file that contains the private dictionary; one word per line.
+spelling-private-dict-file=
+
+# Tells whether to store unknown words to the private dictionary (see the
+# --spelling-private-dict-file option) instead of raising a message.
+spelling-store-unknown-words=no
+
+
+[STRING]
+
+# This flag controls whether inconsistent-quotes generates a warning when the
+# character used as a quote delimiter is used inconsistently within a module.
+check-quote-consistency=no
+
+# This flag controls whether the implicit-str-concat should generate a warning
+# on implicit string concatenation in sequences defined over several lines.
+check-str-concat-over-line-jumps=no
+
+
+[TYPECHECK]
+
+# List of decorators that produce context managers, such as
+# contextlib.contextmanager. Add to this list to register other decorators that
+# produce valid context managers.
+contextmanager-decorators=contextlib.contextmanager
+
+# List of members which are set dynamically and missed by pylint inference
+# system, and so shouldn't trigger E1101 when accessed. Python regular
+# expressions are accepted.
+generated-members=
+
+# Tells whether to warn about missing members when the owner of the attribute
+# is inferred to be None.
+ignore-none=yes
+
+# This flag controls whether pylint should warn about no-member and similar
+# checks whenever an opaque object is returned when inferring. The inference
+# can return multiple potential results while evaluating a Python object, but
+# some branches might not be evaluated, which results in partial inference. In
+# that case, it might be useful to still emit no-member and other checks for
+# the rest of the inferred objects.
+ignore-on-opaque-inference=yes
+
+# List of symbolic message names to ignore for Mixin members.
+ignored-checks-for-mixins=no-member,
+ not-async-context-manager,
+ not-context-manager,
+ attribute-defined-outside-init
+
+# List of class names for which member attributes should not be checked (useful
+# for classes with dynamically set attributes). This supports the use of
+# qualified names.
+ignored-classes=optparse.Values,thread._local,_thread._local,argparse.Namespace
+
+# Show a hint with possible names when a member name was not found. The aspect
+# of finding the hint is based on edit distance.
+missing-member-hint=yes
+
+# The minimum edit distance a name should have in order to be considered a
+# similar match for a missing member name.
+missing-member-hint-distance=1
+
+# The total number of similar names that should be taken in consideration when
+# showing a hint for a missing member.
+missing-member-max-choices=1
+
+# Regex pattern to define which classes are considered mixins.
+mixin-class-rgx=.*[Mm]ixin
+
+# List of decorators that change the signature of a decorated function.
+signature-mutators=
+
+
+[VARIABLES]
+
+# List of additional names supposed to be defined in builtins. Remember that
+# you should avoid defining new builtins when possible.
+additional-builtins=
+
+# Tells whether unused global variables should be treated as a violation.
+allow-global-unused-variables=yes
+
+# List of names allowed to shadow builtins
+allowed-redefined-builtins=
+
+# List of strings which can identify a callback function by name. A callback
+# name must start or end with one of those strings.
+callbacks=cb_,
+ _cb
+
+# A regular expression matching the name of dummy variables (i.e. expected to
+# not be used).
+dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_
+
+# Argument names that match this expression will be ignored.
+ignored-argument-names=_.*|^ignored_|^unused_
+
+# Tells whether we should check for unused import in __init__ files.
+init-import=no
+
+# List of qualified module names which can have objects that can redefine
+# builtins.
+redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io
diff --git a/setup.py b/setup.py
new file mode 100755
index 00000000..fba8f5c5
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,39 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+import setuptools
+
+try:
+ with open("README.md", "r") as fh:
+ long_description = fh.read()
+except FileNotFoundError:
+ long_description = ""
+
+setuptools.setup(
+ name="public-api",
+ version="1.0.2",
+ author="airbyte-prod",
+ description="Python Client SDK Generated by Speakeasy",
+ long_description=long_description,
+ long_description_content_type="text/markdown",
+ packages=setuptools.find_packages(where="src"),
+ install_requires=[
+ "certifi==2022.12.07",
+ "charset-normalizer==2.1.1",
+ "dataclasses-json-speakeasy==0.5.8",
+ "idna==3.3",
+ "marshmallow==3.17.1",
+ "marshmallow-enum==1.5.1",
+ "mypy-extensions==0.4.3",
+ "packaging==21.3",
+ "pyparsing==3.0.9",
+ "python-dateutil==2.8.2",
+ "requests==2.28.1",
+ "six==1.16.0",
+ "typing-inspect==0.8.0",
+ "typing_extensions==4.3.0",
+ "urllib3==1.26.12",
+ "pylint==2.16.2",
+ ],
+ package_dir={'': 'src'},
+ python_requires='>=3.9'
+)
diff --git a/src/sdk/__init__.py b/src/sdk/__init__.py
new file mode 100755
index 00000000..b9e23201
--- /dev/null
+++ b/src/sdk/__init__.py
@@ -0,0 +1,3 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from .sdk import *
diff --git a/src/sdk/connections.py b/src/sdk/connections.py
new file mode 100755
index 00000000..744b2f27
--- /dev/null
+++ b/src/sdk/connections.py
@@ -0,0 +1,100 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+import requests as requests_http
+from . import utils
+from sdk.models import operations, shared
+from typing import Optional
+
+class Connections:
+ _client: requests_http.Session
+ _security_client: requests_http.Session
+ _server_url: str
+ _language: str
+ _sdk_version: str
+ _gen_version: str
+
+ def __init__(self, client: requests_http.Session, security_client: requests_http.Session, server_url: str, language: str, sdk_version: str, gen_version: str) -> None:
+ self._client = client
+ self._security_client = security_client
+ self._server_url = server_url
+ self._language = language
+ self._sdk_version = sdk_version
+ self._gen_version = gen_version
+
+ def create_connection(self, request: shared.ConnectionCreateRequest) -> operations.CreateConnectionResponse:
+ r"""Create a connection"""
+ base_url = self._server_url
+
+ url = base_url.removesuffix('/') + '/connections'
+
+ headers = {}
+ req_content_type, data, form = utils.serialize_request_body(request, "request", 'json')
+ if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
+ headers['content-type'] = req_content_type
+ if data is None and form is None:
+ raise Exception('request body is required')
+
+ client = self._security_client
+
+ http_res = client.request('POST', url, data=data, files=form, headers=headers)
+ content_type = http_res.headers.get('Content-Type')
+
+ res = operations.CreateConnectionResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+
+ if http_res.status_code == 200:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ConnectionResponse])
+ res.connection_response = out
+ elif http_res.status_code in [400, 403]:
+ pass
+
+ return res
+
+ def get_connection(self, request: operations.GetConnectionRequest) -> operations.GetConnectionResponse:
+ r"""Get Connection details"""
+ base_url = self._server_url
+
+ url = utils.generate_url(operations.GetConnectionRequest, base_url, '/connections/{connectionId}', request)
+
+
+ client = self._security_client
+
+ http_res = client.request('GET', url)
+ content_type = http_res.headers.get('Content-Type')
+
+ res = operations.GetConnectionResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+
+ if http_res.status_code == 200:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ConnectionResponse])
+ res.connection_response = out
+ elif http_res.status_code in [403, 404]:
+ pass
+
+ return res
+
+ def list_connections(self, request: operations.ListConnectionsRequest) -> operations.ListConnectionsResponse:
+ r"""List connections"""
+ base_url = self._server_url
+
+ url = base_url.removesuffix('/') + '/connections'
+
+ query_params = utils.get_query_params(operations.ListConnectionsRequest, request)
+
+ client = self._security_client
+
+ http_res = client.request('GET', url, params=query_params)
+ content_type = http_res.headers.get('Content-Type')
+
+ res = operations.ListConnectionsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+
+ if http_res.status_code == 200:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.ConnectionsResponse])
+ res.connections_response = out
+ elif http_res.status_code in [403, 404]:
+ pass
+
+ return res
+
+
\ No newline at end of file
diff --git a/src/sdk/destinations.py b/src/sdk/destinations.py
new file mode 100755
index 00000000..8e452c57
--- /dev/null
+++ b/src/sdk/destinations.py
@@ -0,0 +1,100 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+import requests as requests_http
+from . import utils
+from sdk.models import operations, shared
+from typing import Optional
+
+class Destinations:
+ _client: requests_http.Session
+ _security_client: requests_http.Session
+ _server_url: str
+ _language: str
+ _sdk_version: str
+ _gen_version: str
+
+ def __init__(self, client: requests_http.Session, security_client: requests_http.Session, server_url: str, language: str, sdk_version: str, gen_version: str) -> None:
+ self._client = client
+ self._security_client = security_client
+ self._server_url = server_url
+ self._language = language
+ self._sdk_version = sdk_version
+ self._gen_version = gen_version
+
+ def create_destination(self, request: shared.DestinationCreateRequest) -> operations.CreateDestinationResponse:
+ r"""Create a destination
+ Creates a destination given a name, workspace id, and a json blob containing the configuration for the source.
+ """
+ base_url = self._server_url
+
+ url = base_url.removesuffix('/') + '/destinations'
+
+ headers = {}
+ req_content_type, data, form = utils.serialize_request_body(request, "request", 'json')
+ if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
+ headers['content-type'] = req_content_type
+
+ client = self._security_client
+
+ http_res = client.request('POST', url, data=data, files=form, headers=headers)
+ content_type = http_res.headers.get('Content-Type')
+
+ res = operations.CreateDestinationResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+
+ if http_res.status_code == 200:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.DestinationResponse])
+ res.destination_response = out
+ elif http_res.status_code in [400, 403, 404]:
+ pass
+
+ return res
+
+ def get_destination(self, request: operations.GetDestinationRequest) -> operations.GetDestinationResponse:
+ r"""Get Destination details"""
+ base_url = self._server_url
+
+ url = utils.generate_url(operations.GetDestinationRequest, base_url, '/destinations/{destinationId}', request)
+
+
+ client = self._security_client
+
+ http_res = client.request('GET', url)
+ content_type = http_res.headers.get('Content-Type')
+
+ res = operations.GetDestinationResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+
+ if http_res.status_code == 200:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.DestinationResponse])
+ res.destination_response = out
+ elif http_res.status_code in [403, 404]:
+ pass
+
+ return res
+
+ def list_destinations(self, request: operations.ListDestinationsRequest) -> operations.ListDestinationsResponse:
+ r"""List destinations"""
+ base_url = self._server_url
+
+ url = base_url.removesuffix('/') + '/destinations'
+
+ query_params = utils.get_query_params(operations.ListDestinationsRequest, request)
+
+ client = self._security_client
+
+ http_res = client.request('GET', url, params=query_params)
+ content_type = http_res.headers.get('Content-Type')
+
+ res = operations.ListDestinationsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+
+ if http_res.status_code == 200:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.DestinationsResponse])
+ res.destinations_response = out
+ elif http_res.status_code in [403, 404]:
+ pass
+
+ return res
+
+
\ No newline at end of file
diff --git a/src/sdk/jobs.py b/src/sdk/jobs.py
new file mode 100755
index 00000000..dc9d623f
--- /dev/null
+++ b/src/sdk/jobs.py
@@ -0,0 +1,123 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+import requests as requests_http
+from . import utils
+from sdk.models import operations, shared
+from typing import Optional
+
+class Jobs:
+ _client: requests_http.Session
+ _security_client: requests_http.Session
+ _server_url: str
+ _language: str
+ _sdk_version: str
+ _gen_version: str
+
+ def __init__(self, client: requests_http.Session, security_client: requests_http.Session, server_url: str, language: str, sdk_version: str, gen_version: str) -> None:
+ self._client = client
+ self._security_client = security_client
+ self._server_url = server_url
+ self._language = language
+ self._sdk_version = sdk_version
+ self._gen_version = gen_version
+
+ def cancel_job(self, request: operations.CancelJobRequest) -> operations.CancelJobResponse:
+ r"""Cancel a running Job"""
+ base_url = self._server_url
+
+ url = utils.generate_url(operations.CancelJobRequest, base_url, '/jobs/{jobId}', request)
+
+
+ client = self._security_client
+
+ http_res = client.request('DELETE', url)
+ content_type = http_res.headers.get('Content-Type')
+
+ res = operations.CancelJobResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+
+ if http_res.status_code == 200:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.JobResponse])
+ res.job_response = out
+ elif http_res.status_code in [403, 404]:
+ pass
+
+ return res
+
+ def create_job(self, request: shared.JobCreateRequest) -> operations.CreateJobResponse:
+ r"""Trigger a sync or reset job of a connection"""
+ base_url = self._server_url
+
+ url = base_url.removesuffix('/') + '/jobs'
+
+ headers = {}
+ req_content_type, data, form = utils.serialize_request_body(request, "request", 'json')
+ if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
+ headers['content-type'] = req_content_type
+ if data is None and form is None:
+ raise Exception('request body is required')
+
+ client = self._security_client
+
+ http_res = client.request('POST', url, data=data, files=form, headers=headers)
+ content_type = http_res.headers.get('Content-Type')
+
+ res = operations.CreateJobResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+
+ if http_res.status_code == 200:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.JobResponse])
+ res.job_response = out
+ elif http_res.status_code in [400, 403]:
+ pass
+
+ return res
+
+ def get_job(self, request: operations.GetJobRequest) -> operations.GetJobResponse:
+ r"""Get Job status and details"""
+ base_url = self._server_url
+
+ url = utils.generate_url(operations.GetJobRequest, base_url, '/jobs/{jobId}', request)
+
+
+ client = self._security_client
+
+ http_res = client.request('GET', url)
+ content_type = http_res.headers.get('Content-Type')
+
+ res = operations.GetJobResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+
+ if http_res.status_code == 200:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.JobResponse])
+ res.job_response = out
+ elif http_res.status_code in [403, 404]:
+ pass
+
+ return res
+
+ def list_jobs(self, request: operations.ListJobsRequest) -> operations.ListJobsResponse:
+ r"""List Jobs by sync type"""
+ base_url = self._server_url
+
+ url = base_url.removesuffix('/') + '/jobs'
+
+ query_params = utils.get_query_params(operations.ListJobsRequest, request)
+
+ client = self._security_client
+
+ http_res = client.request('GET', url, params=query_params)
+ content_type = http_res.headers.get('Content-Type')
+
+ res = operations.ListJobsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+
+ if http_res.status_code == 200:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.JobsResponse])
+ res.jobs_response = out
+ elif http_res.status_code == 403:
+ pass
+
+ return res
+
+
\ No newline at end of file
diff --git a/src/sdk/models/__init__.py b/src/sdk/models/__init__.py
new file mode 100755
index 00000000..889f8adc
--- /dev/null
+++ b/src/sdk/models/__init__.py
@@ -0,0 +1,2 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
diff --git a/src/sdk/models/operations/__init__.py b/src/sdk/models/operations/__init__.py
new file mode 100755
index 00000000..1f6a6ca0
--- /dev/null
+++ b/src/sdk/models/operations/__init__.py
@@ -0,0 +1,20 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from .canceljob import *
+from .createconnection import *
+from .createdestination import *
+from .createjob import *
+from .createsource import *
+from .createworkspace import *
+from .getconnection import *
+from .getdestination import *
+from .getjob import *
+from .getsource import *
+from .getworkspace import *
+from .listconnections import *
+from .listdestinations import *
+from .listjobs import *
+from .listsources import *
+from .listworkspaces import *
+
+__all__ = ["CancelJobRequest","CancelJobResponse","CreateConnectionResponse","CreateDestinationResponse","CreateJobResponse","CreateSourceResponse","CreateWorkspaceResponse","GetConnectionRequest","GetConnectionResponse","GetDestinationRequest","GetDestinationResponse","GetJobRequest","GetJobResponse","GetSourceRequest","GetSourceResponse","GetWorkspaceRequest","GetWorkspaceResponse","ListConnectionsRequest","ListConnectionsResponse","ListDestinationsRequest","ListDestinationsResponse","ListJobsRequest","ListJobsResponse","ListSourcesRequest","ListSourcesResponse","ListWorkspacesRequest","ListWorkspacesResponse"]
diff --git a/src/sdk/models/operations/canceljob.py b/src/sdk/models/operations/canceljob.py
new file mode 100755
index 00000000..64f88bf7
--- /dev/null
+++ b/src/sdk/models/operations/canceljob.py
@@ -0,0 +1,24 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import requests as requests_http
+from ..shared import jobresponse as shared_jobresponse
+from typing import Optional
+
+
+@dataclasses.dataclass
+class CancelJobRequest:
+
+ job_id: int = dataclasses.field(metadata={'path_param': { 'field_name': 'jobId', 'style': 'simple', 'explode': False }})
+
+
+@dataclasses.dataclass
+class CancelJobResponse:
+
+ content_type: str = dataclasses.field()
+ status_code: int = dataclasses.field()
+ job_response: Optional[shared_jobresponse.JobResponse] = dataclasses.field(default=None)
+ r"""Cancel a Job."""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+
\ No newline at end of file
diff --git a/src/sdk/models/operations/createconnection.py b/src/sdk/models/operations/createconnection.py
new file mode 100755
index 00000000..67f7765e
--- /dev/null
+++ b/src/sdk/models/operations/createconnection.py
@@ -0,0 +1,18 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import requests as requests_http
+from ..shared import connectionresponse as shared_connectionresponse
+from typing import Optional
+
+
+@dataclasses.dataclass
+class CreateConnectionResponse:
+
+ content_type: str = dataclasses.field()
+ status_code: int = dataclasses.field()
+ connection_response: Optional[shared_connectionresponse.ConnectionResponse] = dataclasses.field(default=None)
+ r"""Successful operation"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+
\ No newline at end of file
diff --git a/src/sdk/models/operations/createdestination.py b/src/sdk/models/operations/createdestination.py
new file mode 100755
index 00000000..4a3a1a02
--- /dev/null
+++ b/src/sdk/models/operations/createdestination.py
@@ -0,0 +1,18 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import requests as requests_http
+from ..shared import destinationresponse as shared_destinationresponse
+from typing import Optional
+
+
+@dataclasses.dataclass
+class CreateDestinationResponse:
+
+ content_type: str = dataclasses.field()
+ status_code: int = dataclasses.field()
+ destination_response: Optional[shared_destinationresponse.DestinationResponse] = dataclasses.field(default=None)
+ r"""Successful operation"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+
\ No newline at end of file
diff --git a/src/sdk/models/operations/createjob.py b/src/sdk/models/operations/createjob.py
new file mode 100755
index 00000000..063f91c1
--- /dev/null
+++ b/src/sdk/models/operations/createjob.py
@@ -0,0 +1,18 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import requests as requests_http
+from ..shared import jobresponse as shared_jobresponse
+from typing import Optional
+
+
+@dataclasses.dataclass
+class CreateJobResponse:
+
+ content_type: str = dataclasses.field()
+ status_code: int = dataclasses.field()
+ job_response: Optional[shared_jobresponse.JobResponse] = dataclasses.field(default=None)
+ r"""Kicks off a new Job based on the JobType. The connectionId is the resource that Job will be run for."""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+
\ No newline at end of file
diff --git a/src/sdk/models/operations/createsource.py b/src/sdk/models/operations/createsource.py
new file mode 100755
index 00000000..3c349249
--- /dev/null
+++ b/src/sdk/models/operations/createsource.py
@@ -0,0 +1,18 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import requests as requests_http
+from ..shared import sourceresponse as shared_sourceresponse
+from typing import Optional
+
+
+@dataclasses.dataclass
+class CreateSourceResponse:
+
+ content_type: str = dataclasses.field()
+ status_code: int = dataclasses.field()
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ source_response: Optional[shared_sourceresponse.SourceResponse] = dataclasses.field(default=None)
+ r"""Successful operation"""
+
\ No newline at end of file
diff --git a/src/sdk/models/operations/createworkspace.py b/src/sdk/models/operations/createworkspace.py
new file mode 100755
index 00000000..feca2aff
--- /dev/null
+++ b/src/sdk/models/operations/createworkspace.py
@@ -0,0 +1,18 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import requests as requests_http
+from ..shared import workspaceresponse as shared_workspaceresponse
+from typing import Optional
+
+
+@dataclasses.dataclass
+class CreateWorkspaceResponse:
+
+ content_type: str = dataclasses.field()
+ status_code: int = dataclasses.field()
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ workspace_response: Optional[shared_workspaceresponse.WorkspaceResponse] = dataclasses.field(default=None)
+ r"""Successful operation"""
+
\ No newline at end of file
diff --git a/src/sdk/models/operations/getconnection.py b/src/sdk/models/operations/getconnection.py
new file mode 100755
index 00000000..2a70f2a6
--- /dev/null
+++ b/src/sdk/models/operations/getconnection.py
@@ -0,0 +1,24 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import requests as requests_http
+from ..shared import connectionresponse as shared_connectionresponse
+from typing import Optional
+
+
+@dataclasses.dataclass
+class GetConnectionRequest:
+
+ connection_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'connectionId', 'style': 'simple', 'explode': False }})
+
+
+@dataclasses.dataclass
+class GetConnectionResponse:
+
+ content_type: str = dataclasses.field()
+ status_code: int = dataclasses.field()
+ connection_response: Optional[shared_connectionresponse.ConnectionResponse] = dataclasses.field(default=None)
+ r"""Get a Connection by the id in the path."""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+
\ No newline at end of file
diff --git a/src/sdk/models/operations/getdestination.py b/src/sdk/models/operations/getdestination.py
new file mode 100755
index 00000000..d8bb352a
--- /dev/null
+++ b/src/sdk/models/operations/getdestination.py
@@ -0,0 +1,24 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import requests as requests_http
+from ..shared import destinationresponse as shared_destinationresponse
+from typing import Optional
+
+
+@dataclasses.dataclass
+class GetDestinationRequest:
+
+ destination_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'destinationId', 'style': 'simple', 'explode': False }})
+
+
+@dataclasses.dataclass
+class GetDestinationResponse:
+
+ content_type: str = dataclasses.field()
+ status_code: int = dataclasses.field()
+ destination_response: Optional[shared_destinationresponse.DestinationResponse] = dataclasses.field(default=None)
+ r"""Get a Destination by the id in the path."""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+
\ No newline at end of file
diff --git a/src/sdk/models/operations/getjob.py b/src/sdk/models/operations/getjob.py
new file mode 100755
index 00000000..c3dc78f4
--- /dev/null
+++ b/src/sdk/models/operations/getjob.py
@@ -0,0 +1,24 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import requests as requests_http
+from ..shared import jobresponse as shared_jobresponse
+from typing import Optional
+
+
+@dataclasses.dataclass
+class GetJobRequest:
+
+ job_id: int = dataclasses.field(metadata={'path_param': { 'field_name': 'jobId', 'style': 'simple', 'explode': False }})
+
+
+@dataclasses.dataclass
+class GetJobResponse:
+
+ content_type: str = dataclasses.field()
+ status_code: int = dataclasses.field()
+ job_response: Optional[shared_jobresponse.JobResponse] = dataclasses.field(default=None)
+ r"""Get a Job by the id in the path."""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+
\ No newline at end of file
diff --git a/src/sdk/models/operations/getsource.py b/src/sdk/models/operations/getsource.py
new file mode 100755
index 00000000..589817fc
--- /dev/null
+++ b/src/sdk/models/operations/getsource.py
@@ -0,0 +1,24 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import requests as requests_http
+from ..shared import sourceresponse as shared_sourceresponse
+from typing import Optional
+
+
+@dataclasses.dataclass
+class GetSourceRequest:
+
+ source_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'sourceId', 'style': 'simple', 'explode': False }})
+
+
+@dataclasses.dataclass
+class GetSourceResponse:
+
+ content_type: str = dataclasses.field()
+ status_code: int = dataclasses.field()
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ source_response: Optional[shared_sourceresponse.SourceResponse] = dataclasses.field(default=None)
+ r"""Get a Source by the id in the path."""
+
\ No newline at end of file
diff --git a/src/sdk/models/operations/getworkspace.py b/src/sdk/models/operations/getworkspace.py
new file mode 100755
index 00000000..d5b60fe0
--- /dev/null
+++ b/src/sdk/models/operations/getworkspace.py
@@ -0,0 +1,24 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import requests as requests_http
+from ..shared import workspaceresponse as shared_workspaceresponse
+from typing import Optional
+
+
+@dataclasses.dataclass
+class GetWorkspaceRequest:
+
+ workspace_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'workspaceId', 'style': 'simple', 'explode': False }})
+
+
+@dataclasses.dataclass
+class GetWorkspaceResponse:
+
+ content_type: str = dataclasses.field()
+ status_code: int = dataclasses.field()
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ workspace_response: Optional[shared_workspaceresponse.WorkspaceResponse] = dataclasses.field(default=None)
+ r"""Get a Workspace by the id in the path."""
+
\ No newline at end of file
diff --git a/src/sdk/models/operations/listconnections.py b/src/sdk/models/operations/listconnections.py
new file mode 100755
index 00000000..0815edd6
--- /dev/null
+++ b/src/sdk/models/operations/listconnections.py
@@ -0,0 +1,31 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import requests as requests_http
+from ..shared import connectionsresponse as shared_connectionsresponse
+from typing import Optional
+
+
+@dataclasses.dataclass
+class ListConnectionsRequest:
+
+ include_deleted: Optional[bool] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'includeDeleted', 'style': 'form', 'explode': True }})
+ r"""Include deleted connections in the returned results."""
+ limit: Optional[int] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'limit', 'style': 'form', 'explode': True }})
+ r"""Set the limit on the number of Connections returned. The default is 20."""
+ offset: Optional[int] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'offset', 'style': 'form', 'explode': True }})
+ r"""Set the offset to start at when returning Connections. The default is 0"""
+ workspace_ids: Optional[list[str]] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'workspaceIds', 'style': 'form', 'explode': True }})
+ r"""The UUIDs of the workspaces you wish to list connections for. Empty list will retrieve all allowed workspaces."""
+
+
+@dataclasses.dataclass
+class ListConnectionsResponse:
+
+ content_type: str = dataclasses.field()
+ status_code: int = dataclasses.field()
+ connections_response: Optional[shared_connectionsresponse.ConnectionsResponse] = dataclasses.field(default=None)
+ r"""Successful operation"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+
\ No newline at end of file
diff --git a/src/sdk/models/operations/listdestinations.py b/src/sdk/models/operations/listdestinations.py
new file mode 100755
index 00000000..ff44a92a
--- /dev/null
+++ b/src/sdk/models/operations/listdestinations.py
@@ -0,0 +1,31 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import requests as requests_http
+from ..shared import destinationsresponse as shared_destinationsresponse
+from typing import Optional
+
+
+@dataclasses.dataclass
+class ListDestinationsRequest:
+
+ include_deleted: Optional[bool] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'includeDeleted', 'style': 'form', 'explode': True }})
+ r"""Include deleted destinations in the returned results."""
+ limit: Optional[int] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'limit', 'style': 'form', 'explode': True }})
+ r"""Set the limit on the number of destinations returned. The default is 20."""
+ offset: Optional[int] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'offset', 'style': 'form', 'explode': True }})
+ r"""Set the offset to start at when returning destinations. The default is 0"""
+ workspace_ids: Optional[list[str]] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'workspaceIds', 'style': 'form', 'explode': True }})
+ r"""The UUIDs of the workspaces you wish to list destinations for. Empty list will retrieve all allowed workspaces."""
+
+
+@dataclasses.dataclass
+class ListDestinationsResponse:
+
+ content_type: str = dataclasses.field()
+ status_code: int = dataclasses.field()
+ destinations_response: Optional[shared_destinationsresponse.DestinationsResponse] = dataclasses.field(default=None)
+ r"""Successful operation"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+
\ No newline at end of file
diff --git a/src/sdk/models/operations/listjobs.py b/src/sdk/models/operations/listjobs.py
new file mode 100755
index 00000000..f2c5bfe6
--- /dev/null
+++ b/src/sdk/models/operations/listjobs.py
@@ -0,0 +1,32 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import requests as requests_http
+from ..shared import jobsresponse as shared_jobsresponse
+from ..shared import jobtypeenum_enum as shared_jobtypeenum_enum
+from typing import Optional
+
+
+@dataclasses.dataclass
+class ListJobsRequest:
+
+ connection_id: str = dataclasses.field(metadata={'query_param': { 'field_name': 'connectionId', 'style': 'form', 'explode': True }})
+ r"""Filter the Jobs by connectionId."""
+ job_type: Optional[shared_jobtypeenum_enum.JobTypeEnumEnum] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'jobType', 'style': 'form', 'explode': True }})
+ r"""Filter the Jobs by jobType."""
+ limit: Optional[int] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'limit', 'style': 'form', 'explode': True }})
+ r"""Set the limit on the number of Jobs returned. The default is 20 Jobs."""
+ offset: Optional[int] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'offset', 'style': 'form', 'explode': True }})
+ r"""Set the offset to start at when returning Jobs. The default is 0."""
+
+
+@dataclasses.dataclass
+class ListJobsResponse:
+
+ content_type: str = dataclasses.field()
+ status_code: int = dataclasses.field()
+ jobs_response: Optional[shared_jobsresponse.JobsResponse] = dataclasses.field(default=None)
+ r"""List all the Jobs by connectionId."""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+
\ No newline at end of file
diff --git a/src/sdk/models/operations/listsources.py b/src/sdk/models/operations/listsources.py
new file mode 100755
index 00000000..e50ea2a2
--- /dev/null
+++ b/src/sdk/models/operations/listsources.py
@@ -0,0 +1,31 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import requests as requests_http
+from ..shared import sourcesresponse as shared_sourcesresponse
+from typing import Optional
+
+
+@dataclasses.dataclass
+class ListSourcesRequest:
+
+ include_deleted: Optional[bool] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'includeDeleted', 'style': 'form', 'explode': True }})
+ r"""Include deleted sources in the returned results."""
+ limit: Optional[int] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'limit', 'style': 'form', 'explode': True }})
+ r"""Set the limit on the number of sources returned. The default is 20."""
+ offset: Optional[int] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'offset', 'style': 'form', 'explode': True }})
+ r"""Set the offset to start at when returning sources. The default is 0"""
+ workspace_ids: Optional[list[str]] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'workspaceIds', 'style': 'form', 'explode': True }})
+ r"""The UUIDs of the workspaces you wish to list sources for. Empty list will retrieve all allowed workspaces."""
+
+
+@dataclasses.dataclass
+class ListSourcesResponse:
+
+ content_type: str = dataclasses.field()
+ status_code: int = dataclasses.field()
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ sources_response: Optional[shared_sourcesresponse.SourcesResponse] = dataclasses.field(default=None)
+ r"""Successful operation"""
+
\ No newline at end of file
diff --git a/src/sdk/models/operations/listworkspaces.py b/src/sdk/models/operations/listworkspaces.py
new file mode 100755
index 00000000..ef28ace9
--- /dev/null
+++ b/src/sdk/models/operations/listworkspaces.py
@@ -0,0 +1,31 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import requests as requests_http
+from ..shared import workspacesresponse as shared_workspacesresponse
+from typing import Optional
+
+
+@dataclasses.dataclass
+class ListWorkspacesRequest:
+
+ include_deleted: Optional[bool] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'includeDeleted', 'style': 'form', 'explode': True }})
+ r"""Include deleted workspaces in the returned results."""
+ limit: Optional[int] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'limit', 'style': 'form', 'explode': True }})
+ r"""Set the limit on the number of workspaces returned. The default is 20."""
+ offset: Optional[int] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'offset', 'style': 'form', 'explode': True }})
+ r"""Set the offset to start at when returning workspaces. The default is 0"""
+ workspace_ids: Optional[list[str]] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'workspaceIds', 'style': 'form', 'explode': True }})
+ r"""The UUIDs of the workspaces you wish to fetch. Empty list will retrieve all allowed workspaces."""
+
+
+@dataclasses.dataclass
+class ListWorkspacesResponse:
+
+ content_type: str = dataclasses.field()
+ status_code: int = dataclasses.field()
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ workspaces_response: Optional[shared_workspacesresponse.WorkspacesResponse] = dataclasses.field(default=None)
+ r"""Successful operation"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/__init__.py b/src/sdk/models/shared/__init__.py
new file mode 100755
index 00000000..eb61ccf9
--- /dev/null
+++ b/src/sdk/models/shared/__init__.py
@@ -0,0 +1,253 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from .connectioncreaterequest import *
+from .connectionresponse import *
+from .connectionschedulecreate import *
+from .connectionscheduleresponse import *
+from .connectionsresponse import *
+from .connectionstatusenum_enum import *
+from .destination_amazon_sqs import *
+from .destination_aws_datalake import *
+from .destination_azure_blob_storage import *
+from .destination_bigquery import *
+from .destination_bigquery_denormalized import *
+from .destination_cassandra import *
+from .destination_clickhouse import *
+from .destination_convex import *
+from .destination_databend import *
+from .destination_databricks import *
+from .destination_dynamodb import *
+from .destination_elasticsearch import *
+from .destination_firebolt import *
+from .destination_firestore import *
+from .destination_gcs import *
+from .destination_google_sheets import *
+from .destination_keen import *
+from .destination_kinesis import *
+from .destination_mariadb_columnstore import *
+from .destination_meilisearch import *
+from .destination_mongodb import *
+from .destination_mssql import *
+from .destination_mysql import *
+from .destination_oracle import *
+from .destination_postgres import *
+from .destination_pubsub import *
+from .destination_pulsar import *
+from .destination_rabbitmq import *
+from .destination_redis import *
+from .destination_redshift import *
+from .destination_rockset import *
+from .destination_s3 import *
+from .destination_s3_glue import *
+from .destination_scylla import *
+from .destination_sftp_json import *
+from .destination_snowflake import *
+from .destination_typesense import *
+from .destinationcreaterequest import *
+from .destinationresponse import *
+from .destinationsresponse import *
+from .geographyenum_enum import *
+from .jobcreaterequest import *
+from .jobresponse import *
+from .jobsresponse import *
+from .jobstatusenum_enum import *
+from .jobtypeenum_enum import *
+from .scheduletypeenum_enum import *
+from .scheduletypewithbasicenum_enum import *
+from .security import *
+from .source_airtable import *
+from .source_alloydb import *
+from .source_amazon_ads import *
+from .source_amazon_seller_partner import *
+from .source_amazon_sqs import *
+from .source_amplitude import *
+from .source_apify_dataset import *
+from .source_asana import *
+from .source_auth0 import *
+from .source_aws_cloudtrail import *
+from .source_azure_table import *
+from .source_bamboo_hr import *
+from .source_bigcommerce import *
+from .source_bigquery import *
+from .source_bing_ads import *
+from .source_braintree import *
+from .source_braze import *
+from .source_chargebee import *
+from .source_chartmogul import *
+from .source_clickhouse import *
+from .source_clickup_api import *
+from .source_close_com import *
+from .source_coda import *
+from .source_coin_api import *
+from .source_coinmarketcap import *
+from .source_configcat import *
+from .source_confluence import *
+from .source_datascope import *
+from .source_delighted import *
+from .source_dixa import *
+from .source_dockerhub import *
+from .source_dremio import *
+from .source_dynamodb import *
+from .source_e2e_test_cloud import *
+from .source_emailoctopus import *
+from .source_exchange_rates import *
+from .source_facebook_marketing import *
+from .source_facebook_pages import *
+from .source_faker import *
+from .source_fauna import *
+from .source_file_secure import *
+from .source_firebolt import *
+from .source_freshcaller import *
+from .source_freshdesk import *
+from .source_freshsales import *
+from .source_gcs import *
+from .source_getlago import *
+from .source_github import *
+from .source_gitlab import *
+from .source_glassfrog import *
+from .source_gnews import *
+from .source_google_ads import *
+from .source_google_analytics_data_api import *
+from .source_google_analytics_v4 import *
+from .source_google_directory import *
+from .source_google_search_console import *
+from .source_google_sheets import *
+from .source_google_webfonts import *
+from .source_google_workspace_admin_reports import *
+from .source_greenhouse import *
+from .source_gridly import *
+from .source_harvest import *
+from .source_hubplanner import *
+from .source_hubspot import *
+from .source_insightly import *
+from .source_instagram import *
+from .source_instatus import *
+from .source_intercom import *
+from .source_ip2whois import *
+from .source_iterable import *
+from .source_jira import *
+from .source_k6_cloud import *
+from .source_klarna import *
+from .source_klaviyo import *
+from .source_kustomer_singer import *
+from .source_launchdarkly import *
+from .source_lemlist import *
+from .source_linkedin_ads import *
+from .source_linkedin_pages import *
+from .source_linnworks import *
+from .source_lokalise import *
+from .source_mailchimp import *
+from .source_mailgun import *
+from .source_mailjet_sms import *
+from .source_marketo import *
+from .source_metabase import *
+from .source_microsoft_teams import *
+from .source_mixpanel import *
+from .source_monday import *
+from .source_mongodb import *
+from .source_mssql import *
+from .source_my_hours import *
+from .source_mysql import *
+from .source_netsuite import *
+from .source_notion import *
+from .source_nytimes import *
+from .source_okta import *
+from .source_omnisend import *
+from .source_onesignal import *
+from .source_openweather import *
+from .source_oracle import *
+from .source_orb import *
+from .source_orbit import *
+from .source_outreach import *
+from .source_paypal_transaction import *
+from .source_paystack import *
+from .source_pendo import *
+from .source_persistiq import *
+from .source_pexels_api import *
+from .source_pinterest import *
+from .source_pipedrive import *
+from .source_pocket import *
+from .source_pokeapi import *
+from .source_polygon_stock_api import *
+from .source_postgres import *
+from .source_posthog import *
+from .source_postmarkapp import *
+from .source_prestashop import *
+from .source_public_apis import *
+from .source_punk_api import *
+from .source_pypi import *
+from .source_qualaroo import *
+from .source_railz import *
+from .source_recharge import *
+from .source_recreation import *
+from .source_recruitee import *
+from .source_recurly import *
+from .source_redshift import *
+from .source_retently import *
+from .source_rki_covid import *
+from .source_rss import *
+from .source_s3 import *
+from .source_salesforce import *
+from .source_salesforce_singer import *
+from .source_salesloft import *
+from .source_sap_fieldglass import *
+from .source_secoda import *
+from .source_sendgrid import *
+from .source_sendinblue import *
+from .source_senseforce import *
+from .source_sentry import *
+from .source_sftp import *
+from .source_sftp_bulk import *
+from .source_shopify import *
+from .source_shortio import *
+from .source_slack import *
+from .source_smaily import *
+from .source_smartengage import *
+from .source_smartsheets import *
+from .source_snapchat_marketing import *
+from .source_snowflake import *
+from .source_sonar_cloud import *
+from .source_spacex_api import *
+from .source_square import *
+from .source_strava import *
+from .source_stripe import *
+from .source_survey_sparrow import *
+from .source_surveymonkey import *
+from .source_tempo import *
+from .source_the_guardian_api import *
+from .source_tiktok_marketing import *
+from .source_todoist import *
+from .source_trello import *
+from .source_trustpilot import *
+from .source_tvmaze_schedule import *
+from .source_twilio import *
+from .source_twilio_taskrouter import *
+from .source_twitter import *
+from .source_typeform import *
+from .source_us_census import *
+from .source_vantage import *
+from .source_webflow import *
+from .source_whisky_hunter import *
+from .source_wikipedia_pageviews import *
+from .source_woocommerce import *
+from .source_xero import *
+from .source_xkcd import *
+from .source_yandex_metrica import *
+from .source_younium import *
+from .source_youtube_analytics import *
+from .source_zendesk_chat import *
+from .source_zendesk_sunshine import *
+from .source_zendesk_support import *
+from .source_zendesk_talk import *
+from .source_zenloop import *
+from .source_zoho_crm import *
+from .source_zoom import *
+from .source_zuora import *
+from .sourcecreaterequest import *
+from .sourceresponse import *
+from .sourcesresponse import *
+from .workspacecreaterequest import *
+from .workspaceresponse import *
+from .workspacesresponse import *
+
+__all__ = ["ConnectionCreateRequest","ConnectionResponse","ConnectionScheduleCreate","ConnectionScheduleResponse","ConnectionStatusEnumEnum","ConnectionsResponse","DestinationAmazonSqs","DestinationAmazonSqsAWSRegionEnum","DestinationAmazonSqsAmazonSqsEnum","DestinationAwsDatalake","DestinationAwsDatalakeAwsDatalakeEnum","DestinationAwsDatalakeChooseHowToPartitionDataEnum","DestinationAwsDatalakeCredentialsIAMRole","DestinationAwsDatalakeCredentialsIAMRoleCredentialsTitleEnum","DestinationAwsDatalakeCredentialsIAMUser","DestinationAwsDatalakeCredentialsIAMUserCredentialsTitleEnum","DestinationAwsDatalakeFormatJSONLinesNewlineDelimitedJSON","DestinationAwsDatalakeFormatJSONLinesNewlineDelimitedJSONCompressionCodecOptionalEnum","DestinationAwsDatalakeFormatJSONLinesNewlineDelimitedJSONFormatTypeWildcardEnum","DestinationAwsDatalakeFormatParquetColumnarStorage","DestinationAwsDatalakeFormatParquetColumnarStorageCompressionCodecOptionalEnum","DestinationAwsDatalakeFormatParquetColumnarStorageFormatTypeWildcardEnum","DestinationAwsDatalakeS3BucketRegionEnum","DestinationAzureBlobStorage","DestinationAzureBlobStorageAzureBlobStorageEnum","DestinationAzureBlobStorageFormatCSVCommaSeparatedValues","DestinationAzureBlobStorageFormatCSVCommaSeparatedValuesFormatTypeEnum","DestinationAzureBlobStorageFormatCSVCommaSeparatedValuesNormalizationFlatteningEnum","DestinationAzureBlobStorageFormatJSONLinesNewlineDelimitedJSON","DestinationAzureBlobStorageFormatJSONLinesNewlineDelimitedJSONFormatTypeEnum","DestinationBigquery","DestinationBigqueryBigqueryEnum","DestinationBigqueryDatasetLocationEnum","DestinationBigqueryDenormalized","DestinationBigqueryDenormalizedBigqueryDenormalizedEnum","DestinationBigqueryDenormalizedDatasetLocationEnum","DestinationBigqueryDenormalizedLoadingMethodGCSStaging","DestinationBigqueryDenormalizedLoadingMethodGCSStagingCredentialHMACKey","DestinationBigqueryDenormalizedLoadingMethodGCSStagingCredentialHMACKeyCredentialTypeEnum","DestinationBigqueryDenormalizedLoadingMethodGCSStagingGCSTmpFilesAfterwardProcessingEnum","DestinationBigqueryDenormalizedLoadingMethodGCSStagingMethodEnum","DestinationBigqueryDenormalizedLoadingMethodStandardInserts","DestinationBigqueryDenormalizedLoadingMethodStandardInsertsMethodEnum","DestinationBigqueryLoadingMethodGCSStaging","DestinationBigqueryLoadingMethodGCSStagingCredentialHMACKey","DestinationBigqueryLoadingMethodGCSStagingCredentialHMACKeyCredentialTypeEnum","DestinationBigqueryLoadingMethodGCSStagingGCSTmpFilesAfterwardProcessingEnum","DestinationBigqueryLoadingMethodGCSStagingMethodEnum","DestinationBigqueryLoadingMethodStandardInserts","DestinationBigqueryLoadingMethodStandardInsertsMethodEnum","DestinationBigqueryTransformationQueryRunTypeEnum","DestinationCassandra","DestinationCassandraCassandraEnum","DestinationClickhouse","DestinationClickhouseClickhouseEnum","DestinationClickhouseTunnelMethodNoTunnel","DestinationClickhouseTunnelMethodNoTunnelTunnelMethodEnum","DestinationClickhouseTunnelMethodPasswordAuthentication","DestinationClickhouseTunnelMethodPasswordAuthenticationTunnelMethodEnum","DestinationClickhouseTunnelMethodSSHKeyAuthentication","DestinationClickhouseTunnelMethodSSHKeyAuthenticationTunnelMethodEnum","DestinationConvex","DestinationConvexConvexEnum","DestinationCreateRequest","DestinationDatabend","DestinationDatabendDatabendEnum","DestinationDatabricks","DestinationDatabricksDataSourceAmazonS3","DestinationDatabricksDataSourceAmazonS3DataSourceTypeEnum","DestinationDatabricksDataSourceAmazonS3S3BucketRegionEnum","DestinationDatabricksDataSourceAzureBlobStorage","DestinationDatabricksDataSourceAzureBlobStorageDataSourceTypeEnum","DestinationDatabricksDataSourceRecommendedManagedTables","DestinationDatabricksDataSourceRecommendedManagedTablesDataSourceTypeEnum","DestinationDatabricksDatabricksEnum","DestinationDynamodb","DestinationDynamodbDynamoDBRegionEnum","DestinationDynamodbDynamodbEnum","DestinationElasticsearch","DestinationElasticsearchAuthenticationMethodAPIKeySecret","DestinationElasticsearchAuthenticationMethodAPIKeySecretMethodEnum","DestinationElasticsearchAuthenticationMethodUsernamePassword","DestinationElasticsearchAuthenticationMethodUsernamePasswordMethodEnum","DestinationElasticsearchElasticsearchEnum","DestinationFirebolt","DestinationFireboltFireboltEnum","DestinationFireboltLoadingMethodExternalTableViaS3","DestinationFireboltLoadingMethodExternalTableViaS3MethodEnum","DestinationFireboltLoadingMethodSQLInserts","DestinationFireboltLoadingMethodSQLInsertsMethodEnum","DestinationFirestore","DestinationFirestoreFirestoreEnum","DestinationGCSGCSBucketRegionEnum","DestinationGcs","DestinationGcsCredentialHMACKey","DestinationGcsCredentialHMACKeyCredentialTypeEnum","DestinationGcsFormatAvroApacheAvro","DestinationGcsFormatAvroApacheAvroCompressionCodecBzip2","DestinationGcsFormatAvroApacheAvroCompressionCodecBzip2CodecEnum","DestinationGcsFormatAvroApacheAvroCompressionCodecDeflate","DestinationGcsFormatAvroApacheAvroCompressionCodecDeflateCodecEnum","DestinationGcsFormatAvroApacheAvroCompressionCodecNoCompression","DestinationGcsFormatAvroApacheAvroCompressionCodecNoCompressionCodecEnum","DestinationGcsFormatAvroApacheAvroCompressionCodecSnappy","DestinationGcsFormatAvroApacheAvroCompressionCodecSnappyCodecEnum","DestinationGcsFormatAvroApacheAvroCompressionCodecXz","DestinationGcsFormatAvroApacheAvroCompressionCodecXzCodecEnum","DestinationGcsFormatAvroApacheAvroCompressionCodecZstandard","DestinationGcsFormatAvroApacheAvroCompressionCodecZstandardCodecEnum","DestinationGcsFormatAvroApacheAvroFormatTypeEnum","DestinationGcsFormatCSVCommaSeparatedValues","DestinationGcsFormatCSVCommaSeparatedValuesCompressionGZIP","DestinationGcsFormatCSVCommaSeparatedValuesCompressionGZIPCompressionTypeEnum","DestinationGcsFormatCSVCommaSeparatedValuesCompressionNoCompression","DestinationGcsFormatCSVCommaSeparatedValuesCompressionNoCompressionCompressionTypeEnum","DestinationGcsFormatCSVCommaSeparatedValuesFormatTypeEnum","DestinationGcsFormatCSVCommaSeparatedValuesNormalizationEnum","DestinationGcsFormatJSONLinesNewlineDelimitedJSON","DestinationGcsFormatJSONLinesNewlineDelimitedJSONCompressionGZIP","DestinationGcsFormatJSONLinesNewlineDelimitedJSONCompressionGZIPCompressionTypeEnum","DestinationGcsFormatJSONLinesNewlineDelimitedJSONCompressionNoCompression","DestinationGcsFormatJSONLinesNewlineDelimitedJSONCompressionNoCompressionCompressionTypeEnum","DestinationGcsFormatJSONLinesNewlineDelimitedJSONFormatTypeEnum","DestinationGcsFormatParquetColumnarStorage","DestinationGcsFormatParquetColumnarStorageCompressionCodecEnum","DestinationGcsFormatParquetColumnarStorageFormatTypeEnum","DestinationGcsGcsEnum","DestinationGoogleSheets","DestinationGoogleSheetsAuthenticationViaGoogleOAuth","DestinationGoogleSheetsGoogleSheetsEnum","DestinationKeen","DestinationKeenKeenEnum","DestinationKinesis","DestinationKinesisKinesisEnum","DestinationMariadbColumnstore","DestinationMariadbColumnstoreMariadbColumnstoreEnum","DestinationMariadbColumnstoreTunnelMethodNoTunnel","DestinationMariadbColumnstoreTunnelMethodNoTunnelTunnelMethodEnum","DestinationMariadbColumnstoreTunnelMethodPasswordAuthentication","DestinationMariadbColumnstoreTunnelMethodPasswordAuthenticationTunnelMethodEnum","DestinationMariadbColumnstoreTunnelMethodSSHKeyAuthentication","DestinationMariadbColumnstoreTunnelMethodSSHKeyAuthenticationTunnelMethodEnum","DestinationMeilisearch","DestinationMeilisearchMeilisearchEnum","DestinationMongodb","DestinationMongodbAuthTypeLoginPassword","DestinationMongodbAuthTypeLoginPasswordAuthorizationEnum","DestinationMongodbAuthTypeNone","DestinationMongodbAuthTypeNoneAuthorizationEnum","DestinationMongodbInstanceTypeMongoDBAtlas","DestinationMongodbInstanceTypeMongoDBAtlasInstanceEnum","DestinationMongodbInstanceTypeReplicaSet","DestinationMongodbInstanceTypeReplicaSetInstanceEnum","DestinationMongodbInstanceTypeStandaloneMongoDbInstance","DestinationMongodbInstanceTypeStandaloneMongoDbInstanceInstanceEnum","DestinationMongodbMongodbEnum","DestinationMongodbTunnelMethodNoTunnel","DestinationMongodbTunnelMethodNoTunnelTunnelMethodEnum","DestinationMongodbTunnelMethodPasswordAuthentication","DestinationMongodbTunnelMethodPasswordAuthenticationTunnelMethodEnum","DestinationMongodbTunnelMethodSSHKeyAuthentication","DestinationMongodbTunnelMethodSSHKeyAuthenticationTunnelMethodEnum","DestinationMssql","DestinationMssqlMssqlEnum","DestinationMssqlSslMethodEncryptedTrustServerCertificate","DestinationMssqlSslMethodEncryptedTrustServerCertificateSslMethodEnum","DestinationMssqlSslMethodEncryptedVerifyCertificate","DestinationMssqlSslMethodEncryptedVerifyCertificateSslMethodEnum","DestinationMssqlTunnelMethodNoTunnel","DestinationMssqlTunnelMethodNoTunnelTunnelMethodEnum","DestinationMssqlTunnelMethodPasswordAuthentication","DestinationMssqlTunnelMethodPasswordAuthenticationTunnelMethodEnum","DestinationMssqlTunnelMethodSSHKeyAuthentication","DestinationMssqlTunnelMethodSSHKeyAuthenticationTunnelMethodEnum","DestinationMysql","DestinationMysqlMysqlEnum","DestinationMysqlTunnelMethodNoTunnel","DestinationMysqlTunnelMethodNoTunnelTunnelMethodEnum","DestinationMysqlTunnelMethodPasswordAuthentication","DestinationMysqlTunnelMethodPasswordAuthenticationTunnelMethodEnum","DestinationMysqlTunnelMethodSSHKeyAuthentication","DestinationMysqlTunnelMethodSSHKeyAuthenticationTunnelMethodEnum","DestinationOracle","DestinationOracleOracleEnum","DestinationOracleTunnelMethodNoTunnel","DestinationOracleTunnelMethodNoTunnelTunnelMethodEnum","DestinationOracleTunnelMethodPasswordAuthentication","DestinationOracleTunnelMethodPasswordAuthenticationTunnelMethodEnum","DestinationOracleTunnelMethodSSHKeyAuthentication","DestinationOracleTunnelMethodSSHKeyAuthenticationTunnelMethodEnum","DestinationPostgres","DestinationPostgresPostgresEnum","DestinationPostgresSslModeAllow","DestinationPostgresSslModeAllowModeEnum","DestinationPostgresSslModeDisable","DestinationPostgresSslModeDisableModeEnum","DestinationPostgresSslModePrefer","DestinationPostgresSslModePreferModeEnum","DestinationPostgresSslModeRequire","DestinationPostgresSslModeRequireModeEnum","DestinationPostgresSslModeVerifyCa","DestinationPostgresSslModeVerifyCaModeEnum","DestinationPostgresSslModeVerifyFull","DestinationPostgresSslModeVerifyFullModeEnum","DestinationPostgresTunnelMethodNoTunnel","DestinationPostgresTunnelMethodNoTunnelTunnelMethodEnum","DestinationPostgresTunnelMethodPasswordAuthentication","DestinationPostgresTunnelMethodPasswordAuthenticationTunnelMethodEnum","DestinationPostgresTunnelMethodSSHKeyAuthentication","DestinationPostgresTunnelMethodSSHKeyAuthenticationTunnelMethodEnum","DestinationPubsub","DestinationPubsubPubsubEnum","DestinationPulsar","DestinationPulsarCompressionTypeEnum","DestinationPulsarPulsarEnum","DestinationPulsarTopicTypeEnum","DestinationRabbitmq","DestinationRabbitmqRabbitmqEnum","DestinationRedis","DestinationRedisCacheTypeEnum","DestinationRedisRedisEnum","DestinationRedisSslModeDisable","DestinationRedisSslModeDisableModeEnum","DestinationRedisSslModeVerifyFull","DestinationRedisSslModeVerifyFullModeEnum","DestinationRedisTunnelMethodNoTunnel","DestinationRedisTunnelMethodNoTunnelTunnelMethodEnum","DestinationRedisTunnelMethodPasswordAuthentication","DestinationRedisTunnelMethodPasswordAuthenticationTunnelMethodEnum","DestinationRedisTunnelMethodSSHKeyAuthentication","DestinationRedisTunnelMethodSSHKeyAuthenticationTunnelMethodEnum","DestinationRedshift","DestinationRedshiftRedshiftEnum","DestinationRedshiftTunnelMethodNoTunnel","DestinationRedshiftTunnelMethodNoTunnelTunnelMethodEnum","DestinationRedshiftTunnelMethodPasswordAuthentication","DestinationRedshiftTunnelMethodPasswordAuthenticationTunnelMethodEnum","DestinationRedshiftTunnelMethodSSHKeyAuthentication","DestinationRedshiftTunnelMethodSSHKeyAuthenticationTunnelMethodEnum","DestinationRedshiftUploadingMethodS3Staging","DestinationRedshiftUploadingMethodS3StagingEncryptionAESCBCEnvelopeEncryption","DestinationRedshiftUploadingMethodS3StagingEncryptionAESCBCEnvelopeEncryptionEncryptionTypeEnum","DestinationRedshiftUploadingMethodS3StagingEncryptionNoEncryption","DestinationRedshiftUploadingMethodS3StagingEncryptionNoEncryptionEncryptionTypeEnum","DestinationRedshiftUploadingMethodS3StagingMethodEnum","DestinationRedshiftUploadingMethodS3StagingS3BucketRegionEnum","DestinationRedshiftUploadingMethodStandard","DestinationRedshiftUploadingMethodStandardMethodEnum","DestinationResponse","DestinationRockset","DestinationRocksetRocksetEnum","DestinationS3","DestinationS3FormatAvroApacheAvro","DestinationS3FormatAvroApacheAvroCompressionCodecBzip2","DestinationS3FormatAvroApacheAvroCompressionCodecBzip2CodecEnum","DestinationS3FormatAvroApacheAvroCompressionCodecDeflate","DestinationS3FormatAvroApacheAvroCompressionCodecDeflateCodecEnum","DestinationS3FormatAvroApacheAvroCompressionCodecNoCompression","DestinationS3FormatAvroApacheAvroCompressionCodecNoCompressionCodecEnum","DestinationS3FormatAvroApacheAvroCompressionCodecSnappy","DestinationS3FormatAvroApacheAvroCompressionCodecSnappyCodecEnum","DestinationS3FormatAvroApacheAvroCompressionCodecXz","DestinationS3FormatAvroApacheAvroCompressionCodecXzCodecEnum","DestinationS3FormatAvroApacheAvroCompressionCodecZstandard","DestinationS3FormatAvroApacheAvroCompressionCodecZstandardCodecEnum","DestinationS3FormatAvroApacheAvroFormatTypeEnum","DestinationS3FormatCSVCommaSeparatedValues","DestinationS3FormatCSVCommaSeparatedValuesCompressionGZIP","DestinationS3FormatCSVCommaSeparatedValuesCompressionGZIPCompressionTypeEnum","DestinationS3FormatCSVCommaSeparatedValuesCompressionNoCompression","DestinationS3FormatCSVCommaSeparatedValuesCompressionNoCompressionCompressionTypeEnum","DestinationS3FormatCSVCommaSeparatedValuesFlatteningEnum","DestinationS3FormatCSVCommaSeparatedValuesFormatTypeEnum","DestinationS3FormatJSONLinesNewlineDelimitedJSON","DestinationS3FormatJSONLinesNewlineDelimitedJSONCompressionGZIP","DestinationS3FormatJSONLinesNewlineDelimitedJSONCompressionGZIPCompressionTypeEnum","DestinationS3FormatJSONLinesNewlineDelimitedJSONCompressionNoCompression","DestinationS3FormatJSONLinesNewlineDelimitedJSONCompressionNoCompressionCompressionTypeEnum","DestinationS3FormatJSONLinesNewlineDelimitedJSONFlatteningEnum","DestinationS3FormatJSONLinesNewlineDelimitedJSONFormatTypeEnum","DestinationS3FormatParquetColumnarStorage","DestinationS3FormatParquetColumnarStorageCompressionCodecEnum","DestinationS3FormatParquetColumnarStorageFormatTypeEnum","DestinationS3Glue","DestinationS3GlueFormatJSONLinesNewlineDelimitedJSON","DestinationS3GlueFormatJSONLinesNewlineDelimitedJSONCompressionGZIP","DestinationS3GlueFormatJSONLinesNewlineDelimitedJSONCompressionGZIPCompressionTypeEnum","DestinationS3GlueFormatJSONLinesNewlineDelimitedJSONCompressionNoCompression","DestinationS3GlueFormatJSONLinesNewlineDelimitedJSONCompressionNoCompressionCompressionTypeEnum","DestinationS3GlueFormatJSONLinesNewlineDelimitedJSONFormatTypeEnum","DestinationS3GlueS3BucketRegionEnum","DestinationS3GlueS3GlueEnum","DestinationS3GlueSerializationLibraryEnum","DestinationS3S3BucketRegionEnum","DestinationS3S3Enum","DestinationScylla","DestinationScyllaScyllaEnum","DestinationSftpJSON","DestinationSftpJSONSftpJSONEnum","DestinationSnowflake","DestinationSnowflakeCredentialsKeyPairAuthentication","DestinationSnowflakeCredentialsKeyPairAuthenticationAuthTypeEnum","DestinationSnowflakeCredentialsOAuth20","DestinationSnowflakeCredentialsOAuth20AuthTypeEnum","DestinationSnowflakeCredentialsUsernameAndPassword","DestinationSnowflakeCredentialsUsernameAndPasswordAuthTypeEnum","DestinationSnowflakeLoadingMethodAWSS3Staging","DestinationSnowflakeLoadingMethodAWSS3StagingEncryptionAESCBCEnvelopeEncryption","DestinationSnowflakeLoadingMethodAWSS3StagingEncryptionAESCBCEnvelopeEncryptionEncryptionTypeEnum","DestinationSnowflakeLoadingMethodAWSS3StagingEncryptionNoEncryption","DestinationSnowflakeLoadingMethodAWSS3StagingEncryptionNoEncryptionEncryptionTypeEnum","DestinationSnowflakeLoadingMethodAWSS3StagingMethodEnum","DestinationSnowflakeLoadingMethodAWSS3StagingS3BucketRegionEnum","DestinationSnowflakeLoadingMethodAzureBlobStorageStaging","DestinationSnowflakeLoadingMethodAzureBlobStorageStagingMethodEnum","DestinationSnowflakeLoadingMethodGoogleCloudStorageStaging","DestinationSnowflakeLoadingMethodGoogleCloudStorageStagingMethodEnum","DestinationSnowflakeLoadingMethodRecommendedInternalStaging","DestinationSnowflakeLoadingMethodRecommendedInternalStagingMethodEnum","DestinationSnowflakeLoadingMethodSelectAnotherOption","DestinationSnowflakeLoadingMethodSelectAnotherOptionMethodEnum","DestinationSnowflakeSnowflakeEnum","DestinationTypesense","DestinationTypesenseTypesenseEnum","DestinationsResponse","GeographyEnumEnum","JobCreateRequest","JobResponse","JobStatusEnumEnum","JobTypeEnumEnum","JobsResponse","ScheduleTypeEnumEnum","ScheduleTypeWithBasicEnumEnum","Security","SourceAirtable","SourceAirtableAirtableEnum","SourceAirtableCredentialsOAuth20","SourceAirtableCredentialsOAuth20AuthMethodEnum","SourceAirtableCredentialsPersonalAccessToken","SourceAirtableCredentialsPersonalAccessTokenAuthMethodEnum","SourceAlloydb","SourceAlloydbAlloydbEnum","SourceAlloydbReplicationMethodStandard","SourceAlloydbReplicationMethodStandardMethodEnum","SourceAlloydbTunnelMethodNoTunnel","SourceAlloydbTunnelMethodNoTunnelTunnelMethodEnum","SourceAlloydbTunnelMethodPasswordAuthentication","SourceAlloydbTunnelMethodPasswordAuthenticationTunnelMethodEnum","SourceAlloydbTunnelMethodSSHKeyAuthentication","SourceAlloydbTunnelMethodSSHKeyAuthenticationTunnelMethodEnum","SourceAmazonAds","SourceAmazonAdsAmazonAdsEnum","SourceAmazonAdsAuthTypeEnum","SourceAmazonAdsRegionEnum","SourceAmazonAdsReportRecordTypesEnum","SourceAmazonAdsStateFilterEnum","SourceAmazonSellerPartner","SourceAmazonSellerPartnerAWSEnvironmentEnum","SourceAmazonSellerPartnerAWSRegionEnum","SourceAmazonSellerPartnerAmazonSellerPartnerEnum","SourceAmazonSellerPartnerAuthTypeEnum","SourceAmazonSqs","SourceAmazonSqsAWSRegionEnum","SourceAmazonSqsAmazonSqsEnum","SourceAmplitude","SourceAmplitudeAmplitudeEnum","SourceAmplitudeDataRegionEnum","SourceAmplitudeEventStreamTimeInterval","SourceAmplitudeEventStreamTimeIntervalEventsTimeIntervalSizeUnitEnum","SourceApifyDataset","SourceApifyDatasetApifyDatasetEnum","SourceAsana","SourceAsanaAsanaEnum","SourceAsanaCredentialsAuthenticateViaAsanaOauth","SourceAsanaCredentialsAuthenticateViaAsanaOauthCredentialsTitleEnum","SourceAsanaCredentialsAuthenticateWithPersonalAccessToken","SourceAsanaCredentialsAuthenticateWithPersonalAccessTokenCredentialsTitleEnum","SourceAuth0","SourceAuth0Auth0Enum","SourceAuth0CredentialsOAuth2AccessToken","SourceAuth0CredentialsOAuth2AccessTokenAuthenticationMethodEnum","SourceAuth0CredentialsOAuth2ConfidentialApplication","SourceAuth0CredentialsOAuth2ConfidentialApplicationAuthenticationMethodEnum","SourceAwsCloudtrail","SourceAwsCloudtrailAwsCloudtrailEnum","SourceAzureTable","SourceAzureTableAzureTableEnum","SourceBambooHr","SourceBambooHrBambooHrEnum","SourceBigcommerce","SourceBigcommerceBigcommerceEnum","SourceBigquery","SourceBigqueryBigqueryEnum","SourceBingAds","SourceBingAdsAuthMethodEnum","SourceBingAdsBingAdsEnum","SourceBraintree","SourceBraintreeBraintreeEnum","SourceBraintreeEnvironmentEnum","SourceBraze","SourceBrazeBrazeEnum","SourceChargebee","SourceChargebeeChargebeeEnum","SourceChargebeeProductCatalogEnum","SourceChartmogul","SourceChartmogulChartmogulEnum","SourceChartmogulIntervalEnum","SourceClickhouse","SourceClickhouseClickhouseEnum","SourceClickhouseTunnelMethodNoTunnel","SourceClickhouseTunnelMethodNoTunnelTunnelMethodEnum","SourceClickhouseTunnelMethodPasswordAuthentication","SourceClickhouseTunnelMethodPasswordAuthenticationTunnelMethodEnum","SourceClickhouseTunnelMethodSSHKeyAuthentication","SourceClickhouseTunnelMethodSSHKeyAuthenticationTunnelMethodEnum","SourceClickupAPI","SourceClickupAPIClickupAPIEnum","SourceCloseCom","SourceCloseComCloseComEnum","SourceCoda","SourceCodaCodaEnum","SourceCoinAPI","SourceCoinAPICoinAPIEnum","SourceCoinAPIEnvironmentEnum","SourceCoinmarketcap","SourceCoinmarketcapCoinmarketcapEnum","SourceCoinmarketcapDataTypeEnum","SourceConfigcat","SourceConfigcatConfigcatEnum","SourceConfluence","SourceConfluenceConfluenceEnum","SourceCreateRequest","SourceDatascope","SourceDatascopeDatascopeEnum","SourceDelighted","SourceDelightedDelightedEnum","SourceDixa","SourceDixaDixaEnum","SourceDockerhub","SourceDockerhubDockerhubEnum","SourceDremio","SourceDremioDremioEnum","SourceDynamodb","SourceDynamodbDynamodbEnum","SourceDynamodbDynamodbRegionEnum","SourceE2eTestCloud","SourceE2eTestCloudE2eTestCloudEnum","SourceE2eTestCloudMockCatalogMultiSchema","SourceE2eTestCloudMockCatalogMultiSchemaTypeEnum","SourceE2eTestCloudMockCatalogSingleSchema","SourceE2eTestCloudMockCatalogSingleSchemaTypeEnum","SourceE2eTestCloudTypeEnum","SourceEmailoctopus","SourceEmailoctopusEmailoctopusEnum","SourceExchangeRates","SourceExchangeRatesExchangeRatesEnum","SourceFacebookMarketing","SourceFacebookMarketingFacebookMarketingEnum","SourceFacebookMarketingInsightConfig","SourceFacebookMarketingInsightConfigLevelEnum","SourceFacebookMarketingInsightConfigValidActionBreakdownsEnum","SourceFacebookMarketingInsightConfigValidBreakdownsEnum","SourceFacebookMarketingInsightConfigValidEnumsEnum","SourceFacebookPages","SourceFacebookPagesFacebookPagesEnum","SourceFaker","SourceFakerFakerEnum","SourceFauna","SourceFaunaCollection","SourceFaunaCollectionDeletionsDisabled","SourceFaunaCollectionDeletionsDisabledDeletionModeEnum","SourceFaunaCollectionDeletionsEnabled","SourceFaunaCollectionDeletionsEnabledDeletionModeEnum","SourceFaunaFaunaEnum","SourceFileSecure","SourceFileSecureFileFormatEnum","SourceFileSecureFileSecureEnum","SourceFileSecureProviderAzBlobAzureBlobStorage","SourceFileSecureProviderAzBlobAzureBlobStorageStorageEnum","SourceFileSecureProviderGCSGoogleCloudStorage","SourceFileSecureProviderGCSGoogleCloudStorageStorageEnum","SourceFileSecureProviderHTTPSPublicWeb","SourceFileSecureProviderHTTPSPublicWebStorageEnum","SourceFileSecureProviderS3AmazonWebServices","SourceFileSecureProviderS3AmazonWebServicesStorageEnum","SourceFileSecureProviderSCPSecureCopyProtocol","SourceFileSecureProviderSCPSecureCopyProtocolStorageEnum","SourceFileSecureProviderSFTPSecureFileTransferProtocol","SourceFileSecureProviderSFTPSecureFileTransferProtocolStorageEnum","SourceFileSecureProviderSSHSecureShell","SourceFileSecureProviderSSHSecureShellStorageEnum","SourceFirebolt","SourceFireboltFireboltEnum","SourceFreshcaller","SourceFreshcallerFreshcallerEnum","SourceFreshdesk","SourceFreshdeskFreshdeskEnum","SourceFreshsales","SourceFreshsalesFreshsalesEnum","SourceGcs","SourceGcsGcsEnum","SourceGetlago","SourceGetlagoGetlagoEnum","SourceGithub","SourceGithubCredentialsOAuth","SourceGithubCredentialsOAuthOptionTitleEnum","SourceGithubCredentialsPersonalAccessToken","SourceGithubCredentialsPersonalAccessTokenOptionTitleEnum","SourceGithubGithubEnum","SourceGitlab","SourceGitlabCredentialsOAuth20","SourceGitlabCredentialsOAuth20AuthTypeEnum","SourceGitlabCredentialsPrivateToken","SourceGitlabCredentialsPrivateTokenAuthTypeEnum","SourceGitlabGitlabEnum","SourceGlassfrog","SourceGlassfrogGlassfrogEnum","SourceGnews","SourceGnewsCountryEnum","SourceGnewsGnewsEnum","SourceGnewsInEnum","SourceGnewsLanguageEnum","SourceGnewsNullableEnum","SourceGnewsSortByEnum","SourceGnewsTopHeadlinesTopicEnum","SourceGoogleAds","SourceGoogleAdsCustomQueries","SourceGoogleAdsGoogleAdsEnum","SourceGoogleAdsGoogleCredentials","SourceGoogleAnalyticsDataAPI","SourceGoogleAnalyticsDataAPICredentialsAuthenticateViaGoogleOauth","SourceGoogleAnalyticsDataAPICredentialsAuthenticateViaGoogleOauthAuthTypeEnum","SourceGoogleAnalyticsDataAPICredentialsServiceAccountKeyAuthentication","SourceGoogleAnalyticsDataAPICredentialsServiceAccountKeyAuthenticationAuthTypeEnum","SourceGoogleAnalyticsDataAPIGoogleAnalyticsDataAPIEnum","SourceGoogleAnalyticsV4","SourceGoogleAnalyticsV4CredentialsAuthenticateViaGoogleOauth","SourceGoogleAnalyticsV4CredentialsAuthenticateViaGoogleOauthAuthTypeEnum","SourceGoogleAnalyticsV4CredentialsServiceAccountKeyAuthentication","SourceGoogleAnalyticsV4CredentialsServiceAccountKeyAuthenticationAuthTypeEnum","SourceGoogleAnalyticsV4GoogleAnalyticsV4Enum","SourceGoogleDirectory","SourceGoogleDirectoryGoogleDirectoryEnum","SourceGoogleSearchConsole","SourceGoogleSearchConsoleAuthorizationOAuth","SourceGoogleSearchConsoleAuthorizationOAuthAuthTypeEnum","SourceGoogleSearchConsoleAuthorizationServiceAccountKeyAuthentication","SourceGoogleSearchConsoleAuthorizationServiceAccountKeyAuthenticationAuthTypeEnum","SourceGoogleSearchConsoleGoogleSearchConsoleEnum","SourceGoogleSheets","SourceGoogleSheetsCredentialsAuthenticateViaGoogleOAuth","SourceGoogleSheetsCredentialsAuthenticateViaGoogleOAuthAuthTypeEnum","SourceGoogleSheetsCredentialsServiceAccountKeyAuthentication","SourceGoogleSheetsCredentialsServiceAccountKeyAuthenticationAuthTypeEnum","SourceGoogleSheetsGoogleSheetsEnum","SourceGoogleWebfonts","SourceGoogleWebfontsGoogleWebfontsEnum","SourceGoogleWorkspaceAdminReports","SourceGoogleWorkspaceAdminReportsGoogleWorkspaceAdminReportsEnum","SourceGreenhouse","SourceGreenhouseGreenhouseEnum","SourceGridly","SourceGridlyGridlyEnum","SourceHarvest","SourceHarvestHarvestEnum","SourceHubplanner","SourceHubplannerHubplannerEnum","SourceHubspot","SourceHubspotCredentialsOAuth","SourceHubspotCredentialsOAuthCredentialsEnum","SourceHubspotCredentialsPrivateApp","SourceHubspotCredentialsPrivateAppCredentialsEnum","SourceHubspotHubspotEnum","SourceInsightly","SourceInsightlyInsightlyEnum","SourceInstagram","SourceInstagramInstagramEnum","SourceInstatus","SourceInstatusInstatusEnum","SourceIntercom","SourceIntercomIntercomEnum","SourceIp2whois","SourceIp2whoisIp2whoisEnum","SourceIterable","SourceIterableIterableEnum","SourceJira","SourceJiraJiraEnum","SourceK6Cloud","SourceK6CloudK6CloudEnum","SourceKlarna","SourceKlarnaKlarnaEnum","SourceKlarnaRegionEnum","SourceKlaviyo","SourceKlaviyoKlaviyoEnum","SourceKustomerSinger","SourceKustomerSingerKustomerSingerEnum","SourceLaunchdarkly","SourceLaunchdarklyLaunchdarklyEnum","SourceLemlist","SourceLemlistLemlistEnum","SourceLinkedinAds","SourceLinkedinAdsCredentialsAccessToken","SourceLinkedinAdsCredentialsAccessTokenAuthMethodEnum","SourceLinkedinAdsCredentialsOAuth20","SourceLinkedinAdsCredentialsOAuth20AuthMethodEnum","SourceLinkedinAdsLinkedinAdsEnum","SourceLinkedinPages","SourceLinkedinPagesCredentialsAccessToken","SourceLinkedinPagesCredentialsAccessTokenAuthMethodEnum","SourceLinkedinPagesCredentialsOAuth20","SourceLinkedinPagesCredentialsOAuth20AuthMethodEnum","SourceLinkedinPagesLinkedinPagesEnum","SourceLinnworks","SourceLinnworksLinnworksEnum","SourceLokalise","SourceLokaliseLokaliseEnum","SourceMailchimp","SourceMailchimpCredentialsAPIKey","SourceMailchimpCredentialsAPIKeyAuthTypeEnum","SourceMailchimpCredentialsOAuth20","SourceMailchimpCredentialsOAuth20AuthTypeEnum","SourceMailchimpMailchimpEnum","SourceMailgun","SourceMailgunMailgunEnum","SourceMailjetSms","SourceMailjetSmsMailjetSmsEnum","SourceMarketo","SourceMarketoMarketoEnum","SourceMetabase","SourceMetabaseMetabaseEnum","SourceMicrosoftTeams","SourceMicrosoftTeamsCredentialsAuthenticateViaMicrosoft","SourceMicrosoftTeamsCredentialsAuthenticateViaMicrosoftAuthTypeEnum","SourceMicrosoftTeamsCredentialsAuthenticateViaMicrosoftOAuth20","SourceMicrosoftTeamsCredentialsAuthenticateViaMicrosoftOAuth20AuthTypeEnum","SourceMicrosoftTeamsMicrosoftTeamsEnum","SourceMixpanel","SourceMixpanelCredentialsProjectSecret","SourceMixpanelCredentialsProjectSecretOptionTitleEnum","SourceMixpanelCredentialsServiceAccount","SourceMixpanelCredentialsServiceAccountOptionTitleEnum","SourceMixpanelMixpanelEnum","SourceMixpanelRegionEnum","SourceMonday","SourceMondayCredentialsAPIToken","SourceMondayCredentialsAPITokenAuthTypeEnum","SourceMondayCredentialsOAuth20","SourceMondayCredentialsOAuth20AuthTypeEnum","SourceMondayMondayEnum","SourceMongodb","SourceMongodbInstanceTypeMongoDBAtlas","SourceMongodbInstanceTypeMongoDBAtlasInstanceEnum","SourceMongodbInstanceTypeReplicaSet","SourceMongodbInstanceTypeReplicaSetInstanceEnum","SourceMongodbInstanceTypeStandaloneMongoDbInstance","SourceMongodbInstanceTypeStandaloneMongoDbInstanceInstanceEnum","SourceMongodbMongodbEnum","SourceMssql","SourceMssqlMssqlEnum","SourceMssqlReplicationMethodLogicalReplicationCDC","SourceMssqlReplicationMethodLogicalReplicationCDCDataToSyncEnum","SourceMssqlReplicationMethodLogicalReplicationCDCInitialSnapshotIsolationLevelEnum","SourceMssqlReplicationMethodLogicalReplicationCDCMethodEnum","SourceMssqlReplicationMethodStandard","SourceMssqlReplicationMethodStandardMethodEnum","SourceMssqlSslMethodEncryptedTrustServerCertificate","SourceMssqlSslMethodEncryptedTrustServerCertificateSslMethodEnum","SourceMssqlSslMethodEncryptedVerifyCertificate","SourceMssqlSslMethodEncryptedVerifyCertificateSslMethodEnum","SourceMssqlTunnelMethodNoTunnel","SourceMssqlTunnelMethodNoTunnelTunnelMethodEnum","SourceMssqlTunnelMethodPasswordAuthentication","SourceMssqlTunnelMethodPasswordAuthenticationTunnelMethodEnum","SourceMssqlTunnelMethodSSHKeyAuthentication","SourceMssqlTunnelMethodSSHKeyAuthenticationTunnelMethodEnum","SourceMyHours","SourceMyHoursMyHoursEnum","SourceMysql","SourceMysqlMysqlEnum","SourceMysqlReplicationMethodLogicalReplicationCDC","SourceMysqlReplicationMethodLogicalReplicationCDCMethodEnum","SourceMysqlReplicationMethodStandard","SourceMysqlReplicationMethodStandardMethodEnum","SourceMysqlSslModePreferred","SourceMysqlSslModePreferredModeEnum","SourceMysqlSslModeRequired","SourceMysqlSslModeRequiredModeEnum","SourceMysqlSslModeVerifyCA","SourceMysqlSslModeVerifyCAModeEnum","SourceMysqlSslModeVerifyIdentity","SourceMysqlSslModeVerifyIdentityModeEnum","SourceMysqlTunnelMethodNoTunnel","SourceMysqlTunnelMethodNoTunnelTunnelMethodEnum","SourceMysqlTunnelMethodPasswordAuthentication","SourceMysqlTunnelMethodPasswordAuthenticationTunnelMethodEnum","SourceMysqlTunnelMethodSSHKeyAuthentication","SourceMysqlTunnelMethodSSHKeyAuthenticationTunnelMethodEnum","SourceNetsuite","SourceNetsuiteNetsuiteEnum","SourceNotion","SourceNotionCredentialsAccessToken","SourceNotionCredentialsAccessTokenAuthTypeEnum","SourceNotionCredentialsOAuth20","SourceNotionCredentialsOAuth20AuthTypeEnum","SourceNotionNotionEnum","SourceNytimes","SourceNytimesNytimesEnum","SourceNytimesPeriodUsedForMostPopularStreamsEnum","SourceNytimesShareTypeUsedForMostPopularSharedStreamEnum","SourceOkta","SourceOktaCredentialsAPIToken","SourceOktaCredentialsAPITokenAuthTypeEnum","SourceOktaCredentialsOAuth20","SourceOktaCredentialsOAuth20AuthTypeEnum","SourceOktaOktaEnum","SourceOmnisend","SourceOmnisendOmnisendEnum","SourceOnesignal","SourceOnesignalApplications","SourceOnesignalOnesignalEnum","SourceOpenweather","SourceOpenweatherLanguageEnum","SourceOpenweatherOpenweatherEnum","SourceOpenweatherUnitsEnum","SourceOracle","SourceOracleConnectionDataServiceName","SourceOracleConnectionDataServiceNameConnectionTypeEnum","SourceOracleConnectionDataSystemIDSID","SourceOracleConnectionDataSystemIDSIDConnectionTypeEnum","SourceOracleEncryptionNativeNetworkEncryptionNNE","SourceOracleEncryptionNativeNetworkEncryptionNNEEncryptionAlgorithmEnum","SourceOracleEncryptionNativeNetworkEncryptionNNEEncryptionMethodEnum","SourceOracleEncryptionTLSEncryptedVerifyCertificate","SourceOracleEncryptionTLSEncryptedVerifyCertificateEncryptionMethodEnum","SourceOracleOracleEnum","SourceOracleTunnelMethodNoTunnel","SourceOracleTunnelMethodNoTunnelTunnelMethodEnum","SourceOracleTunnelMethodPasswordAuthentication","SourceOracleTunnelMethodPasswordAuthenticationTunnelMethodEnum","SourceOracleTunnelMethodSSHKeyAuthentication","SourceOracleTunnelMethodSSHKeyAuthenticationTunnelMethodEnum","SourceOrb","SourceOrbOrbEnum","SourceOrbit","SourceOrbitOrbitEnum","SourceOutreach","SourceOutreachOutreachEnum","SourcePaypalTransaction","SourcePaypalTransactionPaypalTransactionEnum","SourcePaystack","SourcePaystackPaystackEnum","SourcePendo","SourcePendoPendoEnum","SourcePersistiq","SourcePersistiqPersistiqEnum","SourcePexelsAPI","SourcePexelsAPIPexelsAPIEnum","SourcePinterest","SourcePinterestCredentialsAccessToken","SourcePinterestCredentialsAccessTokenAuthMethodEnum","SourcePinterestCredentialsOAuth20","SourcePinterestCredentialsOAuth20AuthMethodEnum","SourcePinterestPinterestEnum","SourcePinterestStatusEnum","SourcePipedrive","SourcePipedriveAPIKeyAuthentication","SourcePipedriveAPIKeyAuthenticationAuthTypeEnum","SourcePipedrivePipedriveEnum","SourcePocket","SourcePocketContentTypeEnum","SourcePocketDetailTypeEnum","SourcePocketPocketEnum","SourcePocketSortByEnum","SourcePocketStateEnum","SourcePokeapi","SourcePokeapiPokeapiEnum","SourcePolygonStockAPI","SourcePolygonStockAPIPolygonStockAPIEnum","SourcePostgres","SourcePostgresPostgresEnum","SourcePostgresReplicationMethodStandard","SourcePostgresReplicationMethodStandardMethodEnum","SourcePostgresTunnelMethodNoTunnel","SourcePostgresTunnelMethodNoTunnelTunnelMethodEnum","SourcePostgresTunnelMethodPasswordAuthentication","SourcePostgresTunnelMethodPasswordAuthenticationTunnelMethodEnum","SourcePostgresTunnelMethodSSHKeyAuthentication","SourcePostgresTunnelMethodSSHKeyAuthenticationTunnelMethodEnum","SourcePosthog","SourcePosthogPosthogEnum","SourcePostmarkapp","SourcePostmarkappPostmarkappEnum","SourcePrestashop","SourcePrestashopPrestashopEnum","SourcePublicApis","SourcePublicApisPublicApisEnum","SourcePunkAPI","SourcePunkAPIPunkAPIEnum","SourcePypi","SourcePypiPypiEnum","SourceQualaroo","SourceQualarooQualarooEnum","SourceRailz","SourceRailzRailzEnum","SourceRecharge","SourceRechargeRechargeEnum","SourceRecreation","SourceRecreationRecreationEnum","SourceRecruitee","SourceRecruiteeRecruiteeEnum","SourceRecurly","SourceRecurlyRecurlyEnum","SourceRedshift","SourceRedshiftRedshiftEnum","SourceResponse","SourceRetently","SourceRetentlyRetentlyEnum","SourceRkiCovid","SourceRkiCovidRkiCovidEnum","SourceRss","SourceRssRssEnum","SourceS3","SourceS3FormatAvro","SourceS3FormatAvroFiletypeEnum","SourceS3FormatCSV","SourceS3FormatCSVFiletypeEnum","SourceS3FormatJsonl","SourceS3FormatJsonlFiletypeEnum","SourceS3FormatJsonlUnexpectedFieldBehaviorEnum","SourceS3FormatParquet","SourceS3FormatParquetFiletypeEnum","SourceS3S3AmazonWebServices","SourceS3S3Enum","SourceSalesforce","SourceSalesforceAuthTypeEnum","SourceSalesforceSalesforceEnum","SourceSalesforceSinger","SourceSalesforceSingerAPITypeEnum","SourceSalesforceSingerSalesforceSingerEnum","SourceSalesforceStreamsCriteria","SourceSalesforceStreamsCriteriaSearchCriteriaEnum","SourceSalesloft","SourceSalesloftCredentialsAuthenticateViaAPIKey","SourceSalesloftCredentialsAuthenticateViaAPIKeyAuthTypeEnum","SourceSalesloftCredentialsAuthenticateViaOAuth","SourceSalesloftCredentialsAuthenticateViaOAuthAuthTypeEnum","SourceSalesloftSalesloftEnum","SourceSapFieldglass","SourceSapFieldglassSapFieldglassEnum","SourceSecoda","SourceSecodaSecodaEnum","SourceSendgrid","SourceSendgridSendgridEnum","SourceSendinblue","SourceSendinblueSendinblueEnum","SourceSenseforce","SourceSenseforceSenseforceEnum","SourceSentry","SourceSentrySentryEnum","SourceSftp","SourceSftpBulk","SourceSftpBulkFileTypeEnum","SourceSftpBulkSftpBulkEnum","SourceSftpCredentialsPasswordAuthentication","SourceSftpCredentialsPasswordAuthenticationAuthMethodEnum","SourceSftpCredentialsSSHKeyAuthentication","SourceSftpCredentialsSSHKeyAuthenticationAuthMethodEnum","SourceSftpSftpEnum","SourceShopify","SourceShopifyCredentialsAPIPassword","SourceShopifyCredentialsAPIPasswordAuthMethodEnum","SourceShopifyCredentialsOAuth20","SourceShopifyCredentialsOAuth20AuthMethodEnum","SourceShopifyShopifyEnum","SourceShortio","SourceShortioShortioEnum","SourceSlack","SourceSlackCredentialsAPIToken","SourceSlackCredentialsAPITokenOptionTitleEnum","SourceSlackCredentialsSignInViaSlackOAuth","SourceSlackCredentialsSignInViaSlackOAuthOptionTitleEnum","SourceSlackSlackEnum","SourceSmaily","SourceSmailySmailyEnum","SourceSmartengage","SourceSmartengageSmartengageEnum","SourceSmartsheets","SourceSmartsheetsCredentialsAPIAccessToken","SourceSmartsheetsCredentialsAPIAccessTokenAuthTypeEnum","SourceSmartsheetsCredentialsOAuth20","SourceSmartsheetsCredentialsOAuth20AuthTypeEnum","SourceSmartsheetsSmartsheetsEnum","SourceSnapchatMarketing","SourceSnapchatMarketingSnapchatMarketingEnum","SourceSnowflake","SourceSnowflakeCredentialsOAuth20","SourceSnowflakeCredentialsOAuth20AuthTypeEnum","SourceSnowflakeCredentialsUsernameAndPassword","SourceSnowflakeCredentialsUsernameAndPasswordAuthTypeEnum","SourceSnowflakeSnowflakeEnum","SourceSonarCloud","SourceSonarCloudSonarCloudEnum","SourceSpacexAPI","SourceSpacexAPISpacexAPIEnum","SourceSquare","SourceSquareCredentialsAPIKey","SourceSquareCredentialsAPIKeyCredentialsTitleEnum","SourceSquareCredentialsOauthAuthentication","SourceSquareCredentialsOauthAuthenticationCredentialsTitleEnum","SourceSquareSquareEnum","SourceStrava","SourceStravaAuthTypeEnum","SourceStravaStravaEnum","SourceStripe","SourceStripeStripeEnum","SourceSurveySparrow","SourceSurveySparrowRegionEUBasedAccount","SourceSurveySparrowRegionEUBasedAccountURLBaseEnum","SourceSurveySparrowRegionGlobalAccount","SourceSurveySparrowRegionGlobalAccountURLBaseEnum","SourceSurveySparrowSurveySparrowEnum","SourceSurveymonkey","SourceSurveymonkeyOriginDatacenterOfTheSurveyMonkeyAccountEnum","SourceSurveymonkeySurveyMonkeyAuthorizationMethod","SourceSurveymonkeySurveyMonkeyAuthorizationMethodAuthMethodEnum","SourceSurveymonkeySurveymonkeyEnum","SourceTempo","SourceTempoTempoEnum","SourceTheGuardianAPI","SourceTheGuardianAPITheGuardianAPIEnum","SourceTiktokMarketing","SourceTiktokMarketingCredentialsOAuth20","SourceTiktokMarketingCredentialsOAuth20AuthTypeEnum","SourceTiktokMarketingCredentialsSandboxAccessToken","SourceTiktokMarketingCredentialsSandboxAccessTokenAuthTypeEnum","SourceTiktokMarketingReportAggregationGranularityEnum","SourceTiktokMarketingTiktokMarketingEnum","SourceTodoist","SourceTodoistTodoistEnum","SourceTrello","SourceTrelloTrelloEnum","SourceTrustpilot","SourceTrustpilotCredentialsAPIKey","SourceTrustpilotCredentialsAPIKeyAuthTypeEnum","SourceTrustpilotCredentialsOAuth20","SourceTrustpilotCredentialsOAuth20AuthTypeEnum","SourceTrustpilotTrustpilotEnum","SourceTvmazeSchedule","SourceTvmazeScheduleTvmazeScheduleEnum","SourceTwilio","SourceTwilioTaskrouter","SourceTwilioTaskrouterTwilioTaskrouterEnum","SourceTwilioTwilioEnum","SourceTwitter","SourceTwitterTwitterEnum","SourceTypeform","SourceTypeformTypeformEnum","SourceUsCensus","SourceUsCensusUsCensusEnum","SourceVantage","SourceVantageVantageEnum","SourceWebflow","SourceWebflowWebflowEnum","SourceWhiskyHunter","SourceWhiskyHunterWhiskyHunterEnum","SourceWikipediaPageviews","SourceWikipediaPageviewsWikipediaPageviewsEnum","SourceWoocommerce","SourceWoocommerceWoocommerceEnum","SourceXero","SourceXeroAuthenticateViaXeroOAuth","SourceXeroXeroEnum","SourceXkcd","SourceXkcdXkcdEnum","SourceYandexMetrica","SourceYandexMetricaYandexMetricaEnum","SourceYounium","SourceYouniumYouniumEnum","SourceYoutubeAnalytics","SourceYoutubeAnalyticsYoutubeAnalyticsEnum","SourceZendeskChat","SourceZendeskChatCredentialsAccessToken","SourceZendeskChatCredentialsAccessTokenCredentialsEnum","SourceZendeskChatCredentialsOAuth20","SourceZendeskChatCredentialsOAuth20CredentialsEnum","SourceZendeskChatZendeskChatEnum","SourceZendeskSunshine","SourceZendeskSunshineCredentialsAPIToken","SourceZendeskSunshineCredentialsAPITokenAuthMethodEnum","SourceZendeskSunshineCredentialsOAuth20","SourceZendeskSunshineCredentialsOAuth20AuthMethodEnum","SourceZendeskSunshineZendeskSunshineEnum","SourceZendeskSupport","SourceZendeskSupportZendeskSupportEnum","SourceZendeskTalk","SourceZendeskTalkZendeskTalkEnum","SourceZenloop","SourceZenloopZenloopEnum","SourceZohoCRMZohoCRMEditionEnum","SourceZohoCrm","SourceZohoCrmDataCenterLocationEnum","SourceZohoCrmEnvironmentEnum","SourceZohoCrmZohoCrmEnum","SourceZoom","SourceZoomZoomEnum","SourceZuora","SourceZuoraZuoraEnum","SourcesResponse","WorkspaceCreateRequest","WorkspaceResponse","WorkspacesResponse"]
diff --git a/src/sdk/models/shared/connectioncreaterequest.py b/src/sdk/models/shared/connectioncreaterequest.py
new file mode 100755
index 00000000..ff4981b6
--- /dev/null
+++ b/src/sdk/models/shared/connectioncreaterequest.py
@@ -0,0 +1,23 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from ..shared import connectionschedulecreate as shared_connectionschedulecreate
+from ..shared import geographyenum_enum as shared_geographyenum_enum
+from dataclasses_json import Undefined, dataclass_json
+from sdk import utils
+from typing import Optional
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class ConnectionCreateRequest:
+
+ destination_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationId') }})
+ source_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceId') }})
+ geography: Optional[shared_geographyenum_enum.GeographyEnumEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('geography'), 'exclude': lambda f: f is None }})
+ name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name'), 'exclude': lambda f: f is None }})
+ r"""Optional name of the connection"""
+ schedule: Optional[shared_connectionschedulecreate.ConnectionScheduleCreate] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('schedule'), 'exclude': lambda f: f is None }})
+ r"""schedule for when the the connection should run, per the schedule type"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/connectionresponse.py b/src/sdk/models/shared/connectionresponse.py
new file mode 100755
index 00000000..c04683ba
--- /dev/null
+++ b/src/sdk/models/shared/connectionresponse.py
@@ -0,0 +1,26 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from ..shared import connectionscheduleresponse as shared_connectionscheduleresponse
+from ..shared import connectionstatusenum_enum as shared_connectionstatusenum_enum
+from ..shared import geographyenum_enum as shared_geographyenum_enum
+from dataclasses_json import Undefined, dataclass_json
+from sdk import utils
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class ConnectionResponse:
+ r"""Provides details of a single connection."""
+
+ connection_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('connectionId') }})
+ destination_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationId') }})
+ geography: shared_geographyenum_enum.GeographyEnumEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('geography') }})
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ schedule: shared_connectionscheduleresponse.ConnectionScheduleResponse = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('schedule') }})
+ r"""schedule for when the the connection should run, per the schedule type"""
+ source_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceId') }})
+ status: shared_connectionstatusenum_enum.ConnectionStatusEnumEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status') }})
+ workspace_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('workspaceId') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/connectionschedulecreate.py b/src/sdk/models/shared/connectionschedulecreate.py
new file mode 100755
index 00000000..c7b042ff
--- /dev/null
+++ b/src/sdk/models/shared/connectionschedulecreate.py
@@ -0,0 +1,18 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from ..shared import scheduletypeenum_enum as shared_scheduletypeenum_enum
+from dataclasses_json import Undefined, dataclass_json
+from sdk import utils
+from typing import Optional
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class ConnectionScheduleCreate:
+ r"""schedule for when the the connection should run, per the schedule type"""
+
+ schedule_type: shared_scheduletypeenum_enum.ScheduleTypeEnumEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('scheduleType') }})
+ cron_expression: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cronExpression'), 'exclude': lambda f: f is None }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/connectionscheduleresponse.py b/src/sdk/models/shared/connectionscheduleresponse.py
new file mode 100755
index 00000000..a0771550
--- /dev/null
+++ b/src/sdk/models/shared/connectionscheduleresponse.py
@@ -0,0 +1,19 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from ..shared import scheduletypewithbasicenum_enum as shared_scheduletypewithbasicenum_enum
+from dataclasses_json import Undefined, dataclass_json
+from sdk import utils
+from typing import Optional
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class ConnectionScheduleResponse:
+ r"""schedule for when the the connection should run, per the schedule type"""
+
+ schedule_type: shared_scheduletypewithbasicenum_enum.ScheduleTypeWithBasicEnumEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('scheduleType') }})
+ basic_timing: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('basicTiming'), 'exclude': lambda f: f is None }})
+ cron_expression: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cronExpression'), 'exclude': lambda f: f is None }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/connectionsresponse.py b/src/sdk/models/shared/connectionsresponse.py
new file mode 100755
index 00000000..87301b1b
--- /dev/null
+++ b/src/sdk/models/shared/connectionsresponse.py
@@ -0,0 +1,19 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from ..shared import connectionresponse as shared_connectionresponse
+from dataclasses_json import Undefined, dataclass_json
+from sdk import utils
+from typing import Optional
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class ConnectionsResponse:
+ r"""Successful operation"""
+
+ data: list[shared_connectionresponse.ConnectionResponse] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data') }})
+ next: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('next'), 'exclude': lambda f: f is None }})
+ previous: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('previous'), 'exclude': lambda f: f is None }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/connectionstatusenum_enum.py b/src/sdk/models/shared/connectionstatusenum_enum.py
new file mode 100755
index 00000000..f7bf0320
--- /dev/null
+++ b/src/sdk/models/shared/connectionstatusenum_enum.py
@@ -0,0 +1,9 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+from enum import Enum
+
+class ConnectionStatusEnumEnum(str, Enum):
+ ACTIVE = 'active'
+ INACTIVE = 'inactive'
+ DEPRECATED = 'deprecated'
diff --git a/src/sdk/models/shared/destination_amazon_sqs.py b/src/sdk/models/shared/destination_amazon_sqs.py
new file mode 100755
index 00000000..2550ae87
--- /dev/null
+++ b/src/sdk/models/shared/destination_amazon_sqs.py
@@ -0,0 +1,62 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class DestinationAmazonSqsAmazonSqsEnum(str, Enum):
+ AMAZON_SQS = 'amazon-sqs'
+
+class DestinationAmazonSqsAWSRegionEnum(str, Enum):
+ r"""AWS Region of the SQS Queue"""
+ US_EAST_1 = 'us-east-1'
+ US_EAST_2 = 'us-east-2'
+ US_WEST_1 = 'us-west-1'
+ US_WEST_2 = 'us-west-2'
+ AF_SOUTH_1 = 'af-south-1'
+ AP_EAST_1 = 'ap-east-1'
+ AP_SOUTH_1 = 'ap-south-1'
+ AP_NORTHEAST_1 = 'ap-northeast-1'
+ AP_NORTHEAST_2 = 'ap-northeast-2'
+ AP_NORTHEAST_3 = 'ap-northeast-3'
+ AP_SOUTHEAST_1 = 'ap-southeast-1'
+ AP_SOUTHEAST_2 = 'ap-southeast-2'
+ CA_CENTRAL_1 = 'ca-central-1'
+ CN_NORTH_1 = 'cn-north-1'
+ CN_NORTHWEST_1 = 'cn-northwest-1'
+ EU_CENTRAL_1 = 'eu-central-1'
+ EU_NORTH_1 = 'eu-north-1'
+ EU_SOUTH_1 = 'eu-south-1'
+ EU_WEST_1 = 'eu-west-1'
+ EU_WEST_2 = 'eu-west-2'
+ EU_WEST_3 = 'eu-west-3'
+ SA_EAST_1 = 'sa-east-1'
+ ME_SOUTH_1 = 'me-south-1'
+ US_GOV_EAST_1 = 'us-gov-east-1'
+ US_GOV_WEST_1 = 'us-gov-west-1'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationAmazonSqs:
+ r"""The values required to configure the destination."""
+
+ destination_type: DestinationAmazonSqsAmazonSqsEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationType') }})
+ queue_url: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('queue_url') }})
+ r"""URL of the SQS Queue"""
+ region: DestinationAmazonSqsAWSRegionEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('region') }})
+ r"""AWS Region of the SQS Queue"""
+ access_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_key'), 'exclude': lambda f: f is None }})
+ r"""The Access Key ID of the AWS IAM Role to use for sending messages"""
+ message_body_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message_body_key'), 'exclude': lambda f: f is None }})
+ r"""Use this property to extract the contents of the named key in the input record to use as the SQS message body. If not set, the entire content of the input record data is used as the message body."""
+ message_delay: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message_delay'), 'exclude': lambda f: f is None }})
+ r"""Modify the Message Delay of the individual message from the Queue's default (seconds)."""
+ message_group_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message_group_id'), 'exclude': lambda f: f is None }})
+ r"""The tag that specifies that a message belongs to a specific message group. This parameter applies only to, and is REQUIRED by, FIFO queues."""
+ secret_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('secret_key'), 'exclude': lambda f: f is None }})
+ r"""The Secret Key of the AWS IAM Role to use for sending messages"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destination_aws_datalake.py b/src/sdk/models/shared/destination_aws_datalake.py
new file mode 100755
index 00000000..c2ccc8cb
--- /dev/null
+++ b/src/sdk/models/shared/destination_aws_datalake.py
@@ -0,0 +1,153 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class DestinationAwsDatalakeCredentialsIAMUserCredentialsTitleEnum(str, Enum):
+ r"""Name of the credentials"""
+ IAM_USER = 'IAM User'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationAwsDatalakeCredentialsIAMUser:
+ r"""Choose How to Authenticate to AWS."""
+
+ aws_access_key_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('aws_access_key_id') }})
+ r"""AWS User Access Key Id"""
+ aws_secret_access_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('aws_secret_access_key') }})
+ r"""Secret Access Key"""
+ credentials_title: DestinationAwsDatalakeCredentialsIAMUserCredentialsTitleEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials_title') }})
+ r"""Name of the credentials"""
+
+class DestinationAwsDatalakeCredentialsIAMRoleCredentialsTitleEnum(str, Enum):
+ r"""Name of the credentials"""
+ IAM_ROLE = 'IAM Role'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationAwsDatalakeCredentialsIAMRole:
+ r"""Choose How to Authenticate to AWS."""
+
+ credentials_title: DestinationAwsDatalakeCredentialsIAMRoleCredentialsTitleEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials_title') }})
+ r"""Name of the credentials"""
+ role_arn: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('role_arn') }})
+ r"""Will assume this role to write data to s3"""
+
+class DestinationAwsDatalakeAwsDatalakeEnum(str, Enum):
+ AWS_DATALAKE = 'aws-datalake'
+
+class DestinationAwsDatalakeFormatParquetColumnarStorageCompressionCodecOptionalEnum(str, Enum):
+ r"""The compression algorithm used to compress data."""
+ UNCOMPRESSED = 'UNCOMPRESSED'
+ SNAPPY = 'SNAPPY'
+ GZIP = 'GZIP'
+ ZSTD = 'ZSTD'
+
+class DestinationAwsDatalakeFormatParquetColumnarStorageFormatTypeWildcardEnum(str, Enum):
+ PARQUET = 'Parquet'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationAwsDatalakeFormatParquetColumnarStorage:
+ r"""Format of the data output."""
+
+ format_type: DestinationAwsDatalakeFormatParquetColumnarStorageFormatTypeWildcardEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('format_type') }})
+ compression_codec: Optional[DestinationAwsDatalakeFormatParquetColumnarStorageCompressionCodecOptionalEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('compression_codec'), 'exclude': lambda f: f is None }})
+ r"""The compression algorithm used to compress data."""
+
+class DestinationAwsDatalakeFormatJSONLinesNewlineDelimitedJSONCompressionCodecOptionalEnum(str, Enum):
+ r"""The compression algorithm used to compress data."""
+ UNCOMPRESSED = 'UNCOMPRESSED'
+ GZIP = 'GZIP'
+
+class DestinationAwsDatalakeFormatJSONLinesNewlineDelimitedJSONFormatTypeWildcardEnum(str, Enum):
+ JSONL = 'JSONL'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationAwsDatalakeFormatJSONLinesNewlineDelimitedJSON:
+ r"""Format of the data output."""
+
+ format_type: DestinationAwsDatalakeFormatJSONLinesNewlineDelimitedJSONFormatTypeWildcardEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('format_type') }})
+ compression_codec: Optional[DestinationAwsDatalakeFormatJSONLinesNewlineDelimitedJSONCompressionCodecOptionalEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('compression_codec'), 'exclude': lambda f: f is None }})
+ r"""The compression algorithm used to compress data."""
+
+class DestinationAwsDatalakeChooseHowToPartitionDataEnum(str, Enum):
+ r"""Partition data by cursor fields when a cursor field is a date"""
+ NO_PARTITIONING = 'NO PARTITIONING'
+ DATE = 'DATE'
+ YEAR = 'YEAR'
+ MONTH = 'MONTH'
+ DAY = 'DAY'
+ YEAR_MONTH = 'YEAR/MONTH'
+ YEAR_MONTH_DAY = 'YEAR/MONTH/DAY'
+
+class DestinationAwsDatalakeS3BucketRegionEnum(str, Enum):
+ r"""The region of the S3 bucket. See here for all region codes."""
+ UNKNOWN = ''
+ US_EAST_1 = 'us-east-1'
+ US_EAST_2 = 'us-east-2'
+ US_WEST_1 = 'us-west-1'
+ US_WEST_2 = 'us-west-2'
+ AF_SOUTH_1 = 'af-south-1'
+ AP_EAST_1 = 'ap-east-1'
+ AP_SOUTH_1 = 'ap-south-1'
+ AP_NORTHEAST_1 = 'ap-northeast-1'
+ AP_NORTHEAST_2 = 'ap-northeast-2'
+ AP_NORTHEAST_3 = 'ap-northeast-3'
+ AP_SOUTHEAST_1 = 'ap-southeast-1'
+ AP_SOUTHEAST_2 = 'ap-southeast-2'
+ CA_CENTRAL_1 = 'ca-central-1'
+ CN_NORTH_1 = 'cn-north-1'
+ CN_NORTHWEST_1 = 'cn-northwest-1'
+ EU_CENTRAL_1 = 'eu-central-1'
+ EU_NORTH_1 = 'eu-north-1'
+ EU_SOUTH_1 = 'eu-south-1'
+ EU_WEST_1 = 'eu-west-1'
+ EU_WEST_2 = 'eu-west-2'
+ EU_WEST_3 = 'eu-west-3'
+ SA_EAST_1 = 'sa-east-1'
+ ME_SOUTH_1 = 'me-south-1'
+ US_GOV_EAST_1 = 'us-gov-east-1'
+ US_GOV_WEST_1 = 'us-gov-west-1'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationAwsDatalake:
+ r"""The values required to configure the destination."""
+
+ bucket_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('bucket_name') }})
+ r"""The name of the S3 bucket. Read more here."""
+ credentials: Any = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials') }})
+ r"""Choose How to Authenticate to AWS."""
+ destination_type: DestinationAwsDatalakeAwsDatalakeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationType') }})
+ lakeformation_database_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('lakeformation_database_name') }})
+ r"""The default database this destination will use to create tables in per stream. Can be changed per connection by customizing the namespace."""
+ region: DestinationAwsDatalakeS3BucketRegionEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('region') }})
+ r"""The region of the S3 bucket. See here for all region codes."""
+ aws_account_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('aws_account_id'), 'exclude': lambda f: f is None }})
+ r"""target aws account id"""
+ bucket_prefix: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('bucket_prefix'), 'exclude': lambda f: f is None }})
+ r"""S3 prefix"""
+ format: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('format'), 'exclude': lambda f: f is None }})
+ r"""Format of the data output."""
+ glue_catalog_float_as_decimal: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('glue_catalog_float_as_decimal'), 'exclude': lambda f: f is None }})
+ r"""Cast float/double as decimal(38,18). This can help achieve higher accuracy and represent numbers correctly as received from the source."""
+ lakeformation_database_default_tag_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('lakeformation_database_default_tag_key'), 'exclude': lambda f: f is None }})
+ r"""Add a default tag key to databases created by this destination"""
+ lakeformation_database_default_tag_values: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('lakeformation_database_default_tag_values'), 'exclude': lambda f: f is None }})
+ r"""Add default values for the `Tag Key` to databases created by this destination. Comma separate for multiple values."""
+ lakeformation_governed_tables: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('lakeformation_governed_tables'), 'exclude': lambda f: f is None }})
+ r"""Whether to create tables as LF governed tables."""
+ partitioning: Optional[DestinationAwsDatalakeChooseHowToPartitionDataEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('partitioning'), 'exclude': lambda f: f is None }})
+ r"""Partition data by cursor fields when a cursor field is a date"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destination_azure_blob_storage.py b/src/sdk/models/shared/destination_azure_blob_storage.py
new file mode 100755
index 00000000..623375aa
--- /dev/null
+++ b/src/sdk/models/shared/destination_azure_blob_storage.py
@@ -0,0 +1,63 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class DestinationAzureBlobStorageAzureBlobStorageEnum(str, Enum):
+ AZURE_BLOB_STORAGE = 'azure-blob-storage'
+
+class DestinationAzureBlobStorageFormatJSONLinesNewlineDelimitedJSONFormatTypeEnum(str, Enum):
+ JSONL = 'JSONL'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationAzureBlobStorageFormatJSONLinesNewlineDelimitedJSON:
+ r"""Output data format"""
+
+ format_type: DestinationAzureBlobStorageFormatJSONLinesNewlineDelimitedJSONFormatTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('format_type') }})
+
+class DestinationAzureBlobStorageFormatCSVCommaSeparatedValuesNormalizationFlatteningEnum(str, Enum):
+ r"""Whether the input json data should be normalized (flattened) in the output CSV. Please refer to docs for details."""
+ NO_FLATTENING = 'No flattening'
+ ROOT_LEVEL_FLATTENING = 'Root level flattening'
+
+class DestinationAzureBlobStorageFormatCSVCommaSeparatedValuesFormatTypeEnum(str, Enum):
+ CSV = 'CSV'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationAzureBlobStorageFormatCSVCommaSeparatedValues:
+ r"""Output data format"""
+
+ flattening: DestinationAzureBlobStorageFormatCSVCommaSeparatedValuesNormalizationFlatteningEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('flattening') }})
+ r"""Whether the input json data should be normalized (flattened) in the output CSV. Please refer to docs for details."""
+ format_type: DestinationAzureBlobStorageFormatCSVCommaSeparatedValuesFormatTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('format_type') }})
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationAzureBlobStorage:
+ r"""The values required to configure the destination."""
+
+ azure_blob_storage_account_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('azure_blob_storage_account_key') }})
+ r"""The Azure blob storage account key."""
+ azure_blob_storage_account_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('azure_blob_storage_account_name') }})
+ r"""The account's name of the Azure Blob Storage."""
+ destination_type: DestinationAzureBlobStorageAzureBlobStorageEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationType') }})
+ format: Any = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('format') }})
+ r"""Output data format"""
+ azure_blob_storage_container_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('azure_blob_storage_container_name'), 'exclude': lambda f: f is None }})
+ r"""The name of the Azure blob storage container. If not exists - will be created automatically. May be empty, then will be created automatically airbytecontainer+timestamp"""
+ azure_blob_storage_endpoint_domain_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('azure_blob_storage_endpoint_domain_name'), 'exclude': lambda f: f is None }})
+ r"""This is Azure Blob Storage endpoint domain name. Leave default value (or leave it empty if run container from command line) to use Microsoft native from example."""
+ azure_blob_storage_output_buffer_size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('azure_blob_storage_output_buffer_size'), 'exclude': lambda f: f is None }})
+ r"""The amount of megabytes to buffer for the output stream to Azure. This will impact memory footprint on workers, but may need adjustment for performance and appropriate block size in Azure."""
+ azure_blob_storage_spill_size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('azure_blob_storage_spill_size'), 'exclude': lambda f: f is None }})
+ r"""The amount of megabytes after which the connector should spill the records in a new blob object. Make sure to configure size greater than individual records. Enter 0 if not applicable"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destination_bigquery.py b/src/sdk/models/shared/destination_bigquery.py
new file mode 100755
index 00000000..34cbc90c
--- /dev/null
+++ b/src/sdk/models/shared/destination_bigquery.py
@@ -0,0 +1,123 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class DestinationBigqueryDatasetLocationEnum(str, Enum):
+ r"""The location of the dataset. Warning: Changes made after creation will not be applied. Read more here."""
+ US = 'US'
+ EU = 'EU'
+ ASIA_EAST1 = 'asia-east1'
+ ASIA_EAST2 = 'asia-east2'
+ ASIA_NORTHEAST1 = 'asia-northeast1'
+ ASIA_NORTHEAST2 = 'asia-northeast2'
+ ASIA_NORTHEAST3 = 'asia-northeast3'
+ ASIA_SOUTH1 = 'asia-south1'
+ ASIA_SOUTH2 = 'asia-south2'
+ ASIA_SOUTHEAST1 = 'asia-southeast1'
+ ASIA_SOUTHEAST2 = 'asia-southeast2'
+ AUSTRALIA_SOUTHEAST1 = 'australia-southeast1'
+ AUSTRALIA_SOUTHEAST2 = 'australia-southeast2'
+ EUROPE_CENTRAL2 = 'europe-central2'
+ EUROPE_NORTH1 = 'europe-north1'
+ EUROPE_WEST1 = 'europe-west1'
+ EUROPE_WEST2 = 'europe-west2'
+ EUROPE_WEST3 = 'europe-west3'
+ EUROPE_WEST4 = 'europe-west4'
+ EUROPE_WEST6 = 'europe-west6'
+ NORTHAMERICA_NORTHEAST1 = 'northamerica-northeast1'
+ NORTHAMERICA_NORTHEAST2 = 'northamerica-northeast2'
+ SOUTHAMERICA_EAST1 = 'southamerica-east1'
+ SOUTHAMERICA_WEST1 = 'southamerica-west1'
+ US_CENTRAL1 = 'us-central1'
+ US_EAST1 = 'us-east1'
+ US_EAST4 = 'us-east4'
+ US_WEST1 = 'us-west1'
+ US_WEST2 = 'us-west2'
+ US_WEST3 = 'us-west3'
+ US_WEST4 = 'us-west4'
+
+class DestinationBigqueryBigqueryEnum(str, Enum):
+ BIGQUERY = 'bigquery'
+
+class DestinationBigqueryLoadingMethodGCSStagingCredentialHMACKeyCredentialTypeEnum(str, Enum):
+ HMAC_KEY = 'HMAC_KEY'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationBigqueryLoadingMethodGCSStagingCredentialHMACKey:
+ r"""An HMAC key is a type of credential and can be associated with a service account or a user account in Cloud Storage. Read more here."""
+
+ credential_type: DestinationBigqueryLoadingMethodGCSStagingCredentialHMACKeyCredentialTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credential_type') }})
+ hmac_key_access_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hmac_key_access_id') }})
+ r"""HMAC key access ID. When linked to a service account, this ID is 61 characters long; when linked to a user account, it is 24 characters long."""
+ hmac_key_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hmac_key_secret') }})
+ r"""The corresponding secret for the access ID. It is a 40-character base-64 encoded string."""
+
+class DestinationBigqueryLoadingMethodGCSStagingGCSTmpFilesAfterwardProcessingEnum(str, Enum):
+ r"""This upload method is supposed to temporary store records in GCS bucket. By this select you can chose if these records should be removed from GCS when migration has finished. The default \\"Delete all tmp files from GCS\\" value is used if not set explicitly."""
+ DELETE_ALL_TMP_FILES_FROM_GCS = 'Delete all tmp files from GCS'
+ KEEP_ALL_TMP_FILES_IN_GCS = 'Keep all tmp files in GCS'
+
+class DestinationBigqueryLoadingMethodGCSStagingMethodEnum(str, Enum):
+ GCS_STAGING = 'GCS Staging'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationBigqueryLoadingMethodGCSStaging:
+ r"""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."""
+
+ credential: Any = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credential') }})
+ r"""An HMAC key is a type of credential and can be associated with a service account or a user account in Cloud Storage. Read more here."""
+ gcs_bucket_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('gcs_bucket_name') }})
+ r"""The name of the GCS bucket. Read more here."""
+ gcs_bucket_path: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('gcs_bucket_path') }})
+ r"""Directory under the GCS bucket where data will be written."""
+ method: DestinationBigqueryLoadingMethodGCSStagingMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('method') }})
+ keep_files_in_gcs_bucket: Optional[DestinationBigqueryLoadingMethodGCSStagingGCSTmpFilesAfterwardProcessingEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('keep_files_in_gcs-bucket'), 'exclude': lambda f: f is None }})
+ r"""This upload method is supposed to temporary store records in GCS bucket. By this select you can chose if these records should be removed from GCS when migration has finished. The default \\"Delete all tmp files from GCS\\" value is used if not set explicitly."""
+
+class DestinationBigqueryLoadingMethodStandardInsertsMethodEnum(str, Enum):
+ STANDARD = 'Standard'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationBigqueryLoadingMethodStandardInserts:
+ r"""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."""
+
+ method: DestinationBigqueryLoadingMethodStandardInsertsMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('method') }})
+
+class DestinationBigqueryTransformationQueryRunTypeEnum(str, Enum):
+ r"""Interactive run type means that the query is executed as soon as possible, and these queries count towards concurrent rate limit and daily limit. Read more about interactive run type here. Batch queries are queued and started as soon as idle resources are available in the BigQuery shared resource pool, which usually occurs within a few minutes. Batch queries don’t count towards your concurrent rate limit. Read more about batch queries here. The default \\"interactive\\" value is used if not set explicitly."""
+ INTERACTIVE = 'interactive'
+ BATCH = 'batch'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationBigquery:
+ r"""The values required to configure the destination."""
+
+ dataset_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dataset_id') }})
+ r"""The default BigQuery Dataset ID that tables are replicated to if the source does not specify a namespace. Read more here."""
+ dataset_location: DestinationBigqueryDatasetLocationEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dataset_location') }})
+ r"""The location of the dataset. Warning: Changes made after creation will not be applied. Read more here."""
+ destination_type: DestinationBigqueryBigqueryEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationType') }})
+ project_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('project_id') }})
+ r"""The GCP project ID for the project containing the target BigQuery dataset. Read more here."""
+ big_query_client_buffer_size_mb: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('big_query_client_buffer_size_mb'), 'exclude': lambda f: f is None }})
+ r"""Google BigQuery client's chunk (buffer) size (MIN=1, MAX = 15) for each table. The size that will be written by a single RPC. Written data will be buffered and only flushed upon reaching this size or closing the channel. The default 15MB value is used if not set explicitly. Read more here."""
+ credentials_json: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials_json'), 'exclude': lambda f: f is None }})
+ r"""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."""
+ loading_method: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('loading_method'), 'exclude': lambda f: f is None }})
+ r"""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."""
+ transformation_priority: Optional[DestinationBigqueryTransformationQueryRunTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('transformation_priority'), 'exclude': lambda f: f is None }})
+ r"""Interactive run type means that the query is executed as soon as possible, and these queries count towards concurrent rate limit and daily limit. Read more about interactive run type here. Batch queries are queued and started as soon as idle resources are available in the BigQuery shared resource pool, which usually occurs within a few minutes. Batch queries don’t count towards your concurrent rate limit. Read more about batch queries here. The default \\"interactive\\" value is used if not set explicitly."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destination_bigquery_denormalized.py b/src/sdk/models/shared/destination_bigquery_denormalized.py
new file mode 100755
index 00000000..0b68ca60
--- /dev/null
+++ b/src/sdk/models/shared/destination_bigquery_denormalized.py
@@ -0,0 +1,116 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class DestinationBigqueryDenormalizedDatasetLocationEnum(str, Enum):
+ r"""The location of the dataset. Warning: Changes made after creation will not be applied. The default \\"US\\" value is used if not set explicitly. Read more here."""
+ US = 'US'
+ EU = 'EU'
+ ASIA_EAST1 = 'asia-east1'
+ ASIA_EAST2 = 'asia-east2'
+ ASIA_NORTHEAST1 = 'asia-northeast1'
+ ASIA_NORTHEAST2 = 'asia-northeast2'
+ ASIA_NORTHEAST3 = 'asia-northeast3'
+ ASIA_SOUTH1 = 'asia-south1'
+ ASIA_SOUTH2 = 'asia-south2'
+ ASIA_SOUTHEAST1 = 'asia-southeast1'
+ ASIA_SOUTHEAST2 = 'asia-southeast2'
+ AUSTRALIA_SOUTHEAST1 = 'australia-southeast1'
+ AUSTRALIA_SOUTHEAST2 = 'australia-southeast2'
+ EUROPE_CENTRAL2 = 'europe-central2'
+ EUROPE_NORTH1 = 'europe-north1'
+ EUROPE_WEST1 = 'europe-west1'
+ EUROPE_WEST2 = 'europe-west2'
+ EUROPE_WEST3 = 'europe-west3'
+ EUROPE_WEST4 = 'europe-west4'
+ EUROPE_WEST6 = 'europe-west6'
+ NORTHAMERICA_NORTHEAST1 = 'northamerica-northeast1'
+ NORTHAMERICA_NORTHEAST2 = 'northamerica-northeast2'
+ SOUTHAMERICA_EAST1 = 'southamerica-east1'
+ SOUTHAMERICA_WEST1 = 'southamerica-west1'
+ US_CENTRAL1 = 'us-central1'
+ US_EAST1 = 'us-east1'
+ US_EAST4 = 'us-east4'
+ US_WEST1 = 'us-west1'
+ US_WEST2 = 'us-west2'
+ US_WEST3 = 'us-west3'
+ US_WEST4 = 'us-west4'
+
+class DestinationBigqueryDenormalizedBigqueryDenormalizedEnum(str, Enum):
+ BIGQUERY_DENORMALIZED = 'bigquery-denormalized'
+
+class DestinationBigqueryDenormalizedLoadingMethodGCSStagingCredentialHMACKeyCredentialTypeEnum(str, Enum):
+ HMAC_KEY = 'HMAC_KEY'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationBigqueryDenormalizedLoadingMethodGCSStagingCredentialHMACKey:
+ r"""An HMAC key is a type of credential and can be associated with a service account or a user account in Cloud Storage. Read more here."""
+
+ credential_type: DestinationBigqueryDenormalizedLoadingMethodGCSStagingCredentialHMACKeyCredentialTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credential_type') }})
+ hmac_key_access_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hmac_key_access_id') }})
+ r"""HMAC key access ID. When linked to a service account, this ID is 61 characters long; when linked to a user account, it is 24 characters long."""
+ hmac_key_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hmac_key_secret') }})
+ r"""The corresponding secret for the access ID. It is a 40-character base-64 encoded string."""
+
+class DestinationBigqueryDenormalizedLoadingMethodGCSStagingGCSTmpFilesAfterwardProcessingEnum(str, Enum):
+ r"""This upload method is supposed to temporary store records in GCS bucket. By this select you can chose if these records should be removed from GCS when migration has finished. The default \\"Delete all tmp files from GCS\\" value is used if not set explicitly."""
+ DELETE_ALL_TMP_FILES_FROM_GCS = 'Delete all tmp files from GCS'
+ KEEP_ALL_TMP_FILES_IN_GCS = 'Keep all tmp files in GCS'
+
+class DestinationBigqueryDenormalizedLoadingMethodGCSStagingMethodEnum(str, Enum):
+ GCS_STAGING = 'GCS Staging'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationBigqueryDenormalizedLoadingMethodGCSStaging:
+ r"""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."""
+
+ credential: Any = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credential') }})
+ r"""An HMAC key is a type of credential and can be associated with a service account or a user account in Cloud Storage. Read more here."""
+ gcs_bucket_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('gcs_bucket_name') }})
+ r"""The name of the GCS bucket. Read more here."""
+ gcs_bucket_path: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('gcs_bucket_path') }})
+ r"""Directory under the GCS bucket where data will be written. Read more here."""
+ method: DestinationBigqueryDenormalizedLoadingMethodGCSStagingMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('method') }})
+ keep_files_in_gcs_bucket: Optional[DestinationBigqueryDenormalizedLoadingMethodGCSStagingGCSTmpFilesAfterwardProcessingEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('keep_files_in_gcs-bucket'), 'exclude': lambda f: f is None }})
+ r"""This upload method is supposed to temporary store records in GCS bucket. By this select you can chose if these records should be removed from GCS when migration has finished. The default \\"Delete all tmp files from GCS\\" value is used if not set explicitly."""
+
+class DestinationBigqueryDenormalizedLoadingMethodStandardInsertsMethodEnum(str, Enum):
+ STANDARD = 'Standard'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationBigqueryDenormalizedLoadingMethodStandardInserts:
+ r"""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."""
+
+ method: DestinationBigqueryDenormalizedLoadingMethodStandardInsertsMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('method') }})
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationBigqueryDenormalized:
+ r"""The values required to configure the destination."""
+
+ dataset_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dataset_id') }})
+ r"""The default BigQuery Dataset ID that tables are replicated to if the source does not specify a namespace. Read more here."""
+ destination_type: DestinationBigqueryDenormalizedBigqueryDenormalizedEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationType') }})
+ project_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('project_id') }})
+ r"""The GCP project ID for the project containing the target BigQuery dataset. Read more here."""
+ big_query_client_buffer_size_mb: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('big_query_client_buffer_size_mb'), 'exclude': lambda f: f is None }})
+ r"""Google BigQuery client's chunk (buffer) size (MIN=1, MAX = 15) for each table. The size that will be written by a single RPC. Written data will be buffered and only flushed upon reaching this size or closing the channel. The default 15MB value is used if not set explicitly. Read more here."""
+ credentials_json: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials_json'), 'exclude': lambda f: f is None }})
+ r"""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."""
+ dataset_location: Optional[DestinationBigqueryDenormalizedDatasetLocationEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dataset_location'), 'exclude': lambda f: f is None }})
+ r"""The location of the dataset. Warning: Changes made after creation will not be applied. The default \\"US\\" value is used if not set explicitly. Read more here."""
+ loading_method: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('loading_method'), 'exclude': lambda f: f is None }})
+ r"""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."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destination_cassandra.py b/src/sdk/models/shared/destination_cassandra.py
new file mode 100755
index 00000000..1628f93a
--- /dev/null
+++ b/src/sdk/models/shared/destination_cassandra.py
@@ -0,0 +1,34 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class DestinationCassandraCassandraEnum(str, Enum):
+ CASSANDRA = 'cassandra'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationCassandra:
+ r"""The values required to configure the destination."""
+
+ address: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('address') }})
+ r"""Address to connect to."""
+ destination_type: DestinationCassandraCassandraEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationType') }})
+ keyspace: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('keyspace') }})
+ r"""Default Cassandra keyspace to create data in."""
+ password: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password') }})
+ r"""Password associated with Cassandra."""
+ port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('port') }})
+ r"""Port of Cassandra."""
+ username: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('username') }})
+ r"""Username to use to access Cassandra."""
+ datacenter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('datacenter'), 'exclude': lambda f: f is None }})
+ r"""Datacenter of the cassandra cluster."""
+ replication: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('replication'), 'exclude': lambda f: f is None }})
+ r"""Indicates to how many nodes the data should be replicated to."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destination_clickhouse.py b/src/sdk/models/shared/destination_clickhouse.py
new file mode 100755
index 00000000..591121e0
--- /dev/null
+++ b/src/sdk/models/shared/destination_clickhouse.py
@@ -0,0 +1,89 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class DestinationClickhouseClickhouseEnum(str, Enum):
+ CLICKHOUSE = 'clickhouse'
+
+class DestinationClickhouseTunnelMethodPasswordAuthenticationTunnelMethodEnum(str, Enum):
+ r"""Connect through a jump server tunnel host using username and password authentication"""
+ SSH_PASSWORD_AUTH = 'SSH_PASSWORD_AUTH'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationClickhouseTunnelMethodPasswordAuthentication:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ tunnel_host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_host') }})
+ r"""Hostname of the jump server host that allows inbound ssh tunnel."""
+ tunnel_method: DestinationClickhouseTunnelMethodPasswordAuthenticationTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""Connect through a jump server tunnel host using username and password authentication"""
+ tunnel_port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_port') }})
+ r"""Port on the proxy/jump server that accepts inbound ssh connections."""
+ tunnel_user: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user') }})
+ r"""OS-level username for logging into the jump server host"""
+ tunnel_user_password: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user_password') }})
+ r"""OS-level password for logging into the jump server host"""
+
+class DestinationClickhouseTunnelMethodSSHKeyAuthenticationTunnelMethodEnum(str, Enum):
+ r"""Connect through a jump server tunnel host using username and ssh key"""
+ SSH_KEY_AUTH = 'SSH_KEY_AUTH'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationClickhouseTunnelMethodSSHKeyAuthentication:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ ssh_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ssh_key') }})
+ r"""OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )"""
+ tunnel_host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_host') }})
+ r"""Hostname of the jump server host that allows inbound ssh tunnel."""
+ tunnel_method: DestinationClickhouseTunnelMethodSSHKeyAuthenticationTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""Connect through a jump server tunnel host using username and ssh key"""
+ tunnel_port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_port') }})
+ r"""Port on the proxy/jump server that accepts inbound ssh connections."""
+ tunnel_user: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user') }})
+ r"""OS-level username for logging into the jump server host."""
+
+class DestinationClickhouseTunnelMethodNoTunnelTunnelMethodEnum(str, Enum):
+ r"""No ssh tunnel needed to connect to database"""
+ NO_TUNNEL = 'NO_TUNNEL'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationClickhouseTunnelMethodNoTunnel:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ tunnel_method: DestinationClickhouseTunnelMethodNoTunnelTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""No ssh tunnel needed to connect to database"""
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationClickhouse:
+ r"""The values required to configure the destination."""
+
+ database: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('database') }})
+ r"""Name of the database."""
+ destination_type: DestinationClickhouseClickhouseEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationType') }})
+ host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('host') }})
+ r"""Hostname of the database."""
+ port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('port') }})
+ r"""HTTP port of the database."""
+ username: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('username') }})
+ r"""Username to use to access the database."""
+ jdbc_url_params: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('jdbc_url_params'), 'exclude': lambda f: f is None }})
+ r"""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)."""
+ password: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password'), 'exclude': lambda f: f is None }})
+ r"""Password associated with the username."""
+ tunnel_method: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method'), 'exclude': lambda f: f is None }})
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destination_convex.py b/src/sdk/models/shared/destination_convex.py
new file mode 100755
index 00000000..89e93fc5
--- /dev/null
+++ b/src/sdk/models/shared/destination_convex.py
@@ -0,0 +1,23 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class DestinationConvexConvexEnum(str, Enum):
+ CONVEX = 'convex'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationConvex:
+ r"""The values required to configure the destination."""
+
+ access_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_key') }})
+ r"""API access key used to send data to a Convex deployment."""
+ deployment_url: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deployment_url') }})
+ r"""URL of the Convex deployment that is the destination"""
+ destination_type: DestinationConvexConvexEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destination_databend.py b/src/sdk/models/shared/destination_databend.py
new file mode 100755
index 00000000..7bde9be3
--- /dev/null
+++ b/src/sdk/models/shared/destination_databend.py
@@ -0,0 +1,32 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class DestinationDatabendDatabendEnum(str, Enum):
+ DATABEND = 'databend'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationDatabend:
+ r"""The values required to configure the destination."""
+
+ database: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('database') }})
+ r"""Name of the database."""
+ destination_type: DestinationDatabendDatabendEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationType') }})
+ host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('host') }})
+ r"""Hostname of the database."""
+ username: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('username') }})
+ r"""Username to use to access the database."""
+ password: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password'), 'exclude': lambda f: f is None }})
+ r"""Password associated with the username."""
+ port: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('port'), 'exclude': lambda f: f is None }})
+ r"""Port of the database."""
+ table: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('table'), 'exclude': lambda f: f is None }})
+ r"""The default table was written to."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destination_databricks.py b/src/sdk/models/shared/destination_databricks.py
new file mode 100755
index 00000000..dcc2e2ae
--- /dev/null
+++ b/src/sdk/models/shared/destination_databricks.py
@@ -0,0 +1,120 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class DestinationDatabricksDataSourceAzureBlobStorageDataSourceTypeEnum(str, Enum):
+ AZURE_BLOB_STORAGE = 'AZURE_BLOB_STORAGE'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationDatabricksDataSourceAzureBlobStorage:
+ r"""Storage on which the delta lake is built."""
+
+ azure_blob_storage_account_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('azure_blob_storage_account_name') }})
+ r"""The account's name of the Azure Blob Storage."""
+ azure_blob_storage_container_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('azure_blob_storage_container_name') }})
+ r"""The name of the Azure blob storage container."""
+ azure_blob_storage_sas_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('azure_blob_storage_sas_token') }})
+ r"""Shared access signature (SAS) token to grant limited access to objects in your storage account."""
+ data_source_type: DestinationDatabricksDataSourceAzureBlobStorageDataSourceTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data_source_type') }})
+ azure_blob_storage_endpoint_domain_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('azure_blob_storage_endpoint_domain_name'), 'exclude': lambda f: f is None }})
+ r"""This is Azure Blob Storage endpoint domain name. Leave default value (or leave it empty if run container from command line) to use Microsoft native from example."""
+
+class DestinationDatabricksDataSourceAmazonS3DataSourceTypeEnum(str, Enum):
+ S3_STORAGE = 'S3_STORAGE'
+
+class DestinationDatabricksDataSourceAmazonS3S3BucketRegionEnum(str, Enum):
+ r"""The region of the S3 staging bucket to use if utilising a copy strategy."""
+ UNKNOWN = ''
+ US_EAST_1 = 'us-east-1'
+ US_EAST_2 = 'us-east-2'
+ US_WEST_1 = 'us-west-1'
+ US_WEST_2 = 'us-west-2'
+ AF_SOUTH_1 = 'af-south-1'
+ AP_EAST_1 = 'ap-east-1'
+ AP_SOUTH_1 = 'ap-south-1'
+ AP_NORTHEAST_1 = 'ap-northeast-1'
+ AP_NORTHEAST_2 = 'ap-northeast-2'
+ AP_NORTHEAST_3 = 'ap-northeast-3'
+ AP_SOUTHEAST_1 = 'ap-southeast-1'
+ AP_SOUTHEAST_2 = 'ap-southeast-2'
+ CA_CENTRAL_1 = 'ca-central-1'
+ CN_NORTH_1 = 'cn-north-1'
+ CN_NORTHWEST_1 = 'cn-northwest-1'
+ EU_CENTRAL_1 = 'eu-central-1'
+ EU_NORTH_1 = 'eu-north-1'
+ EU_SOUTH_1 = 'eu-south-1'
+ EU_WEST_1 = 'eu-west-1'
+ EU_WEST_2 = 'eu-west-2'
+ EU_WEST_3 = 'eu-west-3'
+ SA_EAST_1 = 'sa-east-1'
+ ME_SOUTH_1 = 'me-south-1'
+ US_GOV_EAST_1 = 'us-gov-east-1'
+ US_GOV_WEST_1 = 'us-gov-west-1'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationDatabricksDataSourceAmazonS3:
+ r"""Storage on which the delta lake is built."""
+
+ data_source_type: DestinationDatabricksDataSourceAmazonS3DataSourceTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data_source_type') }})
+ s3_access_key_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('s3_access_key_id') }})
+ r"""The Access Key Id granting allow one to access the above S3 staging bucket. Airbyte requires Read and Write permissions to the given bucket."""
+ s3_bucket_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('s3_bucket_name') }})
+ r"""The name of the S3 bucket to use for intermittent staging of the data."""
+ s3_bucket_path: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('s3_bucket_path') }})
+ r"""The directory under the S3 bucket where data will be written."""
+ s3_bucket_region: DestinationDatabricksDataSourceAmazonS3S3BucketRegionEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('s3_bucket_region') }})
+ r"""The region of the S3 staging bucket to use if utilising a copy strategy."""
+ s3_secret_access_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('s3_secret_access_key') }})
+ r"""The corresponding secret to the above access key id."""
+ file_name_pattern: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('file_name_pattern'), 'exclude': lambda f: f is None }})
+ r"""The pattern allows you to set the file-name format for the S3 staging file(s)"""
+
+class DestinationDatabricksDataSourceRecommendedManagedTablesDataSourceTypeEnum(str, Enum):
+ MANAGED_TABLES_STORAGE = 'MANAGED_TABLES_STORAGE'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationDatabricksDataSourceRecommendedManagedTables:
+ r"""Storage on which the delta lake is built."""
+
+ data_source_type: DestinationDatabricksDataSourceRecommendedManagedTablesDataSourceTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data_source_type') }})
+
+class DestinationDatabricksDatabricksEnum(str, Enum):
+ DATABRICKS = 'databricks'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationDatabricks:
+ r"""The values required to configure the destination."""
+
+ accept_terms: bool = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('accept_terms') }})
+ r"""You must agree to the Databricks JDBC Driver Terms & Conditions to use this connector."""
+ data_source: Any = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data_source') }})
+ r"""Storage on which the delta lake is built."""
+ databricks_http_path: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('databricks_http_path') }})
+ r"""Databricks Cluster HTTP Path."""
+ databricks_personal_access_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('databricks_personal_access_token') }})
+ r"""Databricks Personal Access Token for making authenticated requests."""
+ databricks_server_hostname: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('databricks_server_hostname') }})
+ r"""Databricks Cluster Server Hostname."""
+ destination_type: DestinationDatabricksDatabricksEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationType') }})
+ database: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('database'), 'exclude': lambda f: f is None }})
+ r"""The name of the catalog. If not specified otherwise, the \\"hive_metastore\\" will be used."""
+ databricks_port: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('databricks_port'), 'exclude': lambda f: f is None }})
+ r"""Databricks Cluster Port."""
+ purge_staging_data: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('purge_staging_data'), 'exclude': lambda f: f is None }})
+ r"""Default to 'true'. Switch it to 'false' for debugging purpose."""
+ schema: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('schema'), 'exclude': lambda f: f is None }})
+ r"""The default schema tables are written. If not specified otherwise, the \\"default\\" will be used."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destination_dynamodb.py b/src/sdk/models/shared/destination_dynamodb.py
new file mode 100755
index 00000000..5b16590c
--- /dev/null
+++ b/src/sdk/models/shared/destination_dynamodb.py
@@ -0,0 +1,59 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class DestinationDynamodbDynamodbEnum(str, Enum):
+ DYNAMODB = 'dynamodb'
+
+class DestinationDynamodbDynamoDBRegionEnum(str, Enum):
+ r"""The region of the DynamoDB."""
+ UNKNOWN = ''
+ US_EAST_1 = 'us-east-1'
+ US_EAST_2 = 'us-east-2'
+ US_WEST_1 = 'us-west-1'
+ US_WEST_2 = 'us-west-2'
+ AF_SOUTH_1 = 'af-south-1'
+ AP_EAST_1 = 'ap-east-1'
+ AP_SOUTH_1 = 'ap-south-1'
+ AP_NORTHEAST_1 = 'ap-northeast-1'
+ AP_NORTHEAST_2 = 'ap-northeast-2'
+ AP_NORTHEAST_3 = 'ap-northeast-3'
+ AP_SOUTHEAST_1 = 'ap-southeast-1'
+ AP_SOUTHEAST_2 = 'ap-southeast-2'
+ CA_CENTRAL_1 = 'ca-central-1'
+ CN_NORTH_1 = 'cn-north-1'
+ CN_NORTHWEST_1 = 'cn-northwest-1'
+ EU_CENTRAL_1 = 'eu-central-1'
+ EU_NORTH_1 = 'eu-north-1'
+ EU_SOUTH_1 = 'eu-south-1'
+ EU_WEST_1 = 'eu-west-1'
+ EU_WEST_2 = 'eu-west-2'
+ EU_WEST_3 = 'eu-west-3'
+ SA_EAST_1 = 'sa-east-1'
+ ME_SOUTH_1 = 'me-south-1'
+ US_GOV_EAST_1 = 'us-gov-east-1'
+ US_GOV_WEST_1 = 'us-gov-west-1'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationDynamodb:
+ r"""The values required to configure the destination."""
+
+ access_key_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_key_id') }})
+ r"""The access key id to access the DynamoDB. Airbyte requires Read and Write permissions to the DynamoDB."""
+ destination_type: DestinationDynamodbDynamodbEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationType') }})
+ dynamodb_region: DestinationDynamodbDynamoDBRegionEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dynamodb_region') }})
+ r"""The region of the DynamoDB."""
+ dynamodb_table_name_prefix: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dynamodb_table_name_prefix') }})
+ r"""The prefix to use when naming DynamoDB tables."""
+ secret_access_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('secret_access_key') }})
+ r"""The corresponding secret to the access key id."""
+ dynamodb_endpoint: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dynamodb_endpoint'), 'exclude': lambda f: f is None }})
+ r"""This is your DynamoDB endpoint url.(if you are working with AWS DynamoDB, just leave empty)."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destination_elasticsearch.py b/src/sdk/models/shared/destination_elasticsearch.py
new file mode 100755
index 00000000..b00c2ab1
--- /dev/null
+++ b/src/sdk/models/shared/destination_elasticsearch.py
@@ -0,0 +1,58 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class DestinationElasticsearchAuthenticationMethodUsernamePasswordMethodEnum(str, Enum):
+ BASIC = 'basic'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationElasticsearchAuthenticationMethodUsernamePassword:
+ r"""Basic auth header with a username and password"""
+
+ method: DestinationElasticsearchAuthenticationMethodUsernamePasswordMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('method') }})
+ password: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password') }})
+ r"""Basic auth password to access a secure Elasticsearch server"""
+ username: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('username') }})
+ r"""Basic auth username to access a secure Elasticsearch server"""
+
+class DestinationElasticsearchAuthenticationMethodAPIKeySecretMethodEnum(str, Enum):
+ SECRET = 'secret'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationElasticsearchAuthenticationMethodAPIKeySecret:
+ r"""Use a api key and secret combination to authenticate"""
+
+ api_key_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('apiKeyId') }})
+ r"""The Key ID to used when accessing an enterprise Elasticsearch instance."""
+ api_key_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('apiKeySecret') }})
+ r"""The secret associated with the API Key ID."""
+ method: DestinationElasticsearchAuthenticationMethodAPIKeySecretMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('method') }})
+
+class DestinationElasticsearchElasticsearchEnum(str, Enum):
+ ELASTICSEARCH = 'elasticsearch'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationElasticsearch:
+ r"""The values required to configure the destination."""
+
+ destination_type: DestinationElasticsearchElasticsearchEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationType') }})
+ endpoint: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('endpoint') }})
+ r"""The full url of the Elasticsearch server"""
+ authentication_method: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('authenticationMethod'), 'exclude': lambda f: f is None }})
+ r"""The type of authentication to be used"""
+ ca_certificate: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ca_certificate'), 'exclude': lambda f: f is None }})
+ r"""CA certificate"""
+ upsert: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('upsert'), 'exclude': lambda f: f is None }})
+ r"""If a primary key identifier is defined in the source, an upsert will be performed using the primary key value as the elasticsearch doc id. Does not support composite primary keys."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destination_firebolt.py b/src/sdk/models/shared/destination_firebolt.py
new file mode 100755
index 00000000..79061516
--- /dev/null
+++ b/src/sdk/models/shared/destination_firebolt.py
@@ -0,0 +1,64 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class DestinationFireboltFireboltEnum(str, Enum):
+ FIREBOLT = 'firebolt'
+
+class DestinationFireboltLoadingMethodExternalTableViaS3MethodEnum(str, Enum):
+ S3 = 'S3'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationFireboltLoadingMethodExternalTableViaS3:
+ r"""Loading method used to select the way data will be uploaded to Firebolt"""
+
+ aws_key_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('aws_key_id') }})
+ r"""AWS access key granting read and write access to S3."""
+ aws_key_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('aws_key_secret') }})
+ r"""Corresponding secret part of the AWS Key"""
+ method: DestinationFireboltLoadingMethodExternalTableViaS3MethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('method') }})
+ s3_bucket: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('s3_bucket') }})
+ r"""The name of the S3 bucket."""
+ s3_region: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('s3_region') }})
+ r"""Region name of the S3 bucket."""
+
+class DestinationFireboltLoadingMethodSQLInsertsMethodEnum(str, Enum):
+ SQL = 'SQL'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationFireboltLoadingMethodSQLInserts:
+ r"""Loading method used to select the way data will be uploaded to Firebolt"""
+
+ method: DestinationFireboltLoadingMethodSQLInsertsMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('method') }})
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationFirebolt:
+ r"""The values required to configure the destination."""
+
+ database: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('database') }})
+ r"""The database to connect to."""
+ destination_type: DestinationFireboltFireboltEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationType') }})
+ password: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password') }})
+ r"""Firebolt password."""
+ username: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('username') }})
+ r"""Firebolt email address you use to login."""
+ account: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('account'), 'exclude': lambda f: f is None }})
+ r"""Firebolt account to login."""
+ engine: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('engine'), 'exclude': lambda f: f is None }})
+ r"""Engine name or url to connect to."""
+ host: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('host'), 'exclude': lambda f: f is None }})
+ r"""The host name of your Firebolt database."""
+ loading_method: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('loading_method'), 'exclude': lambda f: f is None }})
+ r"""Loading method used to select the way data will be uploaded to Firebolt"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destination_firestore.py b/src/sdk/models/shared/destination_firestore.py
new file mode 100755
index 00000000..42338194
--- /dev/null
+++ b/src/sdk/models/shared/destination_firestore.py
@@ -0,0 +1,24 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class DestinationFirestoreFirestoreEnum(str, Enum):
+ FIRESTORE = 'firestore'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationFirestore:
+ r"""The values required to configure the destination."""
+
+ destination_type: DestinationFirestoreFirestoreEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationType') }})
+ project_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('project_id') }})
+ r"""The GCP project ID for the project containing the target BigQuery dataset."""
+ credentials_json: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials_json'), 'exclude': lambda f: f is None }})
+ r"""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."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destination_gcs.py b/src/sdk/models/shared/destination_gcs.py
new file mode 100755
index 00000000..4dd59710
--- /dev/null
+++ b/src/sdk/models/shared/destination_gcs.py
@@ -0,0 +1,280 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class DestinationGcsCredentialHMACKeyCredentialTypeEnum(str, Enum):
+ HMAC_KEY = 'HMAC_KEY'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationGcsCredentialHMACKey:
+ r"""An HMAC key is a type of credential and can be associated with a service account or a user account in Cloud Storage. Read more here."""
+
+ credential_type: DestinationGcsCredentialHMACKeyCredentialTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credential_type') }})
+ hmac_key_access_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hmac_key_access_id') }})
+ r"""When linked to a service account, this ID is 61 characters long; when linked to a user account, it is 24 characters long. Read more here."""
+ hmac_key_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hmac_key_secret') }})
+ r"""The corresponding secret for the access ID. It is a 40-character base-64 encoded string. Read more here."""
+
+class DestinationGcsGcsEnum(str, Enum):
+ GCS = 'gcs'
+
+class DestinationGcsFormatParquetColumnarStorageCompressionCodecEnum(str, Enum):
+ r"""The compression algorithm used to compress data pages."""
+ UNCOMPRESSED = 'UNCOMPRESSED'
+ SNAPPY = 'SNAPPY'
+ GZIP = 'GZIP'
+ LZO = 'LZO'
+ BROTLI = 'BROTLI'
+ LZ4 = 'LZ4'
+ ZSTD = 'ZSTD'
+
+class DestinationGcsFormatParquetColumnarStorageFormatTypeEnum(str, Enum):
+ PARQUET = 'Parquet'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationGcsFormatParquetColumnarStorage:
+ r"""Output data format. One of the following formats must be selected - AVRO format, PARQUET format, CSV format, or JSONL format."""
+
+ format_type: DestinationGcsFormatParquetColumnarStorageFormatTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('format_type') }})
+ block_size_mb: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('block_size_mb'), 'exclude': lambda f: f is None }})
+ r"""This is the size of a row group being buffered in memory. It limits the memory usage when writing. Larger values will improve the IO when reading, but consume more memory when writing. Default: 128 MB."""
+ compression_codec: Optional[DestinationGcsFormatParquetColumnarStorageCompressionCodecEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('compression_codec'), 'exclude': lambda f: f is None }})
+ r"""The compression algorithm used to compress data pages."""
+ dictionary_encoding: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dictionary_encoding'), 'exclude': lambda f: f is None }})
+ r"""Default: true."""
+ dictionary_page_size_kb: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dictionary_page_size_kb'), 'exclude': lambda f: f is None }})
+ r"""There is one dictionary page per column per row group when dictionary encoding is used. The dictionary page size works like the page size but for dictionary. Default: 1024 KB."""
+ max_padding_size_mb: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('max_padding_size_mb'), 'exclude': lambda f: f is None }})
+ r"""Maximum size allowed as padding to align row groups. This is also the minimum size of a row group. Default: 8 MB."""
+ page_size_kb: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('page_size_kb'), 'exclude': lambda f: f is None }})
+ r"""The page size is for compression. A block is composed of pages. A page is the smallest unit that must be read fully to access a single record. If this value is too small, the compression will deteriorate. Default: 1024 KB."""
+
+class DestinationGcsFormatJSONLinesNewlineDelimitedJSONCompressionGZIPCompressionTypeEnum(str, Enum):
+ GZIP = 'GZIP'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationGcsFormatJSONLinesNewlineDelimitedJSONCompressionGZIP:
+ r"""Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \\".jsonl.gz\\")."""
+
+ compression_type: Optional[DestinationGcsFormatJSONLinesNewlineDelimitedJSONCompressionGZIPCompressionTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('compression_type'), 'exclude': lambda f: f is None }})
+
+class DestinationGcsFormatJSONLinesNewlineDelimitedJSONCompressionNoCompressionCompressionTypeEnum(str, Enum):
+ NO_COMPRESSION = 'No Compression'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationGcsFormatJSONLinesNewlineDelimitedJSONCompressionNoCompression:
+ r"""Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \\".jsonl.gz\\")."""
+
+ compression_type: Optional[DestinationGcsFormatJSONLinesNewlineDelimitedJSONCompressionNoCompressionCompressionTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('compression_type'), 'exclude': lambda f: f is None }})
+
+class DestinationGcsFormatJSONLinesNewlineDelimitedJSONFormatTypeEnum(str, Enum):
+ JSONL = 'JSONL'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationGcsFormatJSONLinesNewlineDelimitedJSON:
+ r"""Output data format. One of the following formats must be selected - AVRO format, PARQUET format, CSV format, or JSONL format."""
+
+ format_type: DestinationGcsFormatJSONLinesNewlineDelimitedJSONFormatTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('format_type') }})
+ compression: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('compression'), 'exclude': lambda f: f is None }})
+ r"""Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \\".jsonl.gz\\")."""
+
+class DestinationGcsFormatCSVCommaSeparatedValuesCompressionGZIPCompressionTypeEnum(str, Enum):
+ GZIP = 'GZIP'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationGcsFormatCSVCommaSeparatedValuesCompressionGZIP:
+ r"""Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \\".csv.gz\\")."""
+
+ compression_type: Optional[DestinationGcsFormatCSVCommaSeparatedValuesCompressionGZIPCompressionTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('compression_type'), 'exclude': lambda f: f is None }})
+
+class DestinationGcsFormatCSVCommaSeparatedValuesCompressionNoCompressionCompressionTypeEnum(str, Enum):
+ NO_COMPRESSION = 'No Compression'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationGcsFormatCSVCommaSeparatedValuesCompressionNoCompression:
+ r"""Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \\".csv.gz\\")."""
+
+ compression_type: Optional[DestinationGcsFormatCSVCommaSeparatedValuesCompressionNoCompressionCompressionTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('compression_type'), 'exclude': lambda f: f is None }})
+
+class DestinationGcsFormatCSVCommaSeparatedValuesNormalizationEnum(str, Enum):
+ r"""Whether the input JSON data should be normalized (flattened) in the output CSV. Please refer to docs for details."""
+ NO_FLATTENING = 'No flattening'
+ ROOT_LEVEL_FLATTENING = 'Root level flattening'
+
+class DestinationGcsFormatCSVCommaSeparatedValuesFormatTypeEnum(str, Enum):
+ CSV = 'CSV'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationGcsFormatCSVCommaSeparatedValues:
+ r"""Output data format. One of the following formats must be selected - AVRO format, PARQUET format, CSV format, or JSONL format."""
+
+ format_type: DestinationGcsFormatCSVCommaSeparatedValuesFormatTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('format_type') }})
+ compression: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('compression'), 'exclude': lambda f: f is None }})
+ r"""Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \\".csv.gz\\")."""
+ flattening: Optional[DestinationGcsFormatCSVCommaSeparatedValuesNormalizationEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('flattening'), 'exclude': lambda f: f is None }})
+ r"""Whether the input JSON data should be normalized (flattened) in the output CSV. Please refer to docs for details."""
+
+class DestinationGcsFormatAvroApacheAvroCompressionCodecSnappyCodecEnum(str, Enum):
+ SNAPPY = 'snappy'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationGcsFormatAvroApacheAvroCompressionCodecSnappy:
+ r"""The compression algorithm used to compress data. Default to no compression."""
+
+ codec: DestinationGcsFormatAvroApacheAvroCompressionCodecSnappyCodecEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('codec') }})
+
+class DestinationGcsFormatAvroApacheAvroCompressionCodecZstandardCodecEnum(str, Enum):
+ ZSTANDARD = 'zstandard'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationGcsFormatAvroApacheAvroCompressionCodecZstandard:
+ r"""The compression algorithm used to compress data. Default to no compression."""
+
+ codec: DestinationGcsFormatAvroApacheAvroCompressionCodecZstandardCodecEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('codec') }})
+ compression_level: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('compression_level'), 'exclude': lambda f: f is None }})
+ r"""Negative levels are 'fast' modes akin to lz4 or snappy, levels above 9 are generally for archival purposes, and levels above 18 use a lot of memory."""
+ include_checksum: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('include_checksum'), 'exclude': lambda f: f is None }})
+ r"""If true, include a checksum with each data block."""
+
+class DestinationGcsFormatAvroApacheAvroCompressionCodecXzCodecEnum(str, Enum):
+ XZ = 'xz'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationGcsFormatAvroApacheAvroCompressionCodecXz:
+ r"""The compression algorithm used to compress data. Default to no compression."""
+
+ codec: DestinationGcsFormatAvroApacheAvroCompressionCodecXzCodecEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('codec') }})
+ compression_level: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('compression_level'), 'exclude': lambda f: f is None }})
+ r"""The presets 0-3 are fast presets with medium compression. The presets 4-6 are fairly slow presets with high compression. The default preset is 6. The presets 7-9 are like the preset 6 but use bigger dictionaries and have higher compressor and decompressor memory requirements. Unless the uncompressed size of the file exceeds 8 MiB, 16 MiB, or 32 MiB, it is waste of memory to use the presets 7, 8, or 9, respectively. Read more here for details."""
+
+class DestinationGcsFormatAvroApacheAvroCompressionCodecBzip2CodecEnum(str, Enum):
+ BZIP2 = 'bzip2'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationGcsFormatAvroApacheAvroCompressionCodecBzip2:
+ r"""The compression algorithm used to compress data. Default to no compression."""
+
+ codec: DestinationGcsFormatAvroApacheAvroCompressionCodecBzip2CodecEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('codec') }})
+
+class DestinationGcsFormatAvroApacheAvroCompressionCodecDeflateCodecEnum(str, Enum):
+ DEFLATE = 'Deflate'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationGcsFormatAvroApacheAvroCompressionCodecDeflate:
+ r"""The compression algorithm used to compress data. Default to no compression."""
+
+ codec: DestinationGcsFormatAvroApacheAvroCompressionCodecDeflateCodecEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('codec') }})
+ compression_level: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('compression_level'), 'exclude': lambda f: f is None }})
+ r"""0: no compression & fastest, 9: best compression & slowest."""
+
+class DestinationGcsFormatAvroApacheAvroCompressionCodecNoCompressionCodecEnum(str, Enum):
+ NO_COMPRESSION = 'no compression'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationGcsFormatAvroApacheAvroCompressionCodecNoCompression:
+ r"""The compression algorithm used to compress data. Default to no compression."""
+
+ codec: DestinationGcsFormatAvroApacheAvroCompressionCodecNoCompressionCodecEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('codec') }})
+
+class DestinationGcsFormatAvroApacheAvroFormatTypeEnum(str, Enum):
+ AVRO = 'Avro'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationGcsFormatAvroApacheAvro:
+ r"""Output data format. One of the following formats must be selected - AVRO format, PARQUET format, CSV format, or JSONL format."""
+
+ compression_codec: Any = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('compression_codec') }})
+ r"""The compression algorithm used to compress data. Default to no compression."""
+ format_type: DestinationGcsFormatAvroApacheAvroFormatTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('format_type') }})
+
+class DestinationGCSGCSBucketRegionEnum(str, Enum):
+ r"""Select a Region of the GCS Bucket. Read more here."""
+ NORTHAMERICA_NORTHEAST1 = 'northamerica-northeast1'
+ NORTHAMERICA_NORTHEAST2 = 'northamerica-northeast2'
+ US_CENTRAL1 = 'us-central1'
+ US_EAST1 = 'us-east1'
+ US_EAST4 = 'us-east4'
+ US_WEST1 = 'us-west1'
+ US_WEST2 = 'us-west2'
+ US_WEST3 = 'us-west3'
+ US_WEST4 = 'us-west4'
+ SOUTHAMERICA_EAST1 = 'southamerica-east1'
+ SOUTHAMERICA_WEST1 = 'southamerica-west1'
+ EUROPE_CENTRAL2 = 'europe-central2'
+ EUROPE_NORTH1 = 'europe-north1'
+ EUROPE_WEST1 = 'europe-west1'
+ EUROPE_WEST2 = 'europe-west2'
+ EUROPE_WEST3 = 'europe-west3'
+ EUROPE_WEST4 = 'europe-west4'
+ EUROPE_WEST6 = 'europe-west6'
+ ASIA_EAST1 = 'asia-east1'
+ ASIA_EAST2 = 'asia-east2'
+ ASIA_NORTHEAST1 = 'asia-northeast1'
+ ASIA_NORTHEAST2 = 'asia-northeast2'
+ ASIA_NORTHEAST3 = 'asia-northeast3'
+ ASIA_SOUTH1 = 'asia-south1'
+ ASIA_SOUTH2 = 'asia-south2'
+ ASIA_SOUTHEAST1 = 'asia-southeast1'
+ ASIA_SOUTHEAST2 = 'asia-southeast2'
+ AUSTRALIA_SOUTHEAST1 = 'australia-southeast1'
+ AUSTRALIA_SOUTHEAST2 = 'australia-southeast2'
+ ASIA = 'asia'
+ EU = 'eu'
+ US = 'us'
+ ASIA1 = 'asia1'
+ EUR4 = 'eur4'
+ NAM4 = 'nam4'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationGcs:
+ r"""The values required to configure the destination."""
+
+ credential: Any = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credential') }})
+ r"""An HMAC key is a type of credential and can be associated with a service account or a user account in Cloud Storage. Read more here."""
+ destination_type: DestinationGcsGcsEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationType') }})
+ format: Any = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('format') }})
+ r"""Output data format. One of the following formats must be selected - AVRO format, PARQUET format, CSV format, or JSONL format."""
+ gcs_bucket_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('gcs_bucket_name') }})
+ r"""You can find the bucket name in the App Engine Admin console Application Settings page, under the label Google Cloud Storage Bucket. Read more here."""
+ gcs_bucket_path: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('gcs_bucket_path') }})
+ r"""GCS Bucket Path string Subdirectory under the above bucket to sync the data into."""
+ gcs_bucket_region: Optional[DestinationGCSGCSBucketRegionEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('gcs_bucket_region'), 'exclude': lambda f: f is None }})
+ r"""Select a Region of the GCS Bucket. Read more here."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destination_google_sheets.py b/src/sdk/models/shared/destination_google_sheets.py
new file mode 100755
index 00000000..32918d3d
--- /dev/null
+++ b/src/sdk/models/shared/destination_google_sheets.py
@@ -0,0 +1,36 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationGoogleSheetsAuthenticationViaGoogleOAuth:
+ r"""Google API Credentials for connecting to Google Sheets and Google Drive APIs"""
+
+ client_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id') }})
+ r"""The Client ID of your Google Sheets developer application."""
+ client_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret') }})
+ r"""The Client Secret of your Google Sheets developer application."""
+ refresh_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('refresh_token') }})
+ r"""The token for obtaining new access token."""
+
+class DestinationGoogleSheetsGoogleSheetsEnum(str, Enum):
+ GOOGLE_SHEETS = 'google-sheets'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationGoogleSheets:
+ r"""The values required to configure the destination."""
+
+ credentials: DestinationGoogleSheetsAuthenticationViaGoogleOAuth = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials') }})
+ r"""Google API Credentials for connecting to Google Sheets and Google Drive APIs"""
+ destination_type: DestinationGoogleSheetsGoogleSheetsEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationType') }})
+ spreadsheet_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('spreadsheet_id') }})
+ r"""The link to your spreadsheet. See this guide for more details."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destination_keen.py b/src/sdk/models/shared/destination_keen.py
new file mode 100755
index 00000000..d9002e8e
--- /dev/null
+++ b/src/sdk/models/shared/destination_keen.py
@@ -0,0 +1,26 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class DestinationKeenKeenEnum(str, Enum):
+ KEEN = 'keen'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationKeen:
+ r"""The values required to configure the destination."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""To get Keen Master API Key, navigate to the Access tab from the left-hand, side panel and check the Project Details section."""
+ destination_type: DestinationKeenKeenEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationType') }})
+ project_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('project_id') }})
+ r"""To get Keen Project ID, navigate to the Access tab from the left-hand, side panel and check the Project Details section."""
+ infer_timestamp: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('infer_timestamp'), 'exclude': lambda f: f is None }})
+ r"""Allow connector to guess keen.timestamp value based on the streamed data."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destination_kinesis.py b/src/sdk/models/shared/destination_kinesis.py
new file mode 100755
index 00000000..e822441b
--- /dev/null
+++ b/src/sdk/models/shared/destination_kinesis.py
@@ -0,0 +1,31 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class DestinationKinesisKinesisEnum(str, Enum):
+ KINESIS = 'kinesis'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationKinesis:
+ r"""The values required to configure the destination."""
+
+ access_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('accessKey') }})
+ r"""Generate the AWS Access Key for current user."""
+ buffer_size: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('bufferSize') }})
+ r"""Buffer size for storing kinesis records before being batch streamed."""
+ destination_type: DestinationKinesisKinesisEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationType') }})
+ endpoint: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('endpoint') }})
+ r"""AWS Kinesis endpoint."""
+ private_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('privateKey') }})
+ r"""The AWS Private Key - a string of numbers and letters that are unique for each account, also known as a \\"recovery phrase\\"."""
+ region: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('region') }})
+ r"""AWS region. Your account determines the Regions that are available to you."""
+ shard_count: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('shardCount') }})
+ r"""Number of shards to which the data should be streamed."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destination_mariadb_columnstore.py b/src/sdk/models/shared/destination_mariadb_columnstore.py
new file mode 100755
index 00000000..b4ae22dc
--- /dev/null
+++ b/src/sdk/models/shared/destination_mariadb_columnstore.py
@@ -0,0 +1,89 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class DestinationMariadbColumnstoreMariadbColumnstoreEnum(str, Enum):
+ MARIADB_COLUMNSTORE = 'mariadb-columnstore'
+
+class DestinationMariadbColumnstoreTunnelMethodPasswordAuthenticationTunnelMethodEnum(str, Enum):
+ r"""Connect through a jump server tunnel host using username and password authentication"""
+ SSH_PASSWORD_AUTH = 'SSH_PASSWORD_AUTH'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationMariadbColumnstoreTunnelMethodPasswordAuthentication:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ tunnel_host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_host') }})
+ r"""Hostname of the jump server host that allows inbound ssh tunnel."""
+ tunnel_method: DestinationMariadbColumnstoreTunnelMethodPasswordAuthenticationTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""Connect through a jump server tunnel host using username and password authentication"""
+ tunnel_port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_port') }})
+ r"""Port on the proxy/jump server that accepts inbound ssh connections."""
+ tunnel_user: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user') }})
+ r"""OS-level username for logging into the jump server host"""
+ tunnel_user_password: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user_password') }})
+ r"""OS-level password for logging into the jump server host"""
+
+class DestinationMariadbColumnstoreTunnelMethodSSHKeyAuthenticationTunnelMethodEnum(str, Enum):
+ r"""Connect through a jump server tunnel host using username and ssh key"""
+ SSH_KEY_AUTH = 'SSH_KEY_AUTH'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationMariadbColumnstoreTunnelMethodSSHKeyAuthentication:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ ssh_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ssh_key') }})
+ r"""OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )"""
+ tunnel_host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_host') }})
+ r"""Hostname of the jump server host that allows inbound ssh tunnel."""
+ tunnel_method: DestinationMariadbColumnstoreTunnelMethodSSHKeyAuthenticationTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""Connect through a jump server tunnel host using username and ssh key"""
+ tunnel_port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_port') }})
+ r"""Port on the proxy/jump server that accepts inbound ssh connections."""
+ tunnel_user: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user') }})
+ r"""OS-level username for logging into the jump server host."""
+
+class DestinationMariadbColumnstoreTunnelMethodNoTunnelTunnelMethodEnum(str, Enum):
+ r"""No ssh tunnel needed to connect to database"""
+ NO_TUNNEL = 'NO_TUNNEL'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationMariadbColumnstoreTunnelMethodNoTunnel:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ tunnel_method: DestinationMariadbColumnstoreTunnelMethodNoTunnelTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""No ssh tunnel needed to connect to database"""
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationMariadbColumnstore:
+ r"""The values required to configure the destination."""
+
+ database: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('database') }})
+ r"""Name of the database."""
+ destination_type: DestinationMariadbColumnstoreMariadbColumnstoreEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationType') }})
+ host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('host') }})
+ r"""The Hostname of the database."""
+ port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('port') }})
+ r"""The Port of the database."""
+ username: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('username') }})
+ r"""The Username which is used to access the database."""
+ jdbc_url_params: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('jdbc_url_params'), 'exclude': lambda f: f is None }})
+ r"""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)."""
+ password: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password'), 'exclude': lambda f: f is None }})
+ r"""The Password associated with the username."""
+ tunnel_method: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method'), 'exclude': lambda f: f is None }})
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destination_meilisearch.py b/src/sdk/models/shared/destination_meilisearch.py
new file mode 100755
index 00000000..6a5d2eda
--- /dev/null
+++ b/src/sdk/models/shared/destination_meilisearch.py
@@ -0,0 +1,24 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class DestinationMeilisearchMeilisearchEnum(str, Enum):
+ MEILISEARCH = 'meilisearch'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationMeilisearch:
+ r"""The values required to configure the destination."""
+
+ destination_type: DestinationMeilisearchMeilisearchEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationType') }})
+ host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('host') }})
+ r"""Hostname of the MeiliSearch instance."""
+ api_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key'), 'exclude': lambda f: f is None }})
+ r"""MeiliSearch API Key. See the docs for more information on how to obtain this key."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destination_mongodb.py b/src/sdk/models/shared/destination_mongodb.py
new file mode 100755
index 00000000..304cbe8a
--- /dev/null
+++ b/src/sdk/models/shared/destination_mongodb.py
@@ -0,0 +1,152 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class DestinationMongodbAuthTypeLoginPasswordAuthorizationEnum(str, Enum):
+ LOGIN_PASSWORD = 'login/password'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationMongodbAuthTypeLoginPassword:
+ r"""Login/Password."""
+
+ authorization: DestinationMongodbAuthTypeLoginPasswordAuthorizationEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('authorization') }})
+ password: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password') }})
+ r"""Password associated with the username."""
+ username: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('username') }})
+ r"""Username to use to access the database."""
+
+class DestinationMongodbAuthTypeNoneAuthorizationEnum(str, Enum):
+ NONE = 'none'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationMongodbAuthTypeNone:
+ r"""None."""
+
+ authorization: DestinationMongodbAuthTypeNoneAuthorizationEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('authorization') }})
+
+class DestinationMongodbMongodbEnum(str, Enum):
+ MONGODB = 'mongodb'
+
+class DestinationMongodbInstanceTypeMongoDBAtlasInstanceEnum(str, Enum):
+ ATLAS = 'atlas'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationMongodbInstanceTypeMongoDBAtlas:
+ r"""MongoDb instance to connect to. For MongoDB Atlas and Replica Set TLS connection is used by default."""
+
+ cluster_url: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cluster_url') }})
+ r"""URL of a cluster to connect to."""
+ instance: DestinationMongodbInstanceTypeMongoDBAtlasInstanceEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('instance') }})
+
+class DestinationMongodbInstanceTypeReplicaSetInstanceEnum(str, Enum):
+ REPLICA = 'replica'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationMongodbInstanceTypeReplicaSet:
+ r"""MongoDb instance to connect to. For MongoDB Atlas and Replica Set TLS connection is used by default."""
+
+ instance: DestinationMongodbInstanceTypeReplicaSetInstanceEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('instance') }})
+ server_addresses: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('server_addresses') }})
+ r"""The members of a replica set. Please specify `host`:`port` of each member seperated by comma."""
+ replica_set: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('replica_set'), 'exclude': lambda f: f is None }})
+ r"""A replica set name."""
+
+class DestinationMongodbInstanceTypeStandaloneMongoDbInstanceInstanceEnum(str, Enum):
+ STANDALONE = 'standalone'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationMongodbInstanceTypeStandaloneMongoDbInstance:
+ r"""MongoDb instance to connect to. For MongoDB Atlas and Replica Set TLS connection is used by default."""
+
+ host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('host') }})
+ r"""The Host of a Mongo database to be replicated."""
+ instance: DestinationMongodbInstanceTypeStandaloneMongoDbInstanceInstanceEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('instance') }})
+ port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('port') }})
+ r"""The Port of a Mongo database to be replicated."""
+
+class DestinationMongodbTunnelMethodPasswordAuthenticationTunnelMethodEnum(str, Enum):
+ r"""Connect through a jump server tunnel host using username and password authentication"""
+ SSH_PASSWORD_AUTH = 'SSH_PASSWORD_AUTH'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationMongodbTunnelMethodPasswordAuthentication:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ tunnel_host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_host') }})
+ r"""Hostname of the jump server host that allows inbound ssh tunnel."""
+ tunnel_method: DestinationMongodbTunnelMethodPasswordAuthenticationTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""Connect through a jump server tunnel host using username and password authentication"""
+ tunnel_port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_port') }})
+ r"""Port on the proxy/jump server that accepts inbound ssh connections."""
+ tunnel_user: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user') }})
+ r"""OS-level username for logging into the jump server host"""
+ tunnel_user_password: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user_password') }})
+ r"""OS-level password for logging into the jump server host"""
+
+class DestinationMongodbTunnelMethodSSHKeyAuthenticationTunnelMethodEnum(str, Enum):
+ r"""Connect through a jump server tunnel host using username and ssh key"""
+ SSH_KEY_AUTH = 'SSH_KEY_AUTH'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationMongodbTunnelMethodSSHKeyAuthentication:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ ssh_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ssh_key') }})
+ r"""OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )"""
+ tunnel_host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_host') }})
+ r"""Hostname of the jump server host that allows inbound ssh tunnel."""
+ tunnel_method: DestinationMongodbTunnelMethodSSHKeyAuthenticationTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""Connect through a jump server tunnel host using username and ssh key"""
+ tunnel_port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_port') }})
+ r"""Port on the proxy/jump server that accepts inbound ssh connections."""
+ tunnel_user: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user') }})
+ r"""OS-level username for logging into the jump server host."""
+
+class DestinationMongodbTunnelMethodNoTunnelTunnelMethodEnum(str, Enum):
+ r"""No ssh tunnel needed to connect to database"""
+ NO_TUNNEL = 'NO_TUNNEL'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationMongodbTunnelMethodNoTunnel:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ tunnel_method: DestinationMongodbTunnelMethodNoTunnelTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""No ssh tunnel needed to connect to database"""
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationMongodb:
+ r"""The values required to configure the destination."""
+
+ auth_type: Any = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type') }})
+ r"""Authorization type."""
+ database: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('database') }})
+ r"""Name of the database."""
+ destination_type: DestinationMongodbMongodbEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationType') }})
+ instance_type: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('instance_type'), 'exclude': lambda f: f is None }})
+ r"""MongoDb instance to connect to. For MongoDB Atlas and Replica Set TLS connection is used by default."""
+ tunnel_method: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method'), 'exclude': lambda f: f is None }})
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destination_mssql.py b/src/sdk/models/shared/destination_mssql.py
new file mode 100755
index 00000000..78563e26
--- /dev/null
+++ b/src/sdk/models/shared/destination_mssql.py
@@ -0,0 +1,117 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class DestinationMssqlMssqlEnum(str, Enum):
+ MSSQL = 'mssql'
+
+class DestinationMssqlSslMethodEncryptedVerifyCertificateSslMethodEnum(str, Enum):
+ ENCRYPTED_VERIFY_CERTIFICATE = 'encrypted_verify_certificate'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationMssqlSslMethodEncryptedVerifyCertificate:
+ r"""Verify and use the certificate provided by the server."""
+
+ ssl_method: DestinationMssqlSslMethodEncryptedVerifyCertificateSslMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ssl_method') }})
+ host_name_in_certificate: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hostNameInCertificate'), 'exclude': lambda f: f is None }})
+ r"""Specifies the host name of the server. The value of this property must match the subject property of the certificate."""
+
+class DestinationMssqlSslMethodEncryptedTrustServerCertificateSslMethodEnum(str, Enum):
+ ENCRYPTED_TRUST_SERVER_CERTIFICATE = 'encrypted_trust_server_certificate'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationMssqlSslMethodEncryptedTrustServerCertificate:
+ r"""Use the certificate provided by the server without verification. (For testing purposes only!)"""
+
+ ssl_method: DestinationMssqlSslMethodEncryptedTrustServerCertificateSslMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ssl_method') }})
+
+class DestinationMssqlTunnelMethodPasswordAuthenticationTunnelMethodEnum(str, Enum):
+ r"""Connect through a jump server tunnel host using username and password authentication"""
+ SSH_PASSWORD_AUTH = 'SSH_PASSWORD_AUTH'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationMssqlTunnelMethodPasswordAuthentication:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ tunnel_host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_host') }})
+ r"""Hostname of the jump server host that allows inbound ssh tunnel."""
+ tunnel_method: DestinationMssqlTunnelMethodPasswordAuthenticationTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""Connect through a jump server tunnel host using username and password authentication"""
+ tunnel_port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_port') }})
+ r"""Port on the proxy/jump server that accepts inbound ssh connections."""
+ tunnel_user: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user') }})
+ r"""OS-level username for logging into the jump server host"""
+ tunnel_user_password: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user_password') }})
+ r"""OS-level password for logging into the jump server host"""
+
+class DestinationMssqlTunnelMethodSSHKeyAuthenticationTunnelMethodEnum(str, Enum):
+ r"""Connect through a jump server tunnel host using username and ssh key"""
+ SSH_KEY_AUTH = 'SSH_KEY_AUTH'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationMssqlTunnelMethodSSHKeyAuthentication:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ ssh_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ssh_key') }})
+ r"""OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )"""
+ tunnel_host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_host') }})
+ r"""Hostname of the jump server host that allows inbound ssh tunnel."""
+ tunnel_method: DestinationMssqlTunnelMethodSSHKeyAuthenticationTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""Connect through a jump server tunnel host using username and ssh key"""
+ tunnel_port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_port') }})
+ r"""Port on the proxy/jump server that accepts inbound ssh connections."""
+ tunnel_user: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user') }})
+ r"""OS-level username for logging into the jump server host."""
+
+class DestinationMssqlTunnelMethodNoTunnelTunnelMethodEnum(str, Enum):
+ r"""No ssh tunnel needed to connect to database"""
+ NO_TUNNEL = 'NO_TUNNEL'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationMssqlTunnelMethodNoTunnel:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ tunnel_method: DestinationMssqlTunnelMethodNoTunnelTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""No ssh tunnel needed to connect to database"""
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationMssql:
+ r"""The values required to configure the destination."""
+
+ database: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('database') }})
+ r"""The name of the MSSQL database."""
+ destination_type: DestinationMssqlMssqlEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationType') }})
+ host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('host') }})
+ r"""The host name of the MSSQL database."""
+ port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('port') }})
+ r"""The port of the MSSQL database."""
+ schema: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('schema') }})
+ r"""The default schema tables are written to if the source does not specify a namespace. The usual value for this field is \\"public\\"."""
+ username: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('username') }})
+ r"""The username which is used to access the database."""
+ jdbc_url_params: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('jdbc_url_params'), 'exclude': lambda f: f is None }})
+ r"""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)."""
+ password: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password'), 'exclude': lambda f: f is None }})
+ r"""The password associated with this username."""
+ ssl_method: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ssl_method'), 'exclude': lambda f: f is None }})
+ r"""The encryption method which is used to communicate with the database."""
+ tunnel_method: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method'), 'exclude': lambda f: f is None }})
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destination_mysql.py b/src/sdk/models/shared/destination_mysql.py
new file mode 100755
index 00000000..595f11cb
--- /dev/null
+++ b/src/sdk/models/shared/destination_mysql.py
@@ -0,0 +1,89 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class DestinationMysqlMysqlEnum(str, Enum):
+ MYSQL = 'mysql'
+
+class DestinationMysqlTunnelMethodPasswordAuthenticationTunnelMethodEnum(str, Enum):
+ r"""Connect through a jump server tunnel host using username and password authentication"""
+ SSH_PASSWORD_AUTH = 'SSH_PASSWORD_AUTH'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationMysqlTunnelMethodPasswordAuthentication:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ tunnel_host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_host') }})
+ r"""Hostname of the jump server host that allows inbound ssh tunnel."""
+ tunnel_method: DestinationMysqlTunnelMethodPasswordAuthenticationTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""Connect through a jump server tunnel host using username and password authentication"""
+ tunnel_port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_port') }})
+ r"""Port on the proxy/jump server that accepts inbound ssh connections."""
+ tunnel_user: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user') }})
+ r"""OS-level username for logging into the jump server host"""
+ tunnel_user_password: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user_password') }})
+ r"""OS-level password for logging into the jump server host"""
+
+class DestinationMysqlTunnelMethodSSHKeyAuthenticationTunnelMethodEnum(str, Enum):
+ r"""Connect through a jump server tunnel host using username and ssh key"""
+ SSH_KEY_AUTH = 'SSH_KEY_AUTH'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationMysqlTunnelMethodSSHKeyAuthentication:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ ssh_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ssh_key') }})
+ r"""OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )"""
+ tunnel_host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_host') }})
+ r"""Hostname of the jump server host that allows inbound ssh tunnel."""
+ tunnel_method: DestinationMysqlTunnelMethodSSHKeyAuthenticationTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""Connect through a jump server tunnel host using username and ssh key"""
+ tunnel_port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_port') }})
+ r"""Port on the proxy/jump server that accepts inbound ssh connections."""
+ tunnel_user: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user') }})
+ r"""OS-level username for logging into the jump server host."""
+
+class DestinationMysqlTunnelMethodNoTunnelTunnelMethodEnum(str, Enum):
+ r"""No ssh tunnel needed to connect to database"""
+ NO_TUNNEL = 'NO_TUNNEL'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationMysqlTunnelMethodNoTunnel:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ tunnel_method: DestinationMysqlTunnelMethodNoTunnelTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""No ssh tunnel needed to connect to database"""
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationMysql:
+ r"""The values required to configure the destination."""
+
+ database: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('database') }})
+ r"""Name of the database."""
+ destination_type: DestinationMysqlMysqlEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationType') }})
+ host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('host') }})
+ r"""Hostname of the database."""
+ port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('port') }})
+ r"""Port of the database."""
+ username: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('username') }})
+ r"""Username to use to access the database."""
+ jdbc_url_params: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('jdbc_url_params'), 'exclude': lambda f: f is None }})
+ r"""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)."""
+ password: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password'), 'exclude': lambda f: f is None }})
+ r"""Password associated with the username."""
+ tunnel_method: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method'), 'exclude': lambda f: f is None }})
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destination_oracle.py b/src/sdk/models/shared/destination_oracle.py
new file mode 100755
index 00000000..9b319f8a
--- /dev/null
+++ b/src/sdk/models/shared/destination_oracle.py
@@ -0,0 +1,91 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class DestinationOracleOracleEnum(str, Enum):
+ ORACLE = 'oracle'
+
+class DestinationOracleTunnelMethodPasswordAuthenticationTunnelMethodEnum(str, Enum):
+ r"""Connect through a jump server tunnel host using username and password authentication"""
+ SSH_PASSWORD_AUTH = 'SSH_PASSWORD_AUTH'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationOracleTunnelMethodPasswordAuthentication:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ tunnel_host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_host') }})
+ r"""Hostname of the jump server host that allows inbound ssh tunnel."""
+ tunnel_method: DestinationOracleTunnelMethodPasswordAuthenticationTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""Connect through a jump server tunnel host using username and password authentication"""
+ tunnel_port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_port') }})
+ r"""Port on the proxy/jump server that accepts inbound ssh connections."""
+ tunnel_user: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user') }})
+ r"""OS-level username for logging into the jump server host"""
+ tunnel_user_password: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user_password') }})
+ r"""OS-level password for logging into the jump server host"""
+
+class DestinationOracleTunnelMethodSSHKeyAuthenticationTunnelMethodEnum(str, Enum):
+ r"""Connect through a jump server tunnel host using username and ssh key"""
+ SSH_KEY_AUTH = 'SSH_KEY_AUTH'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationOracleTunnelMethodSSHKeyAuthentication:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ ssh_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ssh_key') }})
+ r"""OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )"""
+ tunnel_host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_host') }})
+ r"""Hostname of the jump server host that allows inbound ssh tunnel."""
+ tunnel_method: DestinationOracleTunnelMethodSSHKeyAuthenticationTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""Connect through a jump server tunnel host using username and ssh key"""
+ tunnel_port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_port') }})
+ r"""Port on the proxy/jump server that accepts inbound ssh connections."""
+ tunnel_user: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user') }})
+ r"""OS-level username for logging into the jump server host."""
+
+class DestinationOracleTunnelMethodNoTunnelTunnelMethodEnum(str, Enum):
+ r"""No ssh tunnel needed to connect to database"""
+ NO_TUNNEL = 'NO_TUNNEL'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationOracleTunnelMethodNoTunnel:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ tunnel_method: DestinationOracleTunnelMethodNoTunnelTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""No ssh tunnel needed to connect to database"""
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationOracle:
+ r"""The values required to configure the destination."""
+
+ destination_type: DestinationOracleOracleEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationType') }})
+ host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('host') }})
+ r"""The hostname of the database."""
+ port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('port') }})
+ r"""The port of the database."""
+ sid: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sid') }})
+ r"""The System Identifier uniquely distinguishes the instance from any other instance on the same computer."""
+ username: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('username') }})
+ r"""The username to access the database. This user must have CREATE USER privileges in the database."""
+ jdbc_url_params: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('jdbc_url_params'), 'exclude': lambda f: f is None }})
+ r"""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)."""
+ password: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password'), 'exclude': lambda f: f is None }})
+ r"""The password associated with the username."""
+ schema: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('schema'), 'exclude': lambda f: f is None }})
+ r"""The default schema is used as the target schema for all statements issued from the connection that do not explicitly specify a schema name. The usual value for this field is \\"airbyte\\". In Oracle, schemas and users are the same thing, so the \\"user\\" parameter is used as the login credentials and this is used for the default Airbyte message schema."""
+ tunnel_method: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method'), 'exclude': lambda f: f is None }})
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destination_postgres.py b/src/sdk/models/shared/destination_postgres.py
new file mode 100755
index 00000000..f8430b7e
--- /dev/null
+++ b/src/sdk/models/shared/destination_postgres.py
@@ -0,0 +1,179 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class DestinationPostgresPostgresEnum(str, Enum):
+ POSTGRES = 'postgres'
+
+class DestinationPostgresSslModeVerifyFullModeEnum(str, Enum):
+ VERIFY_FULL = 'verify-full'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationPostgresSslModeVerifyFull:
+ r"""Verify-full SSL mode."""
+
+ ca_certificate: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ca_certificate') }})
+ r"""CA certificate"""
+ client_certificate: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_certificate') }})
+ r"""Client certificate"""
+ client_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_key') }})
+ r"""Client key"""
+ mode: DestinationPostgresSslModeVerifyFullModeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mode') }})
+ client_key_password: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_key_password'), 'exclude': lambda f: f is None }})
+ r"""Password for keystorage. This field is optional. If you do not add it - the password will be generated automatically."""
+
+class DestinationPostgresSslModeVerifyCaModeEnum(str, Enum):
+ VERIFY_CA = 'verify-ca'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationPostgresSslModeVerifyCa:
+ r"""Verify-ca SSL mode."""
+
+ ca_certificate: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ca_certificate') }})
+ r"""CA certificate"""
+ mode: DestinationPostgresSslModeVerifyCaModeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mode') }})
+ client_key_password: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_key_password'), 'exclude': lambda f: f is None }})
+ r"""Password for keystorage. This field is optional. If you do not add it - the password will be generated automatically."""
+
+class DestinationPostgresSslModeRequireModeEnum(str, Enum):
+ REQUIRE = 'require'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationPostgresSslModeRequire:
+ r"""Require SSL mode."""
+
+ mode: DestinationPostgresSslModeRequireModeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mode') }})
+
+class DestinationPostgresSslModePreferModeEnum(str, Enum):
+ PREFER = 'prefer'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationPostgresSslModePrefer:
+ r"""Prefer SSL mode."""
+
+ mode: DestinationPostgresSslModePreferModeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mode') }})
+
+class DestinationPostgresSslModeAllowModeEnum(str, Enum):
+ ALLOW = 'allow'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationPostgresSslModeAllow:
+ r"""Allow SSL mode."""
+
+ mode: DestinationPostgresSslModeAllowModeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mode') }})
+
+class DestinationPostgresSslModeDisableModeEnum(str, Enum):
+ DISABLE = 'disable'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationPostgresSslModeDisable:
+ r"""Disable SSL."""
+
+ mode: DestinationPostgresSslModeDisableModeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mode') }})
+
+class DestinationPostgresTunnelMethodPasswordAuthenticationTunnelMethodEnum(str, Enum):
+ r"""Connect through a jump server tunnel host using username and password authentication"""
+ SSH_PASSWORD_AUTH = 'SSH_PASSWORD_AUTH'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationPostgresTunnelMethodPasswordAuthentication:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ tunnel_host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_host') }})
+ r"""Hostname of the jump server host that allows inbound ssh tunnel."""
+ tunnel_method: DestinationPostgresTunnelMethodPasswordAuthenticationTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""Connect through a jump server tunnel host using username and password authentication"""
+ tunnel_port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_port') }})
+ r"""Port on the proxy/jump server that accepts inbound ssh connections."""
+ tunnel_user: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user') }})
+ r"""OS-level username for logging into the jump server host"""
+ tunnel_user_password: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user_password') }})
+ r"""OS-level password for logging into the jump server host"""
+
+class DestinationPostgresTunnelMethodSSHKeyAuthenticationTunnelMethodEnum(str, Enum):
+ r"""Connect through a jump server tunnel host using username and ssh key"""
+ SSH_KEY_AUTH = 'SSH_KEY_AUTH'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationPostgresTunnelMethodSSHKeyAuthentication:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ ssh_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ssh_key') }})
+ r"""OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )"""
+ tunnel_host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_host') }})
+ r"""Hostname of the jump server host that allows inbound ssh tunnel."""
+ tunnel_method: DestinationPostgresTunnelMethodSSHKeyAuthenticationTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""Connect through a jump server tunnel host using username and ssh key"""
+ tunnel_port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_port') }})
+ r"""Port on the proxy/jump server that accepts inbound ssh connections."""
+ tunnel_user: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user') }})
+ r"""OS-level username for logging into the jump server host."""
+
+class DestinationPostgresTunnelMethodNoTunnelTunnelMethodEnum(str, Enum):
+ r"""No ssh tunnel needed to connect to database"""
+ NO_TUNNEL = 'NO_TUNNEL'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationPostgresTunnelMethodNoTunnel:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ tunnel_method: DestinationPostgresTunnelMethodNoTunnelTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""No ssh tunnel needed to connect to database"""
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationPostgres:
+ r"""The values required to configure the destination."""
+
+ database: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('database') }})
+ r"""Name of the database."""
+ destination_type: DestinationPostgresPostgresEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationType') }})
+ host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('host') }})
+ r"""Hostname of the database."""
+ port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('port') }})
+ r"""Port of the database."""
+ schema: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('schema') }})
+ r"""The default schema tables are written to if the source does not specify a namespace. The usual value for this field is \\"public\\"."""
+ username: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('username') }})
+ r"""Username to use to access the database."""
+ jdbc_url_params: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('jdbc_url_params'), 'exclude': lambda f: f is None }})
+ r"""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)."""
+ password: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password'), 'exclude': lambda f: f is None }})
+ r"""Password associated with the username."""
+ ssl_mode: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ssl_mode'), 'exclude': lambda f: f is None }})
+ r"""SSL connection modes.
+ disable - Chose this mode to disable encryption of communication between Airbyte and destination database
+ allow - Chose this mode to enable encryption only when required by the source database
+ prefer - Chose this mode to allow unencrypted connection only if the source database does not support encryption
+ require - Chose this mode to always require encryption. If the source database server does not support encryption, connection will fail
+ verify-ca - Chose this mode to always require encryption and to verify that the source database server has a valid SSL certificate
+ verify-full - This is the most secure mode. Chose this mode to always require encryption and to verify the identity of the source database server
+ See more information - in the docs.
+ """
+ tunnel_method: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method'), 'exclude': lambda f: f is None }})
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destination_pubsub.py b/src/sdk/models/shared/destination_pubsub.py
new file mode 100755
index 00000000..ab2fe292
--- /dev/null
+++ b/src/sdk/models/shared/destination_pubsub.py
@@ -0,0 +1,36 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class DestinationPubsubPubsubEnum(str, Enum):
+ PUBSUB = 'pubsub'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationPubsub:
+ r"""The values required to configure the destination."""
+
+ batching_enabled: bool = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('batching_enabled') }})
+ r"""If TRUE messages will be buffered instead of sending them one by one"""
+ credentials_json: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials_json') }})
+ r"""The contents of the JSON service account key. Check out the docs if you need help generating this key."""
+ destination_type: DestinationPubsubPubsubEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationType') }})
+ ordering_enabled: bool = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ordering_enabled') }})
+ r"""If TRUE PubSub publisher will have message ordering enabled. Every message will have an ordering key of stream"""
+ project_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('project_id') }})
+ r"""The GCP project ID for the project containing the target PubSub."""
+ topic_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('topic_id') }})
+ r"""The PubSub topic ID in the given GCP project ID."""
+ batching_delay_threshold: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('batching_delay_threshold'), 'exclude': lambda f: f is None }})
+ r"""Number of ms before the buffer is flushed"""
+ batching_element_count_threshold: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('batching_element_count_threshold'), 'exclude': lambda f: f is None }})
+ r"""Number of messages before the buffer is flushed"""
+ batching_request_bytes_threshold: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('batching_request_bytes_threshold'), 'exclude': lambda f: f is None }})
+ r"""Number of bytes before the buffer is flushed"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destination_pulsar.py b/src/sdk/models/shared/destination_pulsar.py
new file mode 100755
index 00000000..2b76c796
--- /dev/null
+++ b/src/sdk/models/shared/destination_pulsar.py
@@ -0,0 +1,67 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class DestinationPulsarCompressionTypeEnum(str, Enum):
+ r"""Compression type for the producer."""
+ NONE = 'NONE'
+ LZ4 = 'LZ4'
+ ZLIB = 'ZLIB'
+ ZSTD = 'ZSTD'
+ SNAPPY = 'SNAPPY'
+
+class DestinationPulsarPulsarEnum(str, Enum):
+ PULSAR = 'pulsar'
+
+class DestinationPulsarTopicTypeEnum(str, Enum):
+ r"""It identifies type of topic. Pulsar supports two kind of topics: persistent and non-persistent. In persistent topic, all messages are durably persisted on disk (that means on multiple disks unless the broker is standalone), whereas non-persistent topic does not persist message into storage disk."""
+ PERSISTENT = 'persistent'
+ NON_PERSISTENT = 'non-persistent'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationPulsar:
+ r"""The values required to configure the destination."""
+
+ batching_enabled: bool = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('batching_enabled') }})
+ r"""Control whether automatic batching of messages is enabled for the producer."""
+ batching_max_messages: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('batching_max_messages') }})
+ r"""Maximum number of messages permitted in a batch."""
+ batching_max_publish_delay: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('batching_max_publish_delay') }})
+ r"""Time period in milliseconds within which the messages sent will be batched."""
+ block_if_queue_full: bool = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('block_if_queue_full') }})
+ r"""If the send operation should block when the outgoing message queue is full."""
+ brokers: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('brokers') }})
+ r"""A list of host/port pairs to use for establishing the initial connection to the Pulsar cluster."""
+ compression_type: DestinationPulsarCompressionTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('compression_type') }})
+ r"""Compression type for the producer."""
+ destination_type: DestinationPulsarPulsarEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationType') }})
+ max_pending_messages: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('max_pending_messages') }})
+ r"""The maximum size of a queue holding pending messages."""
+ max_pending_messages_across_partitions: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('max_pending_messages_across_partitions') }})
+ r"""The maximum number of pending messages across partitions."""
+ send_timeout_ms: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('send_timeout_ms') }})
+ r"""If a message is not acknowledged by a server before the send-timeout expires, an error occurs (in ms)."""
+ topic_namespace: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('topic_namespace') }})
+ r"""The administrative unit of the topic, which acts as a grouping mechanism for related topics. Most topic configuration is performed at the namespace level. Each tenant has one or multiple namespaces."""
+ topic_pattern: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('topic_pattern') }})
+ r"""Topic pattern in which the records will be sent. You can use patterns like '{namespace}' and/or '{stream}' to send the message to a specific topic based on these values. Notice that the topic name will be transformed to a standard naming convention."""
+ topic_tenant: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('topic_tenant') }})
+ r"""The topic tenant within the instance. Tenants are essential to multi-tenancy in Pulsar, and spread across clusters."""
+ topic_type: DestinationPulsarTopicTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('topic_type') }})
+ r"""It identifies type of topic. Pulsar supports two kind of topics: persistent and non-persistent. In persistent topic, all messages are durably persisted on disk (that means on multiple disks unless the broker is standalone), whereas non-persistent topic does not persist message into storage disk."""
+ use_tls: bool = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('use_tls') }})
+ r"""Whether to use TLS encryption on the connection."""
+ producer_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('producer_name'), 'exclude': lambda f: f is None }})
+ r"""Name for the producer. If not filled, the system will generate a globally unique name which can be accessed with."""
+ producer_sync: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('producer_sync'), 'exclude': lambda f: f is None }})
+ r"""Wait synchronously until the record has been sent to Pulsar."""
+ topic_test: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('topic_test'), 'exclude': lambda f: f is None }})
+ r"""Topic to test if Airbyte can produce messages."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destination_rabbitmq.py b/src/sdk/models/shared/destination_rabbitmq.py
new file mode 100755
index 00000000..39429881
--- /dev/null
+++ b/src/sdk/models/shared/destination_rabbitmq.py
@@ -0,0 +1,36 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class DestinationRabbitmqRabbitmqEnum(str, Enum):
+ RABBITMQ = 'rabbitmq'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationRabbitmq:
+ r"""The values required to configure the destination."""
+
+ destination_type: DestinationRabbitmqRabbitmqEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationType') }})
+ host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('host') }})
+ r"""The RabbitMQ host name."""
+ routing_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('routing_key') }})
+ r"""The routing key."""
+ exchange: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('exchange'), 'exclude': lambda f: f is None }})
+ r"""The exchange name."""
+ password: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password'), 'exclude': lambda f: f is None }})
+ r"""The password to connect."""
+ port: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('port'), 'exclude': lambda f: f is None }})
+ r"""The RabbitMQ port."""
+ ssl: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ssl'), 'exclude': lambda f: f is None }})
+ r"""SSL enabled."""
+ username: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('username'), 'exclude': lambda f: f is None }})
+ r"""The username to connect."""
+ virtual_host: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('virtual_host'), 'exclude': lambda f: f is None }})
+ r"""The RabbitMQ virtual host name."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destination_redis.py b/src/sdk/models/shared/destination_redis.py
new file mode 100755
index 00000000..8a475bb4
--- /dev/null
+++ b/src/sdk/models/shared/destination_redis.py
@@ -0,0 +1,127 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class DestinationRedisCacheTypeEnum(str, Enum):
+ r"""Redis cache type to store data in."""
+ HASH = 'hash'
+
+class DestinationRedisRedisEnum(str, Enum):
+ REDIS = 'redis'
+
+class DestinationRedisSslModeVerifyFullModeEnum(str, Enum):
+ VERIFY_FULL = 'verify-full'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationRedisSslModeVerifyFull:
+ r"""Verify-full SSL mode."""
+
+ ca_certificate: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ca_certificate') }})
+ r"""CA certificate"""
+ client_certificate: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_certificate') }})
+ r"""Client certificate"""
+ client_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_key') }})
+ r"""Client key"""
+ mode: DestinationRedisSslModeVerifyFullModeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mode') }})
+ client_key_password: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_key_password'), 'exclude': lambda f: f is None }})
+ r"""Password for keystorage. If you do not add it - the password will be generated automatically."""
+
+class DestinationRedisSslModeDisableModeEnum(str, Enum):
+ DISABLE = 'disable'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationRedisSslModeDisable:
+ r"""Disable SSL."""
+
+ mode: DestinationRedisSslModeDisableModeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mode') }})
+
+class DestinationRedisTunnelMethodPasswordAuthenticationTunnelMethodEnum(str, Enum):
+ r"""Connect through a jump server tunnel host using username and password authentication"""
+ SSH_PASSWORD_AUTH = 'SSH_PASSWORD_AUTH'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationRedisTunnelMethodPasswordAuthentication:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ tunnel_host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_host') }})
+ r"""Hostname of the jump server host that allows inbound ssh tunnel."""
+ tunnel_method: DestinationRedisTunnelMethodPasswordAuthenticationTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""Connect through a jump server tunnel host using username and password authentication"""
+ tunnel_port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_port') }})
+ r"""Port on the proxy/jump server that accepts inbound ssh connections."""
+ tunnel_user: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user') }})
+ r"""OS-level username for logging into the jump server host"""
+ tunnel_user_password: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user_password') }})
+ r"""OS-level password for logging into the jump server host"""
+
+class DestinationRedisTunnelMethodSSHKeyAuthenticationTunnelMethodEnum(str, Enum):
+ r"""Connect through a jump server tunnel host using username and ssh key"""
+ SSH_KEY_AUTH = 'SSH_KEY_AUTH'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationRedisTunnelMethodSSHKeyAuthentication:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ ssh_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ssh_key') }})
+ r"""OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )"""
+ tunnel_host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_host') }})
+ r"""Hostname of the jump server host that allows inbound ssh tunnel."""
+ tunnel_method: DestinationRedisTunnelMethodSSHKeyAuthenticationTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""Connect through a jump server tunnel host using username and ssh key"""
+ tunnel_port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_port') }})
+ r"""Port on the proxy/jump server that accepts inbound ssh connections."""
+ tunnel_user: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user') }})
+ r"""OS-level username for logging into the jump server host."""
+
+class DestinationRedisTunnelMethodNoTunnelTunnelMethodEnum(str, Enum):
+ r"""No ssh tunnel needed to connect to database"""
+ NO_TUNNEL = 'NO_TUNNEL'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationRedisTunnelMethodNoTunnel:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ tunnel_method: DestinationRedisTunnelMethodNoTunnelTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""No ssh tunnel needed to connect to database"""
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationRedis:
+ r"""The values required to configure the destination."""
+
+ cache_type: DestinationRedisCacheTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cache_type') }})
+ r"""Redis cache type to store data in."""
+ destination_type: DestinationRedisRedisEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationType') }})
+ host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('host') }})
+ r"""Redis host to connect to."""
+ port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('port') }})
+ r"""Port of Redis."""
+ username: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('username') }})
+ r"""Username associated with Redis."""
+ password: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password'), 'exclude': lambda f: f is None }})
+ r"""Password associated with Redis."""
+ ssl: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ssl'), 'exclude': lambda f: f is None }})
+ r"""Indicates whether SSL encryption protocol will be used to connect to Redis. It is recommended to use SSL connection if possible."""
+ ssl_mode: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ssl_mode'), 'exclude': lambda f: f is None }})
+ r"""SSL connection modes.
+
verify-full - This is the most secure mode. Always require encryption and verifies the identity of the source database server
+ """
+ tunnel_method: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method'), 'exclude': lambda f: f is None }})
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destination_redshift.py b/src/sdk/models/shared/destination_redshift.py
new file mode 100755
index 00000000..e0edc926
--- /dev/null
+++ b/src/sdk/models/shared/destination_redshift.py
@@ -0,0 +1,184 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class DestinationRedshiftRedshiftEnum(str, Enum):
+ REDSHIFT = 'redshift'
+
+class DestinationRedshiftTunnelMethodPasswordAuthenticationTunnelMethodEnum(str, Enum):
+ r"""Connect through a jump server tunnel host using username and password authentication"""
+ SSH_PASSWORD_AUTH = 'SSH_PASSWORD_AUTH'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationRedshiftTunnelMethodPasswordAuthentication:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ tunnel_host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_host') }})
+ r"""Hostname of the jump server host that allows inbound ssh tunnel."""
+ tunnel_method: DestinationRedshiftTunnelMethodPasswordAuthenticationTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""Connect through a jump server tunnel host using username and password authentication"""
+ tunnel_port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_port') }})
+ r"""Port on the proxy/jump server that accepts inbound ssh connections."""
+ tunnel_user: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user') }})
+ r"""OS-level username for logging into the jump server host"""
+ tunnel_user_password: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user_password') }})
+ r"""OS-level password for logging into the jump server host"""
+
+class DestinationRedshiftTunnelMethodSSHKeyAuthenticationTunnelMethodEnum(str, Enum):
+ r"""Connect through a jump server tunnel host using username and ssh key"""
+ SSH_KEY_AUTH = 'SSH_KEY_AUTH'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationRedshiftTunnelMethodSSHKeyAuthentication:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ ssh_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ssh_key') }})
+ r"""OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )"""
+ tunnel_host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_host') }})
+ r"""Hostname of the jump server host that allows inbound ssh tunnel."""
+ tunnel_method: DestinationRedshiftTunnelMethodSSHKeyAuthenticationTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""Connect through a jump server tunnel host using username and ssh key"""
+ tunnel_port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_port') }})
+ r"""Port on the proxy/jump server that accepts inbound ssh connections."""
+ tunnel_user: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user') }})
+ r"""OS-level username for logging into the jump server host."""
+
+class DestinationRedshiftTunnelMethodNoTunnelTunnelMethodEnum(str, Enum):
+ r"""No ssh tunnel needed to connect to database"""
+ NO_TUNNEL = 'NO_TUNNEL'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationRedshiftTunnelMethodNoTunnel:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ tunnel_method: DestinationRedshiftTunnelMethodNoTunnelTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""No ssh tunnel needed to connect to database"""
+
+class DestinationRedshiftUploadingMethodS3StagingEncryptionAESCBCEnvelopeEncryptionEncryptionTypeEnum(str, Enum):
+ AES_CBC_ENVELOPE = 'aes_cbc_envelope'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationRedshiftUploadingMethodS3StagingEncryptionAESCBCEnvelopeEncryption:
+ r"""Staging data will be encrypted using AES-CBC envelope encryption."""
+
+ encryption_type: DestinationRedshiftUploadingMethodS3StagingEncryptionAESCBCEnvelopeEncryptionEncryptionTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('encryption_type') }})
+ key_encrypting_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key_encrypting_key'), 'exclude': lambda f: f is None }})
+ r"""The key, base64-encoded. Must be either 128, 192, or 256 bits. Leave blank to have Airbyte generate an ephemeral key for each sync."""
+
+class DestinationRedshiftUploadingMethodS3StagingEncryptionNoEncryptionEncryptionTypeEnum(str, Enum):
+ NONE = 'none'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationRedshiftUploadingMethodS3StagingEncryptionNoEncryption:
+ r"""Staging data will be stored in plaintext."""
+
+ encryption_type: DestinationRedshiftUploadingMethodS3StagingEncryptionNoEncryptionEncryptionTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('encryption_type') }})
+
+class DestinationRedshiftUploadingMethodS3StagingMethodEnum(str, Enum):
+ S3_STAGING = 'S3 Staging'
+
+class DestinationRedshiftUploadingMethodS3StagingS3BucketRegionEnum(str, Enum):
+ r"""The region of the S3 staging bucket to use if utilising a COPY strategy. See AWS docs for details."""
+ UNKNOWN = ''
+ US_EAST_1 = 'us-east-1'
+ US_EAST_2 = 'us-east-2'
+ US_WEST_1 = 'us-west-1'
+ US_WEST_2 = 'us-west-2'
+ AF_SOUTH_1 = 'af-south-1'
+ AP_EAST_1 = 'ap-east-1'
+ AP_SOUTH_1 = 'ap-south-1'
+ AP_NORTHEAST_1 = 'ap-northeast-1'
+ AP_NORTHEAST_2 = 'ap-northeast-2'
+ AP_NORTHEAST_3 = 'ap-northeast-3'
+ AP_SOUTHEAST_1 = 'ap-southeast-1'
+ AP_SOUTHEAST_2 = 'ap-southeast-2'
+ CA_CENTRAL_1 = 'ca-central-1'
+ CN_NORTH_1 = 'cn-north-1'
+ CN_NORTHWEST_1 = 'cn-northwest-1'
+ EU_CENTRAL_1 = 'eu-central-1'
+ EU_NORTH_1 = 'eu-north-1'
+ EU_SOUTH_1 = 'eu-south-1'
+ EU_WEST_1 = 'eu-west-1'
+ EU_WEST_2 = 'eu-west-2'
+ EU_WEST_3 = 'eu-west-3'
+ SA_EAST_1 = 'sa-east-1'
+ ME_SOUTH_1 = 'me-south-1'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationRedshiftUploadingMethodS3Staging:
+ r"""The method how the data will be uploaded to the database."""
+
+ access_key_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_key_id') }})
+ r"""This ID grants access to the above S3 staging bucket. Airbyte requires Read and Write permissions to the given bucket. See AWS docs on how to generate an access key ID and secret access key."""
+ method: DestinationRedshiftUploadingMethodS3StagingMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('method') }})
+ s3_bucket_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('s3_bucket_name') }})
+ r"""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."""
+ s3_bucket_region: DestinationRedshiftUploadingMethodS3StagingS3BucketRegionEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('s3_bucket_region') }})
+ r"""The region of the S3 staging bucket to use if utilising a COPY strategy. See AWS docs for details."""
+ secret_access_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('secret_access_key') }})
+ r"""The corresponding secret to the above access key id. See AWS docs on how to generate an access key ID and secret access key."""
+ encryption: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('encryption'), 'exclude': lambda f: f is None }})
+ r"""How to encrypt the staging data"""
+ file_buffer_count: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('file_buffer_count'), 'exclude': lambda f: f is None }})
+ r"""Number of file buffers allocated for writing data. Increasing this number is beneficial for connections using Change Data Capture (CDC) and up to the number of streams within a connection. Increasing the number of file buffers past the maximum number of streams has deteriorating effects"""
+ file_name_pattern: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('file_name_pattern'), 'exclude': lambda f: f is None }})
+ r"""The pattern allows you to set the file-name format for the S3 staging file(s)"""
+ purge_staging_data: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('purge_staging_data'), 'exclude': lambda f: f is None }})
+ r"""Whether to delete the staging files from S3 after completing the sync. See docs for details."""
+ s3_bucket_path: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('s3_bucket_path'), 'exclude': lambda f: f is None }})
+ r"""The directory under the S3 bucket where data will be written. If not provided, then defaults to the root directory. See path's name recommendations for more details."""
+
+class DestinationRedshiftUploadingMethodStandardMethodEnum(str, Enum):
+ STANDARD = 'Standard'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationRedshiftUploadingMethodStandard:
+ r"""The method how the data will be uploaded to the database."""
+
+ method: DestinationRedshiftUploadingMethodStandardMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('method') }})
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationRedshift:
+ r"""The values required to configure the destination."""
+
+ database: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('database') }})
+ r"""Name of the database."""
+ destination_type: DestinationRedshiftRedshiftEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationType') }})
+ host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('host') }})
+ r"""Host Endpoint of the Redshift Cluster (must include the cluster-id, region and end with .redshift.amazonaws.com)"""
+ password: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password') }})
+ r"""Password associated with the username."""
+ port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('port') }})
+ r"""Port of the database."""
+ schema: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('schema') }})
+ r"""The default schema tables are written to if the source does not specify a namespace. Unless specifically configured, the usual value for this field is \\"public\\"."""
+ username: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('username') }})
+ r"""Username to use to access the database."""
+ jdbc_url_params: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('jdbc_url_params'), 'exclude': lambda f: f is None }})
+ r"""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)."""
+ tunnel_method: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method'), 'exclude': lambda f: f is None }})
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+ uploading_method: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('uploading_method'), 'exclude': lambda f: f is None }})
+ r"""The method how the data will be uploaded to the database."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destination_rockset.py b/src/sdk/models/shared/destination_rockset.py
new file mode 100755
index 00000000..7d602e87
--- /dev/null
+++ b/src/sdk/models/shared/destination_rockset.py
@@ -0,0 +1,26 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class DestinationRocksetRocksetEnum(str, Enum):
+ ROCKSET = 'rockset'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationRockset:
+ r"""The values required to configure the destination."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""Rockset api key"""
+ destination_type: DestinationRocksetRocksetEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationType') }})
+ workspace: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('workspace') }})
+ r"""The Rockset workspace in which collections will be created + written to."""
+ api_server: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_server'), 'exclude': lambda f: f is None }})
+ r"""Rockset api URL"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destination_s3.py b/src/sdk/models/shared/destination_s3.py
new file mode 100755
index 00000000..ef0f33ba
--- /dev/null
+++ b/src/sdk/models/shared/destination_s3.py
@@ -0,0 +1,271 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class DestinationS3S3Enum(str, Enum):
+ S3 = 's3'
+
+class DestinationS3FormatParquetColumnarStorageCompressionCodecEnum(str, Enum):
+ r"""The compression algorithm used to compress data pages."""
+ UNCOMPRESSED = 'UNCOMPRESSED'
+ SNAPPY = 'SNAPPY'
+ GZIP = 'GZIP'
+ LZO = 'LZO'
+ BROTLI = 'BROTLI'
+ LZ4 = 'LZ4'
+ ZSTD = 'ZSTD'
+
+class DestinationS3FormatParquetColumnarStorageFormatTypeEnum(str, Enum):
+ PARQUET = 'Parquet'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationS3FormatParquetColumnarStorage:
+ r"""Format of the data output. See here for more details"""
+
+ format_type: DestinationS3FormatParquetColumnarStorageFormatTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('format_type') }})
+ block_size_mb: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('block_size_mb'), 'exclude': lambda f: f is None }})
+ r"""This is the size of a row group being buffered in memory. It limits the memory usage when writing. Larger values will improve the IO when reading, but consume more memory when writing. Default: 128 MB."""
+ compression_codec: Optional[DestinationS3FormatParquetColumnarStorageCompressionCodecEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('compression_codec'), 'exclude': lambda f: f is None }})
+ r"""The compression algorithm used to compress data pages."""
+ dictionary_encoding: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dictionary_encoding'), 'exclude': lambda f: f is None }})
+ r"""Default: true."""
+ dictionary_page_size_kb: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dictionary_page_size_kb'), 'exclude': lambda f: f is None }})
+ r"""There is one dictionary page per column per row group when dictionary encoding is used. The dictionary page size works like the page size but for dictionary. Default: 1024 KB."""
+ max_padding_size_mb: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('max_padding_size_mb'), 'exclude': lambda f: f is None }})
+ r"""Maximum size allowed as padding to align row groups. This is also the minimum size of a row group. Default: 8 MB."""
+ page_size_kb: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('page_size_kb'), 'exclude': lambda f: f is None }})
+ r"""The page size is for compression. A block is composed of pages. A page is the smallest unit that must be read fully to access a single record. If this value is too small, the compression will deteriorate. Default: 1024 KB."""
+
+class DestinationS3FormatJSONLinesNewlineDelimitedJSONCompressionGZIPCompressionTypeEnum(str, Enum):
+ GZIP = 'GZIP'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationS3FormatJSONLinesNewlineDelimitedJSONCompressionGZIP:
+ r"""Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \\".jsonl.gz\\")."""
+
+ compression_type: Optional[DestinationS3FormatJSONLinesNewlineDelimitedJSONCompressionGZIPCompressionTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('compression_type'), 'exclude': lambda f: f is None }})
+
+class DestinationS3FormatJSONLinesNewlineDelimitedJSONCompressionNoCompressionCompressionTypeEnum(str, Enum):
+ NO_COMPRESSION = 'No Compression'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationS3FormatJSONLinesNewlineDelimitedJSONCompressionNoCompression:
+ r"""Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \\".jsonl.gz\\")."""
+
+ compression_type: Optional[DestinationS3FormatJSONLinesNewlineDelimitedJSONCompressionNoCompressionCompressionTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('compression_type'), 'exclude': lambda f: f is None }})
+
+class DestinationS3FormatJSONLinesNewlineDelimitedJSONFlatteningEnum(str, Enum):
+ r"""Whether the input json data should be normalized (flattened) in the output JSON Lines. Please refer to docs for details."""
+ NO_FLATTENING = 'No flattening'
+ ROOT_LEVEL_FLATTENING = 'Root level flattening'
+
+class DestinationS3FormatJSONLinesNewlineDelimitedJSONFormatTypeEnum(str, Enum):
+ JSONL = 'JSONL'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationS3FormatJSONLinesNewlineDelimitedJSON:
+ r"""Format of the data output. See here for more details"""
+
+ format_type: DestinationS3FormatJSONLinesNewlineDelimitedJSONFormatTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('format_type') }})
+ compression: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('compression'), 'exclude': lambda f: f is None }})
+ r"""Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \\".jsonl.gz\\")."""
+ flattening: Optional[DestinationS3FormatJSONLinesNewlineDelimitedJSONFlatteningEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('flattening'), 'exclude': lambda f: f is None }})
+ r"""Whether the input json data should be normalized (flattened) in the output JSON Lines. Please refer to docs for details."""
+
+class DestinationS3FormatCSVCommaSeparatedValuesCompressionGZIPCompressionTypeEnum(str, Enum):
+ GZIP = 'GZIP'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationS3FormatCSVCommaSeparatedValuesCompressionGZIP:
+ r"""Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \\".csv.gz\\")."""
+
+ compression_type: Optional[DestinationS3FormatCSVCommaSeparatedValuesCompressionGZIPCompressionTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('compression_type'), 'exclude': lambda f: f is None }})
+
+class DestinationS3FormatCSVCommaSeparatedValuesCompressionNoCompressionCompressionTypeEnum(str, Enum):
+ NO_COMPRESSION = 'No Compression'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationS3FormatCSVCommaSeparatedValuesCompressionNoCompression:
+ r"""Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \\".csv.gz\\")."""
+
+ compression_type: Optional[DestinationS3FormatCSVCommaSeparatedValuesCompressionNoCompressionCompressionTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('compression_type'), 'exclude': lambda f: f is None }})
+
+class DestinationS3FormatCSVCommaSeparatedValuesFlatteningEnum(str, Enum):
+ r"""Whether the input json data should be normalized (flattened) in the output CSV. Please refer to docs for details."""
+ NO_FLATTENING = 'No flattening'
+ ROOT_LEVEL_FLATTENING = 'Root level flattening'
+
+class DestinationS3FormatCSVCommaSeparatedValuesFormatTypeEnum(str, Enum):
+ CSV = 'CSV'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationS3FormatCSVCommaSeparatedValues:
+ r"""Format of the data output. See here for more details"""
+
+ flattening: DestinationS3FormatCSVCommaSeparatedValuesFlatteningEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('flattening') }})
+ r"""Whether the input json data should be normalized (flattened) in the output CSV. Please refer to docs for details."""
+ format_type: DestinationS3FormatCSVCommaSeparatedValuesFormatTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('format_type') }})
+ compression: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('compression'), 'exclude': lambda f: f is None }})
+ r"""Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \\".csv.gz\\")."""
+
+class DestinationS3FormatAvroApacheAvroCompressionCodecSnappyCodecEnum(str, Enum):
+ SNAPPY = 'snappy'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationS3FormatAvroApacheAvroCompressionCodecSnappy:
+ r"""The compression algorithm used to compress data. Default to no compression."""
+
+ codec: DestinationS3FormatAvroApacheAvroCompressionCodecSnappyCodecEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('codec') }})
+
+class DestinationS3FormatAvroApacheAvroCompressionCodecZstandardCodecEnum(str, Enum):
+ ZSTANDARD = 'zstandard'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationS3FormatAvroApacheAvroCompressionCodecZstandard:
+ r"""The compression algorithm used to compress data. Default to no compression."""
+
+ codec: DestinationS3FormatAvroApacheAvroCompressionCodecZstandardCodecEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('codec') }})
+ compression_level: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('compression_level') }})
+ r"""Negative levels are 'fast' modes akin to lz4 or snappy, levels above 9 are generally for archival purposes, and levels above 18 use a lot of memory."""
+ include_checksum: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('include_checksum'), 'exclude': lambda f: f is None }})
+ r"""If true, include a checksum with each data block."""
+
+class DestinationS3FormatAvroApacheAvroCompressionCodecXzCodecEnum(str, Enum):
+ XZ = 'xz'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationS3FormatAvroApacheAvroCompressionCodecXz:
+ r"""The compression algorithm used to compress data. Default to no compression."""
+
+ codec: DestinationS3FormatAvroApacheAvroCompressionCodecXzCodecEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('codec') }})
+ compression_level: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('compression_level') }})
+ r"""See here for details."""
+
+class DestinationS3FormatAvroApacheAvroCompressionCodecBzip2CodecEnum(str, Enum):
+ BZIP2 = 'bzip2'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationS3FormatAvroApacheAvroCompressionCodecBzip2:
+ r"""The compression algorithm used to compress data. Default to no compression."""
+
+ codec: DestinationS3FormatAvroApacheAvroCompressionCodecBzip2CodecEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('codec') }})
+
+class DestinationS3FormatAvroApacheAvroCompressionCodecDeflateCodecEnum(str, Enum):
+ DEFLATE = 'Deflate'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationS3FormatAvroApacheAvroCompressionCodecDeflate:
+ r"""The compression algorithm used to compress data. Default to no compression."""
+
+ codec: DestinationS3FormatAvroApacheAvroCompressionCodecDeflateCodecEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('codec') }})
+ compression_level: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('compression_level') }})
+ r"""0: no compression & fastest, 9: best compression & slowest."""
+
+class DestinationS3FormatAvroApacheAvroCompressionCodecNoCompressionCodecEnum(str, Enum):
+ NO_COMPRESSION = 'no compression'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationS3FormatAvroApacheAvroCompressionCodecNoCompression:
+ r"""The compression algorithm used to compress data. Default to no compression."""
+
+ codec: DestinationS3FormatAvroApacheAvroCompressionCodecNoCompressionCodecEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('codec') }})
+
+class DestinationS3FormatAvroApacheAvroFormatTypeEnum(str, Enum):
+ AVRO = 'Avro'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationS3FormatAvroApacheAvro:
+ r"""Format of the data output. See here for more details"""
+
+ compression_codec: Any = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('compression_codec') }})
+ r"""The compression algorithm used to compress data. Default to no compression."""
+ format_type: DestinationS3FormatAvroApacheAvroFormatTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('format_type') }})
+
+class DestinationS3S3BucketRegionEnum(str, Enum):
+ r"""The region of the S3 bucket. See here for all region codes."""
+ UNKNOWN = ''
+ US_EAST_1 = 'us-east-1'
+ US_EAST_2 = 'us-east-2'
+ US_WEST_1 = 'us-west-1'
+ US_WEST_2 = 'us-west-2'
+ AF_SOUTH_1 = 'af-south-1'
+ AP_EAST_1 = 'ap-east-1'
+ AP_SOUTH_1 = 'ap-south-1'
+ AP_NORTHEAST_1 = 'ap-northeast-1'
+ AP_NORTHEAST_2 = 'ap-northeast-2'
+ AP_NORTHEAST_3 = 'ap-northeast-3'
+ AP_SOUTHEAST_1 = 'ap-southeast-1'
+ AP_SOUTHEAST_2 = 'ap-southeast-2'
+ CA_CENTRAL_1 = 'ca-central-1'
+ CN_NORTH_1 = 'cn-north-1'
+ CN_NORTHWEST_1 = 'cn-northwest-1'
+ EU_CENTRAL_1 = 'eu-central-1'
+ EU_NORTH_1 = 'eu-north-1'
+ EU_SOUTH_1 = 'eu-south-1'
+ EU_WEST_1 = 'eu-west-1'
+ EU_WEST_2 = 'eu-west-2'
+ EU_WEST_3 = 'eu-west-3'
+ SA_EAST_1 = 'sa-east-1'
+ ME_SOUTH_1 = 'me-south-1'
+ US_GOV_EAST_1 = 'us-gov-east-1'
+ US_GOV_WEST_1 = 'us-gov-west-1'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationS3:
+ r"""The values required to configure the destination."""
+
+ destination_type: DestinationS3S3Enum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationType') }})
+ format: Any = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('format') }})
+ r"""Format of the data output. See here for more details"""
+ s3_bucket_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('s3_bucket_name') }})
+ r"""The name of the S3 bucket. Read more here."""
+ s3_bucket_path: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('s3_bucket_path') }})
+ r"""Directory under the S3 bucket where data will be written. Read more here"""
+ s3_bucket_region: DestinationS3S3BucketRegionEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('s3_bucket_region') }})
+ r"""The region of the S3 bucket. See here for all region codes."""
+ access_key_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_key_id'), 'exclude': lambda f: f is None }})
+ r"""The access key ID to access the S3 bucket. Airbyte requires Read and Write permissions to the given bucket. Read more here."""
+ file_name_pattern: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('file_name_pattern'), 'exclude': lambda f: f is None }})
+ r"""The pattern allows you to set the file-name format for the S3 staging file(s)"""
+ s3_endpoint: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('s3_endpoint'), 'exclude': lambda f: f is None }})
+ r"""Your S3 endpoint url. Read more here"""
+ s3_path_format: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('s3_path_format'), 'exclude': lambda f: f is None }})
+ r"""Format string on how data will be organized inside the S3 bucket directory. Read more here"""
+ secret_access_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('secret_access_key'), 'exclude': lambda f: f is None }})
+ r"""The corresponding secret to the access key ID. Read more here"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destination_s3_glue.py b/src/sdk/models/shared/destination_s3_glue.py
new file mode 100755
index 00000000..780c30a9
--- /dev/null
+++ b/src/sdk/models/shared/destination_s3_glue.py
@@ -0,0 +1,113 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class DestinationS3GlueS3GlueEnum(str, Enum):
+ S3_GLUE = 's3-glue'
+
+class DestinationS3GlueFormatJSONLinesNewlineDelimitedJSONCompressionGZIPCompressionTypeEnum(str, Enum):
+ GZIP = 'GZIP'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationS3GlueFormatJSONLinesNewlineDelimitedJSONCompressionGZIP:
+ r"""Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \\".jsonl.gz\\")."""
+
+ compression_type: Optional[DestinationS3GlueFormatJSONLinesNewlineDelimitedJSONCompressionGZIPCompressionTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('compression_type'), 'exclude': lambda f: f is None }})
+
+class DestinationS3GlueFormatJSONLinesNewlineDelimitedJSONCompressionNoCompressionCompressionTypeEnum(str, Enum):
+ NO_COMPRESSION = 'No Compression'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationS3GlueFormatJSONLinesNewlineDelimitedJSONCompressionNoCompression:
+ r"""Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \\".jsonl.gz\\")."""
+
+ compression_type: Optional[DestinationS3GlueFormatJSONLinesNewlineDelimitedJSONCompressionNoCompressionCompressionTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('compression_type'), 'exclude': lambda f: f is None }})
+
+class DestinationS3GlueFormatJSONLinesNewlineDelimitedJSONFormatTypeEnum(str, Enum):
+ JSONL = 'JSONL'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationS3GlueFormatJSONLinesNewlineDelimitedJSON:
+ r"""Format of the data output. See here for more details"""
+
+ format_type: DestinationS3GlueFormatJSONLinesNewlineDelimitedJSONFormatTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('format_type') }})
+ compression: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('compression'), 'exclude': lambda f: f is None }})
+ r"""Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \\".jsonl.gz\\")."""
+ flatten_data: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('flatten_data'), 'exclude': lambda f: f is None }})
+ r"""If true data will be flattened and won't be nested in the _airbyte_data field"""
+
+class DestinationS3GlueSerializationLibraryEnum(str, Enum):
+ r"""The library that your query engine will use for reading and writing data in your lake."""
+ ORG_OPENX_DATA_JSONSERDE_JSON_SER_DE = 'org.openx.data.jsonserde.JsonSerDe'
+ ORG_APACHE_HIVE_HCATALOG_DATA_JSON_SER_DE = 'org.apache.hive.hcatalog.data.JsonSerDe'
+
+class DestinationS3GlueS3BucketRegionEnum(str, Enum):
+ r"""The region of the S3 bucket. See here for all region codes."""
+ UNKNOWN = ''
+ US_EAST_1 = 'us-east-1'
+ US_EAST_2 = 'us-east-2'
+ US_WEST_1 = 'us-west-1'
+ US_WEST_2 = 'us-west-2'
+ AF_SOUTH_1 = 'af-south-1'
+ AP_EAST_1 = 'ap-east-1'
+ AP_SOUTH_1 = 'ap-south-1'
+ AP_NORTHEAST_1 = 'ap-northeast-1'
+ AP_NORTHEAST_2 = 'ap-northeast-2'
+ AP_NORTHEAST_3 = 'ap-northeast-3'
+ AP_SOUTHEAST_1 = 'ap-southeast-1'
+ AP_SOUTHEAST_2 = 'ap-southeast-2'
+ CA_CENTRAL_1 = 'ca-central-1'
+ CN_NORTH_1 = 'cn-north-1'
+ CN_NORTHWEST_1 = 'cn-northwest-1'
+ EU_CENTRAL_1 = 'eu-central-1'
+ EU_NORTH_1 = 'eu-north-1'
+ EU_SOUTH_1 = 'eu-south-1'
+ EU_WEST_1 = 'eu-west-1'
+ EU_WEST_2 = 'eu-west-2'
+ EU_WEST_3 = 'eu-west-3'
+ SA_EAST_1 = 'sa-east-1'
+ ME_SOUTH_1 = 'me-south-1'
+ US_GOV_EAST_1 = 'us-gov-east-1'
+ US_GOV_WEST_1 = 'us-gov-west-1'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationS3Glue:
+ r"""The values required to configure the destination."""
+
+ destination_type: DestinationS3GlueS3GlueEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationType') }})
+ format: Any = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('format') }})
+ r"""Format of the data output. See here for more details"""
+ glue_database: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('glue_database') }})
+ r"""Name of the glue database for creating the tables, leave blank if no integration"""
+ glue_serialization_library: DestinationS3GlueSerializationLibraryEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('glue_serialization_library') }})
+ r"""The library that your query engine will use for reading and writing data in your lake."""
+ s3_bucket_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('s3_bucket_name') }})
+ r"""The name of the S3 bucket. Read more here."""
+ s3_bucket_path: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('s3_bucket_path') }})
+ r"""Directory under the S3 bucket where data will be written. Read more here"""
+ s3_bucket_region: DestinationS3GlueS3BucketRegionEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('s3_bucket_region') }})
+ r"""The region of the S3 bucket. See here for all region codes."""
+ access_key_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_key_id'), 'exclude': lambda f: f is None }})
+ r"""The access key ID to access the S3 bucket. Airbyte requires Read and Write permissions to the given bucket. Read more here."""
+ file_name_pattern: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('file_name_pattern'), 'exclude': lambda f: f is None }})
+ r"""The pattern allows you to set the file-name format for the S3 staging file(s)"""
+ s3_endpoint: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('s3_endpoint'), 'exclude': lambda f: f is None }})
+ r"""Your S3 endpoint url. Read more here"""
+ s3_path_format: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('s3_path_format'), 'exclude': lambda f: f is None }})
+ r"""Format string on how data will be organized inside the S3 bucket directory. Read more here"""
+ secret_access_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('secret_access_key'), 'exclude': lambda f: f is None }})
+ r"""The corresponding secret to the access key ID. Read more here"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destination_scylla.py b/src/sdk/models/shared/destination_scylla.py
new file mode 100755
index 00000000..945e0cb1
--- /dev/null
+++ b/src/sdk/models/shared/destination_scylla.py
@@ -0,0 +1,32 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class DestinationScyllaScyllaEnum(str, Enum):
+ SCYLLA = 'scylla'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationScylla:
+ r"""The values required to configure the destination."""
+
+ address: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('address') }})
+ r"""Address to connect to."""
+ destination_type: DestinationScyllaScyllaEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationType') }})
+ keyspace: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('keyspace') }})
+ r"""Default Scylla keyspace to create data in."""
+ password: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password') }})
+ r"""Password associated with Scylla."""
+ port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('port') }})
+ r"""Port of Scylla."""
+ username: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('username') }})
+ r"""Username to use to access Scylla."""
+ replication: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('replication'), 'exclude': lambda f: f is None }})
+ r"""Indicates to how many nodes the data should be replicated to."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destination_sftp_json.py b/src/sdk/models/shared/destination_sftp_json.py
new file mode 100755
index 00000000..df7f1367
--- /dev/null
+++ b/src/sdk/models/shared/destination_sftp_json.py
@@ -0,0 +1,30 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class DestinationSftpJSONSftpJSONEnum(str, Enum):
+ SFTP_JSON = 'sftp-json'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationSftpJSON:
+ r"""The values required to configure the destination."""
+
+ destination_path: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destination_path') }})
+ r"""Path to the directory where json files will be written."""
+ destination_type: DestinationSftpJSONSftpJSONEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationType') }})
+ host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('host') }})
+ r"""Hostname of the SFTP server."""
+ password: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password') }})
+ r"""Password associated with the username."""
+ username: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('username') }})
+ r"""Username to use to access the SFTP server."""
+ port: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('port'), 'exclude': lambda f: f is None }})
+ r"""Port of the SFTP server."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destination_snowflake.py b/src/sdk/models/shared/destination_snowflake.py
new file mode 100755
index 00000000..aa07009d
--- /dev/null
+++ b/src/sdk/models/shared/destination_snowflake.py
@@ -0,0 +1,217 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class DestinationSnowflakeCredentialsUsernameAndPasswordAuthTypeEnum(str, Enum):
+ USERNAME_AND_PASSWORD = 'Username and Password'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationSnowflakeCredentialsUsernameAndPassword:
+
+ password: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password') }})
+ r"""Enter the password associated with the username."""
+ auth_type: Optional[DestinationSnowflakeCredentialsUsernameAndPasswordAuthTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type'), 'exclude': lambda f: f is None }})
+
+class DestinationSnowflakeCredentialsKeyPairAuthenticationAuthTypeEnum(str, Enum):
+ KEY_PAIR_AUTHENTICATION = 'Key Pair Authentication'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationSnowflakeCredentialsKeyPairAuthentication:
+
+ private_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('private_key') }})
+ r"""RSA Private key to use for Snowflake connection. See the docs for more information on how to obtain this key."""
+ auth_type: Optional[DestinationSnowflakeCredentialsKeyPairAuthenticationAuthTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type'), 'exclude': lambda f: f is None }})
+ private_key_password: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('private_key_password'), 'exclude': lambda f: f is None }})
+ r"""Passphrase for private key"""
+
+class DestinationSnowflakeCredentialsOAuth20AuthTypeEnum(str, Enum):
+ O_AUTH2_0 = 'OAuth2.0'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationSnowflakeCredentialsOAuth20:
+
+ access_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token') }})
+ r"""Enter you application's Access Token"""
+ refresh_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('refresh_token') }})
+ r"""Enter your application's Refresh Token"""
+ auth_type: Optional[DestinationSnowflakeCredentialsOAuth20AuthTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type'), 'exclude': lambda f: f is None }})
+ client_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id'), 'exclude': lambda f: f is None }})
+ r"""Enter your application's Client ID"""
+ client_secret: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret'), 'exclude': lambda f: f is None }})
+ r"""Enter your application's Client secret"""
+
+class DestinationSnowflakeSnowflakeEnum(str, Enum):
+ SNOWFLAKE = 'snowflake'
+
+class DestinationSnowflakeLoadingMethodAzureBlobStorageStagingMethodEnum(str, Enum):
+ AZURE_BLOB_STAGING = 'Azure Blob Staging'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationSnowflakeLoadingMethodAzureBlobStorageStaging:
+ r"""Recommended for large production workloads for better speed and scalability."""
+
+ azure_blob_storage_account_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('azure_blob_storage_account_name') }})
+ r"""Enter your Azure Blob Storage account name"""
+ azure_blob_storage_container_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('azure_blob_storage_container_name') }})
+ r"""Enter your Azure Blob Storage container name"""
+ azure_blob_storage_sas_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('azure_blob_storage_sas_token') }})
+ r"""Enter the Shared access signature (SAS) token to grant Snowflake limited access to objects in your Azure Blob Storage account"""
+ method: DestinationSnowflakeLoadingMethodAzureBlobStorageStagingMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('method') }})
+ azure_blob_storage_endpoint_domain_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('azure_blob_storage_endpoint_domain_name'), 'exclude': lambda f: f is None }})
+ r"""Enter the Azure Blob Storage endpoint domain name"""
+
+class DestinationSnowflakeLoadingMethodGoogleCloudStorageStagingMethodEnum(str, Enum):
+ GCS_STAGING = 'GCS Staging'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationSnowflakeLoadingMethodGoogleCloudStorageStaging:
+ r"""Recommended for large production workloads for better speed and scalability."""
+
+ bucket_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('bucket_name') }})
+ r"""Enter the Cloud Storage bucket name"""
+ credentials_json: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials_json') }})
+ r"""Enter your Google Cloud service account key in the JSON format with read/write access to your Cloud Storage staging bucket"""
+ method: DestinationSnowflakeLoadingMethodGoogleCloudStorageStagingMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('method') }})
+ project_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('project_id') }})
+ r"""Enter the Google Cloud project ID"""
+
+class DestinationSnowflakeLoadingMethodAWSS3StagingEncryptionAESCBCEnvelopeEncryptionEncryptionTypeEnum(str, Enum):
+ AES_CBC_ENVELOPE = 'aes_cbc_envelope'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationSnowflakeLoadingMethodAWSS3StagingEncryptionAESCBCEnvelopeEncryption:
+ r"""Staging data will be encrypted using AES-CBC envelope encryption."""
+
+ encryption_type: DestinationSnowflakeLoadingMethodAWSS3StagingEncryptionAESCBCEnvelopeEncryptionEncryptionTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('encryption_type') }})
+ key_encrypting_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key_encrypting_key'), 'exclude': lambda f: f is None }})
+ r"""The key, base64-encoded. Must be either 128, 192, or 256 bits. Leave blank to have Airbyte generate an ephemeral key for each sync."""
+
+class DestinationSnowflakeLoadingMethodAWSS3StagingEncryptionNoEncryptionEncryptionTypeEnum(str, Enum):
+ NONE = 'none'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationSnowflakeLoadingMethodAWSS3StagingEncryptionNoEncryption:
+ r"""Staging data will be stored in plaintext."""
+
+ encryption_type: DestinationSnowflakeLoadingMethodAWSS3StagingEncryptionNoEncryptionEncryptionTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('encryption_type') }})
+
+class DestinationSnowflakeLoadingMethodAWSS3StagingMethodEnum(str, Enum):
+ S3_STAGING = 'S3 Staging'
+
+class DestinationSnowflakeLoadingMethodAWSS3StagingS3BucketRegionEnum(str, Enum):
+ r"""Enter the region where your S3 bucket resides"""
+ UNKNOWN = ''
+ US_EAST_1 = 'us-east-1'
+ US_EAST_2 = 'us-east-2'
+ US_WEST_1 = 'us-west-1'
+ US_WEST_2 = 'us-west-2'
+ AF_SOUTH_1 = 'af-south-1'
+ AP_EAST_1 = 'ap-east-1'
+ AP_SOUTH_1 = 'ap-south-1'
+ AP_NORTHEAST_1 = 'ap-northeast-1'
+ AP_NORTHEAST_2 = 'ap-northeast-2'
+ AP_NORTHEAST_3 = 'ap-northeast-3'
+ AP_SOUTHEAST_1 = 'ap-southeast-1'
+ AP_SOUTHEAST_2 = 'ap-southeast-2'
+ CA_CENTRAL_1 = 'ca-central-1'
+ CN_NORTH_1 = 'cn-north-1'
+ CN_NORTHWEST_1 = 'cn-northwest-1'
+ EU_CENTRAL_1 = 'eu-central-1'
+ EU_WEST_1 = 'eu-west-1'
+ EU_WEST_2 = 'eu-west-2'
+ EU_WEST_3 = 'eu-west-3'
+ EU_SOUTH_1 = 'eu-south-1'
+ EU_NORTH_1 = 'eu-north-1'
+ SA_EAST_1 = 'sa-east-1'
+ ME_SOUTH_1 = 'me-south-1'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationSnowflakeLoadingMethodAWSS3Staging:
+ r"""Recommended for large production workloads for better speed and scalability."""
+
+ access_key_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_key_id') }})
+ r"""Enter your AWS access key ID. Airbyte requires Read and Write permissions on your S3 bucket"""
+ method: DestinationSnowflakeLoadingMethodAWSS3StagingMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('method') }})
+ s3_bucket_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('s3_bucket_name') }})
+ r"""Enter your S3 bucket name"""
+ secret_access_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('secret_access_key') }})
+ r"""Enter your AWS secret access key"""
+ encryption: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('encryption'), 'exclude': lambda f: f is None }})
+ r"""Choose a data encryption method for the staging data"""
+ file_name_pattern: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('file_name_pattern'), 'exclude': lambda f: f is None }})
+ r"""The pattern allows you to set the file-name format for the S3 staging file(s)"""
+ purge_staging_data: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('purge_staging_data'), 'exclude': lambda f: f is None }})
+ r"""Toggle to delete staging files from the S3 bucket after a successful sync"""
+ s3_bucket_region: Optional[DestinationSnowflakeLoadingMethodAWSS3StagingS3BucketRegionEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('s3_bucket_region'), 'exclude': lambda f: f is None }})
+ r"""Enter the region where your S3 bucket resides"""
+
+class DestinationSnowflakeLoadingMethodRecommendedInternalStagingMethodEnum(str, Enum):
+ INTERNAL_STAGING = 'Internal Staging'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationSnowflakeLoadingMethodRecommendedInternalStaging:
+ r"""Recommended for large production workloads for better speed and scalability."""
+
+ method: DestinationSnowflakeLoadingMethodRecommendedInternalStagingMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('method') }})
+
+class DestinationSnowflakeLoadingMethodSelectAnotherOptionMethodEnum(str, Enum):
+ STANDARD = 'Standard'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationSnowflakeLoadingMethodSelectAnotherOption:
+ r"""Select another option"""
+
+ method: DestinationSnowflakeLoadingMethodSelectAnotherOptionMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('method') }})
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationSnowflake:
+ r"""The values required to configure the destination."""
+
+ database: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('database') }})
+ r"""Enter the name of the database you want to sync data into"""
+ destination_type: DestinationSnowflakeSnowflakeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationType') }})
+ host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('host') }})
+ r"""Enter your Snowflake account's locator (in the format ...snowflakecomputing.com)"""
+ role: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('role') }})
+ r"""Enter the role that you want to use to access Snowflake"""
+ schema: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('schema') }})
+ r"""Enter the name of the default schema"""
+ username: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('username') }})
+ r"""Enter the name of the user you want to use to access the database"""
+ warehouse: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('warehouse') }})
+ r"""Enter the name of the warehouse that you want to sync data into"""
+ credentials: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials'), 'exclude': lambda f: f is None }})
+ file_buffer_count: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('file_buffer_count'), 'exclude': lambda f: f is None }})
+ r"""Number of file buffers allocated for writing data. Increasing this number is beneficial for connections using Change Data Capture (CDC) and up to the number of streams within a connection. Increasing the number of file buffers past the maximum number of streams has deteriorating effects"""
+ jdbc_url_params: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('jdbc_url_params'), 'exclude': lambda f: f is None }})
+ r"""Enter the 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"""
+ loading_method: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('loading_method'), 'exclude': lambda f: f is None }})
+ r"""Select a data staging method"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destination_typesense.py b/src/sdk/models/shared/destination_typesense.py
new file mode 100755
index 00000000..fb1056a5
--- /dev/null
+++ b/src/sdk/models/shared/destination_typesense.py
@@ -0,0 +1,30 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class DestinationTypesenseTypesenseEnum(str, Enum):
+ TYPESENSE = 'typesense'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationTypesense:
+ r"""The values required to configure the destination."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""Typesense API Key"""
+ destination_type: DestinationTypesenseTypesenseEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationType') }})
+ host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('host') }})
+ r"""Hostname of the Typesense instance without protocol."""
+ batch_size: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('batch_size'), 'exclude': lambda f: f is None }})
+ r"""How many documents should be imported together. Default 1000"""
+ port: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('port'), 'exclude': lambda f: f is None }})
+ r"""Port of the Typesense instance. Ex: 8108, 80, 443. Default is 443"""
+ protocol: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protocol'), 'exclude': lambda f: f is None }})
+ r"""Protocol of the Typesense instance. Ex: http or https. Default is https"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destinationcreaterequest.py b/src/sdk/models/shared/destinationcreaterequest.py
new file mode 100755
index 00000000..f0e5d49b
--- /dev/null
+++ b/src/sdk/models/shared/destinationcreaterequest.py
@@ -0,0 +1,18 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from sdk import utils
+from typing import Any
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationCreateRequest:
+
+ configuration: Any = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('configuration') }})
+ r"""The values required to configure the destination."""
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ workspace_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('workspaceId') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destinationresponse.py b/src/sdk/models/shared/destinationresponse.py
new file mode 100755
index 00000000..abb01bdd
--- /dev/null
+++ b/src/sdk/models/shared/destinationresponse.py
@@ -0,0 +1,18 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from sdk import utils
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationResponse:
+ r"""Provides details of a single destination."""
+
+ destination_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationId') }})
+ destination_type: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('destinationType') }})
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ workspace_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('workspaceId') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/destinationsresponse.py b/src/sdk/models/shared/destinationsresponse.py
new file mode 100755
index 00000000..ec3fde0c
--- /dev/null
+++ b/src/sdk/models/shared/destinationsresponse.py
@@ -0,0 +1,18 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from ..shared import destinationresponse as shared_destinationresponse
+from dataclasses_json import Undefined, dataclass_json
+from sdk import utils
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DestinationsResponse:
+ r"""Successful operation"""
+
+ data: list[shared_destinationresponse.DestinationResponse] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data') }})
+ next: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('next') }})
+ previous: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('previous') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/geographyenum_enum.py b/src/sdk/models/shared/geographyenum_enum.py
new file mode 100755
index 00000000..521f692c
--- /dev/null
+++ b/src/sdk/models/shared/geographyenum_enum.py
@@ -0,0 +1,9 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+from enum import Enum
+
+class GeographyEnumEnum(str, Enum):
+ AUTO = 'auto'
+ US = 'us'
+ EU = 'eu'
diff --git a/src/sdk/models/shared/jobcreaterequest.py b/src/sdk/models/shared/jobcreaterequest.py
new file mode 100755
index 00000000..415add88
--- /dev/null
+++ b/src/sdk/models/shared/jobcreaterequest.py
@@ -0,0 +1,18 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from ..shared import jobtypeenum_enum as shared_jobtypeenum_enum
+from dataclasses_json import Undefined, dataclass_json
+from sdk import utils
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class JobCreateRequest:
+ r"""Creates a new Job from the configuration provided in the request body."""
+
+ connection_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('connectionId') }})
+ job_type: shared_jobtypeenum_enum.JobTypeEnumEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('jobType') }})
+ r"""Enum that describes the different types of jobs that the platform runs."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/jobresponse.py b/src/sdk/models/shared/jobresponse.py
new file mode 100755
index 00000000..bb586dbf
--- /dev/null
+++ b/src/sdk/models/shared/jobresponse.py
@@ -0,0 +1,27 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from ..shared import jobstatusenum_enum as shared_jobstatusenum_enum
+from ..shared import jobtypeenum_enum as shared_jobtypeenum_enum
+from dataclasses_json import Undefined, dataclass_json
+from sdk import utils
+from typing import Optional
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class JobResponse:
+ r"""Provides details of a single job."""
+
+ job_id: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('jobId') }})
+ job_type: shared_jobtypeenum_enum.JobTypeEnumEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('jobType') }})
+ r"""Enum that describes the different types of jobs that the platform runs."""
+ start_time: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('startTime') }})
+ status: shared_jobstatusenum_enum.JobStatusEnumEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status') }})
+ bytes_synced: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('bytesSynced'), 'exclude': lambda f: f is None }})
+ duration: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('duration'), 'exclude': lambda f: f is None }})
+ r"""Duration of a sync in ISO_8601 format"""
+ last_updated_at: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('lastUpdatedAt'), 'exclude': lambda f: f is None }})
+ rows_synced: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('rowsSynced'), 'exclude': lambda f: f is None }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/jobsresponse.py b/src/sdk/models/shared/jobsresponse.py
new file mode 100755
index 00000000..30c45e87
--- /dev/null
+++ b/src/sdk/models/shared/jobsresponse.py
@@ -0,0 +1,18 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from ..shared import jobresponse as shared_jobresponse
+from dataclasses_json import Undefined, dataclass_json
+from sdk import utils
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class JobsResponse:
+ r"""List all the Jobs by connectionId."""
+
+ data: list[shared_jobresponse.JobResponse] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data') }})
+ next: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('next') }})
+ previous: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('previous') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/jobstatusenum_enum.py b/src/sdk/models/shared/jobstatusenum_enum.py
new file mode 100755
index 00000000..73adb10a
--- /dev/null
+++ b/src/sdk/models/shared/jobstatusenum_enum.py
@@ -0,0 +1,12 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+from enum import Enum
+
+class JobStatusEnumEnum(str, Enum):
+ PENDING = 'pending'
+ RUNNING = 'running'
+ INCOMPLETE = 'incomplete'
+ FAILED = 'failed'
+ SUCCEEDED = 'succeeded'
+ CANCELLED = 'cancelled'
diff --git a/src/sdk/models/shared/jobtypeenum_enum.py b/src/sdk/models/shared/jobtypeenum_enum.py
new file mode 100755
index 00000000..73287a74
--- /dev/null
+++ b/src/sdk/models/shared/jobtypeenum_enum.py
@@ -0,0 +1,9 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+from enum import Enum
+
+class JobTypeEnumEnum(str, Enum):
+ r"""Enum that describes the different types of jobs that the platform runs."""
+ SYNC = 'sync'
+ RESET = 'reset'
diff --git a/src/sdk/models/shared/scheduletypeenum_enum.py b/src/sdk/models/shared/scheduletypeenum_enum.py
new file mode 100755
index 00000000..a3d32477
--- /dev/null
+++ b/src/sdk/models/shared/scheduletypeenum_enum.py
@@ -0,0 +1,8 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+from enum import Enum
+
+class ScheduleTypeEnumEnum(str, Enum):
+ MANUAL = 'manual'
+ CRON = 'cron'
diff --git a/src/sdk/models/shared/scheduletypewithbasicenum_enum.py b/src/sdk/models/shared/scheduletypewithbasicenum_enum.py
new file mode 100755
index 00000000..9f02ac8b
--- /dev/null
+++ b/src/sdk/models/shared/scheduletypewithbasicenum_enum.py
@@ -0,0 +1,9 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+from enum import Enum
+
+class ScheduleTypeWithBasicEnumEnum(str, Enum):
+ MANUAL = 'manual'
+ CRON = 'cron'
+ BASIC = 'basic'
diff --git a/src/sdk/models/shared/security.py b/src/sdk/models/shared/security.py
new file mode 100755
index 00000000..e41721b5
--- /dev/null
+++ b/src/sdk/models/shared/security.py
@@ -0,0 +1,11 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+
+
+@dataclasses.dataclass
+class Security:
+
+ bearer_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_airtable.py b/src/sdk/models/shared/source_airtable.py
new file mode 100755
index 00000000..1ba11eb4
--- /dev/null
+++ b/src/sdk/models/shared/source_airtable.py
@@ -0,0 +1,56 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Any, Optional
+
+class SourceAirtableCredentialsPersonalAccessTokenAuthMethodEnum(str, Enum):
+ API_KEY = 'api_key'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceAirtableCredentialsPersonalAccessToken:
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""The Personal Access Token for the Airtable account. See the Support Guide for more information on how to obtain this token."""
+ auth_method: Optional[SourceAirtableCredentialsPersonalAccessTokenAuthMethodEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_method'), 'exclude': lambda f: f is None }})
+
+class SourceAirtableCredentialsOAuth20AuthMethodEnum(str, Enum):
+ OAUTH2_0 = 'oauth2.0'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceAirtableCredentialsOAuth20:
+
+ client_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id') }})
+ r"""The client ID of the Airtable developer application."""
+ client_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret') }})
+ r"""The client secret the Airtable developer application."""
+ refresh_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('refresh_token') }})
+ r"""The key to refresh the expired access token."""
+ access_token: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token'), 'exclude': lambda f: f is None }})
+ r"""Access Token for making authenticated requests."""
+ auth_method: Optional[SourceAirtableCredentialsOAuth20AuthMethodEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_method'), 'exclude': lambda f: f is None }})
+ token_expiry_date: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('token_expiry_date'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }})
+ r"""The date-time when the access token should be refreshed."""
+
+class SourceAirtableAirtableEnum(str, Enum):
+ AIRTABLE = 'airtable'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceAirtable:
+ r"""The values required to configure the source."""
+
+ source_type: SourceAirtableAirtableEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ credentials: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials'), 'exclude': lambda f: f is None }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_alloydb.py b/src/sdk/models/shared/source_alloydb.py
new file mode 100755
index 00000000..ec33be00
--- /dev/null
+++ b/src/sdk/models/shared/source_alloydb.py
@@ -0,0 +1,108 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class SourceAlloydbReplicationMethodStandardMethodEnum(str, Enum):
+ STANDARD = 'Standard'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceAlloydbReplicationMethodStandard:
+ r"""Standard replication requires no setup on the DB side but will not be able to represent deletions incrementally."""
+
+ method: SourceAlloydbReplicationMethodStandardMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('method') }})
+
+class SourceAlloydbAlloydbEnum(str, Enum):
+ ALLOYDB = 'alloydb'
+
+class SourceAlloydbTunnelMethodPasswordAuthenticationTunnelMethodEnum(str, Enum):
+ r"""Connect through a jump server tunnel host using username and password authentication"""
+ SSH_PASSWORD_AUTH = 'SSH_PASSWORD_AUTH'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceAlloydbTunnelMethodPasswordAuthentication:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ tunnel_host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_host') }})
+ r"""Hostname of the jump server host that allows inbound ssh tunnel."""
+ tunnel_method: SourceAlloydbTunnelMethodPasswordAuthenticationTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""Connect through a jump server tunnel host using username and password authentication"""
+ tunnel_port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_port') }})
+ r"""Port on the proxy/jump server that accepts inbound ssh connections."""
+ tunnel_user: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user') }})
+ r"""OS-level username for logging into the jump server host"""
+ tunnel_user_password: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user_password') }})
+ r"""OS-level password for logging into the jump server host"""
+
+class SourceAlloydbTunnelMethodSSHKeyAuthenticationTunnelMethodEnum(str, Enum):
+ r"""Connect through a jump server tunnel host using username and ssh key"""
+ SSH_KEY_AUTH = 'SSH_KEY_AUTH'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceAlloydbTunnelMethodSSHKeyAuthentication:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ ssh_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ssh_key') }})
+ r"""OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )"""
+ tunnel_host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_host') }})
+ r"""Hostname of the jump server host that allows inbound ssh tunnel."""
+ tunnel_method: SourceAlloydbTunnelMethodSSHKeyAuthenticationTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""Connect through a jump server tunnel host using username and ssh key"""
+ tunnel_port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_port') }})
+ r"""Port on the proxy/jump server that accepts inbound ssh connections."""
+ tunnel_user: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user') }})
+ r"""OS-level username for logging into the jump server host."""
+
+class SourceAlloydbTunnelMethodNoTunnelTunnelMethodEnum(str, Enum):
+ r"""No ssh tunnel needed to connect to database"""
+ NO_TUNNEL = 'NO_TUNNEL'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceAlloydbTunnelMethodNoTunnel:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ tunnel_method: SourceAlloydbTunnelMethodNoTunnelTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""No ssh tunnel needed to connect to database"""
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceAlloydb:
+ r"""The values required to configure the source."""
+
+ database: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('database') }})
+ r"""Name of the database."""
+ host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('host') }})
+ r"""Hostname of the database."""
+ port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('port') }})
+ r"""Port of the database."""
+ source_type: SourceAlloydbAlloydbEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ username: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('username') }})
+ r"""Username to access the database."""
+ jdbc_url_params: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('jdbc_url_params'), 'exclude': lambda f: f is None }})
+ r"""Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (Eg. key1=value1&key2=value2&key3=value3). For more information read about JDBC URL parameters."""
+ password: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password'), 'exclude': lambda f: f is None }})
+ r"""Password associated with the username."""
+ replication_method: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('replication_method'), 'exclude': lambda f: f is None }})
+ r"""Replication method for extracting data from the database."""
+ schemas: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('schemas'), 'exclude': lambda f: f is None }})
+ r"""The list of schemas (case sensitive) to sync from. Defaults to public."""
+ ssl_mode: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ssl_mode'), 'exclude': lambda f: f is None }})
+ r"""SSL connection modes.
+ Read more in the docs.
+ """
+ tunnel_method: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method'), 'exclude': lambda f: f is None }})
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_amazon_ads.py b/src/sdk/models/shared/source_amazon_ads.py
new file mode 100755
index 00000000..9e697a68
--- /dev/null
+++ b/src/sdk/models/shared/source_amazon_ads.py
@@ -0,0 +1,63 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourceAmazonAdsAuthTypeEnum(str, Enum):
+ OAUTH2_0 = 'oauth2.0'
+
+class SourceAmazonAdsRegionEnum(str, Enum):
+ r"""Region to pull data from (EU/NA/FE). See docs for more details."""
+ NA = 'NA'
+ EU = 'EU'
+ FE = 'FE'
+
+class SourceAmazonAdsReportRecordTypesEnum(str, Enum):
+ AD_GROUPS = 'adGroups'
+ ASINS = 'asins'
+ ASINS_KEYWORDS = 'asins_keywords'
+ ASINS_TARGETS = 'asins_targets'
+ CAMPAIGNS = 'campaigns'
+ KEYWORDS = 'keywords'
+ PRODUCT_ADS = 'productAds'
+ TARGETS = 'targets'
+
+class SourceAmazonAdsAmazonAdsEnum(str, Enum):
+ AMAZON_ADS = 'amazon-ads'
+
+class SourceAmazonAdsStateFilterEnum(str, Enum):
+ ENABLED = 'enabled'
+ PAUSED = 'paused'
+ ARCHIVED = 'archived'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceAmazonAds:
+ r"""The values required to configure the source."""
+
+ client_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id') }})
+ r"""The client ID of your Amazon Ads developer application. See the docs for more information."""
+ client_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret') }})
+ r"""The client secret of your Amazon Ads developer application. See the docs for more information."""
+ refresh_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('refresh_token') }})
+ r"""Amazon Ads refresh token. See the docs for more information on how to obtain this token."""
+ source_type: SourceAmazonAdsAmazonAdsEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ auth_type: Optional[SourceAmazonAdsAuthTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type'), 'exclude': lambda f: f is None }})
+ look_back_window: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('look_back_window'), 'exclude': lambda f: f is None }})
+ r"""The amount of days to go back in time to get the updated data from Amazon Ads"""
+ profiles: Optional[list[int]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('profiles'), 'exclude': lambda f: f is None }})
+ r"""Profile IDs you want to fetch data for. See docs for more details."""
+ region: Optional[SourceAmazonAdsRegionEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('region'), 'exclude': lambda f: f is None }})
+ r"""Region to pull data from (EU/NA/FE). See docs for more details."""
+ report_record_types: Optional[list[SourceAmazonAdsReportRecordTypesEnum]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('report_record_types'), 'exclude': lambda f: f is None }})
+ r"""Optional configuration which accepts an array of string of record types. Leave blank for default behaviour to pull all report types. Use this config option only if you want to pull specific report type(s). See docs for more details"""
+ start_date: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'exclude': lambda f: f is None }})
+ r"""The Start date for collecting reports, should not be more than 60 days in the past. In YYYY-MM-DD format"""
+ state_filter: Optional[list[SourceAmazonAdsStateFilterEnum]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('state_filter'), 'exclude': lambda f: f is None }})
+ r"""Reflects the state of the Display, Product, and Brand Campaign streams as enabled, paused, or archived. If you do not populate this field, it will be ignored completely."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_amazon_seller_partner.py b/src/sdk/models/shared/source_amazon_seller_partner.py
new file mode 100755
index 00000000..84f5e267
--- /dev/null
+++ b/src/sdk/models/shared/source_amazon_seller_partner.py
@@ -0,0 +1,82 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourceAmazonSellerPartnerAuthTypeEnum(str, Enum):
+ OAUTH2_0 = 'oauth2.0'
+
+class SourceAmazonSellerPartnerAWSEnvironmentEnum(str, Enum):
+ r"""An enumeration."""
+ PRODUCTION = 'PRODUCTION'
+ SANDBOX = 'SANDBOX'
+
+class SourceAmazonSellerPartnerAWSRegionEnum(str, Enum):
+ r"""An enumeration."""
+ AE = 'AE'
+ AU = 'AU'
+ BE = 'BE'
+ BR = 'BR'
+ CA = 'CA'
+ DE = 'DE'
+ EG = 'EG'
+ ES = 'ES'
+ FR = 'FR'
+ GB = 'GB'
+ IN = 'IN'
+ IT = 'IT'
+ JP = 'JP'
+ MX = 'MX'
+ NL = 'NL'
+ PL = 'PL'
+ SA = 'SA'
+ SE = 'SE'
+ SG = 'SG'
+ TR = 'TR'
+ UK = 'UK'
+ US = 'US'
+
+class SourceAmazonSellerPartnerAmazonSellerPartnerEnum(str, Enum):
+ AMAZON_SELLER_PARTNER = 'amazon-seller-partner'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceAmazonSellerPartner:
+ r"""The values required to configure the source."""
+
+ app_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('app_id') }})
+ r"""Your Amazon App ID"""
+ aws_environment: SourceAmazonSellerPartnerAWSEnvironmentEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('aws_environment') }})
+ r"""An enumeration."""
+ lwa_app_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('lwa_app_id') }})
+ r"""Your Login with Amazon Client ID."""
+ lwa_client_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('lwa_client_secret') }})
+ r"""Your Login with Amazon Client Secret."""
+ refresh_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('refresh_token') }})
+ r"""The Refresh Token obtained via OAuth flow authorization."""
+ region: SourceAmazonSellerPartnerAWSRegionEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('region') }})
+ r"""An enumeration."""
+ replication_start_date: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('replication_start_date') }})
+ r"""UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated."""
+ source_type: SourceAmazonSellerPartnerAmazonSellerPartnerEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ auth_type: Optional[SourceAmazonSellerPartnerAuthTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type'), 'exclude': lambda f: f is None }})
+ aws_access_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('aws_access_key'), 'exclude': lambda f: f is None }})
+ r"""Specifies the AWS access key used as part of the credentials to authenticate the user."""
+ aws_secret_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('aws_secret_key'), 'exclude': lambda f: f is None }})
+ r"""Specifies the AWS secret key used as part of the credentials to authenticate the user."""
+ max_wait_seconds: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('max_wait_seconds'), 'exclude': lambda f: f is None }})
+ r"""Sometimes report can take up to 30 minutes to generate. This will set the limit for how long to wait for a successful report."""
+ period_in_days: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('period_in_days'), 'exclude': lambda f: f is None }})
+ r"""Will be used for stream slicing for initial full_refresh sync when no updated state is present for reports that support sliced incremental sync."""
+ replication_end_date: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('replication_end_date'), 'exclude': lambda f: f is None }})
+ r"""UTC date and time in the format 2017-01-25T00:00:00Z. Any data after this date will not be replicated."""
+ report_options: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('report_options'), 'exclude': lambda f: f is None }})
+ r"""Additional information passed to reports. This varies by report type. Must be a valid json string."""
+ role_arn: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('role_arn'), 'exclude': lambda f: f is None }})
+ r"""Specifies the Amazon Resource Name (ARN) of an IAM role that you want to use to perform operations requested using this profile. (Needs permission to 'Assume Role' STS)."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_amazon_sqs.py b/src/sdk/models/shared/source_amazon_sqs.py
new file mode 100755
index 00000000..e3dde4fa
--- /dev/null
+++ b/src/sdk/models/shared/source_amazon_sqs.py
@@ -0,0 +1,66 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourceAmazonSqsAWSRegionEnum(str, Enum):
+ r"""AWS Region of the SQS Queue"""
+ US_EAST_1 = 'us-east-1'
+ US_EAST_2 = 'us-east-2'
+ US_WEST_1 = 'us-west-1'
+ US_WEST_2 = 'us-west-2'
+ AF_SOUTH_1 = 'af-south-1'
+ AP_EAST_1 = 'ap-east-1'
+ AP_SOUTH_1 = 'ap-south-1'
+ AP_NORTHEAST_1 = 'ap-northeast-1'
+ AP_NORTHEAST_2 = 'ap-northeast-2'
+ AP_NORTHEAST_3 = 'ap-northeast-3'
+ AP_SOUTHEAST_1 = 'ap-southeast-1'
+ AP_SOUTHEAST_2 = 'ap-southeast-2'
+ CA_CENTRAL_1 = 'ca-central-1'
+ CN_NORTH_1 = 'cn-north-1'
+ CN_NORTHWEST_1 = 'cn-northwest-1'
+ EU_CENTRAL_1 = 'eu-central-1'
+ EU_NORTH_1 = 'eu-north-1'
+ EU_SOUTH_1 = 'eu-south-1'
+ EU_WEST_1 = 'eu-west-1'
+ EU_WEST_2 = 'eu-west-2'
+ EU_WEST_3 = 'eu-west-3'
+ SA_EAST_1 = 'sa-east-1'
+ ME_SOUTH_1 = 'me-south-1'
+ US_GOV_EAST_1 = 'us-gov-east-1'
+ US_GOV_WEST_1 = 'us-gov-west-1'
+
+class SourceAmazonSqsAmazonSqsEnum(str, Enum):
+ AMAZON_SQS = 'amazon-sqs'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceAmazonSqs:
+ r"""The values required to configure the source."""
+
+ delete_messages: bool = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('delete_messages') }})
+ r"""If Enabled, messages will be deleted from the SQS Queue after being read. If Disabled, messages are left in the queue and can be read more than once. WARNING: Enabling this option can result in data loss in cases of failure, use with caution, see documentation for more detail."""
+ queue_url: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('queue_url') }})
+ r"""URL of the SQS Queue"""
+ region: SourceAmazonSqsAWSRegionEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('region') }})
+ r"""AWS Region of the SQS Queue"""
+ source_type: SourceAmazonSqsAmazonSqsEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ access_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_key'), 'exclude': lambda f: f is None }})
+ r"""The Access Key ID of the AWS IAM Role to use for pulling messages"""
+ attributes_to_return: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('attributes_to_return'), 'exclude': lambda f: f is None }})
+ r"""Comma separated list of Mesage Attribute names to return"""
+ max_batch_size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('max_batch_size'), 'exclude': lambda f: f is None }})
+ r"""Max amount of messages to get in one batch (10 max)"""
+ max_wait_time: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('max_wait_time'), 'exclude': lambda f: f is None }})
+ r"""Max amount of time in seconds to wait for messages in a single poll (20 max)"""
+ secret_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('secret_key'), 'exclude': lambda f: f is None }})
+ r"""The Secret Key of the AWS IAM Role to use for pulling messages"""
+ visibility_timeout: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('visibility_timeout'), 'exclude': lambda f: f is None }})
+ r"""Modify the Visibility Timeout of the individual message from the Queue's default (seconds)."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_amplitude.py b/src/sdk/models/shared/source_amplitude.py
new file mode 100755
index 00000000..e3fe2d8e
--- /dev/null
+++ b/src/sdk/models/shared/source_amplitude.py
@@ -0,0 +1,53 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourceAmplitudeDataRegionEnum(str, Enum):
+ r"""Amplitude data region server"""
+ STANDARD_SERVER = 'Standard Server'
+ EU_RESIDENCY_SERVER = 'EU Residency Server'
+
+class SourceAmplitudeEventStreamTimeIntervalEventsTimeIntervalSizeUnitEnum(str, Enum):
+ r"""Amplitude event stream's interval size unit"""
+ DAYS = 'days'
+ HOURS = 'hours'
+ WEEKS = 'weeks'
+ MONTHS = 'months'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceAmplitudeEventStreamTimeInterval:
+ r"""Amplitude event stream time interval"""
+
+ size: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size') }})
+ r"""Amplitude event stream's interval size unit"""
+ size_unit: SourceAmplitudeEventStreamTimeIntervalEventsTimeIntervalSizeUnitEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size_unit') }})
+ r"""Amplitude event stream's interval size unit"""
+
+class SourceAmplitudeAmplitudeEnum(str, Enum):
+ AMPLITUDE = 'amplitude'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceAmplitude:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""Amplitude API Key. See the setup guide for more information on how to obtain this key."""
+ secret_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('secret_key') }})
+ r"""Amplitude Secret Key. See the setup guide for more information on how to obtain this key."""
+ source_type: SourceAmplitudeAmplitudeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date') }})
+ r"""UTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated."""
+ data_region: Optional[SourceAmplitudeDataRegionEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data_region'), 'exclude': lambda f: f is None }})
+ r"""Amplitude data region server"""
+ event_time_interval: Optional[SourceAmplitudeEventStreamTimeInterval] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('event_time_interval'), 'exclude': lambda f: f is None }})
+ r"""Amplitude event stream time interval"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_apify_dataset.py b/src/sdk/models/shared/source_apify_dataset.py
new file mode 100755
index 00000000..aa546e1e
--- /dev/null
+++ b/src/sdk/models/shared/source_apify_dataset.py
@@ -0,0 +1,24 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourceApifyDatasetApifyDatasetEnum(str, Enum):
+ APIFY_DATASET = 'apify-dataset'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceApifyDataset:
+ r"""The values required to configure the source."""
+
+ dataset_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('datasetId') }})
+ r"""ID of the dataset you would like to load to Airbyte."""
+ source_type: SourceApifyDatasetApifyDatasetEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ clean: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('clean'), 'exclude': lambda f: f is None }})
+ r"""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."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_asana.py b/src/sdk/models/shared/source_asana.py
new file mode 100755
index 00000000..cf784621
--- /dev/null
+++ b/src/sdk/models/shared/source_asana.py
@@ -0,0 +1,53 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class SourceAsanaCredentialsAuthenticateViaAsanaOauthCredentialsTitleEnum(str, Enum):
+ r"""OAuth Credentials"""
+ O_AUTH_CREDENTIALS = 'OAuth Credentials'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceAsanaCredentialsAuthenticateViaAsanaOauth:
+ r"""Choose how to authenticate to Github"""
+
+ client_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id') }})
+ client_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret') }})
+ refresh_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('refresh_token') }})
+ option_title: Optional[SourceAsanaCredentialsAuthenticateViaAsanaOauthCredentialsTitleEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('option_title'), 'exclude': lambda f: f is None }})
+ r"""OAuth Credentials"""
+
+class SourceAsanaCredentialsAuthenticateWithPersonalAccessTokenCredentialsTitleEnum(str, Enum):
+ r"""PAT Credentials"""
+ PAT_CREDENTIALS = 'PAT Credentials'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceAsanaCredentialsAuthenticateWithPersonalAccessToken:
+ r"""Choose how to authenticate to Github"""
+
+ personal_access_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('personal_access_token') }})
+ r"""Asana Personal Access Token (generate yours here)."""
+ option_title: Optional[SourceAsanaCredentialsAuthenticateWithPersonalAccessTokenCredentialsTitleEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('option_title'), 'exclude': lambda f: f is None }})
+ r"""PAT Credentials"""
+
+class SourceAsanaAsanaEnum(str, Enum):
+ ASANA = 'asana'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceAsana:
+ r"""The values required to configure the source."""
+
+ source_type: SourceAsanaAsanaEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ credentials: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials'), 'exclude': lambda f: f is None }})
+ r"""Choose how to authenticate to Github"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_auth0.py b/src/sdk/models/shared/source_auth0.py
new file mode 100755
index 00000000..c92345ba
--- /dev/null
+++ b/src/sdk/models/shared/source_auth0.py
@@ -0,0 +1,51 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any
+
+class SourceAuth0CredentialsOAuth2AccessTokenAuthenticationMethodEnum(str, Enum):
+ OAUTH2_ACCESS_TOKEN = 'oauth2_access_token'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceAuth0CredentialsOAuth2AccessToken:
+
+ access_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token') }})
+ r"""Also called API Access Token The access token used to call the Auth0 Management API Token. It's a JWT that contains specific grant permissions knowns as scopes."""
+ auth_type: SourceAuth0CredentialsOAuth2AccessTokenAuthenticationMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type') }})
+
+class SourceAuth0CredentialsOAuth2ConfidentialApplicationAuthenticationMethodEnum(str, Enum):
+ OAUTH2_CONFIDENTIAL_APPLICATION = 'oauth2_confidential_application'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceAuth0CredentialsOAuth2ConfidentialApplication:
+
+ audience: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audience') }})
+ r"""The audience for the token, which is your API. You can find this in the Identifier field on your API's settings tab"""
+ auth_type: SourceAuth0CredentialsOAuth2ConfidentialApplicationAuthenticationMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type') }})
+ client_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id') }})
+ r"""Your application's Client ID. You can find this value on the application's settings tab after you login the admin portal."""
+ client_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret') }})
+ r"""Your application's Client Secret. You can find this value on the application's settings tab after you login the admin portal."""
+
+class SourceAuth0Auth0Enum(str, Enum):
+ AUTH0 = 'auth0'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceAuth0:
+ r"""The values required to configure the source."""
+
+ base_url: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('base_url') }})
+ r"""The Authentication API is served over HTTPS. All URLs referenced in the documentation have the following base `https://YOUR_DOMAIN`"""
+ credentials: Any = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials') }})
+ source_type: SourceAuth0Auth0Enum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_aws_cloudtrail.py b/src/sdk/models/shared/source_aws_cloudtrail.py
new file mode 100755
index 00000000..b22df29d
--- /dev/null
+++ b/src/sdk/models/shared/source_aws_cloudtrail.py
@@ -0,0 +1,29 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from datetime import date
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+
+class SourceAwsCloudtrailAwsCloudtrailEnum(str, Enum):
+ AWS_CLOUDTRAIL = 'aws-cloudtrail'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceAwsCloudtrail:
+ r"""The values required to configure the source."""
+
+ aws_key_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('aws_key_id') }})
+ r"""AWS CloudTrail Access Key ID. See the docs for more information on how to obtain this key."""
+ aws_region_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('aws_region_name') }})
+ r"""The default AWS Region to use, for example, us-west-1 or us-west-2. When specifying a Region inline during client initialization, this property is named region_name."""
+ aws_secret_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('aws_secret_key') }})
+ r"""AWS CloudTrail Access Key ID. See the docs for more information on how to obtain this key."""
+ source_type: SourceAwsCloudtrailAwsCloudtrailEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: date = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.dateisoformat(False), 'decoder': utils.datefromisoformat, 'mm_field': fields.DateTime(format='iso') }})
+ r"""The date you would like to replicate data. Data in AWS CloudTrail is available for last 90 days only. Format: YYYY-MM-DD."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_azure_table.py b/src/sdk/models/shared/source_azure_table.py
new file mode 100755
index 00000000..13c18373
--- /dev/null
+++ b/src/sdk/models/shared/source_azure_table.py
@@ -0,0 +1,26 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourceAzureTableAzureTableEnum(str, Enum):
+ AZURE_TABLE = 'azure-table'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceAzureTable:
+ r"""The values required to configure the source."""
+
+ source_type: SourceAzureTableAzureTableEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ storage_access_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('storage_access_key') }})
+ r"""Azure Table Storage Access Key. See the docs for more information on how to obtain this key."""
+ storage_account_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('storage_account_name') }})
+ r"""The name of your storage account."""
+ storage_endpoint_suffix: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('storage_endpoint_suffix'), 'exclude': lambda f: f is None }})
+ r"""Azure Table Storage service account URL suffix. See the docs for more information on how to obtain endpoint suffix"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_bamboo_hr.py b/src/sdk/models/shared/source_bamboo_hr.py
new file mode 100755
index 00000000..19e53292
--- /dev/null
+++ b/src/sdk/models/shared/source_bamboo_hr.py
@@ -0,0 +1,28 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourceBambooHrBambooHrEnum(str, Enum):
+ BAMBOO_HR = 'bamboo-hr'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceBambooHr:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""Api key of bamboo hr"""
+ source_type: SourceBambooHrBambooHrEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ subdomain: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('subdomain') }})
+ r"""Sub Domain of bamboo hr"""
+ custom_reports_fields: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('custom_reports_fields'), 'exclude': lambda f: f is None }})
+ r"""Comma-separated list of fields to include in custom reports."""
+ custom_reports_include_default_fields: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('custom_reports_include_default_fields'), 'exclude': lambda f: f is None }})
+ r"""If true, the custom reports endpoint will include the default fields defined here: https://documentation.bamboohr.com/docs/list-of-field-names."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_bigcommerce.py b/src/sdk/models/shared/source_bigcommerce.py
new file mode 100755
index 00000000..ad960c56
--- /dev/null
+++ b/src/sdk/models/shared/source_bigcommerce.py
@@ -0,0 +1,25 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceBigcommerceBigcommerceEnum(str, Enum):
+ BIGCOMMERCE = 'bigcommerce'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceBigcommerce:
+ r"""The values required to configure the source."""
+
+ access_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token') }})
+ r"""Access Token for making authenticated requests."""
+ source_type: SourceBigcommerceBigcommerceEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date') }})
+ r"""The date you would like to replicate data. Format: YYYY-MM-DD."""
+ store_hash: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('store_hash') }})
+ r"""The hash code of the store. For https://api.bigcommerce.com/stores/HASH_CODE/v3/, The store's hash code is 'HASH_CODE'."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_bigquery.py b/src/sdk/models/shared/source_bigquery.py
new file mode 100755
index 00000000..c8060434
--- /dev/null
+++ b/src/sdk/models/shared/source_bigquery.py
@@ -0,0 +1,26 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourceBigqueryBigqueryEnum(str, Enum):
+ BIGQUERY = 'bigquery'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceBigquery:
+ r"""The values required to configure the source."""
+
+ credentials_json: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials_json') }})
+ r"""The contents of your Service Account Key JSON file. See the docs for more information on how to obtain this key."""
+ project_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('project_id') }})
+ r"""The GCP project ID for the project containing the target BigQuery dataset."""
+ source_type: SourceBigqueryBigqueryEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ dataset_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dataset_id'), 'exclude': lambda f: f is None }})
+ r"""The dataset ID to search for tables and views. If you are only loading data from one dataset, setting this option could result in much faster schema discovery."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_bing_ads.py b/src/sdk/models/shared/source_bing_ads.py
new file mode 100755
index 00000000..f4931408
--- /dev/null
+++ b/src/sdk/models/shared/source_bing_ads.py
@@ -0,0 +1,38 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from datetime import date
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Optional
+
+class SourceBingAdsAuthMethodEnum(str, Enum):
+ OAUTH2_0 = 'oauth2.0'
+
+class SourceBingAdsBingAdsEnum(str, Enum):
+ BING_ADS = 'bing-ads'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceBingAds:
+ r"""The values required to configure the source."""
+
+ client_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id') }})
+ r"""The Client ID of your Microsoft Advertising developer application."""
+ developer_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('developer_token') }})
+ r"""Developer token associated with user. See more info in the docs."""
+ refresh_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('refresh_token') }})
+ r"""Refresh Token to renew the expired Access Token."""
+ reports_start_date: date = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('reports_start_date'), 'encoder': utils.dateisoformat(False), 'decoder': utils.datefromisoformat, 'mm_field': fields.DateTime(format='iso') }})
+ r"""The start date from which to begin replicating report data. Any data generated before this date will not be replicated in reports. This is a UTC date in YYYY-MM-DD format."""
+ source_type: SourceBingAdsBingAdsEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ auth_method: Optional[SourceBingAdsAuthMethodEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_method'), 'exclude': lambda f: f is None }})
+ client_secret: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret'), 'exclude': lambda f: f is None }})
+ r"""The Client Secret of your Microsoft Advertising developer application."""
+ tenant_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tenant_id'), 'exclude': lambda f: f is None }})
+ r"""The Tenant ID of your Microsoft Advertising developer application. Set this to \\"common\\" unless you know you need a different value."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_braintree.py b/src/sdk/models/shared/source_braintree.py
new file mode 100755
index 00000000..7a062727
--- /dev/null
+++ b/src/sdk/models/shared/source_braintree.py
@@ -0,0 +1,40 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Optional
+
+class SourceBraintreeEnvironmentEnum(str, Enum):
+ r"""Environment specifies where the data will come from."""
+ DEVELOPMENT = 'Development'
+ SANDBOX = 'Sandbox'
+ QA = 'Qa'
+ PRODUCTION = 'Production'
+
+class SourceBraintreeBraintreeEnum(str, Enum):
+ BRAINTREE = 'braintree'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceBraintree:
+ r"""The values required to configure the source."""
+
+ environment: SourceBraintreeEnvironmentEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('environment') }})
+ r"""Environment specifies where the data will come from."""
+ merchant_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('merchant_id') }})
+ r"""The unique identifier for your entire gateway account. See the docs for more information on how to obtain this ID."""
+ private_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('private_key') }})
+ r"""Braintree Private Key. See the docs for more information on how to obtain this key."""
+ public_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('public_key') }})
+ r"""Braintree Public Key. See the docs for more information on how to obtain this key."""
+ source_type: SourceBraintreeBraintreeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }})
+ r"""UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_braze.py b/src/sdk/models/shared/source_braze.py
new file mode 100755
index 00000000..cb412f68
--- /dev/null
+++ b/src/sdk/models/shared/source_braze.py
@@ -0,0 +1,27 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from datetime import date
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+
+class SourceBrazeBrazeEnum(str, Enum):
+ BRAZE = 'braze'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceBraze:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""Braze REST API key"""
+ source_type: SourceBrazeBrazeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: date = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.dateisoformat(False), 'decoder': utils.datefromisoformat, 'mm_field': fields.DateTime(format='iso') }})
+ r"""Rows after this date will be synced"""
+ url: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('url') }})
+ r"""Braze REST API endpoint"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_chargebee.py b/src/sdk/models/shared/source_chargebee.py
new file mode 100755
index 00000000..12264531
--- /dev/null
+++ b/src/sdk/models/shared/source_chargebee.py
@@ -0,0 +1,35 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+
+class SourceChargebeeProductCatalogEnum(str, Enum):
+ r"""Product Catalog version of your Chargebee site. Instructions on how to find your version you may find here under `API Version` section."""
+ ONE_0 = '1.0'
+ TWO_0 = '2.0'
+
+class SourceChargebeeChargebeeEnum(str, Enum):
+ CHARGEBEE = 'chargebee'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceChargebee:
+ r"""The values required to configure the source."""
+
+ product_catalog: SourceChargebeeProductCatalogEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('product_catalog') }})
+ r"""Product Catalog version of your Chargebee site. Instructions on how to find your version you may find here under `API Version` section."""
+ site: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('site') }})
+ r"""The site prefix for your Chargebee instance."""
+ site_api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('site_api_key') }})
+ r"""Chargebee API Key. See the docs for more information on how to obtain this key."""
+ source_type: SourceChargebeeChargebeeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }})
+ r"""UTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_chartmogul.py b/src/sdk/models/shared/source_chartmogul.py
new file mode 100755
index 00000000..e04367ba
--- /dev/null
+++ b/src/sdk/models/shared/source_chartmogul.py
@@ -0,0 +1,35 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+
+class SourceChartmogulIntervalEnum(str, Enum):
+ r"""Some APIs such as Metrics require intervals to cluster data."""
+ DAY = 'day'
+ WEEK = 'week'
+ MONTH = 'month'
+ QUARTER = 'quarter'
+
+class SourceChartmogulChartmogulEnum(str, Enum):
+ CHARTMOGUL = 'chartmogul'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceChartmogul:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""Your Chartmogul API key. See the docs for info on how to obtain this."""
+ interval: SourceChartmogulIntervalEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('interval') }})
+ r"""Some APIs such as Metrics require intervals to cluster data."""
+ source_type: SourceChartmogulChartmogulEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }})
+ r"""UTC date and time in the format 2017-01-25T00:00:00Z. When feasible, any data before this date will not be replicated."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_clickhouse.py b/src/sdk/models/shared/source_clickhouse.py
new file mode 100755
index 00000000..3f0639ad
--- /dev/null
+++ b/src/sdk/models/shared/source_clickhouse.py
@@ -0,0 +1,87 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class SourceClickhouseClickhouseEnum(str, Enum):
+ CLICKHOUSE = 'clickhouse'
+
+class SourceClickhouseTunnelMethodPasswordAuthenticationTunnelMethodEnum(str, Enum):
+ r"""Connect through a jump server tunnel host using username and password authentication"""
+ SSH_PASSWORD_AUTH = 'SSH_PASSWORD_AUTH'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceClickhouseTunnelMethodPasswordAuthentication:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ tunnel_host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_host') }})
+ r"""Hostname of the jump server host that allows inbound ssh tunnel."""
+ tunnel_method: SourceClickhouseTunnelMethodPasswordAuthenticationTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""Connect through a jump server tunnel host using username and password authentication"""
+ tunnel_port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_port') }})
+ r"""Port on the proxy/jump server that accepts inbound ssh connections."""
+ tunnel_user: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user') }})
+ r"""OS-level username for logging into the jump server host"""
+ tunnel_user_password: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user_password') }})
+ r"""OS-level password for logging into the jump server host"""
+
+class SourceClickhouseTunnelMethodSSHKeyAuthenticationTunnelMethodEnum(str, Enum):
+ r"""Connect through a jump server tunnel host using username and ssh key"""
+ SSH_KEY_AUTH = 'SSH_KEY_AUTH'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceClickhouseTunnelMethodSSHKeyAuthentication:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ ssh_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ssh_key') }})
+ r"""OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )"""
+ tunnel_host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_host') }})
+ r"""Hostname of the jump server host that allows inbound ssh tunnel."""
+ tunnel_method: SourceClickhouseTunnelMethodSSHKeyAuthenticationTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""Connect through a jump server tunnel host using username and ssh key"""
+ tunnel_port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_port') }})
+ r"""Port on the proxy/jump server that accepts inbound ssh connections."""
+ tunnel_user: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user') }})
+ r"""OS-level username for logging into the jump server host."""
+
+class SourceClickhouseTunnelMethodNoTunnelTunnelMethodEnum(str, Enum):
+ r"""No ssh tunnel needed to connect to database"""
+ NO_TUNNEL = 'NO_TUNNEL'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceClickhouseTunnelMethodNoTunnel:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ tunnel_method: SourceClickhouseTunnelMethodNoTunnelTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""No ssh tunnel needed to connect to database"""
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceClickhouse:
+ r"""The values required to configure the source."""
+
+ database: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('database') }})
+ r"""The name of the database."""
+ host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('host') }})
+ r"""The host endpoint of the Clickhouse cluster."""
+ port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('port') }})
+ r"""The port of the database."""
+ source_type: SourceClickhouseClickhouseEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ username: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('username') }})
+ r"""The username which is used to access the database."""
+ password: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password'), 'exclude': lambda f: f is None }})
+ r"""The password associated with this username."""
+ tunnel_method: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method'), 'exclude': lambda f: f is None }})
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_clickup_api.py b/src/sdk/models/shared/source_clickup_api.py
new file mode 100755
index 00000000..6e9a8593
--- /dev/null
+++ b/src/sdk/models/shared/source_clickup_api.py
@@ -0,0 +1,32 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourceClickupAPIClickupAPIEnum(str, Enum):
+ CLICKUP_API = 'clickup-api'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceClickupAPI:
+ r"""The values required to configure the source."""
+
+ api_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_token') }})
+ r"""Every ClickUp API call required authentication. This field is your personal API token. See here."""
+ source_type: SourceClickupAPIClickupAPIEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ folder_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('folder_id'), 'exclude': lambda f: f is None }})
+ r"""The ID of your folder in your space. Retrieve it from the `/space/{space_id}/folder` of the ClickUp API. See here."""
+ include_closed_tasks: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('include_closed_tasks'), 'exclude': lambda f: f is None }})
+ r"""Include or exclude closed tasks. By default, they are excluded. See here."""
+ list_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('list_id'), 'exclude': lambda f: f is None }})
+ r"""The ID of your list in your folder. Retrieve it from the `/folder/{folder_id}/list` of the ClickUp API. See here."""
+ space_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('space_id'), 'exclude': lambda f: f is None }})
+ r"""The ID of your space in your workspace. Retrieve it from the `/team/{team_id}/space` of the ClickUp API. See here."""
+ team_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('team_id'), 'exclude': lambda f: f is None }})
+ r"""The ID of your team in ClickUp. Retrieve it from the `/team` of the ClickUp API. See here."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_close_com.py b/src/sdk/models/shared/source_close_com.py
new file mode 100755
index 00000000..4dd873ec
--- /dev/null
+++ b/src/sdk/models/shared/source_close_com.py
@@ -0,0 +1,27 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Optional
+
+class SourceCloseComCloseComEnum(str, Enum):
+ CLOSE_COM = 'close-com'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceCloseCom:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""Close.com API key (usually starts with 'api_'; find yours here)."""
+ source_type: SourceCloseComCloseComEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }})
+ r"""The start date to sync data. Leave blank for full sync. Format: YYYY-MM-DD."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_coda.py b/src/sdk/models/shared/source_coda.py
new file mode 100755
index 00000000..e88ec770
--- /dev/null
+++ b/src/sdk/models/shared/source_coda.py
@@ -0,0 +1,21 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceCodaCodaEnum(str, Enum):
+ CODA = 'coda'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceCoda:
+ r"""The values required to configure the source."""
+
+ auth_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_token') }})
+ r"""Bearer token"""
+ source_type: SourceCodaCodaEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_coin_api.py b/src/sdk/models/shared/source_coin_api.py
new file mode 100755
index 00000000..849db0ae
--- /dev/null
+++ b/src/sdk/models/shared/source_coin_api.py
@@ -0,0 +1,47 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourceCoinAPIEnvironmentEnum(str, Enum):
+ r"""The environment to use. Either sandbox or production."""
+ SANDBOX = 'sandbox'
+ PRODUCTION = 'production'
+
+class SourceCoinAPICoinAPIEnum(str, Enum):
+ COIN_API = 'coin-api'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceCoinAPI:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""API Key"""
+ environment: SourceCoinAPIEnvironmentEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('environment') }})
+ r"""The environment to use. Either sandbox or production."""
+ period: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('period') }})
+ r"""The period to use. See the documentation for a list. https://docs.coinapi.io/#list-all-periods-get"""
+ source_type: SourceCoinAPICoinAPIEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date') }})
+ r"""The start date in ISO 8601 format."""
+ symbol_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('symbol_id') }})
+ r"""The symbol ID to use. See the documentation for a list.
+ https://docs.coinapi.io/#list-all-symbols-get
+ """
+ end_date: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('end_date'), 'exclude': lambda f: f is None }})
+ r"""The end date in ISO 8601 format. If not supplied, data will be returned
+ from the start date to the current time, or when the count of result
+ elements reaches its limit.
+ """
+ limit: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('limit'), 'exclude': lambda f: f is None }})
+ r"""The maximum number of elements to return. If not supplied, the default
+ is 100. For numbers larger than 100, each 100 items is counted as one
+ request for pricing purposes. Maximum value is 100000.
+ """
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_coinmarketcap.py b/src/sdk/models/shared/source_coinmarketcap.py
new file mode 100755
index 00000000..890a866d
--- /dev/null
+++ b/src/sdk/models/shared/source_coinmarketcap.py
@@ -0,0 +1,31 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourceCoinmarketcapDataTypeEnum(str, Enum):
+ r"""/latest: Latest market ticker quotes and averages for cryptocurrencies and exchanges. /historical: Intervals of historic market data like OHLCV data or data for use in charting libraries. See here."""
+ LATEST = 'latest'
+ HISTORICAL = 'historical'
+
+class SourceCoinmarketcapCoinmarketcapEnum(str, Enum):
+ COINMARKETCAP = 'coinmarketcap'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceCoinmarketcap:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""Your API Key. See here. The token is case sensitive."""
+ data_type: SourceCoinmarketcapDataTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data_type') }})
+ r"""/latest: Latest market ticker quotes and averages for cryptocurrencies and exchanges. /historical: Intervals of historic market data like OHLCV data or data for use in charting libraries. See here."""
+ source_type: SourceCoinmarketcapCoinmarketcapEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ symbols: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('symbols'), 'exclude': lambda f: f is None }})
+ r"""Cryptocurrency symbols. (only used for quotes stream)"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_configcat.py b/src/sdk/models/shared/source_configcat.py
new file mode 100755
index 00000000..64eb2055
--- /dev/null
+++ b/src/sdk/models/shared/source_configcat.py
@@ -0,0 +1,23 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceConfigcatConfigcatEnum(str, Enum):
+ CONFIGCAT = 'configcat'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceConfigcat:
+ r"""The values required to configure the source."""
+
+ password: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password') }})
+ r"""Basic auth password. See here."""
+ source_type: SourceConfigcatConfigcatEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ username: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('username') }})
+ r"""Basic auth user name. See here."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_confluence.py b/src/sdk/models/shared/source_confluence.py
new file mode 100755
index 00000000..106cb5be
--- /dev/null
+++ b/src/sdk/models/shared/source_confluence.py
@@ -0,0 +1,25 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceConfluenceConfluenceEnum(str, Enum):
+ CONFLUENCE = 'confluence'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceConfluence:
+ r"""The values required to configure the source."""
+
+ api_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_token') }})
+ r"""Please follow the Jira confluence for generating an API token: generating an API token."""
+ domain_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('domain_name') }})
+ r"""Your Confluence domain name"""
+ email: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('email') }})
+ r"""Your Confluence login email"""
+ source_type: SourceConfluenceConfluenceEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_datascope.py b/src/sdk/models/shared/source_datascope.py
new file mode 100755
index 00000000..36810505
--- /dev/null
+++ b/src/sdk/models/shared/source_datascope.py
@@ -0,0 +1,23 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceDatascopeDatascopeEnum(str, Enum):
+ DATASCOPE = 'datascope'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceDatascope:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""API Key"""
+ source_type: SourceDatascopeDatascopeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date') }})
+ r"""Start date for the data to be replicated"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_delighted.py b/src/sdk/models/shared/source_delighted.py
new file mode 100755
index 00000000..0ed51306
--- /dev/null
+++ b/src/sdk/models/shared/source_delighted.py
@@ -0,0 +1,26 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+
+class SourceDelightedDelightedEnum(str, Enum):
+ DELIGHTED = 'delighted'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceDelighted:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""A Delighted API key."""
+ since: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('since'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }})
+ r"""The date from which you'd like to replicate the data"""
+ source_type: SourceDelightedDelightedEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_dixa.py b/src/sdk/models/shared/source_dixa.py
new file mode 100755
index 00000000..c6cfbdc9
--- /dev/null
+++ b/src/sdk/models/shared/source_dixa.py
@@ -0,0 +1,26 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourceDixaDixaEnum(str, Enum):
+ DIXA = 'dixa'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceDixa:
+ r"""The values required to configure the source."""
+
+ api_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_token') }})
+ r"""Dixa API token"""
+ source_type: SourceDixaDixaEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date') }})
+ r"""The connector pulls records updated from this date onwards."""
+ batch_size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('batch_size'), 'exclude': lambda f: f is None }})
+ r"""Number of days to batch into one request. Max 31."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_dockerhub.py b/src/sdk/models/shared/source_dockerhub.py
new file mode 100755
index 00000000..9b5b65d9
--- /dev/null
+++ b/src/sdk/models/shared/source_dockerhub.py
@@ -0,0 +1,21 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceDockerhubDockerhubEnum(str, Enum):
+ DOCKERHUB = 'dockerhub'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceDockerhub:
+ r"""The values required to configure the source."""
+
+ docker_username: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('docker_username') }})
+ r"""Username of DockerHub person or organization (for https://hub.docker.com/v2/repositories/USERNAME/ API call)"""
+ source_type: SourceDockerhubDockerhubEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_dremio.py b/src/sdk/models/shared/source_dremio.py
new file mode 100755
index 00000000..76f8f9be
--- /dev/null
+++ b/src/sdk/models/shared/source_dremio.py
@@ -0,0 +1,23 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceDremioDremioEnum(str, Enum):
+ DREMIO = 'dremio'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceDremio:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""API Key that is generated when you authenticate to Dremio API"""
+ base_url: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('base_url') }})
+ r"""URL of your Dremio instance"""
+ source_type: SourceDremioDremioEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_dynamodb.py b/src/sdk/models/shared/source_dynamodb.py
new file mode 100755
index 00000000..0ab45079
--- /dev/null
+++ b/src/sdk/models/shared/source_dynamodb.py
@@ -0,0 +1,59 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourceDynamodbDynamodbRegionEnum(str, Enum):
+ r"""The region of the Dynamodb database"""
+ UNKNOWN = ''
+ US_EAST_1 = 'us-east-1'
+ US_EAST_2 = 'us-east-2'
+ US_WEST_1 = 'us-west-1'
+ US_WEST_2 = 'us-west-2'
+ AF_SOUTH_1 = 'af-south-1'
+ AP_EAST_1 = 'ap-east-1'
+ AP_SOUTH_1 = 'ap-south-1'
+ AP_NORTHEAST_1 = 'ap-northeast-1'
+ AP_NORTHEAST_2 = 'ap-northeast-2'
+ AP_NORTHEAST_3 = 'ap-northeast-3'
+ AP_SOUTHEAST_1 = 'ap-southeast-1'
+ AP_SOUTHEAST_2 = 'ap-southeast-2'
+ CA_CENTRAL_1 = 'ca-central-1'
+ CN_NORTH_1 = 'cn-north-1'
+ CN_NORTHWEST_1 = 'cn-northwest-1'
+ EU_CENTRAL_1 = 'eu-central-1'
+ EU_NORTH_1 = 'eu-north-1'
+ EU_SOUTH_1 = 'eu-south-1'
+ EU_WEST_1 = 'eu-west-1'
+ EU_WEST_2 = 'eu-west-2'
+ EU_WEST_3 = 'eu-west-3'
+ SA_EAST_1 = 'sa-east-1'
+ ME_SOUTH_1 = 'me-south-1'
+ US_GOV_EAST_1 = 'us-gov-east-1'
+ US_GOV_WEST_1 = 'us-gov-west-1'
+
+class SourceDynamodbDynamodbEnum(str, Enum):
+ DYNAMODB = 'dynamodb'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceDynamodb:
+ r"""The values required to configure the source."""
+
+ access_key_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_key_id') }})
+ r"""The access key id to access Dynamodb. Airbyte requires read permissions to the database"""
+ secret_access_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('secret_access_key') }})
+ r"""The corresponding secret to the access key id."""
+ source_type: SourceDynamodbDynamodbEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ endpoint: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('endpoint'), 'exclude': lambda f: f is None }})
+ r"""the URL of the Dynamodb database"""
+ region: Optional[SourceDynamodbDynamodbRegionEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('region'), 'exclude': lambda f: f is None }})
+ r"""The region of the Dynamodb database"""
+ reserved_attribute_names: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('reserved_attribute_names'), 'exclude': lambda f: f is None }})
+ r"""Comma separated reserved attribute names present in your tables"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_e2e_test_cloud.py b/src/sdk/models/shared/source_e2e_test_cloud.py
new file mode 100755
index 00000000..942516eb
--- /dev/null
+++ b/src/sdk/models/shared/source_e2e_test_cloud.py
@@ -0,0 +1,61 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class SourceE2eTestCloudMockCatalogMultiSchemaTypeEnum(str, Enum):
+ MULTI_STREAM = 'MULTI_STREAM'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceE2eTestCloudMockCatalogMultiSchema:
+ r"""A catalog with multiple data streams, each with a different schema."""
+
+ stream_schemas: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('stream_schemas') }})
+ r"""A Json object specifying multiple data streams and their schemas. Each key in this object is one stream name. Each value is the schema for that stream. The schema should be compatible with draft-07. See this doc for examples."""
+ type: SourceE2eTestCloudMockCatalogMultiSchemaTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }})
+
+class SourceE2eTestCloudMockCatalogSingleSchemaTypeEnum(str, Enum):
+ SINGLE_STREAM = 'SINGLE_STREAM'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceE2eTestCloudMockCatalogSingleSchema:
+ r"""A catalog with one or multiple streams that share the same schema."""
+
+ stream_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('stream_name') }})
+ r"""Name of the data stream."""
+ stream_schema: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('stream_schema') }})
+ r"""A Json schema for the stream. The schema should be compatible with draft-07. See this doc for examples."""
+ type: SourceE2eTestCloudMockCatalogSingleSchemaTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }})
+ stream_duplication: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('stream_duplication'), 'exclude': lambda f: f is None }})
+ r"""Duplicate the stream for easy load testing. Each stream name will have a number suffix. For example, if the stream name is \\"ds\\", the duplicated streams will be \\"ds_0\\", \\"ds_1\\", etc."""
+
+class SourceE2eTestCloudE2eTestCloudEnum(str, Enum):
+ E2E_TEST_CLOUD = 'e2e-test-cloud'
+
+class SourceE2eTestCloudTypeEnum(str, Enum):
+ CONTINUOUS_FEED = 'CONTINUOUS_FEED'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceE2eTestCloud:
+ r"""The values required to configure the source."""
+
+ max_messages: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('max_messages') }})
+ r"""Number of records to emit per stream. Min 1. Max 100 billion."""
+ mock_catalog: Any = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mock_catalog') }})
+ source_type: SourceE2eTestCloudE2eTestCloudEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ message_interval_ms: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message_interval_ms'), 'exclude': lambda f: f is None }})
+ r"""Interval between messages in ms. Min 0 ms. Max 60000 ms (1 minute)."""
+ seed: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('seed'), 'exclude': lambda f: f is None }})
+ r"""When the seed is unspecified, the current time millis will be used as the seed. Range: [0, 1000000]."""
+ type: Optional[SourceE2eTestCloudTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_emailoctopus.py b/src/sdk/models/shared/source_emailoctopus.py
new file mode 100755
index 00000000..00c6ba86
--- /dev/null
+++ b/src/sdk/models/shared/source_emailoctopus.py
@@ -0,0 +1,21 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceEmailoctopusEmailoctopusEnum(str, Enum):
+ EMAILOCTOPUS = 'emailoctopus'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceEmailoctopus:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""EmailOctopus API Key. See the docs for information on how to generate this key."""
+ source_type: SourceEmailoctopusEmailoctopusEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_exchange_rates.py b/src/sdk/models/shared/source_exchange_rates.py
new file mode 100755
index 00000000..83389664
--- /dev/null
+++ b/src/sdk/models/shared/source_exchange_rates.py
@@ -0,0 +1,30 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from datetime import date
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Optional
+
+class SourceExchangeRatesExchangeRatesEnum(str, Enum):
+ EXCHANGE_RATES = 'exchange-rates'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceExchangeRates:
+ r"""The values required to configure the source."""
+
+ access_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_key') }})
+ r"""Your API Key. See here. The key is case sensitive."""
+ source_type: SourceExchangeRatesExchangeRatesEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: date = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.dateisoformat(False), 'decoder': utils.datefromisoformat, 'mm_field': fields.DateTime(format='iso') }})
+ r"""Start getting data from that date."""
+ base: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('base'), 'exclude': lambda f: f is None }})
+ r"""ISO reference currency. See here. Free plan doesn't support Source Currency Switching, default base currency is EUR"""
+ ignore_weekends: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ignore_weekends'), 'exclude': lambda f: f is None }})
+ r"""Ignore weekends? (Exchanges don't run on weekends)"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_facebook_marketing.py b/src/sdk/models/shared/source_facebook_marketing.py
new file mode 100755
index 00000000..7cf966eb
--- /dev/null
+++ b/src/sdk/models/shared/source_facebook_marketing.py
@@ -0,0 +1,263 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Optional
+
+class SourceFacebookMarketingInsightConfigValidActionBreakdownsEnum(str, Enum):
+ r"""Generic enumeration.
+
+ Derive from this class to define new enumerations.
+ """
+ ACTION_CANVAS_COMPONENT_NAME = 'action_canvas_component_name'
+ ACTION_CAROUSEL_CARD_ID = 'action_carousel_card_id'
+ ACTION_CAROUSEL_CARD_NAME = 'action_carousel_card_name'
+ ACTION_DESTINATION = 'action_destination'
+ ACTION_DEVICE = 'action_device'
+ ACTION_REACTION = 'action_reaction'
+ ACTION_TARGET_ID = 'action_target_id'
+ ACTION_TYPE = 'action_type'
+ ACTION_VIDEO_SOUND = 'action_video_sound'
+ ACTION_VIDEO_TYPE = 'action_video_type'
+
+class SourceFacebookMarketingInsightConfigValidBreakdownsEnum(str, Enum):
+ r"""Generic enumeration.
+
+ Derive from this class to define new enumerations.
+ """
+ AD_FORMAT_ASSET = 'ad_format_asset'
+ AGE = 'age'
+ APP_ID = 'app_id'
+ BODY_ASSET = 'body_asset'
+ CALL_TO_ACTION_ASSET = 'call_to_action_asset'
+ COUNTRY = 'country'
+ DESCRIPTION_ASSET = 'description_asset'
+ DEVICE_PLATFORM = 'device_platform'
+ DMA = 'dma'
+ FREQUENCY_VALUE = 'frequency_value'
+ GENDER = 'gender'
+ HOURLY_STATS_AGGREGATED_BY_ADVERTISER_TIME_ZONE = 'hourly_stats_aggregated_by_advertiser_time_zone'
+ HOURLY_STATS_AGGREGATED_BY_AUDIENCE_TIME_ZONE = 'hourly_stats_aggregated_by_audience_time_zone'
+ IMAGE_ASSET = 'image_asset'
+ IMPRESSION_DEVICE = 'impression_device'
+ IS_CONVERSION_ID_MODELED = 'is_conversion_id_modeled'
+ LINK_URL_ASSET = 'link_url_asset'
+ MMM = 'mmm'
+ PLACE_PAGE_ID = 'place_page_id'
+ PLATFORM_POSITION = 'platform_position'
+ PRODUCT_ID = 'product_id'
+ PUBLISHER_PLATFORM = 'publisher_platform'
+ REGION = 'region'
+ SKAN_CAMPAIGN_ID = 'skan_campaign_id'
+ SKAN_CONVERSION_ID = 'skan_conversion_id'
+ TITLE_ASSET = 'title_asset'
+ VIDEO_ASSET = 'video_asset'
+
+class SourceFacebookMarketingInsightConfigValidEnumsEnum(str, Enum):
+ r"""Generic enumeration.
+
+ Derive from this class to define new enumerations.
+ """
+ ACCOUNT_CURRENCY = 'account_currency'
+ ACCOUNT_ID = 'account_id'
+ ACCOUNT_NAME = 'account_name'
+ ACTION_VALUES = 'action_values'
+ ACTIONS = 'actions'
+ AD_BID_VALUE = 'ad_bid_value'
+ AD_CLICK_ACTIONS = 'ad_click_actions'
+ AD_ID = 'ad_id'
+ AD_IMPRESSION_ACTIONS = 'ad_impression_actions'
+ AD_NAME = 'ad_name'
+ ADSET_BID_VALUE = 'adset_bid_value'
+ ADSET_END = 'adset_end'
+ ADSET_ID = 'adset_id'
+ ADSET_NAME = 'adset_name'
+ ADSET_START = 'adset_start'
+ AGE_TARGETING = 'age_targeting'
+ ATTRIBUTION_SETTING = 'attribution_setting'
+ AUCTION_BID = 'auction_bid'
+ AUCTION_COMPETITIVENESS = 'auction_competitiveness'
+ AUCTION_MAX_COMPETITOR_BID = 'auction_max_competitor_bid'
+ BUYING_TYPE = 'buying_type'
+ CAMPAIGN_ID = 'campaign_id'
+ CAMPAIGN_NAME = 'campaign_name'
+ CANVAS_AVG_VIEW_PERCENT = 'canvas_avg_view_percent'
+ CANVAS_AVG_VIEW_TIME = 'canvas_avg_view_time'
+ CATALOG_SEGMENT_ACTIONS = 'catalog_segment_actions'
+ CATALOG_SEGMENT_VALUE = 'catalog_segment_value'
+ CATALOG_SEGMENT_VALUE_MOBILE_PURCHASE_ROAS = 'catalog_segment_value_mobile_purchase_roas'
+ CATALOG_SEGMENT_VALUE_OMNI_PURCHASE_ROAS = 'catalog_segment_value_omni_purchase_roas'
+ CATALOG_SEGMENT_VALUE_WEBSITE_PURCHASE_ROAS = 'catalog_segment_value_website_purchase_roas'
+ CLICKS = 'clicks'
+ CONVERSION_RATE_RANKING = 'conversion_rate_ranking'
+ CONVERSION_VALUES = 'conversion_values'
+ CONVERSIONS = 'conversions'
+ CONVERTED_PRODUCT_QUANTITY = 'converted_product_quantity'
+ CONVERTED_PRODUCT_VALUE = 'converted_product_value'
+ COST_PER_15_SEC_VIDEO_VIEW = 'cost_per_15_sec_video_view'
+ COST_PER_2_SEC_CONTINUOUS_VIDEO_VIEW = 'cost_per_2_sec_continuous_video_view'
+ COST_PER_ACTION_TYPE = 'cost_per_action_type'
+ COST_PER_AD_CLICK = 'cost_per_ad_click'
+ COST_PER_CONVERSION = 'cost_per_conversion'
+ COST_PER_DDA_COUNTBY_CONVS = 'cost_per_dda_countby_convs'
+ COST_PER_ESTIMATED_AD_RECALLERS = 'cost_per_estimated_ad_recallers'
+ COST_PER_INLINE_LINK_CLICK = 'cost_per_inline_link_click'
+ COST_PER_INLINE_POST_ENGAGEMENT = 'cost_per_inline_post_engagement'
+ COST_PER_ONE_THOUSAND_AD_IMPRESSION = 'cost_per_one_thousand_ad_impression'
+ COST_PER_OUTBOUND_CLICK = 'cost_per_outbound_click'
+ COST_PER_THRUPLAY = 'cost_per_thruplay'
+ COST_PER_UNIQUE_ACTION_TYPE = 'cost_per_unique_action_type'
+ COST_PER_UNIQUE_CLICK = 'cost_per_unique_click'
+ COST_PER_UNIQUE_CONVERSION = 'cost_per_unique_conversion'
+ COST_PER_UNIQUE_INLINE_LINK_CLICK = 'cost_per_unique_inline_link_click'
+ COST_PER_UNIQUE_OUTBOUND_CLICK = 'cost_per_unique_outbound_click'
+ CPC = 'cpc'
+ CPM = 'cpm'
+ CPP = 'cpp'
+ CREATED_TIME = 'created_time'
+ CTR = 'ctr'
+ DATE_START = 'date_start'
+ DATE_STOP = 'date_stop'
+ DDA_COUNTBY_CONVS = 'dda_countby_convs'
+ DDA_RESULTS = 'dda_results'
+ ENGAGEMENT_RATE_RANKING = 'engagement_rate_ranking'
+ ESTIMATED_AD_RECALL_RATE = 'estimated_ad_recall_rate'
+ ESTIMATED_AD_RECALL_RATE_LOWER_BOUND = 'estimated_ad_recall_rate_lower_bound'
+ ESTIMATED_AD_RECALL_RATE_UPPER_BOUND = 'estimated_ad_recall_rate_upper_bound'
+ ESTIMATED_AD_RECALLERS = 'estimated_ad_recallers'
+ ESTIMATED_AD_RECALLERS_LOWER_BOUND = 'estimated_ad_recallers_lower_bound'
+ ESTIMATED_AD_RECALLERS_UPPER_BOUND = 'estimated_ad_recallers_upper_bound'
+ FREQUENCY = 'frequency'
+ FULL_VIEW_IMPRESSIONS = 'full_view_impressions'
+ FULL_VIEW_REACH = 'full_view_reach'
+ GENDER_TARGETING = 'gender_targeting'
+ IMPRESSIONS = 'impressions'
+ INLINE_LINK_CLICK_CTR = 'inline_link_click_ctr'
+ INLINE_LINK_CLICKS = 'inline_link_clicks'
+ INLINE_POST_ENGAGEMENT = 'inline_post_engagement'
+ INSTANT_EXPERIENCE_CLICKS_TO_OPEN = 'instant_experience_clicks_to_open'
+ INSTANT_EXPERIENCE_CLICKS_TO_START = 'instant_experience_clicks_to_start'
+ INSTANT_EXPERIENCE_OUTBOUND_CLICKS = 'instant_experience_outbound_clicks'
+ INTERACTIVE_COMPONENT_TAP = 'interactive_component_tap'
+ LABELS = 'labels'
+ LOCATION = 'location'
+ MOBILE_APP_PURCHASE_ROAS = 'mobile_app_purchase_roas'
+ OBJECTIVE = 'objective'
+ OPTIMIZATION_GOAL = 'optimization_goal'
+ OUTBOUND_CLICKS = 'outbound_clicks'
+ OUTBOUND_CLICKS_CTR = 'outbound_clicks_ctr'
+ PLACE_PAGE_NAME = 'place_page_name'
+ PURCHASE_ROAS = 'purchase_roas'
+ QUALIFYING_QUESTION_QUALIFY_ANSWER_RATE = 'qualifying_question_qualify_answer_rate'
+ QUALITY_RANKING = 'quality_ranking'
+ QUALITY_SCORE_ECTR = 'quality_score_ectr'
+ QUALITY_SCORE_ECVR = 'quality_score_ecvr'
+ QUALITY_SCORE_ORGANIC = 'quality_score_organic'
+ REACH = 'reach'
+ SOCIAL_SPEND = 'social_spend'
+ SPEND = 'spend'
+ TOTAL_POSTBACKS = 'total_postbacks'
+ TOTAL_POSTBACKS_DETAILED = 'total_postbacks_detailed'
+ UNIQUE_ACTIONS = 'unique_actions'
+ UNIQUE_CLICKS = 'unique_clicks'
+ UNIQUE_CONVERSIONS = 'unique_conversions'
+ UNIQUE_CTR = 'unique_ctr'
+ UNIQUE_INLINE_LINK_CLICK_CTR = 'unique_inline_link_click_ctr'
+ UNIQUE_INLINE_LINK_CLICKS = 'unique_inline_link_clicks'
+ UNIQUE_LINK_CLICKS_CTR = 'unique_link_clicks_ctr'
+ UNIQUE_OUTBOUND_CLICKS = 'unique_outbound_clicks'
+ UNIQUE_OUTBOUND_CLICKS_CTR = 'unique_outbound_clicks_ctr'
+ UNIQUE_VIDEO_CONTINUOUS_2_SEC_WATCHED_ACTIONS = 'unique_video_continuous_2_sec_watched_actions'
+ UNIQUE_VIDEO_VIEW_15_SEC = 'unique_video_view_15_sec'
+ UPDATED_TIME = 'updated_time'
+ VIDEO_15_SEC_WATCHED_ACTIONS = 'video_15_sec_watched_actions'
+ VIDEO_30_SEC_WATCHED_ACTIONS = 'video_30_sec_watched_actions'
+ VIDEO_AVG_TIME_WATCHED_ACTIONS = 'video_avg_time_watched_actions'
+ VIDEO_CONTINUOUS_2_SEC_WATCHED_ACTIONS = 'video_continuous_2_sec_watched_actions'
+ VIDEO_P100_WATCHED_ACTIONS = 'video_p100_watched_actions'
+ VIDEO_P25_WATCHED_ACTIONS = 'video_p25_watched_actions'
+ VIDEO_P50_WATCHED_ACTIONS = 'video_p50_watched_actions'
+ VIDEO_P75_WATCHED_ACTIONS = 'video_p75_watched_actions'
+ VIDEO_P95_WATCHED_ACTIONS = 'video_p95_watched_actions'
+ VIDEO_PLAY_ACTIONS = 'video_play_actions'
+ VIDEO_PLAY_CURVE_ACTIONS = 'video_play_curve_actions'
+ VIDEO_PLAY_RETENTION_0_TO_15S_ACTIONS = 'video_play_retention_0_to_15s_actions'
+ VIDEO_PLAY_RETENTION_20_TO_60S_ACTIONS = 'video_play_retention_20_to_60s_actions'
+ VIDEO_PLAY_RETENTION_GRAPH_ACTIONS = 'video_play_retention_graph_actions'
+ VIDEO_THRUPLAY_WATCHED_ACTIONS = 'video_thruplay_watched_actions'
+ VIDEO_TIME_WATCHED_ACTIONS = 'video_time_watched_actions'
+ WEBSITE_CTR = 'website_ctr'
+ WEBSITE_PURCHASE_ROAS = 'website_purchase_roas'
+ WISH_BID = 'wish_bid'
+
+class SourceFacebookMarketingInsightConfigLevelEnum(str, Enum):
+ r"""Chosen level for API"""
+ AD = 'ad'
+ ADSET = 'adset'
+ CAMPAIGN = 'campaign'
+ ACCOUNT = 'account'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceFacebookMarketingInsightConfig:
+ r"""Config for custom insights"""
+
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ r"""The name value of insight"""
+ action_breakdowns: Optional[list[SourceFacebookMarketingInsightConfigValidActionBreakdownsEnum]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('action_breakdowns'), 'exclude': lambda f: f is None }})
+ r"""A list of chosen action_breakdowns for action_breakdowns"""
+ breakdowns: Optional[list[SourceFacebookMarketingInsightConfigValidBreakdownsEnum]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('breakdowns'), 'exclude': lambda f: f is None }})
+ r"""A list of chosen breakdowns for breakdowns"""
+ end_date: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('end_date'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }})
+ r"""The date until which you'd like to replicate data for this stream, in the format YYYY-MM-DDT00:00:00Z. All data generated between the start date and this end date will be replicated. Not setting this option will result in always syncing the latest data."""
+ fields_: Optional[list[SourceFacebookMarketingInsightConfigValidEnumsEnum]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('fields'), 'exclude': lambda f: f is None }})
+ r"""A list of chosen fields for fields parameter"""
+ insights_lookback_window: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('insights_lookback_window'), 'exclude': lambda f: f is None }})
+ r"""The attribution window"""
+ level: Optional[SourceFacebookMarketingInsightConfigLevelEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('level'), 'exclude': lambda f: f is None }})
+ r"""Chosen level for API"""
+ start_date: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }})
+ r"""The date from which you'd like to replicate data for this stream, in the format YYYY-MM-DDT00:00:00Z."""
+ time_increment: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('time_increment'), 'exclude': lambda f: f is None }})
+ r"""Time window in days by which to aggregate statistics. The sync will be chunked into N day intervals, where N is the number of days you specified. For example, if you set this value to 7, then all statistics will be reported as 7-day aggregates by starting from the start_date. If the start and end dates are October 1st and October 30th, then the connector will output 5 records: 01 - 06, 07 - 13, 14 - 20, 21 - 27, and 28 - 30 (3 days only)."""
+
+class SourceFacebookMarketingFacebookMarketingEnum(str, Enum):
+ FACEBOOK_MARKETING = 'facebook-marketing'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceFacebookMarketing:
+ r"""The values required to configure the source."""
+
+ access_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token') }})
+ r"""The value of the generated access token. From your App’s Dashboard, click on \\"Marketing API\\" then \\"Tools\\". Select permissions ads_management, ads_read, read_insights, business_management. Then click on \\"Get token\\". See the docs for more information."""
+ account_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('account_id') }})
+ r"""The Facebook Ad account ID to use when pulling data from the Facebook Marketing API. Open your Meta Ads Manager. The Ad account ID number is in the account dropdown menu or in your browser's address bar. See the docs for more information."""
+ source_type: SourceFacebookMarketingFacebookMarketingEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }})
+ r"""The date from which you'd like to replicate data for all incremental streams, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated."""
+ action_breakdowns_allow_empty: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('action_breakdowns_allow_empty'), 'exclude': lambda f: f is None }})
+ r"""Allows action_breakdowns to be an empty list"""
+ custom_insights: Optional[list[SourceFacebookMarketingInsightConfig]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('custom_insights'), 'exclude': lambda f: f is None }})
+ r"""A list which contains ad statistics entries, each entry must have a name and can contains fields, breakdowns or action_breakdowns. Click on \\"add\\" to fill this field."""
+ end_date: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('end_date'), 'exclude': lambda f: f is None }})
+ r"""The date until which you'd like to replicate data for all incremental streams, in the format YYYY-MM-DDT00:00:00Z. All data generated between the start date and this end date will be replicated. Not setting this option will result in always syncing the latest data."""
+ fetch_thumbnail_images: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('fetch_thumbnail_images'), 'exclude': lambda f: f is None }})
+ r"""Set to active if you want to fetch the thumbnail_url and store the result in thumbnail_data_url for each Ad Creative."""
+ include_deleted: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('include_deleted'), 'exclude': lambda f: f is None }})
+ r"""Set to active if you want to include data from deleted Campaigns, Ads, and AdSets."""
+ insights_lookback_window: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('insights_lookback_window'), 'exclude': lambda f: f is None }})
+ r"""The attribution window. Facebook freezes insight data 28 days after it was generated, which means that all data from the past 28 days may have changed since we last emitted it, so you can retrieve refreshed insights from the past by setting this parameter. If you set a custom lookback window value in Facebook account, please provide the same value here."""
+ max_batch_size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('max_batch_size'), 'exclude': lambda f: f is None }})
+ r"""Maximum batch size used when sending batch requests to Facebook API. Most users do not need to set this field unless they specifically need to tune the connector to address specific issues or use cases."""
+ page_size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('page_size'), 'exclude': lambda f: f is None }})
+ r"""Page size used when sending requests to Facebook API to specify number of records per page when response has pagination. Most users do not need to set this field unless they specifically need to tune the connector to address specific issues or use cases."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_facebook_pages.py b/src/sdk/models/shared/source_facebook_pages.py
new file mode 100755
index 00000000..e5fcb00d
--- /dev/null
+++ b/src/sdk/models/shared/source_facebook_pages.py
@@ -0,0 +1,23 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceFacebookPagesFacebookPagesEnum(str, Enum):
+ FACEBOOK_PAGES = 'facebook-pages'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceFacebookPages:
+ r"""The values required to configure the source."""
+
+ access_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token') }})
+ r"""Facebook Page Access Token"""
+ page_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('page_id') }})
+ r"""Page ID"""
+ source_type: SourceFacebookPagesFacebookPagesEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_faker.py b/src/sdk/models/shared/source_faker.py
new file mode 100755
index 00000000..098c1a53
--- /dev/null
+++ b/src/sdk/models/shared/source_faker.py
@@ -0,0 +1,30 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourceFakerFakerEnum(str, Enum):
+ FAKER = 'faker'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceFaker:
+ r"""The values required to configure the source."""
+
+ count: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('count') }})
+ r"""How many users should be generated in total. This setting does not apply to the purchases or products stream."""
+ source_type: SourceFakerFakerEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ parallelism: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parallelism'), 'exclude': lambda f: f is None }})
+ r"""How many parallel workers should we use to generate fake data? Choose a value equal to the number of CPUs you will allocate to this source."""
+ records_per_slice: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('records_per_slice'), 'exclude': lambda f: f is None }})
+ r"""How many fake records will be in each page (stream slice), before a state message is emitted?"""
+ records_per_sync: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('records_per_sync'), 'exclude': lambda f: f is None }})
+ r"""How many fake records will be returned for each sync, for each stream? By default, it will take 2 syncs to create the requested 1000 records."""
+ seed: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('seed'), 'exclude': lambda f: f is None }})
+ r"""Manually control the faker random seed to return the same values on subsequent runs (leave -1 for random)"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_fauna.py b/src/sdk/models/shared/source_fauna.py
new file mode 100755
index 00000000..82e7965a
--- /dev/null
+++ b/src/sdk/models/shared/source_fauna.py
@@ -0,0 +1,80 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class SourceFaunaCollectionDeletionsEnabledDeletionModeEnum(str, Enum):
+ DELETED_FIELD = 'deleted_field'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceFaunaCollectionDeletionsEnabled:
+ r"""This only applies to incremental syncs.
+ Enabling deletion mode informs your destination of deleted documents.
+ Disabled - Leave this feature disabled, and ignore deleted documents.
+ Enabled - Enables this feature. When a document is deleted, the connector exports a record with a \"deleted at\" column containing the time that the document was deleted.
+ """
+
+ column: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('column') }})
+ r"""Name of the \\"deleted at\\" column."""
+ deletion_mode: SourceFaunaCollectionDeletionsEnabledDeletionModeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deletion_mode') }})
+
+class SourceFaunaCollectionDeletionsDisabledDeletionModeEnum(str, Enum):
+ IGNORE = 'ignore'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceFaunaCollectionDeletionsDisabled:
+ r"""This only applies to incremental syncs.
+ Enabling deletion mode informs your destination of deleted documents.
+ Disabled - Leave this feature disabled, and ignore deleted documents.
+ Enabled - Enables this feature. When a document is deleted, the connector exports a record with a \"deleted at\" column containing the time that the document was deleted.
+ """
+
+ deletion_mode: SourceFaunaCollectionDeletionsDisabledDeletionModeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deletion_mode') }})
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceFaunaCollection:
+ r"""Settings for the Fauna Collection."""
+
+ deletions: Any = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deletions') }})
+ r"""This only applies to incremental syncs.
+ Enabling deletion mode informs your destination of deleted documents.
+ Disabled - Leave this feature disabled, and ignore deleted documents.
+ Enabled - Enables this feature. When a document is deleted, the connector exports a record with a \"deleted at\" column containing the time that the document was deleted.
+ """
+ page_size: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('page_size') }})
+ r"""The page size used when reading documents from the database. The larger the page size, the faster the connector processes documents. However, if a page is too large, the connector may fail.
+ Choose your page size based on how large the documents are.
+ See the docs.
+ """
+
+class SourceFaunaFaunaEnum(str, Enum):
+ FAUNA = 'fauna'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceFauna:
+ r"""The values required to configure the source."""
+
+ domain: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('domain') }})
+ r"""Domain of Fauna to query. Defaults db.fauna.com. See the docs."""
+ port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('port') }})
+ r"""Endpoint port."""
+ scheme: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('scheme') }})
+ r"""URL scheme."""
+ secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('secret') }})
+ r"""Fauna secret, used when authenticating with the database."""
+ source_type: SourceFaunaFaunaEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ collection: Optional[SourceFaunaCollection] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('collection'), 'exclude': lambda f: f is None }})
+ r"""Settings for the Fauna Collection."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_file_secure.py b/src/sdk/models/shared/source_file_secure.py
new file mode 100755
index 00000000..ef35c927
--- /dev/null
+++ b/src/sdk/models/shared/source_file_secure.py
@@ -0,0 +1,144 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class SourceFileSecureFileFormatEnum(str, Enum):
+ r"""The Format of the file which should be replicated (Warning: some formats may be experimental, please refer to the docs)."""
+ CSV = 'csv'
+ JSON = 'json'
+ JSONL = 'jsonl'
+ EXCEL = 'excel'
+ EXCEL_BINARY = 'excel_binary'
+ FEATHER = 'feather'
+ PARQUET = 'parquet'
+ YAML = 'yaml'
+
+class SourceFileSecureProviderSFTPSecureFileTransferProtocolStorageEnum(str, Enum):
+ SFTP = 'SFTP'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceFileSecureProviderSFTPSecureFileTransferProtocol:
+ r"""The storage Provider or Location of the file(s) which should be replicated."""
+
+ host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('host') }})
+ storage: SourceFileSecureProviderSFTPSecureFileTransferProtocolStorageEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('storage') }})
+ user: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('user') }})
+ password: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password'), 'exclude': lambda f: f is None }})
+ port: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('port'), 'exclude': lambda f: f is None }})
+
+class SourceFileSecureProviderSCPSecureCopyProtocolStorageEnum(str, Enum):
+ SCP = 'SCP'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceFileSecureProviderSCPSecureCopyProtocol:
+ r"""The storage Provider or Location of the file(s) which should be replicated."""
+
+ host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('host') }})
+ storage: SourceFileSecureProviderSCPSecureCopyProtocolStorageEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('storage') }})
+ user: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('user') }})
+ password: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password'), 'exclude': lambda f: f is None }})
+ port: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('port'), 'exclude': lambda f: f is None }})
+
+class SourceFileSecureProviderSSHSecureShellStorageEnum(str, Enum):
+ SSH = 'SSH'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceFileSecureProviderSSHSecureShell:
+ r"""The storage Provider or Location of the file(s) which should be replicated."""
+
+ host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('host') }})
+ storage: SourceFileSecureProviderSSHSecureShellStorageEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('storage') }})
+ user: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('user') }})
+ password: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password'), 'exclude': lambda f: f is None }})
+ port: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('port'), 'exclude': lambda f: f is None }})
+
+class SourceFileSecureProviderAzBlobAzureBlobStorageStorageEnum(str, Enum):
+ AZ_BLOB = 'AzBlob'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceFileSecureProviderAzBlobAzureBlobStorage:
+ r"""The storage Provider or Location of the file(s) which should be replicated."""
+
+ storage: SourceFileSecureProviderAzBlobAzureBlobStorageStorageEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('storage') }})
+ storage_account: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('storage_account') }})
+ r"""The globally unique name of the storage account that the desired blob sits within. See here for more details."""
+ sas_token: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sas_token'), 'exclude': lambda f: f is None }})
+ r"""To access Azure Blob Storage, this connector would need credentials with the proper permissions. One option is a SAS (Shared Access Signature) token. If accessing publicly available data, this field is not necessary."""
+ shared_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('shared_key'), 'exclude': lambda f: f is None }})
+ r"""To access Azure Blob Storage, this connector would need credentials with the proper permissions. One option is a storage account shared key (aka account key or access key). If accessing publicly available data, this field is not necessary."""
+
+class SourceFileSecureProviderS3AmazonWebServicesStorageEnum(str, Enum):
+ S3 = 'S3'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceFileSecureProviderS3AmazonWebServices:
+ r"""The storage Provider or Location of the file(s) which should be replicated."""
+
+ storage: SourceFileSecureProviderS3AmazonWebServicesStorageEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('storage') }})
+ aws_access_key_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('aws_access_key_id'), 'exclude': lambda f: f is None }})
+ r"""In order to access private Buckets stored on AWS S3, this connector would need credentials with the proper permissions. If accessing publicly available data, this field is not necessary."""
+ aws_secret_access_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('aws_secret_access_key'), 'exclude': lambda f: f is None }})
+ r"""In order to access private Buckets stored on AWS S3, this connector would need credentials with the proper permissions. If accessing publicly available data, this field is not necessary."""
+
+class SourceFileSecureProviderGCSGoogleCloudStorageStorageEnum(str, Enum):
+ GCS = 'GCS'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceFileSecureProviderGCSGoogleCloudStorage:
+ r"""The storage Provider or Location of the file(s) which should be replicated."""
+
+ storage: SourceFileSecureProviderGCSGoogleCloudStorageStorageEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('storage') }})
+ service_account_json: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('service_account_json'), 'exclude': lambda f: f is None }})
+ r"""In order to access private Buckets stored on Google Cloud, this connector would need a service account json credentials with the proper permissions as described here. Please generate the credentials.json file and copy/paste its content to this field (expecting JSON formats). If accessing publicly available data, this field is not necessary."""
+
+class SourceFileSecureProviderHTTPSPublicWebStorageEnum(str, Enum):
+ HTTPS = 'HTTPS'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceFileSecureProviderHTTPSPublicWeb:
+ r"""The storage Provider or Location of the file(s) which should be replicated."""
+
+ storage: SourceFileSecureProviderHTTPSPublicWebStorageEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('storage') }})
+ user_agent: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('user_agent'), 'exclude': lambda f: f is None }})
+ r"""Add User-Agent to request"""
+
+class SourceFileSecureFileSecureEnum(str, Enum):
+ FILE_SECURE = 'file-secure'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceFileSecure:
+ r"""The values required to configure the source."""
+
+ dataset_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dataset_name') }})
+ r"""The Name of the final table to replicate this file into (should include letters, numbers dash and underscores only)."""
+ format: SourceFileSecureFileFormatEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('format') }})
+ r"""The Format of the file which should be replicated (Warning: some formats may be experimental, please refer to the docs)."""
+ provider: Any = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('provider') }})
+ r"""The storage Provider or Location of the file(s) which should be replicated."""
+ source_type: SourceFileSecureFileSecureEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ url: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('url') }})
+ r"""The URL path to access the file which should be replicated."""
+ reader_options: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('reader_options'), 'exclude': lambda f: f is None }})
+ r"""This should be a string in JSON format. It depends on the chosen file format to provide additional options and tune its behavior."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_firebolt.py b/src/sdk/models/shared/source_firebolt.py
new file mode 100755
index 00000000..e90bb04f
--- /dev/null
+++ b/src/sdk/models/shared/source_firebolt.py
@@ -0,0 +1,32 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourceFireboltFireboltEnum(str, Enum):
+ FIREBOLT = 'firebolt'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceFirebolt:
+ r"""The values required to configure the source."""
+
+ database: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('database') }})
+ r"""The database to connect to."""
+ password: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password') }})
+ r"""Firebolt password."""
+ source_type: SourceFireboltFireboltEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ username: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('username') }})
+ r"""Firebolt email address you use to login."""
+ account: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('account'), 'exclude': lambda f: f is None }})
+ r"""Firebolt account to login."""
+ engine: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('engine'), 'exclude': lambda f: f is None }})
+ r"""Engine name or url to connect to."""
+ host: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('host'), 'exclude': lambda f: f is None }})
+ r"""The host name of your Firebolt database."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_freshcaller.py b/src/sdk/models/shared/source_freshcaller.py
new file mode 100755
index 00000000..605f9731
--- /dev/null
+++ b/src/sdk/models/shared/source_freshcaller.py
@@ -0,0 +1,30 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class SourceFreshcallerFreshcallerEnum(str, Enum):
+ FRESHCALLER = 'freshcaller'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceFreshcaller:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""Freshcaller API Key. See the docs for more information on how to obtain this key."""
+ domain: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('domain') }})
+ r"""Used to construct Base URL for the Freshcaller APIs"""
+ source_type: SourceFreshcallerFreshcallerEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: Any = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date') }})
+ r"""UTC date and time. Any data created after this date will be replicated."""
+ requests_per_minute: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('requests_per_minute'), 'exclude': lambda f: f is None }})
+ r"""The number of requests per minute that this source allowed to use. There is a rate limit of 50 requests per minute per app per account."""
+ sync_lag_minutes: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sync_lag_minutes'), 'exclude': lambda f: f is None }})
+ r"""Lag in minutes for each sync, i.e., at time T, data for the time range [prev_sync_time, T-30] will be fetched"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_freshdesk.py b/src/sdk/models/shared/source_freshdesk.py
new file mode 100755
index 00000000..97bc8d91
--- /dev/null
+++ b/src/sdk/models/shared/source_freshdesk.py
@@ -0,0 +1,31 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Optional
+
+class SourceFreshdeskFreshdeskEnum(str, Enum):
+ FRESHDESK = 'freshdesk'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceFreshdesk:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""Freshdesk API Key. See the docs for more information on how to obtain this key."""
+ domain: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('domain') }})
+ r"""Freshdesk domain"""
+ source_type: SourceFreshdeskFreshdeskEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ requests_per_minute: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('requests_per_minute'), 'exclude': lambda f: f is None }})
+ r"""The number of requests per minute that this source allowed to use. There is a rate limit of 50 requests per minute per app per account."""
+ start_date: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }})
+ r"""UTC date and time. Any data created after this date will be replicated. If this parameter is not set, all data will be replicated."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_freshsales.py b/src/sdk/models/shared/source_freshsales.py
new file mode 100755
index 00000000..07b9d7d3
--- /dev/null
+++ b/src/sdk/models/shared/source_freshsales.py
@@ -0,0 +1,23 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceFreshsalesFreshsalesEnum(str, Enum):
+ FRESHSALES = 'freshsales'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceFreshsales:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""Freshsales API Key. See here. The key is case sensitive."""
+ domain_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('domain_name') }})
+ r"""The Name of your Freshsales domain"""
+ source_type: SourceFreshsalesFreshsalesEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_gcs.py b/src/sdk/models/shared/source_gcs.py
new file mode 100755
index 00000000..1e91f2df
--- /dev/null
+++ b/src/sdk/models/shared/source_gcs.py
@@ -0,0 +1,25 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceGcsGcsEnum(str, Enum):
+ GCS = 'gcs'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceGcs:
+ r"""The values required to configure the source."""
+
+ gcs_bucket: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('gcs_bucket') }})
+ r"""GCS bucket name"""
+ gcs_path: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('gcs_path') }})
+ r"""GCS path to data"""
+ service_account: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('service_account') }})
+ r"""Enter your Google Cloud service account key in JSON format"""
+ source_type: SourceGcsGcsEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_getlago.py b/src/sdk/models/shared/source_getlago.py
new file mode 100755
index 00000000..73aa9829
--- /dev/null
+++ b/src/sdk/models/shared/source_getlago.py
@@ -0,0 +1,21 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceGetlagoGetlagoEnum(str, Enum):
+ GETLAGO = 'getlago'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceGetlago:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""Your API Key. See here."""
+ source_type: SourceGetlagoGetlagoEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_github.py b/src/sdk/models/shared/source_github.py
new file mode 100755
index 00000000..ad185b28
--- /dev/null
+++ b/src/sdk/models/shared/source_github.py
@@ -0,0 +1,59 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Any, Optional
+
+class SourceGithubCredentialsPersonalAccessTokenOptionTitleEnum(str, Enum):
+ PAT_CREDENTIALS = 'PAT Credentials'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceGithubCredentialsPersonalAccessToken:
+ r"""Choose how to authenticate to GitHub"""
+
+ personal_access_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('personal_access_token') }})
+ r"""Log into GitHub and then generate a personal access token. To load balance your API quota consumption across multiple API tokens, input multiple tokens separated with \\",\\" """
+ option_title: Optional[SourceGithubCredentialsPersonalAccessTokenOptionTitleEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('option_title'), 'exclude': lambda f: f is None }})
+
+class SourceGithubCredentialsOAuthOptionTitleEnum(str, Enum):
+ O_AUTH_CREDENTIALS = 'OAuth Credentials'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceGithubCredentialsOAuth:
+ r"""Choose how to authenticate to GitHub"""
+
+ access_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token') }})
+ r"""OAuth access token"""
+ option_title: Optional[SourceGithubCredentialsOAuthOptionTitleEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('option_title'), 'exclude': lambda f: f is None }})
+
+class SourceGithubGithubEnum(str, Enum):
+ GITHUB = 'github'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceGithub:
+ r"""The values required to configure the source."""
+
+ repository: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('repository') }})
+ r"""Space-delimited list of GitHub organizations/repositories, e.g. `airbytehq/airbyte` for single repository, `airbytehq/*` for get all repositories from organization and `airbytehq/airbyte airbytehq/another-repo` for multiple repositories."""
+ source_type: SourceGithubGithubEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }})
+ r"""The date from which you'd like to replicate data from GitHub in the format YYYY-MM-DDT00:00:00Z. For the streams which support this configuration, only data generated on or after the start date will be replicated. This field doesn't apply to all streams, see the docs for more info"""
+ branch: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('branch'), 'exclude': lambda f: f is None }})
+ r"""Space-delimited 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."""
+ credentials: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials'), 'exclude': lambda f: f is None }})
+ r"""Choose how to authenticate to GitHub"""
+ page_size_for_large_streams: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('page_size_for_large_streams'), 'exclude': lambda f: f is None }})
+ r"""The Github connector contains several streams with a large amount of data. The page size of such streams depends on the size of your repository. We recommended that you specify values between 10 and 30."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_gitlab.py b/src/sdk/models/shared/source_gitlab.py
new file mode 100755
index 00000000..148a4210
--- /dev/null
+++ b/src/sdk/models/shared/source_gitlab.py
@@ -0,0 +1,64 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Any, Optional
+
+class SourceGitlabCredentialsPrivateTokenAuthTypeEnum(str, Enum):
+ ACCESS_TOKEN = 'access_token'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceGitlabCredentialsPrivateToken:
+
+ access_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token') }})
+ r"""Log into your Gitlab account and then generate a personal Access Token."""
+ auth_type: Optional[SourceGitlabCredentialsPrivateTokenAuthTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type'), 'exclude': lambda f: f is None }})
+
+class SourceGitlabCredentialsOAuth20AuthTypeEnum(str, Enum):
+ OAUTH2_0 = 'oauth2.0'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceGitlabCredentialsOAuth20:
+
+ access_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token') }})
+ r"""Access Token for making authenticated requests."""
+ client_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id') }})
+ r"""The API ID of the Gitlab developer application."""
+ client_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret') }})
+ r"""The API Secret the Gitlab developer application."""
+ refresh_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('refresh_token') }})
+ r"""The key to refresh the expired access_token."""
+ token_expiry_date: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('token_expiry_date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }})
+ r"""The date-time when the access token should be refreshed."""
+ auth_type: Optional[SourceGitlabCredentialsOAuth20AuthTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type'), 'exclude': lambda f: f is None }})
+
+class SourceGitlabGitlabEnum(str, Enum):
+ GITLAB = 'gitlab'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceGitlab:
+ r"""The values required to configure the source."""
+
+ api_url: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_url') }})
+ r"""Please enter your basic URL from GitLab instance."""
+ credentials: Any = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials') }})
+ source_type: SourceGitlabGitlabEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }})
+ r"""The date from which you'd like to replicate data for GitLab API, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated."""
+ groups: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('groups'), 'exclude': lambda f: f is None }})
+ r"""Space-delimited list of groups. e.g. airbyte.io."""
+ projects: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('projects'), 'exclude': lambda f: f is None }})
+ r"""Space-delimited list of projects. e.g. airbyte.io/documentation meltano/tap-gitlab."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_glassfrog.py b/src/sdk/models/shared/source_glassfrog.py
new file mode 100755
index 00000000..4ebfb147
--- /dev/null
+++ b/src/sdk/models/shared/source_glassfrog.py
@@ -0,0 +1,21 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceGlassfrogGlassfrogEnum(str, Enum):
+ GLASSFROG = 'glassfrog'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceGlassfrog:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""API key provided by Glassfrog"""
+ source_type: SourceGlassfrogGlassfrogEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_gnews.py b/src/sdk/models/shared/source_gnews.py
new file mode 100755
index 00000000..40ccc374
--- /dev/null
+++ b/src/sdk/models/shared/source_gnews.py
@@ -0,0 +1,159 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourceGnewsCountryEnum(str, Enum):
+ r"""This parameter allows you to specify the country where the news articles returned by the API were published, the contents of the articles are not necessarily related to the specified country. You have to set as value the 2 letters code of the country you want to filter."""
+ AU = 'au'
+ BR = 'br'
+ CA = 'ca'
+ CN = 'cn'
+ EG = 'eg'
+ FR = 'fr'
+ DE = 'de'
+ GR = 'gr'
+ HK = 'hk'
+ IN = 'in'
+ IE = 'ie'
+ IL = 'il'
+ IT = 'it'
+ JP = 'jp'
+ NL = 'nl'
+ NO = 'no'
+ PK = 'pk'
+ PE = 'pe'
+ PH = 'ph'
+ PT = 'pt'
+ RO = 'ro'
+ RU = 'ru'
+ SG = 'sg'
+ ES = 'es'
+ SE = 'se'
+ CH = 'ch'
+ TW = 'tw'
+ UA = 'ua'
+ GB = 'gb'
+ US = 'us'
+
+class SourceGnewsInEnum(str, Enum):
+ TITLE = 'title'
+ DESCRIPTION = 'description'
+ CONTENT = 'content'
+
+class SourceGnewsLanguageEnum(str, Enum):
+ AR = 'ar'
+ ZH = 'zh'
+ NL = 'nl'
+ EN = 'en'
+ FR = 'fr'
+ DE = 'de'
+ EL = 'el'
+ HE = 'he'
+ HI = 'hi'
+ IT = 'it'
+ JA = 'ja'
+ ML = 'ml'
+ MR = 'mr'
+ NO = 'no'
+ PT = 'pt'
+ RO = 'ro'
+ RU = 'ru'
+ ES = 'es'
+ SV = 'sv'
+ TA = 'ta'
+ TE = 'te'
+ UK = 'uk'
+
+class SourceGnewsNullableEnum(str, Enum):
+ TITLE = 'title'
+ DESCRIPTION = 'description'
+ CONTENT = 'content'
+
+class SourceGnewsSortByEnum(str, Enum):
+ r"""This parameter allows you to choose with which type of sorting the articles should be returned. Two values are possible:
+ - publishedAt = sort by publication date, the articles with the most recent publication date are returned first
+ - relevance = sort by best match to keywords, the articles with the best match are returned first
+ """
+ PUBLISHED_AT = 'publishedAt'
+ RELEVANCE = 'relevance'
+
+class SourceGnewsGnewsEnum(str, Enum):
+ GNEWS = 'gnews'
+
+class SourceGnewsTopHeadlinesTopicEnum(str, Enum):
+ r"""This parameter allows you to change the category for the request."""
+ BREAKING_NEWS = 'breaking-news'
+ WORLD = 'world'
+ NATION = 'nation'
+ BUSINESS = 'business'
+ TECHNOLOGY = 'technology'
+ ENTERTAINMENT = 'entertainment'
+ SPORTS = 'sports'
+ SCIENCE = 'science'
+ HEALTH = 'health'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceGnews:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""API Key"""
+ query: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('query') }})
+ r"""This parameter allows you to specify your search keywords to find the news articles you are looking for. The keywords will be used to return the most relevant articles. It is possible to use logical operators with keywords. - Phrase Search Operator: This operator allows you to make an exact search. Keywords surrounded by
+ quotation marks are used to search for articles with the exact same keyword sequence.
+ For example the query: \"Apple iPhone\" will return articles matching at least once this sequence of keywords.
+ - Logical AND Operator: This operator allows you to make sure that several keywords are all used in the article
+ search. By default the space character acts as an AND operator, it is possible to replace the space character
+ by AND to obtain the same result. For example the query: Apple Microsoft is equivalent to Apple AND Microsoft
+ - Logical OR Operator: This operator allows you to retrieve articles matching the keyword a or the keyword b.
+ It is important to note that this operator has a higher precedence than the AND operator. For example the
+ query: Apple OR Microsoft will return all articles matching the keyword Apple as well as all articles matching
+ the keyword Microsoft
+ - Logical NOT Operator: This operator allows you to remove from the results the articles corresponding to the
+ specified keywords. To use it, you need to add NOT in front of each word or phrase surrounded by quotes.
+ For example the query: Apple NOT iPhone will return all articles matching the keyword Apple but not the keyword
+ iPhone
+ """
+ source_type: SourceGnewsGnewsEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ country: Optional[SourceGnewsCountryEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('country'), 'exclude': lambda f: f is None }})
+ r"""This parameter allows you to specify the country where the news articles returned by the API were published, the contents of the articles are not necessarily related to the specified country. You have to set as value the 2 letters code of the country you want to filter."""
+ end_date: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('end_date'), 'exclude': lambda f: f is None }})
+ r"""This parameter allows you to filter the articles that have a publication date smaller than or equal to the specified value. The date must respect the following format: YYYY-MM-DD hh:mm:ss (in UTC)"""
+ in_: Optional[list[SourceGnewsInEnum]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('in'), 'exclude': lambda f: f is None }})
+ r"""This parameter allows you to choose in which attributes the keywords are searched. The attributes that can be set are title, description and content. It is possible to combine several attributes."""
+ language: Optional[SourceGnewsLanguageEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('language'), 'exclude': lambda f: f is None }})
+ nullable: Optional[list[SourceGnewsNullableEnum]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('nullable'), 'exclude': lambda f: f is None }})
+ r"""This parameter allows you to specify the attributes that you allow to return null values. The attributes that can be set are title, description and content. It is possible to combine several attributes"""
+ sortby: Optional[SourceGnewsSortByEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sortby'), 'exclude': lambda f: f is None }})
+ r"""This parameter allows you to choose with which type of sorting the articles should be returned. Two values are possible:
+ - publishedAt = sort by publication date, the articles with the most recent publication date are returned first
+ - relevance = sort by best match to keywords, the articles with the best match are returned first
+ """
+ start_date: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'exclude': lambda f: f is None }})
+ r"""This parameter allows you to filter the articles that have a publication date greater than or equal to the specified value. The date must respect the following format: YYYY-MM-DD hh:mm:ss (in UTC)"""
+ top_headlines_query: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('top_headlines_query'), 'exclude': lambda f: f is None }})
+ r"""This parameter allows you to specify your search keywords to find the news articles you are looking for. The keywords will be used to return the most relevant articles. It is possible to use logical operators with keywords. - Phrase Search Operator: This operator allows you to make an exact search. Keywords surrounded by
+ quotation marks are used to search for articles with the exact same keyword sequence.
+ For example the query: \"Apple iPhone\" will return articles matching at least once this sequence of keywords.
+ - Logical AND Operator: This operator allows you to make sure that several keywords are all used in the article
+ search. By default the space character acts as an AND operator, it is possible to replace the space character
+ by AND to obtain the same result. For example the query: Apple Microsoft is equivalent to Apple AND Microsoft
+ - Logical OR Operator: This operator allows you to retrieve articles matching the keyword a or the keyword b.
+ It is important to note that this operator has a higher precedence than the AND operator. For example the
+ query: Apple OR Microsoft will return all articles matching the keyword Apple as well as all articles matching
+ the keyword Microsoft
+ - Logical NOT Operator: This operator allows you to remove from the results the articles corresponding to the
+ specified keywords. To use it, you need to add NOT in front of each word or phrase surrounded by quotes.
+ For example the query: Apple NOT iPhone will return all articles matching the keyword Apple but not the keyword
+ iPhone
+ """
+ top_headlines_topic: Optional[SourceGnewsTopHeadlinesTopicEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('top_headlines_topic'), 'exclude': lambda f: f is None }})
+ r"""This parameter allows you to change the category for the request."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_google_ads.py b/src/sdk/models/shared/source_google_ads.py
new file mode 100755
index 00000000..ad36e5bb
--- /dev/null
+++ b/src/sdk/models/shared/source_google_ads.py
@@ -0,0 +1,60 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from datetime import date
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Optional
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceGoogleAdsGoogleCredentials:
+
+ client_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id') }})
+ r"""The Client ID of your Google Ads developer application. More instruction on how to find this value in our docs"""
+ client_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret') }})
+ r"""The Client Secret of your Google Ads developer application. More instruction on how to find this value in our docs"""
+ developer_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('developer_token') }})
+ r"""Developer token granted by Google to use their APIs. More instruction on how to find this value in our docs"""
+ refresh_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('refresh_token') }})
+ r"""The token for obtaining a new access token. More instruction on how to find this value in our docs"""
+ access_token: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token'), 'exclude': lambda f: f is None }})
+ r"""Access Token for making authenticated requests. More instruction on how to find this value in our docs"""
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceGoogleAdsCustomQueries:
+
+ query: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('query') }})
+ r"""A custom defined GAQL query for building the report. Should not contain segments.date expression because it is used by incremental streams. See Google's query builder for more information."""
+ table_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('table_name') }})
+ r"""The table name in your destination database for choosen query."""
+
+class SourceGoogleAdsGoogleAdsEnum(str, Enum):
+ GOOGLE_ADS = 'google-ads'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceGoogleAds:
+ r"""The values required to configure the source."""
+
+ credentials: SourceGoogleAdsGoogleCredentials = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials') }})
+ customer_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('customer_id') }})
+ r"""Comma separated list of (client) customer IDs. Each customer ID must be specified as a 10-digit number without dashes. More instruction on how to find this value in our docs. Metrics streams like AdGroupAdReport cannot be requested for a manager account."""
+ source_type: SourceGoogleAdsGoogleAdsEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: date = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.dateisoformat(False), 'decoder': utils.datefromisoformat, 'mm_field': fields.DateTime(format='iso') }})
+ r"""UTC date and time in the format 2017-01-25. Any data before this date will not be replicated."""
+ conversion_window_days: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('conversion_window_days'), 'exclude': lambda f: f is None }})
+ r"""A conversion window is the period of time after an ad interaction (such as an ad click or video view) during which a conversion, such as a purchase, is recorded in Google Ads. For more information, see Google's documentation."""
+ custom_queries: Optional[list[SourceGoogleAdsCustomQueries]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('custom_queries'), 'exclude': lambda f: f is None }})
+ end_date: Optional[date] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('end_date'), 'encoder': utils.dateisoformat(True), 'decoder': utils.datefromisoformat, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }})
+ r"""UTC date and time in the format 2017-01-25. Any data after this date will not be replicated."""
+ login_customer_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('login_customer_id'), 'exclude': lambda f: f is None }})
+ r"""If your access to the customer account is through a manager account, this field is required and must be set to the customer ID of the manager account (10-digit number without dashes). More information about this field you can see here"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_google_analytics_data_api.py b/src/sdk/models/shared/source_google_analytics_data_api.py
new file mode 100755
index 00000000..96f7a97d
--- /dev/null
+++ b/src/sdk/models/shared/source_google_analytics_data_api.py
@@ -0,0 +1,64 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from datetime import date
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Any, Optional
+
+class SourceGoogleAnalyticsDataAPICredentialsServiceAccountKeyAuthenticationAuthTypeEnum(str, Enum):
+ SERVICE = 'Service'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceGoogleAnalyticsDataAPICredentialsServiceAccountKeyAuthentication:
+ r"""Credentials for the service"""
+
+ credentials_json: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials_json') }})
+ r"""The JSON key of the service account to use for authorization"""
+ auth_type: Optional[SourceGoogleAnalyticsDataAPICredentialsServiceAccountKeyAuthenticationAuthTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type'), 'exclude': lambda f: f is None }})
+
+class SourceGoogleAnalyticsDataAPICredentialsAuthenticateViaGoogleOauthAuthTypeEnum(str, Enum):
+ CLIENT = 'Client'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceGoogleAnalyticsDataAPICredentialsAuthenticateViaGoogleOauth:
+ r"""Credentials for the service"""
+
+ client_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id') }})
+ r"""The Client ID of your Google Analytics developer application."""
+ client_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret') }})
+ r"""The Client Secret of your Google Analytics developer application."""
+ refresh_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('refresh_token') }})
+ r"""The token for obtaining a new access token."""
+ access_token: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token'), 'exclude': lambda f: f is None }})
+ r"""Access Token for making authenticated requests."""
+ auth_type: Optional[SourceGoogleAnalyticsDataAPICredentialsAuthenticateViaGoogleOauthAuthTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type'), 'exclude': lambda f: f is None }})
+
+class SourceGoogleAnalyticsDataAPIGoogleAnalyticsDataAPIEnum(str, Enum):
+ GOOGLE_ANALYTICS_DATA_API = 'google-analytics-data-api'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceGoogleAnalyticsDataAPI:
+ r"""The values required to configure the source."""
+
+ date_ranges_start_date: date = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('date_ranges_start_date'), 'encoder': utils.dateisoformat(False), 'decoder': utils.datefromisoformat, 'mm_field': fields.DateTime(format='iso') }})
+ r"""The start date from which to replicate report data in the format YYYY-MM-DD. Data generated before this date will not be included in the report."""
+ property_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('property_id') }})
+ r"""A Google Analytics GA4 property identifier whose events are tracked. Specified in the URL path and not the body"""
+ source_type: SourceGoogleAnalyticsDataAPIGoogleAnalyticsDataAPIEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ credentials: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials'), 'exclude': lambda f: f is None }})
+ r"""Credentials for the service"""
+ custom_reports: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('custom_reports'), 'exclude': lambda f: f is None }})
+ r"""A JSON array describing the custom reports you want to sync from Google Analytics. See the docs for more information about the exact format you can use to fill out this field."""
+ window_in_days: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('window_in_days'), 'exclude': lambda f: f is None }})
+ r"""The time increment used by the connector when requesting data from the Google Analytics API. More information is available in the the docs. The bigger this value is, the faster the sync will be, but the more likely that sampling will be applied to your data, potentially causing inaccuracies in the returned results. We recommend setting this to 1 unless you have a hard requirement to make the sync faster at the expense of accuracy. The minimum allowed value for this field is 1, and the maximum is 364."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_google_analytics_v4.py b/src/sdk/models/shared/source_google_analytics_v4.py
new file mode 100755
index 00000000..8fdc22fa
--- /dev/null
+++ b/src/sdk/models/shared/source_google_analytics_v4.py
@@ -0,0 +1,62 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class SourceGoogleAnalyticsV4CredentialsServiceAccountKeyAuthenticationAuthTypeEnum(str, Enum):
+ SERVICE = 'Service'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceGoogleAnalyticsV4CredentialsServiceAccountKeyAuthentication:
+ r"""Credentials for the service"""
+
+ credentials_json: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials_json') }})
+ r"""The JSON key of the service account to use for authorization"""
+ auth_type: Optional[SourceGoogleAnalyticsV4CredentialsServiceAccountKeyAuthenticationAuthTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type'), 'exclude': lambda f: f is None }})
+
+class SourceGoogleAnalyticsV4CredentialsAuthenticateViaGoogleOauthAuthTypeEnum(str, Enum):
+ CLIENT = 'Client'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceGoogleAnalyticsV4CredentialsAuthenticateViaGoogleOauth:
+ r"""Credentials for the service"""
+
+ client_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id') }})
+ r"""The Client ID of your Google Analytics developer application."""
+ client_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret') }})
+ r"""The Client Secret of your Google Analytics developer application."""
+ refresh_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('refresh_token') }})
+ r"""The token for obtaining a new access token."""
+ access_token: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token'), 'exclude': lambda f: f is None }})
+ r"""Access Token for making authenticated requests."""
+ auth_type: Optional[SourceGoogleAnalyticsV4CredentialsAuthenticateViaGoogleOauthAuthTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type'), 'exclude': lambda f: f is None }})
+
+class SourceGoogleAnalyticsV4GoogleAnalyticsV4Enum(str, Enum):
+ GOOGLE_ANALYTICS_V4 = 'google-analytics-v4'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceGoogleAnalyticsV4:
+ r"""The values required to configure the source."""
+
+ source_type: SourceGoogleAnalyticsV4GoogleAnalyticsV4Enum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date') }})
+ r"""The date in the format YYYY-MM-DD. Any data before this date will not be replicated."""
+ view_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('view_id') }})
+ r"""The ID for the Google Analytics View you want to fetch data from. This can be found from the Google Analytics Account Explorer."""
+ credentials: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials'), 'exclude': lambda f: f is None }})
+ r"""Credentials for the service"""
+ custom_reports: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('custom_reports'), 'exclude': lambda f: f is None }})
+ r"""A JSON array describing the custom reports you want to sync from Google Analytics. See the docs for more information about the exact format you can use to fill out this field."""
+ window_in_days: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('window_in_days'), 'exclude': lambda f: f is None }})
+ r"""The time increment used by the connector when requesting data from the Google Analytics API. More information is available in the the docs. The bigger this value is, the faster the sync will be, but the more likely that sampling will be applied to your data, potentially causing inaccuracies in the returned results. We recommend setting this to 1 unless you have a hard requirement to make the sync faster at the expense of accuracy. The minimum allowed value for this field is 1, and the maximum is 364."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_google_directory.py b/src/sdk/models/shared/source_google_directory.py
new file mode 100755
index 00000000..0dfb538f
--- /dev/null
+++ b/src/sdk/models/shared/source_google_directory.py
@@ -0,0 +1,23 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceGoogleDirectoryGoogleDirectoryEnum(str, Enum):
+ GOOGLE_DIRECTORY = 'google-directory'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceGoogleDirectory:
+ r"""The values required to configure the source."""
+
+ credentials_json: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials_json') }})
+ r"""The contents of the JSON service account key. See the docs for more information on how to generate this key."""
+ email: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('email') }})
+ r"""The email of the user, which has permissions to access the Google Workspace Admin APIs."""
+ source_type: SourceGoogleDirectoryGoogleDirectoryEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_google_search_console.py b/src/sdk/models/shared/source_google_search_console.py
new file mode 100755
index 00000000..f5cd1ff7
--- /dev/null
+++ b/src/sdk/models/shared/source_google_search_console.py
@@ -0,0 +1,63 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from datetime import date
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Any, Optional
+
+class SourceGoogleSearchConsoleAuthorizationServiceAccountKeyAuthenticationAuthTypeEnum(str, Enum):
+ SERVICE = 'Service'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceGoogleSearchConsoleAuthorizationServiceAccountKeyAuthentication:
+
+ auth_type: SourceGoogleSearchConsoleAuthorizationServiceAccountKeyAuthenticationAuthTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type') }})
+ email: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('email') }})
+ r"""The email of the user which has permissions to access the Google Workspace Admin APIs."""
+ service_account_info: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('service_account_info') }})
+ r"""The JSON key of the service account to use for authorization. Read more here."""
+
+class SourceGoogleSearchConsoleAuthorizationOAuthAuthTypeEnum(str, Enum):
+ CLIENT = 'Client'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceGoogleSearchConsoleAuthorizationOAuth:
+
+ auth_type: SourceGoogleSearchConsoleAuthorizationOAuthAuthTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type') }})
+ client_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id') }})
+ r"""The client ID of your Google Search Console developer application. Read more here."""
+ client_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret') }})
+ r"""The client secret of your Google Search Console developer application. Read more here."""
+ refresh_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('refresh_token') }})
+ r"""The token for obtaining a new access token. Read more here."""
+ access_token: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token'), 'exclude': lambda f: f is None }})
+ r"""Access token for making authenticated requests. Read more here."""
+
+class SourceGoogleSearchConsoleGoogleSearchConsoleEnum(str, Enum):
+ GOOGLE_SEARCH_CONSOLE = 'google-search-console'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceGoogleSearchConsole:
+ r"""The values required to configure the source."""
+
+ authorization: Any = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('authorization') }})
+ site_urls: list[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('site_urls') }})
+ r"""The URLs of the website property attached to your GSC account. Read more here."""
+ source_type: SourceGoogleSearchConsoleGoogleSearchConsoleEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: date = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.dateisoformat(False), 'decoder': utils.datefromisoformat, 'mm_field': fields.DateTime(format='iso') }})
+ r"""UTC date in the format 2017-01-25. Any data before this date will not be replicated."""
+ custom_reports: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('custom_reports'), 'exclude': lambda f: f is None }})
+ r"""A JSON array describing the custom reports you want to sync from Google Search Console. See the docs for more information about the exact format you can use to fill out this field."""
+ end_date: Optional[date] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('end_date'), 'encoder': utils.dateisoformat(True), 'decoder': utils.datefromisoformat, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }})
+ r"""UTC date in the format 2017-01-25. Any data after this date will not be replicated. Must be greater or equal to the start date field."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_google_sheets.py b/src/sdk/models/shared/source_google_sheets.py
new file mode 100755
index 00000000..4c4784d5
--- /dev/null
+++ b/src/sdk/models/shared/source_google_sheets.py
@@ -0,0 +1,56 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class SourceGoogleSheetsCredentialsServiceAccountKeyAuthenticationAuthTypeEnum(str, Enum):
+ SERVICE = 'Service'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceGoogleSheetsCredentialsServiceAccountKeyAuthentication:
+ r"""Credentials for connecting to the Google Sheets API"""
+
+ auth_type: SourceGoogleSheetsCredentialsServiceAccountKeyAuthenticationAuthTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type') }})
+ service_account_info: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('service_account_info') }})
+ r"""Enter your Google Cloud service account key in JSON format"""
+
+class SourceGoogleSheetsCredentialsAuthenticateViaGoogleOAuthAuthTypeEnum(str, Enum):
+ CLIENT = 'Client'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceGoogleSheetsCredentialsAuthenticateViaGoogleOAuth:
+ r"""Credentials for connecting to the Google Sheets API"""
+
+ auth_type: SourceGoogleSheetsCredentialsAuthenticateViaGoogleOAuthAuthTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type') }})
+ client_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id') }})
+ r"""Enter your Google application's Client ID"""
+ client_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret') }})
+ r"""Enter your Google application's Client Secret"""
+ refresh_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('refresh_token') }})
+ r"""Enter your Google application's refresh token"""
+
+class SourceGoogleSheetsGoogleSheetsEnum(str, Enum):
+ GOOGLE_SHEETS = 'google-sheets'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceGoogleSheets:
+ r"""The values required to configure the source."""
+
+ credentials: Any = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials') }})
+ r"""Credentials for connecting to the Google Sheets API"""
+ source_type: SourceGoogleSheetsGoogleSheetsEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ spreadsheet_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('spreadsheet_id') }})
+ r"""Enter the link to the Google spreadsheet you want to sync"""
+ row_batch_size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('row_batch_size'), 'exclude': lambda f: f is None }})
+ r"""Number of rows fetched when making a Google Sheet API call. Defaults to 200."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_google_webfonts.py b/src/sdk/models/shared/source_google_webfonts.py
new file mode 100755
index 00000000..0c63fc78
--- /dev/null
+++ b/src/sdk/models/shared/source_google_webfonts.py
@@ -0,0 +1,28 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourceGoogleWebfontsGoogleWebfontsEnum(str, Enum):
+ GOOGLE_WEBFONTS = 'google-webfonts'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceGoogleWebfonts:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""API key is required to access google apis, For getting your's goto google console and generate api key for Webfonts"""
+ source_type: SourceGoogleWebfontsGoogleWebfontsEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ alt: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('alt'), 'exclude': lambda f: f is None }})
+ r"""Optional, Available params- json, media, proto"""
+ pretty_print: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('prettyPrint'), 'exclude': lambda f: f is None }})
+ r"""Optional, boolean type"""
+ sort: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sort'), 'exclude': lambda f: f is None }})
+ r"""Optional, to find how to sort"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_google_workspace_admin_reports.py b/src/sdk/models/shared/source_google_workspace_admin_reports.py
new file mode 100755
index 00000000..17cc00b3
--- /dev/null
+++ b/src/sdk/models/shared/source_google_workspace_admin_reports.py
@@ -0,0 +1,26 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourceGoogleWorkspaceAdminReportsGoogleWorkspaceAdminReportsEnum(str, Enum):
+ GOOGLE_WORKSPACE_ADMIN_REPORTS = 'google-workspace-admin-reports'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceGoogleWorkspaceAdminReports:
+ r"""The values required to configure the source."""
+
+ credentials_json: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials_json') }})
+ r"""The contents of the JSON service account key. See the docs for more information on how to generate this key."""
+ email: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('email') }})
+ r"""The email of the user, which has permissions to access the Google Workspace Admin APIs."""
+ source_type: SourceGoogleWorkspaceAdminReportsGoogleWorkspaceAdminReportsEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ lookback: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('lookback'), 'exclude': lambda f: f is None }})
+ r"""Sets the range of time shown in the report. Reports API allows from up to 180 days ago."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_greenhouse.py b/src/sdk/models/shared/source_greenhouse.py
new file mode 100755
index 00000000..ef4ec95d
--- /dev/null
+++ b/src/sdk/models/shared/source_greenhouse.py
@@ -0,0 +1,21 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceGreenhouseGreenhouseEnum(str, Enum):
+ GREENHOUSE = 'greenhouse'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceGreenhouse:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""Greenhouse API Key. See the docs for more information on how to generate this key."""
+ source_type: SourceGreenhouseGreenhouseEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_gridly.py b/src/sdk/models/shared/source_gridly.py
new file mode 100755
index 00000000..cf29cdbc
--- /dev/null
+++ b/src/sdk/models/shared/source_gridly.py
@@ -0,0 +1,22 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceGridlyGridlyEnum(str, Enum):
+ GRIDLY = 'gridly'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceGridly:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ grid_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('grid_id') }})
+ r"""ID of a grid, or can be ID of a branch"""
+ source_type: SourceGridlyGridlyEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_harvest.py b/src/sdk/models/shared/source_harvest.py
new file mode 100755
index 00000000..4db6d7f8
--- /dev/null
+++ b/src/sdk/models/shared/source_harvest.py
@@ -0,0 +1,28 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class SourceHarvestHarvestEnum(str, Enum):
+ HARVEST = 'harvest'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceHarvest:
+ r"""The values required to configure the source."""
+
+ account_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('account_id') }})
+ r"""Harvest account ID. Required for all Harvest requests in pair with Personal Access Token"""
+ replication_start_date: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('replication_start_date') }})
+ r"""UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated."""
+ source_type: SourceHarvestHarvestEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ credentials: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials'), 'exclude': lambda f: f is None }})
+ r"""Choose how to authenticate to Harvest."""
+ replication_end_date: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('replication_end_date'), 'exclude': lambda f: f is None }})
+ r"""UTC date and time in the format 2017-01-25T00:00:00Z. Any data after this date will not be replicated."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_hubplanner.py b/src/sdk/models/shared/source_hubplanner.py
new file mode 100755
index 00000000..cdc445f9
--- /dev/null
+++ b/src/sdk/models/shared/source_hubplanner.py
@@ -0,0 +1,21 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceHubplannerHubplannerEnum(str, Enum):
+ HUBPLANNER = 'hubplanner'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceHubplanner:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""Hubplanner API key. See https://github.com/hubplanner/API#authentication for more details."""
+ source_type: SourceHubplannerHubplannerEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_hubspot.py b/src/sdk/models/shared/source_hubspot.py
new file mode 100755
index 00000000..378885f9
--- /dev/null
+++ b/src/sdk/models/shared/source_hubspot.py
@@ -0,0 +1,58 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any
+
+class SourceHubspotCredentialsPrivateAppCredentialsEnum(str, Enum):
+ r"""Name of the credentials set"""
+ PRIVATE_APP_CREDENTIALS = 'Private App Credentials'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceHubspotCredentialsPrivateApp:
+ r"""Choose how to authenticate to HubSpot."""
+
+ access_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token') }})
+ r"""HubSpot Access token. See the Hubspot docs if you need help finding this token."""
+ credentials_title: SourceHubspotCredentialsPrivateAppCredentialsEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials_title') }})
+ r"""Name of the credentials set"""
+
+class SourceHubspotCredentialsOAuthCredentialsEnum(str, Enum):
+ r"""Name of the credentials"""
+ O_AUTH_CREDENTIALS = 'OAuth Credentials'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceHubspotCredentialsOAuth:
+ r"""Choose how to authenticate to HubSpot."""
+
+ client_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id') }})
+ r"""The Client ID of your HubSpot developer application. See the Hubspot docs if you need help finding this ID."""
+ client_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret') }})
+ r"""The client secret for your HubSpot developer application. See the Hubspot docs if you need help finding this secret."""
+ credentials_title: SourceHubspotCredentialsOAuthCredentialsEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials_title') }})
+ r"""Name of the credentials"""
+ refresh_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('refresh_token') }})
+ r"""Refresh token to renew an expired access token. See the Hubspot docs if you need help finding this token."""
+
+class SourceHubspotHubspotEnum(str, Enum):
+ HUBSPOT = 'hubspot'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceHubspot:
+ r"""The values required to configure the source."""
+
+ credentials: Any = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials') }})
+ r"""Choose how to authenticate to HubSpot."""
+ source_type: SourceHubspotHubspotEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date') }})
+ r"""UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_insightly.py b/src/sdk/models/shared/source_insightly.py
new file mode 100755
index 00000000..f0a9c83d
--- /dev/null
+++ b/src/sdk/models/shared/source_insightly.py
@@ -0,0 +1,23 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceInsightlyInsightlyEnum(str, Enum):
+ INSIGHTLY = 'insightly'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceInsightly:
+ r"""The values required to configure the source."""
+
+ source_type: SourceInsightlyInsightlyEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date') }})
+ r"""The date from which you'd like to replicate data for Insightly in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated. Note that it will be used only for incremental streams."""
+ token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('token') }})
+ r"""Your Insightly API token."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_instagram.py b/src/sdk/models/shared/source_instagram.py
new file mode 100755
index 00000000..c8d47b88
--- /dev/null
+++ b/src/sdk/models/shared/source_instagram.py
@@ -0,0 +1,26 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+
+class SourceInstagramInstagramEnum(str, Enum):
+ INSTAGRAM = 'instagram'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceInstagram:
+ r"""The values required to configure the source."""
+
+ access_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token') }})
+ r"""The value of the access token generated with instagram_basic, instagram_manage_insights, pages_show_list, pages_read_engagement, Instagram Public Content Access permissions. See the docs for more information"""
+ source_type: SourceInstagramInstagramEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }})
+ r"""The date from which you'd like to replicate data for User Insights, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_instatus.py b/src/sdk/models/shared/source_instatus.py
new file mode 100755
index 00000000..d2101c1c
--- /dev/null
+++ b/src/sdk/models/shared/source_instatus.py
@@ -0,0 +1,21 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceInstatusInstatusEnum(str, Enum):
+ INSTATUS = 'instatus'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceInstatus:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""Instatus REST API key"""
+ source_type: SourceInstatusInstatusEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_intercom.py b/src/sdk/models/shared/source_intercom.py
new file mode 100755
index 00000000..5a6df3dc
--- /dev/null
+++ b/src/sdk/models/shared/source_intercom.py
@@ -0,0 +1,26 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+
+class SourceIntercomIntercomEnum(str, Enum):
+ INTERCOM = 'intercom'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceIntercom:
+ r"""The values required to configure the source."""
+
+ access_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token') }})
+ r"""Access token for making authenticated requests. See the Intercom docs for more information."""
+ source_type: SourceIntercomIntercomEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }})
+ r"""UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_ip2whois.py b/src/sdk/models/shared/source_ip2whois.py
new file mode 100755
index 00000000..4211e859
--- /dev/null
+++ b/src/sdk/models/shared/source_ip2whois.py
@@ -0,0 +1,24 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourceIp2whoisIp2whoisEnum(str, Enum):
+ IP2WHOIS = 'ip2whois'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceIp2whois:
+ r"""The values required to configure the source."""
+
+ source_type: SourceIp2whoisIp2whoisEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ api_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key'), 'exclude': lambda f: f is None }})
+ r"""Your API Key. See here."""
+ domain: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('domain'), 'exclude': lambda f: f is None }})
+ r"""Domain name. See here."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_iterable.py b/src/sdk/models/shared/source_iterable.py
new file mode 100755
index 00000000..0b508c5a
--- /dev/null
+++ b/src/sdk/models/shared/source_iterable.py
@@ -0,0 +1,26 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+
+class SourceIterableIterableEnum(str, Enum):
+ ITERABLE = 'iterable'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceIterable:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""Iterable API Key. See the docs for more information on how to obtain this key."""
+ source_type: SourceIterableIterableEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }})
+ r"""The date from which you'd like to replicate data for Iterable, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_jira.py b/src/sdk/models/shared/source_jira.py
new file mode 100755
index 00000000..61d93dff
--- /dev/null
+++ b/src/sdk/models/shared/source_jira.py
@@ -0,0 +1,39 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Optional
+
+class SourceJiraJiraEnum(str, Enum):
+ JIRA = 'jira'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceJira:
+ r"""The values required to configure the source."""
+
+ api_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_token') }})
+ r"""Jira API Token. See the docs for more information on how to generate this key."""
+ domain: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('domain') }})
+ r"""The Domain for your Jira account, e.g. airbyteio.atlassian.net"""
+ email: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('email') }})
+ r"""The user email for your Jira account."""
+ source_type: SourceJiraJiraEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ enable_experimental_streams: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enable_experimental_streams'), 'exclude': lambda f: f is None }})
+ r"""Allow the use of experimental streams which rely on undocumented Jira API endpoints. See https://docs.airbyte.com/integrations/sources/jira#experimental-tables for more info."""
+ expand_issue_changelog: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('expand_issue_changelog'), 'exclude': lambda f: f is None }})
+ r"""Expand the changelog when replicating issues."""
+ projects: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('projects'), 'exclude': lambda f: f is None }})
+ r"""List of Jira project keys to replicate data for."""
+ render_fields: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('render_fields'), 'exclude': lambda f: f is None }})
+ r"""Render issue fields in HTML format in addition to Jira JSON-like format."""
+ start_date: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }})
+ r"""The date from which you want to replicate data from Jira, use the format YYYY-MM-DDT00:00:00Z. Note that this field only applies to certain streams, and only data generated on or after the start date will be replicated. For more information, refer to the documentation."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_k6_cloud.py b/src/sdk/models/shared/source_k6_cloud.py
new file mode 100755
index 00000000..0b59e8ad
--- /dev/null
+++ b/src/sdk/models/shared/source_k6_cloud.py
@@ -0,0 +1,21 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceK6CloudK6CloudEnum(str, Enum):
+ K6_CLOUD = 'k6-cloud'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceK6Cloud:
+ r"""The values required to configure the source."""
+
+ api_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_token') }})
+ r"""Your API Token. See here. The key is case sensitive."""
+ source_type: SourceK6CloudK6CloudEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_klarna.py b/src/sdk/models/shared/source_klarna.py
new file mode 100755
index 00000000..e85d62dd
--- /dev/null
+++ b/src/sdk/models/shared/source_klarna.py
@@ -0,0 +1,33 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceKlarnaRegionEnum(str, Enum):
+ r"""Base url region (For playground eu https://docs.klarna.com/klarna-payments/api/payments-api/#tag/API-URLs). Supported 'eu', 'us', 'oc'"""
+ EU = 'eu'
+ US = 'us'
+ OC = 'oc'
+
+class SourceKlarnaKlarnaEnum(str, Enum):
+ KLARNA = 'klarna'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceKlarna:
+ r"""The values required to configure the source."""
+
+ password: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password') }})
+ r"""A string which is associated with your Merchant ID and is used to authorize use of Klarna's APIs (https://developers.klarna.com/api/#authentication)"""
+ playground: bool = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('playground') }})
+ r"""Propertie defining if connector is used against playground or production environment"""
+ region: SourceKlarnaRegionEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('region') }})
+ r"""Base url region (For playground eu https://docs.klarna.com/klarna-payments/api/payments-api/#tag/API-URLs). Supported 'eu', 'us', 'oc'"""
+ source_type: SourceKlarnaKlarnaEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ username: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('username') }})
+ r"""Consists of your Merchant ID (eid) - a unique number that identifies your e-store, combined with a random string (https://developers.klarna.com/api/#authentication)"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_klaviyo.py b/src/sdk/models/shared/source_klaviyo.py
new file mode 100755
index 00000000..149e7804
--- /dev/null
+++ b/src/sdk/models/shared/source_klaviyo.py
@@ -0,0 +1,26 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+
+class SourceKlaviyoKlaviyoEnum(str, Enum):
+ KLAVIYO = 'klaviyo'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceKlaviyo:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""Klaviyo API Key. See our docs if you need help finding this key."""
+ source_type: SourceKlaviyoKlaviyoEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }})
+ r"""UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_kustomer_singer.py b/src/sdk/models/shared/source_kustomer_singer.py
new file mode 100755
index 00000000..c9f30171
--- /dev/null
+++ b/src/sdk/models/shared/source_kustomer_singer.py
@@ -0,0 +1,23 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceKustomerSingerKustomerSingerEnum(str, Enum):
+ KUSTOMER_SINGER = 'kustomer-singer'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceKustomerSinger:
+ r"""The values required to configure the source."""
+
+ api_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_token') }})
+ r"""Kustomer API Token. See the docs on how to obtain this"""
+ source_type: SourceKustomerSingerKustomerSingerEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date') }})
+ r"""The date from which you'd like to replicate the data"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_launchdarkly.py b/src/sdk/models/shared/source_launchdarkly.py
new file mode 100755
index 00000000..e28d125c
--- /dev/null
+++ b/src/sdk/models/shared/source_launchdarkly.py
@@ -0,0 +1,21 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceLaunchdarklyLaunchdarklyEnum(str, Enum):
+ LAUNCHDARKLY = 'launchdarkly'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceLaunchdarkly:
+ r"""The values required to configure the source."""
+
+ access_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token') }})
+ r"""Your Access token. See here."""
+ source_type: SourceLaunchdarklyLaunchdarklyEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_lemlist.py b/src/sdk/models/shared/source_lemlist.py
new file mode 100755
index 00000000..65f3cb99
--- /dev/null
+++ b/src/sdk/models/shared/source_lemlist.py
@@ -0,0 +1,21 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceLemlistLemlistEnum(str, Enum):
+ LEMLIST = 'lemlist'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceLemlist:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""Lemlist API key."""
+ source_type: SourceLemlistLemlistEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_linkedin_ads.py b/src/sdk/models/shared/source_linkedin_ads.py
new file mode 100755
index 00000000..5d55aa09
--- /dev/null
+++ b/src/sdk/models/shared/source_linkedin_ads.py
@@ -0,0 +1,55 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from datetime import date
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Any, Optional
+
+class SourceLinkedinAdsCredentialsAccessTokenAuthMethodEnum(str, Enum):
+ ACCESS_TOKEN = 'access_token'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceLinkedinAdsCredentialsAccessToken:
+
+ access_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token') }})
+ r"""The token value generated using the authentication code. See the docs to obtain yours."""
+ auth_method: Optional[SourceLinkedinAdsCredentialsAccessTokenAuthMethodEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_method'), 'exclude': lambda f: f is None }})
+
+class SourceLinkedinAdsCredentialsOAuth20AuthMethodEnum(str, Enum):
+ O_AUTH2_0 = 'oAuth2.0'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceLinkedinAdsCredentialsOAuth20:
+
+ client_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id') }})
+ r"""The client ID of the LinkedIn Ads developer application."""
+ client_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret') }})
+ r"""The client secret the LinkedIn Ads developer application."""
+ refresh_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('refresh_token') }})
+ r"""The key to refresh the expired access token."""
+ auth_method: Optional[SourceLinkedinAdsCredentialsOAuth20AuthMethodEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_method'), 'exclude': lambda f: f is None }})
+
+class SourceLinkedinAdsLinkedinAdsEnum(str, Enum):
+ LINKEDIN_ADS = 'linkedin-ads'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceLinkedinAds:
+ r"""The values required to configure the source."""
+
+ source_type: SourceLinkedinAdsLinkedinAdsEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: date = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.dateisoformat(False), 'decoder': utils.datefromisoformat, 'mm_field': fields.DateTime(format='iso') }})
+ r"""UTC date in the format 2020-09-17. Any data before this date will not be replicated."""
+ account_ids: Optional[list[int]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('account_ids'), 'exclude': lambda f: f is None }})
+ r"""Specify the account IDs separated by a space, to pull the data from. Leave empty, if you want to pull the data from all associated accounts. See the LinkedIn Ads docs for more info."""
+ credentials: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials'), 'exclude': lambda f: f is None }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_linkedin_pages.py b/src/sdk/models/shared/source_linkedin_pages.py
new file mode 100755
index 00000000..612fad5b
--- /dev/null
+++ b/src/sdk/models/shared/source_linkedin_pages.py
@@ -0,0 +1,51 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class SourceLinkedinPagesCredentialsAccessTokenAuthMethodEnum(str, Enum):
+ ACCESS_TOKEN = 'access_token'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceLinkedinPagesCredentialsAccessToken:
+
+ access_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token') }})
+ r"""The token value generated using the LinkedIn Developers OAuth Token Tools. See the docs to obtain yours."""
+ auth_method: Optional[SourceLinkedinPagesCredentialsAccessTokenAuthMethodEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_method'), 'exclude': lambda f: f is None }})
+
+class SourceLinkedinPagesCredentialsOAuth20AuthMethodEnum(str, Enum):
+ O_AUTH2_0 = 'oAuth2.0'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceLinkedinPagesCredentialsOAuth20:
+
+ client_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id') }})
+ r"""The client ID of the LinkedIn developer application."""
+ client_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret') }})
+ r"""The client secret of the LinkedIn developer application."""
+ refresh_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('refresh_token') }})
+ r"""The token value generated using the LinkedIn Developers OAuth Token Tools. See the docs to obtain yours."""
+ auth_method: Optional[SourceLinkedinPagesCredentialsOAuth20AuthMethodEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_method'), 'exclude': lambda f: f is None }})
+
+class SourceLinkedinPagesLinkedinPagesEnum(str, Enum):
+ LINKEDIN_PAGES = 'linkedin-pages'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceLinkedinPages:
+ r"""The values required to configure the source."""
+
+ org_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('org_id') }})
+ r"""Specify the Organization ID"""
+ source_type: SourceLinkedinPagesLinkedinPagesEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ credentials: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials'), 'exclude': lambda f: f is None }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_linnworks.py b/src/sdk/models/shared/source_linnworks.py
new file mode 100755
index 00000000..0ce12bb8
--- /dev/null
+++ b/src/sdk/models/shared/source_linnworks.py
@@ -0,0 +1,29 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+
+class SourceLinnworksLinnworksEnum(str, Enum):
+ LINNWORKS = 'linnworks'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceLinnworks:
+ r"""The values required to configure the source."""
+
+ application_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('application_id') }})
+ r"""Linnworks Application ID"""
+ application_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('application_secret') }})
+ r"""Linnworks Application Secret"""
+ source_type: SourceLinnworksLinnworksEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }})
+ r"""UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated."""
+ token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('token') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_lokalise.py b/src/sdk/models/shared/source_lokalise.py
new file mode 100755
index 00000000..dc10b4ff
--- /dev/null
+++ b/src/sdk/models/shared/source_lokalise.py
@@ -0,0 +1,23 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceLokaliseLokaliseEnum(str, Enum):
+ LOKALISE = 'lokalise'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceLokalise:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""Lokalise API Key with read-access. Available at Profile settings > API tokens. See here."""
+ project_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('project_id') }})
+ r"""Lokalise project ID. Available at Project Settings > General."""
+ source_type: SourceLokaliseLokaliseEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_mailchimp.py b/src/sdk/models/shared/source_mailchimp.py
new file mode 100755
index 00000000..76ac55b7
--- /dev/null
+++ b/src/sdk/models/shared/source_mailchimp.py
@@ -0,0 +1,50 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class SourceMailchimpCredentialsAPIKeyAuthTypeEnum(str, Enum):
+ APIKEY = 'apikey'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMailchimpCredentialsAPIKey:
+
+ apikey: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('apikey') }})
+ r"""Mailchimp API Key. See the docs for information on how to generate this key."""
+ auth_type: SourceMailchimpCredentialsAPIKeyAuthTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type') }})
+
+class SourceMailchimpCredentialsOAuth20AuthTypeEnum(str, Enum):
+ OAUTH2_0 = 'oauth2.0'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMailchimpCredentialsOAuth20:
+
+ access_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token') }})
+ r"""An access token generated using the above client ID and secret."""
+ auth_type: SourceMailchimpCredentialsOAuth20AuthTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type') }})
+ client_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id'), 'exclude': lambda f: f is None }})
+ r"""The Client ID of your OAuth application."""
+ client_secret: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret'), 'exclude': lambda f: f is None }})
+ r"""The Client Secret of your OAuth application."""
+
+class SourceMailchimpMailchimpEnum(str, Enum):
+ MAILCHIMP = 'mailchimp'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMailchimp:
+ r"""The values required to configure the source."""
+
+ source_type: SourceMailchimpMailchimpEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ campaign_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('campaign_id'), 'exclude': lambda f: f is None }})
+ credentials: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials'), 'exclude': lambda f: f is None }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_mailgun.py b/src/sdk/models/shared/source_mailgun.py
new file mode 100755
index 00000000..754208f6
--- /dev/null
+++ b/src/sdk/models/shared/source_mailgun.py
@@ -0,0 +1,29 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Optional
+
+class SourceMailgunMailgunEnum(str, Enum):
+ MAILGUN = 'mailgun'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMailgun:
+ r"""The values required to configure the source."""
+
+ private_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('private_key') }})
+ r"""Primary account API key to access your Mailgun data."""
+ source_type: SourceMailgunMailgunEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ domain_region: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('domain_region'), 'exclude': lambda f: f is None }})
+ r"""Domain region code. 'EU' or 'US' are possible values. The default is 'US'."""
+ start_date: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }})
+ r"""UTC date and time in the format 2020-10-01 00:00:00. Any data before this date will not be replicated. If omitted, defaults to 3 days ago."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_mailjet_sms.py b/src/sdk/models/shared/source_mailjet_sms.py
new file mode 100755
index 00000000..5ed19889
--- /dev/null
+++ b/src/sdk/models/shared/source_mailjet_sms.py
@@ -0,0 +1,26 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourceMailjetSmsMailjetSmsEnum(str, Enum):
+ MAILJET_SMS = 'mailjet-sms'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMailjetSms:
+ r"""The values required to configure the source."""
+
+ source_type: SourceMailjetSmsMailjetSmsEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('token') }})
+ r"""Your access token. See here."""
+ end_date: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('end_date'), 'exclude': lambda f: f is None }})
+ r"""Retrieve SMS messages created before the specified timestamp. Required format - Unix timestamp."""
+ start_date: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'exclude': lambda f: f is None }})
+ r"""Retrieve SMS messages created after the specified timestamp. Required format - Unix timestamp."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_marketo.py b/src/sdk/models/shared/source_marketo.py
new file mode 100755
index 00000000..ae8ed599
--- /dev/null
+++ b/src/sdk/models/shared/source_marketo.py
@@ -0,0 +1,27 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceMarketoMarketoEnum(str, Enum):
+ MARKETO = 'marketo'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMarketo:
+ r"""The values required to configure the source."""
+
+ client_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id') }})
+ r"""The Client ID of your Marketo developer application. See the docs for info on how to obtain this."""
+ client_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret') }})
+ r"""The Client Secret of your Marketo developer application. See the docs for info on how to obtain this."""
+ domain_url: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('domain_url') }})
+ r"""Your Marketo Base URL. See the docs for info on how to obtain this."""
+ source_type: SourceMarketoMarketoEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date') }})
+ r"""UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_metabase.py b/src/sdk/models/shared/source_metabase.py
new file mode 100755
index 00000000..29530b6c
--- /dev/null
+++ b/src/sdk/models/shared/source_metabase.py
@@ -0,0 +1,32 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourceMetabaseMetabaseEnum(str, Enum):
+ METABASE = 'metabase'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMetabase:
+ r"""The values required to configure the source."""
+
+ instance_api_url: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('instance_api_url') }})
+ r"""URL to your metabase instance API"""
+ source_type: SourceMetabaseMetabaseEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ password: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password'), 'exclude': lambda f: f is None }})
+ session_token: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('session_token'), 'exclude': lambda f: f is None }})
+ r"""To generate your session token, you need to run the following command: ``` curl -X POST \
+ -H \"Content-Type: application/json\" \
+ -d '{\"username\": \"person@metabase.com\", \"password\": \"fakepassword\"}' \
+ http://localhost:3000/api/session
+ ``` Then copy the value of the `id` field returned by a successful call to that API.
+ Note that by default, sessions are good for 14 days and needs to be regenerated.
+ """
+ username: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('username'), 'exclude': lambda f: f is None }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_microsoft_teams.py b/src/sdk/models/shared/source_microsoft_teams.py
new file mode 100755
index 00000000..1aaf427d
--- /dev/null
+++ b/src/sdk/models/shared/source_microsoft_teams.py
@@ -0,0 +1,60 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class SourceMicrosoftTeamsCredentialsAuthenticateViaMicrosoftAuthTypeEnum(str, Enum):
+ TOKEN = 'Token'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMicrosoftTeamsCredentialsAuthenticateViaMicrosoft:
+ r"""Choose how to authenticate to Microsoft"""
+
+ client_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id') }})
+ r"""The Client ID of your Microsoft Teams developer application."""
+ client_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret') }})
+ r"""The Client Secret of your Microsoft Teams developer application."""
+ tenant_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tenant_id') }})
+ r"""A globally unique identifier (GUID) that is different than your organization name or domain. Follow these steps to obtain: open one of the Teams where you belong inside the Teams Application -> Click on the … next to the Team title -> Click on Get link to team -> Copy the link to the team and grab the tenant ID form the URL"""
+ auth_type: Optional[SourceMicrosoftTeamsCredentialsAuthenticateViaMicrosoftAuthTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type'), 'exclude': lambda f: f is None }})
+
+class SourceMicrosoftTeamsCredentialsAuthenticateViaMicrosoftOAuth20AuthTypeEnum(str, Enum):
+ CLIENT = 'Client'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMicrosoftTeamsCredentialsAuthenticateViaMicrosoftOAuth20:
+ r"""Choose how to authenticate to Microsoft"""
+
+ client_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id') }})
+ r"""The Client ID of your Microsoft Teams developer application."""
+ client_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret') }})
+ r"""The Client Secret of your Microsoft Teams developer application."""
+ refresh_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('refresh_token') }})
+ r"""A Refresh Token to renew the expired Access Token."""
+ tenant_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tenant_id') }})
+ r"""A globally unique identifier (GUID) that is different than your organization name or domain. Follow these steps to obtain: open one of the Teams where you belong inside the Teams Application -> Click on the … next to the Team title -> Click on Get link to team -> Copy the link to the team and grab the tenant ID form the URL"""
+ auth_type: Optional[SourceMicrosoftTeamsCredentialsAuthenticateViaMicrosoftOAuth20AuthTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type'), 'exclude': lambda f: f is None }})
+
+class SourceMicrosoftTeamsMicrosoftTeamsEnum(str, Enum):
+ MICROSOFT_TEAMS = 'microsoft-teams'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMicrosoftTeams:
+ r"""The values required to configure the source."""
+
+ period: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('period') }})
+ r"""Specifies the length of time over which the Team Device Report stream is aggregated. The supported values are: D7, D30, D90, and D180."""
+ source_type: SourceMicrosoftTeamsMicrosoftTeamsEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ credentials: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials'), 'exclude': lambda f: f is None }})
+ r"""Choose how to authenticate to Microsoft"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_mixpanel.py b/src/sdk/models/shared/source_mixpanel.py
new file mode 100755
index 00000000..ab869df0
--- /dev/null
+++ b/src/sdk/models/shared/source_mixpanel.py
@@ -0,0 +1,71 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class SourceMixpanelCredentialsProjectSecretOptionTitleEnum(str, Enum):
+ PROJECT_SECRET = 'Project Secret'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMixpanelCredentialsProjectSecret:
+ r"""Choose how to authenticate to Mixpanel"""
+
+ api_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_secret') }})
+ r"""Mixpanel project secret. See the docs for more information on how to obtain this."""
+ option_title: Optional[SourceMixpanelCredentialsProjectSecretOptionTitleEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('option_title'), 'exclude': lambda f: f is None }})
+
+class SourceMixpanelCredentialsServiceAccountOptionTitleEnum(str, Enum):
+ SERVICE_ACCOUNT = 'Service Account'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMixpanelCredentialsServiceAccount:
+ r"""Choose how to authenticate to Mixpanel"""
+
+ secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('secret') }})
+ r"""Mixpanel Service Account Secret. See the docs for more information on how to obtain this."""
+ username: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('username') }})
+ r"""Mixpanel Service Account Username. See the docs for more information on how to obtain this."""
+ option_title: Optional[SourceMixpanelCredentialsServiceAccountOptionTitleEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('option_title'), 'exclude': lambda f: f is None }})
+
+class SourceMixpanelRegionEnum(str, Enum):
+ r"""The region of mixpanel domain instance either US or EU."""
+ US = 'US'
+ EU = 'EU'
+
+class SourceMixpanelMixpanelEnum(str, Enum):
+ MIXPANEL = 'mixpanel'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMixpanel:
+ r"""The values required to configure the source."""
+
+ source_type: SourceMixpanelMixpanelEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ attribution_window: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('attribution_window'), 'exclude': lambda f: f is None }})
+ r"""A period of time for attributing results to ads and the lookback period after those actions occur during which ad results are counted. Default attribution window is 5 days."""
+ credentials: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials'), 'exclude': lambda f: f is None }})
+ r"""Choose how to authenticate to Mixpanel"""
+ date_window_size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('date_window_size'), 'exclude': lambda f: f is None }})
+ r"""Defines window size in days, that used to slice through data. You can reduce it, if amount of data in each window is too big for your environment."""
+ end_date: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('end_date'), 'exclude': lambda f: f is None }})
+ r"""The date in the format YYYY-MM-DD. Any data after this date will not be replicated. Left empty to always sync to most recent date"""
+ project_id: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('project_id'), 'exclude': lambda f: f is None }})
+ r"""Your project ID number. See the docs for more information on how to obtain this."""
+ project_timezone: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('project_timezone'), 'exclude': lambda f: f is None }})
+ r"""Time zone in which integer date times are stored. The project timezone may be found in the project settings in the Mixpanel console."""
+ region: Optional[SourceMixpanelRegionEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('region'), 'exclude': lambda f: f is None }})
+ r"""The region of mixpanel domain instance either US or EU."""
+ select_properties_by_default: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('select_properties_by_default'), 'exclude': lambda f: f is None }})
+ r"""Setting this config parameter to TRUE ensures that new properties on events and engage records are captured. Otherwise new properties will be ignored."""
+ start_date: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'exclude': lambda f: f is None }})
+ r"""The date in the format YYYY-MM-DD. Any data before this date will not be replicated. If this option is not set, the connector will replicate data from up to one year ago by default."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_monday.py b/src/sdk/models/shared/source_monday.py
new file mode 100755
index 00000000..aee21a7c
--- /dev/null
+++ b/src/sdk/models/shared/source_monday.py
@@ -0,0 +1,51 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class SourceMondayCredentialsAPITokenAuthTypeEnum(str, Enum):
+ API_TOKEN = 'api_token'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMondayCredentialsAPIToken:
+
+ api_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_token') }})
+ r"""API Token for making authenticated requests."""
+ auth_type: SourceMondayCredentialsAPITokenAuthTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type') }})
+
+class SourceMondayCredentialsOAuth20AuthTypeEnum(str, Enum):
+ OAUTH2_0 = 'oauth2.0'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMondayCredentialsOAuth20:
+
+ access_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token') }})
+ r"""Access Token for making authenticated requests."""
+ auth_type: SourceMondayCredentialsOAuth20AuthTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type') }})
+ client_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id') }})
+ r"""The Client ID of your OAuth application."""
+ client_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret') }})
+ r"""The Client Secret of your OAuth application."""
+ subdomain: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('subdomain'), 'exclude': lambda f: f is None }})
+ r"""Slug/subdomain of the account, or the first part of the URL that comes before .monday.com"""
+
+class SourceMondayMondayEnum(str, Enum):
+ MONDAY = 'monday'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMonday:
+ r"""The values required to configure the source."""
+
+ source_type: SourceMondayMondayEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ credentials: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials'), 'exclude': lambda f: f is None }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_mongodb.py b/src/sdk/models/shared/source_mongodb.py
new file mode 100755
index 00000000..e88051cf
--- /dev/null
+++ b/src/sdk/models/shared/source_mongodb.py
@@ -0,0 +1,73 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class SourceMongodbInstanceTypeMongoDBAtlasInstanceEnum(str, Enum):
+ ATLAS = 'atlas'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMongodbInstanceTypeMongoDBAtlas:
+ r"""The MongoDb instance to connect to. For MongoDB Atlas and Replica Set TLS connection is used by default."""
+
+ cluster_url: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cluster_url') }})
+ r"""The URL of a cluster to connect to."""
+ instance: SourceMongodbInstanceTypeMongoDBAtlasInstanceEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('instance') }})
+
+class SourceMongodbInstanceTypeReplicaSetInstanceEnum(str, Enum):
+ REPLICA = 'replica'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMongodbInstanceTypeReplicaSet:
+ r"""The MongoDb instance to connect to. For MongoDB Atlas and Replica Set TLS connection is used by default."""
+
+ instance: SourceMongodbInstanceTypeReplicaSetInstanceEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('instance') }})
+ server_addresses: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('server_addresses') }})
+ r"""The members of a replica set. Please specify `host`:`port` of each member separated by comma."""
+ replica_set: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('replica_set'), 'exclude': lambda f: f is None }})
+ r"""A replica set in MongoDB is a group of mongod processes that maintain the same data set."""
+
+class SourceMongodbInstanceTypeStandaloneMongoDbInstanceInstanceEnum(str, Enum):
+ STANDALONE = 'standalone'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMongodbInstanceTypeStandaloneMongoDbInstance:
+ r"""The MongoDb instance to connect to. For MongoDB Atlas and Replica Set TLS connection is used by default."""
+
+ host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('host') }})
+ r"""The host name of the Mongo database."""
+ instance: SourceMongodbInstanceTypeStandaloneMongoDbInstanceInstanceEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('instance') }})
+ port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('port') }})
+ r"""The port of the Mongo database."""
+
+class SourceMongodbMongodbEnum(str, Enum):
+ MONGODB = 'mongodb'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMongodb:
+ r"""The values required to configure the source."""
+
+ database: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('database') }})
+ r"""The database you want to replicate."""
+ source_type: SourceMongodbMongodbEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ auth_source: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_source'), 'exclude': lambda f: f is None }})
+ r"""The authentication source where the user information is stored."""
+ instance_type: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('instance_type'), 'exclude': lambda f: f is None }})
+ r"""The MongoDb instance to connect to. For MongoDB Atlas and Replica Set TLS connection is used by default."""
+ password: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password'), 'exclude': lambda f: f is None }})
+ r"""The password associated with this username."""
+ user: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('user'), 'exclude': lambda f: f is None }})
+ r"""The username which is used to access the database."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_mssql.py b/src/sdk/models/shared/source_mssql.py
new file mode 100755
index 00000000..3d1bce2d
--- /dev/null
+++ b/src/sdk/models/shared/source_mssql.py
@@ -0,0 +1,157 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class SourceMssqlReplicationMethodLogicalReplicationCDCDataToSyncEnum(str, Enum):
+ r"""What data should be synced under the CDC. \\"Existing and New\\" will read existing data as a snapshot, and sync new changes through CDC. \\"New Changes Only\\" will skip the initial snapshot, and only sync new changes through CDC."""
+ EXISTING_AND_NEW = 'Existing and New'
+ NEW_CHANGES_ONLY = 'New Changes Only'
+
+class SourceMssqlReplicationMethodLogicalReplicationCDCMethodEnum(str, Enum):
+ CDC = 'CDC'
+
+class SourceMssqlReplicationMethodLogicalReplicationCDCInitialSnapshotIsolationLevelEnum(str, Enum):
+ r"""Existing data in the database are synced through an initial snapshot. This parameter controls the isolation level that will be used during the initial snapshotting. If you choose the \\"Snapshot\\" level, you must enable the snapshot isolation mode on the database."""
+ SNAPSHOT = 'Snapshot'
+ READ_COMMITTED = 'Read Committed'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMssqlReplicationMethodLogicalReplicationCDC:
+ r"""CDC uses {TBC} to detect inserts, updates, and deletes. This needs to be configured on the source database itself."""
+
+ method: SourceMssqlReplicationMethodLogicalReplicationCDCMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('method') }})
+ data_to_sync: Optional[SourceMssqlReplicationMethodLogicalReplicationCDCDataToSyncEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data_to_sync'), 'exclude': lambda f: f is None }})
+ r"""What data should be synced under the CDC. \\"Existing and New\\" will read existing data as a snapshot, and sync new changes through CDC. \\"New Changes Only\\" will skip the initial snapshot, and only sync new changes through CDC."""
+ initial_waiting_seconds: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('initial_waiting_seconds'), 'exclude': lambda f: f is None }})
+ r"""The amount of time the connector will wait when it launches to determine if there is new data to sync or not. Defaults to 300 seconds. Valid range: 120 seconds to 1200 seconds. Read about initial waiting time."""
+ snapshot_isolation: Optional[SourceMssqlReplicationMethodLogicalReplicationCDCInitialSnapshotIsolationLevelEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('snapshot_isolation'), 'exclude': lambda f: f is None }})
+ r"""Existing data in the database are synced through an initial snapshot. This parameter controls the isolation level that will be used during the initial snapshotting. If you choose the \\"Snapshot\\" level, you must enable the snapshot isolation mode on the database."""
+
+class SourceMssqlReplicationMethodStandardMethodEnum(str, Enum):
+ STANDARD = 'STANDARD'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMssqlReplicationMethodStandard:
+ r"""Standard replication requires no setup on the DB side but will not be able to represent deletions incrementally."""
+
+ method: SourceMssqlReplicationMethodStandardMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('method') }})
+
+class SourceMssqlMssqlEnum(str, Enum):
+ MSSQL = 'mssql'
+
+class SourceMssqlSslMethodEncryptedVerifyCertificateSslMethodEnum(str, Enum):
+ ENCRYPTED_VERIFY_CERTIFICATE = 'encrypted_verify_certificate'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMssqlSslMethodEncryptedVerifyCertificate:
+ r"""Verify and use the certificate provided by the server."""
+
+ ssl_method: SourceMssqlSslMethodEncryptedVerifyCertificateSslMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ssl_method') }})
+ host_name_in_certificate: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hostNameInCertificate'), 'exclude': lambda f: f is None }})
+ r"""Specifies the host name of the server. The value of this property must match the subject property of the certificate."""
+
+class SourceMssqlSslMethodEncryptedTrustServerCertificateSslMethodEnum(str, Enum):
+ ENCRYPTED_TRUST_SERVER_CERTIFICATE = 'encrypted_trust_server_certificate'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMssqlSslMethodEncryptedTrustServerCertificate:
+ r"""Use the certificate provided by the server without verification. (For testing purposes only!)"""
+
+ ssl_method: SourceMssqlSslMethodEncryptedTrustServerCertificateSslMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ssl_method') }})
+
+class SourceMssqlTunnelMethodPasswordAuthenticationTunnelMethodEnum(str, Enum):
+ r"""Connect through a jump server tunnel host using username and password authentication"""
+ SSH_PASSWORD_AUTH = 'SSH_PASSWORD_AUTH'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMssqlTunnelMethodPasswordAuthentication:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ tunnel_host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_host') }})
+ r"""Hostname of the jump server host that allows inbound ssh tunnel."""
+ tunnel_method: SourceMssqlTunnelMethodPasswordAuthenticationTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""Connect through a jump server tunnel host using username and password authentication"""
+ tunnel_port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_port') }})
+ r"""Port on the proxy/jump server that accepts inbound ssh connections."""
+ tunnel_user: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user') }})
+ r"""OS-level username for logging into the jump server host"""
+ tunnel_user_password: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user_password') }})
+ r"""OS-level password for logging into the jump server host"""
+
+class SourceMssqlTunnelMethodSSHKeyAuthenticationTunnelMethodEnum(str, Enum):
+ r"""Connect through a jump server tunnel host using username and ssh key"""
+ SSH_KEY_AUTH = 'SSH_KEY_AUTH'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMssqlTunnelMethodSSHKeyAuthentication:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ ssh_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ssh_key') }})
+ r"""OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )"""
+ tunnel_host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_host') }})
+ r"""Hostname of the jump server host that allows inbound ssh tunnel."""
+ tunnel_method: SourceMssqlTunnelMethodSSHKeyAuthenticationTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""Connect through a jump server tunnel host using username and ssh key"""
+ tunnel_port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_port') }})
+ r"""Port on the proxy/jump server that accepts inbound ssh connections."""
+ tunnel_user: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user') }})
+ r"""OS-level username for logging into the jump server host."""
+
+class SourceMssqlTunnelMethodNoTunnelTunnelMethodEnum(str, Enum):
+ r"""No ssh tunnel needed to connect to database"""
+ NO_TUNNEL = 'NO_TUNNEL'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMssqlTunnelMethodNoTunnel:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ tunnel_method: SourceMssqlTunnelMethodNoTunnelTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""No ssh tunnel needed to connect to database"""
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMssql:
+ r"""The values required to configure the source."""
+
+ database: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('database') }})
+ r"""The name of the database."""
+ host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('host') }})
+ r"""The hostname of the database."""
+ port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('port') }})
+ r"""The port of the database."""
+ source_type: SourceMssqlMssqlEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ username: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('username') }})
+ r"""The username which is used to access the database."""
+ jdbc_url_params: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('jdbc_url_params'), 'exclude': lambda f: f is None }})
+ r"""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)."""
+ password: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password'), 'exclude': lambda f: f is None }})
+ r"""The password associated with the username."""
+ replication_method: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('replication_method'), 'exclude': lambda f: f is None }})
+ r"""The replication method used for extracting data from the database. STANDARD replication requires no setup on the DB side but will not be able to represent deletions incrementally. CDC uses {TBC} to detect inserts, updates, and deletes. This needs to be configured on the source database itself."""
+ schemas: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('schemas'), 'exclude': lambda f: f is None }})
+ r"""The list of schemas to sync from. Defaults to user. Case sensitive."""
+ ssl_method: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ssl_method'), 'exclude': lambda f: f is None }})
+ r"""The encryption method which is used when communicating with the database."""
+ tunnel_method: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method'), 'exclude': lambda f: f is None }})
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_my_hours.py b/src/sdk/models/shared/source_my_hours.py
new file mode 100755
index 00000000..a79b3e53
--- /dev/null
+++ b/src/sdk/models/shared/source_my_hours.py
@@ -0,0 +1,28 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourceMyHoursMyHoursEnum(str, Enum):
+ MY_HOURS = 'my-hours'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMyHours:
+ r"""The values required to configure the source."""
+
+ email: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('email') }})
+ r"""Your My Hours username"""
+ password: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password') }})
+ r"""The password associated to the username"""
+ source_type: SourceMyHoursMyHoursEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date') }})
+ r"""Start date for collecting time logs"""
+ logs_batch_size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('logs_batch_size'), 'exclude': lambda f: f is None }})
+ r"""Pagination size used for retrieving logs in days"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_mysql.py b/src/sdk/models/shared/source_mysql.py
new file mode 100755
index 00000000..863ac32f
--- /dev/null
+++ b/src/sdk/models/shared/source_mysql.py
@@ -0,0 +1,179 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class SourceMysqlReplicationMethodLogicalReplicationCDCMethodEnum(str, Enum):
+ CDC = 'CDC'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMysqlReplicationMethodLogicalReplicationCDC:
+ r"""CDC uses the Binlog to detect inserts, updates, and deletes. This needs to be configured on the source database itself."""
+
+ method: SourceMysqlReplicationMethodLogicalReplicationCDCMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('method') }})
+ initial_waiting_seconds: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('initial_waiting_seconds'), 'exclude': lambda f: f is None }})
+ r"""The amount of time the connector will wait when it launches to determine if there is new data to sync or not. Defaults to 300 seconds. Valid range: 120 seconds to 1200 seconds. Read about initial waiting time."""
+ server_time_zone: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('server_time_zone'), 'exclude': lambda f: f is None }})
+ r"""Enter the configured MySQL server timezone. This should only be done if the configured timezone in your MySQL instance does not conform to IANNA standard."""
+
+class SourceMysqlReplicationMethodStandardMethodEnum(str, Enum):
+ STANDARD = 'STANDARD'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMysqlReplicationMethodStandard:
+ r"""Standard replication requires no setup on the DB side but will not be able to represent deletions incrementally."""
+
+ method: SourceMysqlReplicationMethodStandardMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('method') }})
+
+class SourceMysqlMysqlEnum(str, Enum):
+ MYSQL = 'mysql'
+
+class SourceMysqlSslModeVerifyIdentityModeEnum(str, Enum):
+ VERIFY_IDENTITY = 'verify_identity'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMysqlSslModeVerifyIdentity:
+ r"""Always connect with SSL. Verify both CA and Hostname."""
+
+ ca_certificate: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ca_certificate') }})
+ r"""CA certificate"""
+ mode: SourceMysqlSslModeVerifyIdentityModeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mode') }})
+ client_certificate: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_certificate'), 'exclude': lambda f: f is None }})
+ r"""Client certificate (this is not a required field, but if you want to use it, you will need to add the Client key as well)"""
+ client_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_key'), 'exclude': lambda f: f is None }})
+ r"""Client key (this is not a required field, but if you want to use it, you will need to add the Client certificate as well)"""
+ client_key_password: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_key_password'), 'exclude': lambda f: f is None }})
+ r"""Password for keystorage. This field is optional. If you do not add it - the password will be generated automatically."""
+
+class SourceMysqlSslModeVerifyCAModeEnum(str, Enum):
+ VERIFY_CA = 'verify_ca'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMysqlSslModeVerifyCA:
+ r"""Always connect with SSL. Verifies CA, but allows connection even if Hostname does not match."""
+
+ ca_certificate: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ca_certificate') }})
+ r"""CA certificate"""
+ mode: SourceMysqlSslModeVerifyCAModeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mode') }})
+ client_certificate: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_certificate'), 'exclude': lambda f: f is None }})
+ r"""Client certificate (this is not a required field, but if you want to use it, you will need to add the Client key as well)"""
+ client_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_key'), 'exclude': lambda f: f is None }})
+ r"""Client key (this is not a required field, but if you want to use it, you will need to add the Client certificate as well)"""
+ client_key_password: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_key_password'), 'exclude': lambda f: f is None }})
+ r"""Password for keystorage. This field is optional. If you do not add it - the password will be generated automatically."""
+
+class SourceMysqlSslModeRequiredModeEnum(str, Enum):
+ REQUIRED = 'required'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMysqlSslModeRequired:
+ r"""Always connect with SSL. If the MySQL server doesn’t support SSL, the connection will not be established. Certificate Authority (CA) and Hostname are not verified."""
+
+ mode: SourceMysqlSslModeRequiredModeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mode') }})
+
+class SourceMysqlSslModePreferredModeEnum(str, Enum):
+ PREFERRED = 'preferred'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMysqlSslModePreferred:
+ r"""Automatically attempt SSL connection. If the MySQL server does not support SSL, continue with a regular connection."""
+
+ mode: SourceMysqlSslModePreferredModeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mode') }})
+
+class SourceMysqlTunnelMethodPasswordAuthenticationTunnelMethodEnum(str, Enum):
+ r"""Connect through a jump server tunnel host using username and password authentication"""
+ SSH_PASSWORD_AUTH = 'SSH_PASSWORD_AUTH'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMysqlTunnelMethodPasswordAuthentication:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ tunnel_host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_host') }})
+ r"""Hostname of the jump server host that allows inbound ssh tunnel."""
+ tunnel_method: SourceMysqlTunnelMethodPasswordAuthenticationTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""Connect through a jump server tunnel host using username and password authentication"""
+ tunnel_port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_port') }})
+ r"""Port on the proxy/jump server that accepts inbound ssh connections."""
+ tunnel_user: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user') }})
+ r"""OS-level username for logging into the jump server host"""
+ tunnel_user_password: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user_password') }})
+ r"""OS-level password for logging into the jump server host"""
+
+class SourceMysqlTunnelMethodSSHKeyAuthenticationTunnelMethodEnum(str, Enum):
+ r"""Connect through a jump server tunnel host using username and ssh key"""
+ SSH_KEY_AUTH = 'SSH_KEY_AUTH'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMysqlTunnelMethodSSHKeyAuthentication:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ ssh_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ssh_key') }})
+ r"""OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )"""
+ tunnel_host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_host') }})
+ r"""Hostname of the jump server host that allows inbound ssh tunnel."""
+ tunnel_method: SourceMysqlTunnelMethodSSHKeyAuthenticationTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""Connect through a jump server tunnel host using username and ssh key"""
+ tunnel_port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_port') }})
+ r"""Port on the proxy/jump server that accepts inbound ssh connections."""
+ tunnel_user: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user') }})
+ r"""OS-level username for logging into the jump server host."""
+
+class SourceMysqlTunnelMethodNoTunnelTunnelMethodEnum(str, Enum):
+ r"""No ssh tunnel needed to connect to database"""
+ NO_TUNNEL = 'NO_TUNNEL'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMysqlTunnelMethodNoTunnel:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ tunnel_method: SourceMysqlTunnelMethodNoTunnelTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""No ssh tunnel needed to connect to database"""
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceMysql:
+ r"""The values required to configure the source."""
+
+ database: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('database') }})
+ r"""The database name."""
+ host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('host') }})
+ r"""The host name of the database."""
+ port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('port') }})
+ r"""The port to connect to."""
+ replication_method: Any = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('replication_method') }})
+ r"""Replication method to use for extracting data from the database."""
+ source_type: SourceMysqlMysqlEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ username: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('username') }})
+ r"""The username which is used to access the database."""
+ jdbc_url_params: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('jdbc_url_params'), 'exclude': lambda f: f is None }})
+ r"""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). For more information read about JDBC URL parameters."""
+ password: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password'), 'exclude': lambda f: f is None }})
+ r"""The password associated with the username."""
+ ssl_mode: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ssl_mode'), 'exclude': lambda f: f is None }})
+ r"""SSL connection modes. Read more in the docs."""
+ tunnel_method: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method'), 'exclude': lambda f: f is None }})
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_netsuite.py b/src/sdk/models/shared/source_netsuite.py
new file mode 100755
index 00000000..da9c85a1
--- /dev/null
+++ b/src/sdk/models/shared/source_netsuite.py
@@ -0,0 +1,36 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourceNetsuiteNetsuiteEnum(str, Enum):
+ NETSUITE = 'netsuite'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceNetsuite:
+ r"""The values required to configure the source."""
+
+ consumer_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('consumer_key') }})
+ r"""Consumer key associated with your integration"""
+ consumer_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('consumer_secret') }})
+ r"""Consumer secret associated with your integration"""
+ realm: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('realm') }})
+ r"""Netsuite realm e.g. 2344535, as for `production` or 2344535_SB1, as for the `sandbox`"""
+ source_type: SourceNetsuiteNetsuiteEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_datetime: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_datetime') }})
+ r"""Starting point for your data replication, in format of \\"YYYY-MM-DDTHH:mm:ssZ\\" """
+ token_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('token_key') }})
+ r"""Access token key"""
+ token_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('token_secret') }})
+ r"""Access token secret"""
+ object_types: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('object_types'), 'exclude': lambda f: f is None }})
+ r"""The API names of the Netsuite objects you want to sync. Setting this speeds up the connection setup process by limiting the number of schemas that need to be retrieved from Netsuite."""
+ window_in_days: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('window_in_days'), 'exclude': lambda f: f is None }})
+ r"""The amount of days used to query the data with date chunks. Set smaller value, if you have lots of data."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_notion.py b/src/sdk/models/shared/source_notion.py
new file mode 100755
index 00000000..acbab242
--- /dev/null
+++ b/src/sdk/models/shared/source_notion.py
@@ -0,0 +1,57 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Any, Optional
+
+class SourceNotionCredentialsAccessTokenAuthTypeEnum(str, Enum):
+ TOKEN = 'token'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceNotionCredentialsAccessToken:
+ r"""Pick an authentication method."""
+
+ auth_type: SourceNotionCredentialsAccessTokenAuthTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type') }})
+ token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('token') }})
+ r"""Notion API access token, see the docs for more information on how to obtain this token."""
+
+class SourceNotionCredentialsOAuth20AuthTypeEnum(str, Enum):
+ O_AUTH2_0 = 'OAuth2.0'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceNotionCredentialsOAuth20:
+ r"""Pick an authentication method."""
+
+ access_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token') }})
+ r"""Access Token is a token you received by complete the OauthWebFlow of Notion."""
+ auth_type: SourceNotionCredentialsOAuth20AuthTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type') }})
+ client_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id') }})
+ r"""The ClientID of your Notion integration."""
+ client_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret') }})
+ r"""The ClientSecret of your Notion integration."""
+
+class SourceNotionNotionEnum(str, Enum):
+ NOTION = 'notion'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceNotion:
+ r"""The values required to configure the source."""
+
+ source_type: SourceNotionNotionEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }})
+ r"""UTC date and time in the format 2017-01-25T00:00:00.000Z. Any data before this date will not be replicated."""
+ credentials: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials'), 'exclude': lambda f: f is None }})
+ r"""Pick an authentication method."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_nytimes.py b/src/sdk/models/shared/source_nytimes.py
new file mode 100755
index 00000000..2506192f
--- /dev/null
+++ b/src/sdk/models/shared/source_nytimes.py
@@ -0,0 +1,42 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from datetime import date
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Optional
+
+class SourceNytimesPeriodUsedForMostPopularStreamsEnum(str, Enum):
+ r"""Period of time (in days)"""
+ ONE = '1'
+ SEVEN = '7'
+ THIRTY = '30'
+
+class SourceNytimesShareTypeUsedForMostPopularSharedStreamEnum(str, Enum):
+ r"""Share Type"""
+ FACEBOOK = 'facebook'
+
+class SourceNytimesNytimesEnum(str, Enum):
+ NYTIMES = 'nytimes'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceNytimes:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""API Key"""
+ period: SourceNytimesPeriodUsedForMostPopularStreamsEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('period') }})
+ r"""Period of time (in days)"""
+ source_type: SourceNytimesNytimesEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: date = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.dateisoformat(False), 'decoder': utils.datefromisoformat, 'mm_field': fields.DateTime(format='iso') }})
+ r"""Start date to begin the article retrieval (format YYYY-MM)"""
+ end_date: Optional[date] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('end_date'), 'encoder': utils.dateisoformat(True), 'decoder': utils.datefromisoformat, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }})
+ r"""End date to stop the article retrieval (format YYYY-MM)"""
+ share_type: Optional[SourceNytimesShareTypeUsedForMostPopularSharedStreamEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('share_type'), 'exclude': lambda f: f is None }})
+ r"""Share Type"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_okta.py b/src/sdk/models/shared/source_okta.py
new file mode 100755
index 00000000..c6ba225b
--- /dev/null
+++ b/src/sdk/models/shared/source_okta.py
@@ -0,0 +1,53 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class SourceOktaCredentialsAPITokenAuthTypeEnum(str, Enum):
+ API_TOKEN = 'api_token'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceOktaCredentialsAPIToken:
+
+ api_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_token') }})
+ r"""An Okta token. See the docs for instructions on how to generate it."""
+ auth_type: SourceOktaCredentialsAPITokenAuthTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type') }})
+
+class SourceOktaCredentialsOAuth20AuthTypeEnum(str, Enum):
+ OAUTH2_0 = 'oauth2.0'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceOktaCredentialsOAuth20:
+
+ auth_type: SourceOktaCredentialsOAuth20AuthTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type') }})
+ client_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id') }})
+ r"""The Client ID of your OAuth application."""
+ client_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret') }})
+ r"""The Client Secret of your OAuth application."""
+ refresh_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('refresh_token') }})
+ r"""Refresh Token to obtain new Access Token, when it's expired."""
+
+class SourceOktaOktaEnum(str, Enum):
+ OKTA = 'okta'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceOkta:
+ r"""The values required to configure the source."""
+
+ source_type: SourceOktaOktaEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ credentials: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials'), 'exclude': lambda f: f is None }})
+ domain: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('domain'), 'exclude': lambda f: f is None }})
+ r"""The Okta domain. See the docs for instructions on how to find it."""
+ start_date: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'exclude': lambda f: f is None }})
+ r"""UTC date and time in the format YYYY-MM-DDTHH:MM:SSZ. Any data before this date will not be replicated."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_omnisend.py b/src/sdk/models/shared/source_omnisend.py
new file mode 100755
index 00000000..d7e6f164
--- /dev/null
+++ b/src/sdk/models/shared/source_omnisend.py
@@ -0,0 +1,21 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceOmnisendOmnisendEnum(str, Enum):
+ OMNISEND = 'omnisend'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceOmnisend:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""API Key"""
+ source_type: SourceOmnisendOmnisendEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_onesignal.py b/src/sdk/models/shared/source_onesignal.py
new file mode 100755
index 00000000..5c5c46ed
--- /dev/null
+++ b/src/sdk/models/shared/source_onesignal.py
@@ -0,0 +1,40 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Optional
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceOnesignalApplications:
+
+ app_api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('app_api_key') }})
+ app_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('app_id') }})
+ app_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('app_name'), 'exclude': lambda f: f is None }})
+
+class SourceOnesignalOnesignalEnum(str, Enum):
+ ONESIGNAL = 'onesignal'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceOnesignal:
+ r"""The values required to configure the source."""
+
+ applications: list[SourceOnesignalApplications] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('applications') }})
+ r"""Applications keys, see the docs for more information on how to obtain this data"""
+ outcome_names: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('outcome_names') }})
+ r"""Comma-separated list of names and the value (sum/count) for the returned outcome data. See the docs for more details"""
+ source_type: SourceOnesignalOnesignalEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }})
+ r"""The date from which you'd like to replicate data for OneSignal API, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated."""
+ user_auth_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('user_auth_key') }})
+ r"""OneSignal User Auth Key, see the docs for more information on how to obtain this key."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_openweather.py b/src/sdk/models/shared/source_openweather.py
new file mode 100755
index 00000000..61cf17b3
--- /dev/null
+++ b/src/sdk/models/shared/source_openweather.py
@@ -0,0 +1,88 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourceOpenweatherLanguageEnum(str, Enum):
+ r"""You can use lang parameter to get the output in your language. The contents of the description field will be translated. See here for the list of supported languages."""
+ AF = 'af'
+ AL = 'al'
+ AR = 'ar'
+ AZ = 'az'
+ BG = 'bg'
+ CA = 'ca'
+ CZ = 'cz'
+ DA = 'da'
+ DE = 'de'
+ EL = 'el'
+ EN = 'en'
+ EU = 'eu'
+ FA = 'fa'
+ FI = 'fi'
+ FR = 'fr'
+ GL = 'gl'
+ HE = 'he'
+ HI = 'hi'
+ HR = 'hr'
+ HU = 'hu'
+ ID = 'id'
+ IT = 'it'
+ JA = 'ja'
+ KR = 'kr'
+ LA = 'la'
+ LT = 'lt'
+ MK = 'mk'
+ NO = 'no'
+ NL = 'nl'
+ PL = 'pl'
+ PT = 'pt'
+ PT_BR = 'pt_br'
+ RO = 'ro'
+ RU = 'ru'
+ SV = 'sv'
+ SE = 'se'
+ SK = 'sk'
+ SL = 'sl'
+ SP = 'sp'
+ ES = 'es'
+ SR = 'sr'
+ TH = 'th'
+ TR = 'tr'
+ UA = 'ua'
+ UK = 'uk'
+ VI = 'vi'
+ ZH_CN = 'zh_cn'
+ ZH_TW = 'zh_tw'
+ ZU = 'zu'
+
+class SourceOpenweatherOpenweatherEnum(str, Enum):
+ OPENWEATHER = 'openweather'
+
+class SourceOpenweatherUnitsEnum(str, Enum):
+ r"""Units of measurement. standard, metric and imperial units are available. If you do not use the units parameter, standard units will be applied by default."""
+ STANDARD = 'standard'
+ METRIC = 'metric'
+ IMPERIAL = 'imperial'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceOpenweather:
+ r"""The values required to configure the source."""
+
+ appid: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('appid') }})
+ r"""Your OpenWeather API Key. See here. The key is case sensitive."""
+ lat: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('lat') }})
+ r"""Latitude for which you want to get weather condition from. (min -90, max 90)"""
+ lon: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('lon') }})
+ r"""Longitude for which you want to get weather condition from. (min -180, max 180)"""
+ source_type: SourceOpenweatherOpenweatherEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ lang: Optional[SourceOpenweatherLanguageEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('lang'), 'exclude': lambda f: f is None }})
+ r"""You can use lang parameter to get the output in your language. The contents of the description field will be translated. See here for the list of supported languages."""
+ units: Optional[SourceOpenweatherUnitsEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('units'), 'exclude': lambda f: f is None }})
+ r"""Units of measurement. standard, metric and imperial units are available. If you do not use the units parameter, standard units will be applied by default."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_oracle.py b/src/sdk/models/shared/source_oracle.py
new file mode 100755
index 00000000..653f0779
--- /dev/null
+++ b/src/sdk/models/shared/source_oracle.py
@@ -0,0 +1,153 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class SourceOracleConnectionDataSystemIDSIDConnectionTypeEnum(str, Enum):
+ SID = 'sid'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceOracleConnectionDataSystemIDSID:
+ r"""Use SID (Oracle System Identifier)"""
+
+ sid: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sid') }})
+ connection_type: Optional[SourceOracleConnectionDataSystemIDSIDConnectionTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('connection_type'), 'exclude': lambda f: f is None }})
+
+class SourceOracleConnectionDataServiceNameConnectionTypeEnum(str, Enum):
+ SERVICE_NAME = 'service_name'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceOracleConnectionDataServiceName:
+ r"""Use service name"""
+
+ service_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('service_name') }})
+ connection_type: Optional[SourceOracleConnectionDataServiceNameConnectionTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('connection_type'), 'exclude': lambda f: f is None }})
+
+class SourceOracleEncryptionTLSEncryptedVerifyCertificateEncryptionMethodEnum(str, Enum):
+ ENCRYPTED_VERIFY_CERTIFICATE = 'encrypted_verify_certificate'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceOracleEncryptionTLSEncryptedVerifyCertificate:
+ r"""Verify and use the certificate provided by the server."""
+
+ encryption_method: SourceOracleEncryptionTLSEncryptedVerifyCertificateEncryptionMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('encryption_method') }})
+ ssl_certificate: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ssl_certificate') }})
+ r"""Privacy Enhanced Mail (PEM) files are concatenated certificate containers frequently used in certificate installations."""
+
+class SourceOracleEncryptionNativeNetworkEncryptionNNEEncryptionAlgorithmEnum(str, Enum):
+ r"""This parameter defines what encryption algorithm is used."""
+ AES256 = 'AES256'
+ RC4_56 = 'RC4_56'
+ THREE_DES168 = '3DES168'
+
+class SourceOracleEncryptionNativeNetworkEncryptionNNEEncryptionMethodEnum(str, Enum):
+ CLIENT_NNE = 'client_nne'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceOracleEncryptionNativeNetworkEncryptionNNE:
+ r"""The native network encryption gives you the ability to encrypt database connections, without the configuration overhead of TCP/IP and SSL/TLS and without the need to open and listen on different ports."""
+
+ encryption_method: SourceOracleEncryptionNativeNetworkEncryptionNNEEncryptionMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('encryption_method') }})
+ encryption_algorithm: Optional[SourceOracleEncryptionNativeNetworkEncryptionNNEEncryptionAlgorithmEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('encryption_algorithm'), 'exclude': lambda f: f is None }})
+ r"""This parameter defines what encryption algorithm is used."""
+
+class SourceOracleOracleEnum(str, Enum):
+ ORACLE = 'oracle'
+
+class SourceOracleTunnelMethodPasswordAuthenticationTunnelMethodEnum(str, Enum):
+ r"""Connect through a jump server tunnel host using username and password authentication"""
+ SSH_PASSWORD_AUTH = 'SSH_PASSWORD_AUTH'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceOracleTunnelMethodPasswordAuthentication:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ tunnel_host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_host') }})
+ r"""Hostname of the jump server host that allows inbound ssh tunnel."""
+ tunnel_method: SourceOracleTunnelMethodPasswordAuthenticationTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""Connect through a jump server tunnel host using username and password authentication"""
+ tunnel_port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_port') }})
+ r"""Port on the proxy/jump server that accepts inbound ssh connections."""
+ tunnel_user: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user') }})
+ r"""OS-level username for logging into the jump server host"""
+ tunnel_user_password: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user_password') }})
+ r"""OS-level password for logging into the jump server host"""
+
+class SourceOracleTunnelMethodSSHKeyAuthenticationTunnelMethodEnum(str, Enum):
+ r"""Connect through a jump server tunnel host using username and ssh key"""
+ SSH_KEY_AUTH = 'SSH_KEY_AUTH'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceOracleTunnelMethodSSHKeyAuthentication:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ ssh_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ssh_key') }})
+ r"""OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )"""
+ tunnel_host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_host') }})
+ r"""Hostname of the jump server host that allows inbound ssh tunnel."""
+ tunnel_method: SourceOracleTunnelMethodSSHKeyAuthenticationTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""Connect through a jump server tunnel host using username and ssh key"""
+ tunnel_port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_port') }})
+ r"""Port on the proxy/jump server that accepts inbound ssh connections."""
+ tunnel_user: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user') }})
+ r"""OS-level username for logging into the jump server host."""
+
+class SourceOracleTunnelMethodNoTunnelTunnelMethodEnum(str, Enum):
+ r"""No ssh tunnel needed to connect to database"""
+ NO_TUNNEL = 'NO_TUNNEL'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceOracleTunnelMethodNoTunnel:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ tunnel_method: SourceOracleTunnelMethodNoTunnelTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""No ssh tunnel needed to connect to database"""
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceOracle:
+ r"""The values required to configure the source."""
+
+ encryption: Any = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('encryption') }})
+ r"""The encryption method with is used when communicating with the database."""
+ host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('host') }})
+ r"""Hostname of the database."""
+ port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('port') }})
+ r"""Port of the database.
+ Oracle Corporations recommends the following port numbers:
+ 1521 - Default listening port for client connections to the listener.
+ 2484 - Recommended and officially registered listening port for client connections to the listener using TCP/IP with SSL
+ """
+ source_type: SourceOracleOracleEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ username: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('username') }})
+ r"""The username which is used to access the database."""
+ connection_data: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('connection_data'), 'exclude': lambda f: f is None }})
+ r"""Connect data that will be used for DB connection"""
+ jdbc_url_params: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('jdbc_url_params'), 'exclude': lambda f: f is None }})
+ r"""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)."""
+ password: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password'), 'exclude': lambda f: f is None }})
+ r"""The password associated with the username."""
+ schemas: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('schemas'), 'exclude': lambda f: f is None }})
+ r"""The list of schemas to sync from. Defaults to user. Case sensitive."""
+ tunnel_method: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method'), 'exclude': lambda f: f is None }})
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_orb.py b/src/sdk/models/shared/source_orb.py
new file mode 100755
index 00000000..09084b2f
--- /dev/null
+++ b/src/sdk/models/shared/source_orb.py
@@ -0,0 +1,34 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourceOrbOrbEnum(str, Enum):
+ ORB = 'orb'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceOrb:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""Orb API Key, issued from the Orb admin console."""
+ source_type: SourceOrbOrbEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date') }})
+ r"""UTC date and time in the format 2022-03-01T00:00:00Z. Any data with created_at before this data will not be synced. For Subscription Usage, this becomes the `timeframe_start` API parameter."""
+ lookback_window_days: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('lookback_window_days'), 'exclude': lambda f: f is None }})
+ r"""When set to N, the connector will always refresh resources created within the past N days. By default, updated objects that are not newly created are not incrementally synced."""
+ numeric_event_properties_keys: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('numeric_event_properties_keys'), 'exclude': lambda f: f is None }})
+ r"""Property key names to extract from all events, in order to enrich ledger entries corresponding to an event deduction."""
+ plan_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('plan_id'), 'exclude': lambda f: f is None }})
+ r"""Orb Plan ID to filter subscriptions that should have usage fetched."""
+ string_event_properties_keys: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('string_event_properties_keys'), 'exclude': lambda f: f is None }})
+ r"""Property key names to extract from all events, in order to enrich ledger entries corresponding to an event deduction."""
+ subscription_usage_grouping_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('subscription_usage_grouping_key'), 'exclude': lambda f: f is None }})
+ r"""Property key name to group subscription usage by."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_orbit.py b/src/sdk/models/shared/source_orbit.py
new file mode 100755
index 00000000..eda34318
--- /dev/null
+++ b/src/sdk/models/shared/source_orbit.py
@@ -0,0 +1,26 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourceOrbitOrbitEnum(str, Enum):
+ ORBIT = 'orbit'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceOrbit:
+ r"""The values required to configure the source."""
+
+ api_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_token') }})
+ r"""Authorizes you to work with Orbit workspaces associated with the token."""
+ source_type: SourceOrbitOrbitEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ workspace: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('workspace') }})
+ r"""The unique name of the workspace that your API token is associated with."""
+ start_date: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'exclude': lambda f: f is None }})
+ r"""Date in the format 2022-06-26. Only load members whose last activities are after this date."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_outreach.py b/src/sdk/models/shared/source_outreach.py
new file mode 100755
index 00000000..33edfede
--- /dev/null
+++ b/src/sdk/models/shared/source_outreach.py
@@ -0,0 +1,29 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceOutreachOutreachEnum(str, Enum):
+ OUTREACH = 'outreach'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceOutreach:
+ r"""The values required to configure the source."""
+
+ client_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id') }})
+ r"""The Client ID of your Outreach developer application."""
+ client_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret') }})
+ r"""The Client Secret of your Outreach developer application."""
+ redirect_uri: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('redirect_uri') }})
+ r"""A Redirect URI is the location where the authorization server sends the user once the app has been successfully authorized and granted an authorization code or access token."""
+ refresh_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('refresh_token') }})
+ r"""The token for obtaining the new access token."""
+ source_type: SourceOutreachOutreachEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date') }})
+ r"""The date from which you'd like to replicate data for Outreach API, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_paypal_transaction.py b/src/sdk/models/shared/source_paypal_transaction.py
new file mode 100755
index 00000000..4f9a8975
--- /dev/null
+++ b/src/sdk/models/shared/source_paypal_transaction.py
@@ -0,0 +1,30 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourcePaypalTransactionPaypalTransactionEnum(str, Enum):
+ PAYPAL_TRANSACTION = 'paypal-transaction'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourcePaypalTransaction:
+ r"""The values required to configure the source."""
+
+ is_sandbox: bool = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('is_sandbox') }})
+ r"""Determines whether to use the sandbox or production environment."""
+ source_type: SourcePaypalTransactionPaypalTransactionEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date') }})
+ r"""Start Date for data extraction in ISO format. Date must be in range from 3 years till 12 hrs before present time."""
+ client_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id'), 'exclude': lambda f: f is None }})
+ r"""The Client ID of your Paypal developer application."""
+ client_secret: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret'), 'exclude': lambda f: f is None }})
+ r"""The Client Secret of your Paypal developer application."""
+ refresh_token: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('refresh_token'), 'exclude': lambda f: f is None }})
+ r"""The key to refresh the expired access token."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_paystack.py b/src/sdk/models/shared/source_paystack.py
new file mode 100755
index 00000000..3f79b36c
--- /dev/null
+++ b/src/sdk/models/shared/source_paystack.py
@@ -0,0 +1,29 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Optional
+
+class SourcePaystackPaystackEnum(str, Enum):
+ PAYSTACK = 'paystack'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourcePaystack:
+ r"""The values required to configure the source."""
+
+ secret_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('secret_key') }})
+ r"""The Paystack API key (usually starts with 'sk_live_'; find yours here)."""
+ source_type: SourcePaystackPaystackEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }})
+ r"""UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated."""
+ lookback_window_days: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('lookback_window_days'), 'exclude': lambda f: f is None }})
+ r"""When set, the connector will always reload data from the past N days, where N is the value set here. This is useful if your data is updated after creation."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_pendo.py b/src/sdk/models/shared/source_pendo.py
new file mode 100755
index 00000000..cdddfac9
--- /dev/null
+++ b/src/sdk/models/shared/source_pendo.py
@@ -0,0 +1,20 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourcePendoPendoEnum(str, Enum):
+ PENDO = 'pendo'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourcePendo:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ source_type: SourcePendoPendoEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_persistiq.py b/src/sdk/models/shared/source_persistiq.py
new file mode 100755
index 00000000..7bb3c0de
--- /dev/null
+++ b/src/sdk/models/shared/source_persistiq.py
@@ -0,0 +1,21 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourcePersistiqPersistiqEnum(str, Enum):
+ PERSISTIQ = 'persistiq'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourcePersistiq:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""PersistIq API Key. See the docs for more information on where to find that key."""
+ source_type: SourcePersistiqPersistiqEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_pexels_api.py b/src/sdk/models/shared/source_pexels_api.py
new file mode 100755
index 00000000..8d8bf859
--- /dev/null
+++ b/src/sdk/models/shared/source_pexels_api.py
@@ -0,0 +1,32 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourcePexelsAPIPexelsAPIEnum(str, Enum):
+ PEXELS_API = 'pexels-api'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourcePexelsAPI:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""API key is required to access pexels api, For getting your's goto https://www.pexels.com/api/documentation and create account for free."""
+ query: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('query') }})
+ r"""Optional, the search query, Example Ocean, Tigers, Pears, etc."""
+ source_type: SourcePexelsAPIPexelsAPIEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ color: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('color'), 'exclude': lambda f: f is None }})
+ r"""Optional, Desired photo color. Supported colors red, orange, yellow, green, turquoise, blue, violet, pink, brown, black, gray, white or any hexidecimal color code."""
+ locale: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('locale'), 'exclude': lambda f: f is None }})
+ r"""Optional, The locale of the search you are performing. The current supported locales are 'en-US' 'pt-BR' 'es-ES' 'ca-ES' 'de-DE' 'it-IT' 'fr-FR' 'sv-SE' 'id-ID' 'pl-PL' 'ja-JP' 'zh-TW' 'zh-CN' 'ko-KR' 'th-TH' 'nl-NL' 'hu-HU' 'vi-VN' 'cs-CZ' 'da-DK' 'fi-FI' 'uk-UA' 'el-GR' 'ro-RO' 'nb-NO' 'sk-SK' 'tr-TR' 'ru-RU'."""
+ orientation: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('orientation'), 'exclude': lambda f: f is None }})
+ r"""Optional, Desired photo orientation. The current supported orientations are landscape, portrait or square"""
+ size: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }})
+ r"""Optional, Minimum photo size. The current supported sizes are large(24MP), medium(12MP) or small(4MP)."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_pinterest.py b/src/sdk/models/shared/source_pinterest.py
new file mode 100755
index 00000000..6698db1a
--- /dev/null
+++ b/src/sdk/models/shared/source_pinterest.py
@@ -0,0 +1,58 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class SourcePinterestCredentialsAccessTokenAuthMethodEnum(str, Enum):
+ ACCESS_TOKEN = 'access_token'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourcePinterestCredentialsAccessToken:
+
+ access_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token') }})
+ r"""The Access Token to make authenticated requests."""
+ auth_method: SourcePinterestCredentialsAccessTokenAuthMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_method') }})
+
+class SourcePinterestCredentialsOAuth20AuthMethodEnum(str, Enum):
+ OAUTH2_0 = 'oauth2.0'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourcePinterestCredentialsOAuth20:
+
+ auth_method: SourcePinterestCredentialsOAuth20AuthMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_method') }})
+ refresh_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('refresh_token') }})
+ r"""Refresh Token to obtain new Access Token, when it's expired."""
+ client_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id'), 'exclude': lambda f: f is None }})
+ r"""The Client ID of your OAuth application"""
+ client_secret: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret'), 'exclude': lambda f: f is None }})
+ r"""The Client Secret of your OAuth application."""
+
+class SourcePinterestPinterestEnum(str, Enum):
+ PINTEREST = 'pinterest'
+
+class SourcePinterestStatusEnum(str, Enum):
+ ACTIVE = 'ACTIVE'
+ PAUSED = 'PAUSED'
+ ARCHIVED = 'ARCHIVED'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourcePinterest:
+ r"""The values required to configure the source."""
+
+ source_type: SourcePinterestPinterestEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date') }})
+ r"""A date in the format YYYY-MM-DD. If you have not set a date, it would be defaulted to latest allowed date by api (914 days from today)."""
+ credentials: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials'), 'exclude': lambda f: f is None }})
+ status: Optional[list[SourcePinterestStatusEnum]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }})
+ r"""Entity statuses based off of campaigns, ad_groups, and ads. If you do not have a status set, it will be ignored completely."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_pipedrive.py b/src/sdk/models/shared/source_pipedrive.py
new file mode 100755
index 00000000..a661bbc3
--- /dev/null
+++ b/src/sdk/models/shared/source_pipedrive.py
@@ -0,0 +1,38 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Optional
+
+class SourcePipedriveAPIKeyAuthenticationAuthTypeEnum(str, Enum):
+ TOKEN = 'Token'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourcePipedriveAPIKeyAuthentication:
+
+ api_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_token') }})
+ r"""The Pipedrive API Token."""
+ auth_type: SourcePipedriveAPIKeyAuthenticationAuthTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type') }})
+
+class SourcePipedrivePipedriveEnum(str, Enum):
+ PIPEDRIVE = 'pipedrive'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourcePipedrive:
+ r"""The values required to configure the source."""
+
+ replication_start_date: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('replication_start_date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }})
+ r"""UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated. When specified and not None, then stream will behave as incremental"""
+ source_type: SourcePipedrivePipedriveEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ authorization: Optional[SourcePipedriveAPIKeyAuthentication] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('authorization'), 'exclude': lambda f: f is None }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_pocket.py b/src/sdk/models/shared/source_pocket.py
new file mode 100755
index 00000000..84a3f4a8
--- /dev/null
+++ b/src/sdk/models/shared/source_pocket.py
@@ -0,0 +1,66 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourcePocketContentTypeEnum(str, Enum):
+ r"""Select the content type of the items to retrieve."""
+ ARTICLE = 'article'
+ VIDEO = 'video'
+ IMAGE = 'image'
+
+class SourcePocketDetailTypeEnum(str, Enum):
+ r"""Select the granularity of the information about each item."""
+ SIMPLE = 'simple'
+ COMPLETE = 'complete'
+
+class SourcePocketSortByEnum(str, Enum):
+ r"""Sort retrieved items by the given criteria."""
+ NEWEST = 'newest'
+ OLDEST = 'oldest'
+ TITLE = 'title'
+ SITE = 'site'
+
+class SourcePocketPocketEnum(str, Enum):
+ POCKET = 'pocket'
+
+class SourcePocketStateEnum(str, Enum):
+ r"""Select the state of the items to retrieve."""
+ UNREAD = 'unread'
+ ARCHIVE = 'archive'
+ ALL = 'all'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourcePocket:
+ r"""The values required to configure the source."""
+
+ access_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token') }})
+ r"""The user's Pocket access token."""
+ consumer_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('consumer_key') }})
+ r"""Your application's Consumer Key."""
+ source_type: SourcePocketPocketEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ content_type: Optional[SourcePocketContentTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('content_type'), 'exclude': lambda f: f is None }})
+ r"""Select the content type of the items to retrieve."""
+ detail_type: Optional[SourcePocketDetailTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('detail_type'), 'exclude': lambda f: f is None }})
+ r"""Select the granularity of the information about each item."""
+ domain: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('domain'), 'exclude': lambda f: f is None }})
+ r"""Only return items from a particular `domain`."""
+ favorite: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('favorite'), 'exclude': lambda f: f is None }})
+ r"""Retrieve only favorited items."""
+ search: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('search'), 'exclude': lambda f: f is None }})
+ r"""Only return items whose title or url contain the `search` string."""
+ since: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('since'), 'exclude': lambda f: f is None }})
+ r"""Only return items modified since the given timestamp."""
+ sort: Optional[SourcePocketSortByEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sort'), 'exclude': lambda f: f is None }})
+ r"""Sort retrieved items by the given criteria."""
+ state: Optional[SourcePocketStateEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('state'), 'exclude': lambda f: f is None }})
+ r"""Select the state of the items to retrieve."""
+ tag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tag'), 'exclude': lambda f: f is None }})
+ r"""Return only items tagged with this tag name. Use _untagged_ for retrieving only untagged items."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_pokeapi.py b/src/sdk/models/shared/source_pokeapi.py
new file mode 100755
index 00000000..182dd371
--- /dev/null
+++ b/src/sdk/models/shared/source_pokeapi.py
@@ -0,0 +1,21 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourcePokeapiPokeapiEnum(str, Enum):
+ POKEAPI = 'pokeapi'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourcePokeapi:
+ r"""The values required to configure the source."""
+
+ pokemon_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('pokemon_name') }})
+ r"""Pokemon requested from the API."""
+ source_type: SourcePokeapiPokeapiEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_polygon_stock_api.py b/src/sdk/models/shared/source_polygon_stock_api.py
new file mode 100755
index 00000000..02e73807
--- /dev/null
+++ b/src/sdk/models/shared/source_polygon_stock_api.py
@@ -0,0 +1,40 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from datetime import date
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Optional
+
+class SourcePolygonStockAPIPolygonStockAPIEnum(str, Enum):
+ POLYGON_STOCK_API = 'polygon-stock-api'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourcePolygonStockAPI:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('apiKey') }})
+ r"""Your API ACCESS Key"""
+ end_date: date = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('end_date'), 'encoder': utils.dateisoformat(False), 'decoder': utils.datefromisoformat, 'mm_field': fields.DateTime(format='iso') }})
+ r"""The target date for the aggregate window."""
+ multiplier: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('multiplier') }})
+ r"""The size of the timespan multiplier."""
+ source_type: SourcePolygonStockAPIPolygonStockAPIEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: date = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.dateisoformat(False), 'decoder': utils.datefromisoformat, 'mm_field': fields.DateTime(format='iso') }})
+ r"""The beginning date for the aggregate window."""
+ stocks_ticker: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('stocksTicker') }})
+ r"""The exchange symbol that this item is traded under."""
+ timespan: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('timespan') }})
+ r"""The size of the time window."""
+ adjusted: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('adjusted'), 'exclude': lambda f: f is None }})
+ r"""Determines whether or not the results are adjusted for splits. By default, results are adjusted and set to true. Set this to false to get results that are NOT adjusted for splits."""
+ limit: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('limit'), 'exclude': lambda f: f is None }})
+ r"""The target date for the aggregate window."""
+ sort: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sort'), 'exclude': lambda f: f is None }})
+ r"""Sort the results by timestamp. asc will return results in ascending order (oldest at the top), desc will return results in descending order (newest at the top)."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_postgres.py b/src/sdk/models/shared/source_postgres.py
new file mode 100755
index 00000000..ad7dc835
--- /dev/null
+++ b/src/sdk/models/shared/source_postgres.py
@@ -0,0 +1,108 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class SourcePostgresReplicationMethodStandardMethodEnum(str, Enum):
+ STANDARD = 'Standard'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourcePostgresReplicationMethodStandard:
+ r"""Standard replication requires no setup on the DB side but will not be able to represent deletions incrementally."""
+
+ method: SourcePostgresReplicationMethodStandardMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('method') }})
+
+class SourcePostgresPostgresEnum(str, Enum):
+ POSTGRES = 'postgres'
+
+class SourcePostgresTunnelMethodPasswordAuthenticationTunnelMethodEnum(str, Enum):
+ r"""Connect through a jump server tunnel host using username and password authentication"""
+ SSH_PASSWORD_AUTH = 'SSH_PASSWORD_AUTH'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourcePostgresTunnelMethodPasswordAuthentication:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ tunnel_host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_host') }})
+ r"""Hostname of the jump server host that allows inbound ssh tunnel."""
+ tunnel_method: SourcePostgresTunnelMethodPasswordAuthenticationTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""Connect through a jump server tunnel host using username and password authentication"""
+ tunnel_port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_port') }})
+ r"""Port on the proxy/jump server that accepts inbound ssh connections."""
+ tunnel_user: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user') }})
+ r"""OS-level username for logging into the jump server host"""
+ tunnel_user_password: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user_password') }})
+ r"""OS-level password for logging into the jump server host"""
+
+class SourcePostgresTunnelMethodSSHKeyAuthenticationTunnelMethodEnum(str, Enum):
+ r"""Connect through a jump server tunnel host using username and ssh key"""
+ SSH_KEY_AUTH = 'SSH_KEY_AUTH'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourcePostgresTunnelMethodSSHKeyAuthentication:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ ssh_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ssh_key') }})
+ r"""OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )"""
+ tunnel_host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_host') }})
+ r"""Hostname of the jump server host that allows inbound ssh tunnel."""
+ tunnel_method: SourcePostgresTunnelMethodSSHKeyAuthenticationTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""Connect through a jump server tunnel host using username and ssh key"""
+ tunnel_port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_port') }})
+ r"""Port on the proxy/jump server that accepts inbound ssh connections."""
+ tunnel_user: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_user') }})
+ r"""OS-level username for logging into the jump server host."""
+
+class SourcePostgresTunnelMethodNoTunnelTunnelMethodEnum(str, Enum):
+ r"""No ssh tunnel needed to connect to database"""
+ NO_TUNNEL = 'NO_TUNNEL'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourcePostgresTunnelMethodNoTunnel:
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
+ tunnel_method: SourcePostgresTunnelMethodNoTunnelTunnelMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method') }})
+ r"""No ssh tunnel needed to connect to database"""
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourcePostgres:
+ r"""The values required to configure the source."""
+
+ database: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('database') }})
+ r"""Name of the database."""
+ host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('host') }})
+ r"""Hostname of the database."""
+ port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('port') }})
+ r"""Port of the database."""
+ source_type: SourcePostgresPostgresEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ username: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('username') }})
+ r"""Username to access the database."""
+ jdbc_url_params: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('jdbc_url_params'), 'exclude': lambda f: f is None }})
+ r"""Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (Eg. key1=value1&key2=value2&key3=value3). For more information read about JDBC URL parameters."""
+ password: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password'), 'exclude': lambda f: f is None }})
+ r"""Password associated with the username."""
+ replication_method: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('replication_method'), 'exclude': lambda f: f is None }})
+ r"""Replication method for extracting data from the database."""
+ schemas: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('schemas'), 'exclude': lambda f: f is None }})
+ r"""The list of schemas (case sensitive) to sync from. Defaults to public."""
+ ssl_mode: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ssl_mode'), 'exclude': lambda f: f is None }})
+ r"""SSL connection modes.
+ Read more in the docs.
+ """
+ tunnel_method: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tunnel_method'), 'exclude': lambda f: f is None }})
+ r"""Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_posthog.py b/src/sdk/models/shared/source_posthog.py
new file mode 100755
index 00000000..22e31630
--- /dev/null
+++ b/src/sdk/models/shared/source_posthog.py
@@ -0,0 +1,29 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Optional
+
+class SourcePosthogPosthogEnum(str, Enum):
+ POSTHOG = 'posthog'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourcePosthog:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""API Key. See the docs for information on how to generate this key."""
+ source_type: SourcePosthogPosthogEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }})
+ r"""The date from which you'd like to replicate the data. Any data before this date will not be replicated."""
+ base_url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('base_url'), 'exclude': lambda f: f is None }})
+ r"""Base PostHog url. Defaults to PostHog Cloud (https://app.posthog.com)."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_postmarkapp.py b/src/sdk/models/shared/source_postmarkapp.py
new file mode 100755
index 00000000..4ea5b07b
--- /dev/null
+++ b/src/sdk/models/shared/source_postmarkapp.py
@@ -0,0 +1,23 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourcePostmarkappPostmarkappEnum(str, Enum):
+ POSTMARKAPP = 'postmarkapp'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourcePostmarkapp:
+ r"""The values required to configure the source."""
+
+ source_type: SourcePostmarkappPostmarkappEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ x_postmark_account_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('X-Postmark-Account-Token') }})
+ r"""API Key for account"""
+ x_postmark_server_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('X-Postmark-Server-Token') }})
+ r"""API Key for server"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_prestashop.py b/src/sdk/models/shared/source_prestashop.py
new file mode 100755
index 00000000..5e15eb34
--- /dev/null
+++ b/src/sdk/models/shared/source_prestashop.py
@@ -0,0 +1,27 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from datetime import date
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+
+class SourcePrestashopPrestashopEnum(str, Enum):
+ PRESTASHOP = 'prestashop'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourcePrestashop:
+ r"""The values required to configure the source."""
+
+ access_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_key') }})
+ r"""Your PrestaShop access key. See the docs for info on how to obtain this."""
+ source_type: SourcePrestashopPrestashopEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: date = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.dateisoformat(False), 'decoder': utils.datefromisoformat, 'mm_field': fields.DateTime(format='iso') }})
+ r"""The Start date in the format YYYY-MM-DD."""
+ url: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('url') }})
+ r"""Shop URL without trailing slash."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_public_apis.py b/src/sdk/models/shared/source_public_apis.py
new file mode 100755
index 00000000..accbe557
--- /dev/null
+++ b/src/sdk/models/shared/source_public_apis.py
@@ -0,0 +1,19 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourcePublicApisPublicApisEnum(str, Enum):
+ PUBLIC_APIS = 'public-apis'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourcePublicApis:
+ r"""The values required to configure the source."""
+
+ source_type: SourcePublicApisPublicApisEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_punk_api.py b/src/sdk/models/shared/source_punk_api.py
new file mode 100755
index 00000000..a16df768
--- /dev/null
+++ b/src/sdk/models/shared/source_punk_api.py
@@ -0,0 +1,26 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourcePunkAPIPunkAPIEnum(str, Enum):
+ PUNK_API = 'punk-api'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourcePunkAPI:
+ r"""The values required to configure the source."""
+
+ brewed_after: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('brewed_after') }})
+ r"""To extract specific data with Unique ID"""
+ brewed_before: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('brewed_before') }})
+ r"""To extract specific data with Unique ID"""
+ source_type: SourcePunkAPIPunkAPIEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }})
+ r"""To extract specific data with Unique ID"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_pypi.py b/src/sdk/models/shared/source_pypi.py
new file mode 100755
index 00000000..f1ddca26
--- /dev/null
+++ b/src/sdk/models/shared/source_pypi.py
@@ -0,0 +1,24 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourcePypiPypiEnum(str, Enum):
+ PYPI = 'pypi'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourcePypi:
+ r"""The values required to configure the source."""
+
+ project_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('project_name') }})
+ r"""Name of the project/package. Can only be in lowercase with hyphen. This is the name used using pip command for installing the package."""
+ source_type: SourcePypiPypiEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ version: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('version'), 'exclude': lambda f: f is None }})
+ r"""Version of the project/package. Use it to find a particular release instead of all releases."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_qualaroo.py b/src/sdk/models/shared/source_qualaroo.py
new file mode 100755
index 00000000..7c26fc7f
--- /dev/null
+++ b/src/sdk/models/shared/source_qualaroo.py
@@ -0,0 +1,28 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourceQualarooQualarooEnum(str, Enum):
+ QUALAROO = 'qualaroo'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceQualaroo:
+ r"""The values required to configure the source."""
+
+ key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key') }})
+ r"""A Qualaroo token. See the docs for instructions on how to generate it."""
+ source_type: SourceQualarooQualarooEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date') }})
+ r"""UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated."""
+ token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('token') }})
+ r"""A Qualaroo token. See the docs for instructions on how to generate it."""
+ survey_ids: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('survey_ids'), 'exclude': lambda f: f is None }})
+ r"""IDs of the surveys from which you'd like to replicate data. If left empty, data from all surveys to which you have access will be replicated."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_railz.py b/src/sdk/models/shared/source_railz.py
new file mode 100755
index 00000000..4cd3315e
--- /dev/null
+++ b/src/sdk/models/shared/source_railz.py
@@ -0,0 +1,25 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceRailzRailzEnum(str, Enum):
+ RAILZ = 'railz'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceRailz:
+ r"""The values required to configure the source."""
+
+ client_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id') }})
+ r"""Client ID (client_id)"""
+ secret_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('secret_key') }})
+ r"""Secret key (secret_key)"""
+ source_type: SourceRailzRailzEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date') }})
+ r"""Start date"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_recharge.py b/src/sdk/models/shared/source_recharge.py
new file mode 100755
index 00000000..6b1e4752
--- /dev/null
+++ b/src/sdk/models/shared/source_recharge.py
@@ -0,0 +1,26 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+
+class SourceRechargeRechargeEnum(str, Enum):
+ RECHARGE = 'recharge'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceRecharge:
+ r"""The values required to configure the source."""
+
+ access_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token') }})
+ r"""The value of the Access Token generated. See the docs for more information."""
+ source_type: SourceRechargeRechargeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }})
+ r"""The date from which you'd like to replicate data for Recharge API, in the format YYYY-MM-DDT00:00:00Z. Any data before this date will not be replicated."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_recreation.py b/src/sdk/models/shared/source_recreation.py
new file mode 100755
index 00000000..f2ba9570
--- /dev/null
+++ b/src/sdk/models/shared/source_recreation.py
@@ -0,0 +1,23 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourceRecreationRecreationEnum(str, Enum):
+ RECREATION = 'recreation'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceRecreation:
+ r"""The values required to configure the source."""
+
+ apikey: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('apikey') }})
+ r"""API Key"""
+ source_type: SourceRecreationRecreationEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ query_campsites: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('query_campsites'), 'exclude': lambda f: f is None }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_recruitee.py b/src/sdk/models/shared/source_recruitee.py
new file mode 100755
index 00000000..1a81f339
--- /dev/null
+++ b/src/sdk/models/shared/source_recruitee.py
@@ -0,0 +1,23 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceRecruiteeRecruiteeEnum(str, Enum):
+ RECRUITEE = 'recruitee'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceRecruitee:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""Recruitee API Key. See here."""
+ company_id: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('company_id') }})
+ r"""Recruitee Company ID. You can also find this ID on the Recruitee API tokens page."""
+ source_type: SourceRecruiteeRecruiteeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_recurly.py b/src/sdk/models/shared/source_recurly.py
new file mode 100755
index 00000000..84bcfff1
--- /dev/null
+++ b/src/sdk/models/shared/source_recurly.py
@@ -0,0 +1,26 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourceRecurlyRecurlyEnum(str, Enum):
+ RECURLY = 'recurly'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceRecurly:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""Recurly API Key. See the docs for more information on how to generate this key."""
+ source_type: SourceRecurlyRecurlyEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ begin_time: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('begin_time'), 'exclude': lambda f: f is None }})
+ r"""ISO8601 timestamp from which the replication from Recurly API will start from."""
+ end_time: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('end_time'), 'exclude': lambda f: f is None }})
+ r"""ISO8601 timestamp to which the replication from Recurly API will stop. Records after that date won't be imported."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_redshift.py b/src/sdk/models/shared/source_redshift.py
new file mode 100755
index 00000000..004466e6
--- /dev/null
+++ b/src/sdk/models/shared/source_redshift.py
@@ -0,0 +1,34 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourceRedshiftRedshiftEnum(str, Enum):
+ REDSHIFT = 'redshift'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceRedshift:
+ r"""The values required to configure the source."""
+
+ database: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('database') }})
+ r"""Name of the database."""
+ host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('host') }})
+ r"""Host Endpoint of the Redshift Cluster (must include the cluster-id, region and end with .redshift.amazonaws.com)."""
+ password: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password') }})
+ r"""Password associated with the username."""
+ port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('port') }})
+ r"""Port of the database."""
+ source_type: SourceRedshiftRedshiftEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ username: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('username') }})
+ r"""Username to use to access the database."""
+ jdbc_url_params: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('jdbc_url_params'), 'exclude': lambda f: f is None }})
+ r"""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)."""
+ schemas: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('schemas'), 'exclude': lambda f: f is None }})
+ r"""The list of schemas to sync from. Specify one or more explicitly or keep empty to process all schemas. Schema names are case sensitive."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_retently.py b/src/sdk/models/shared/source_retently.py
new file mode 100755
index 00000000..967b3fe8
--- /dev/null
+++ b/src/sdk/models/shared/source_retently.py
@@ -0,0 +1,22 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class SourceRetentlyRetentlyEnum(str, Enum):
+ RETENTLY = 'retently'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceRetently:
+ r"""The values required to configure the source."""
+
+ source_type: SourceRetentlyRetentlyEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ credentials: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials'), 'exclude': lambda f: f is None }})
+ r"""Choose how to authenticate to Retently"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_rki_covid.py b/src/sdk/models/shared/source_rki_covid.py
new file mode 100755
index 00000000..b1333ee2
--- /dev/null
+++ b/src/sdk/models/shared/source_rki_covid.py
@@ -0,0 +1,21 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceRkiCovidRkiCovidEnum(str, Enum):
+ RKI_COVID = 'rki-covid'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceRkiCovid:
+ r"""The values required to configure the source."""
+
+ source_type: SourceRkiCovidRkiCovidEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date') }})
+ r"""UTC date in the format 2017-01-25. Any data before this date will not be replicated."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_rss.py b/src/sdk/models/shared/source_rss.py
new file mode 100755
index 00000000..95822b87
--- /dev/null
+++ b/src/sdk/models/shared/source_rss.py
@@ -0,0 +1,21 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceRssRssEnum(str, Enum):
+ RSS = 'rss'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceRss:
+ r"""The values required to configure the source."""
+
+ source_type: SourceRssRssEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ url: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('url') }})
+ r"""RSS Feed URL"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_s3.py b/src/sdk/models/shared/source_s3.py
new file mode 100755
index 00000000..5075afa6
--- /dev/null
+++ b/src/sdk/models/shared/source_s3.py
@@ -0,0 +1,129 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class SourceS3FormatJsonlFiletypeEnum(str, Enum):
+ JSONL = 'jsonl'
+
+class SourceS3FormatJsonlUnexpectedFieldBehaviorEnum(str, Enum):
+ r"""How JSON fields outside of explicit_schema (if given) are treated. Check PyArrow documentation for details"""
+ IGNORE = 'ignore'
+ INFER = 'infer'
+ ERROR = 'error'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceS3FormatJsonl:
+ r"""This connector uses PyArrow for JSON Lines (jsonl) file parsing."""
+
+ block_size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('block_size'), 'exclude': lambda f: f is None }})
+ r"""The chunk size in bytes to process at a time in memory from each file. If your data is particularly wide and failing during schema detection, increasing this should solve it. Beware of raising this too high as you could hit OOM errors."""
+ filetype: Optional[SourceS3FormatJsonlFiletypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('filetype'), 'exclude': lambda f: f is None }})
+ newlines_in_values: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('newlines_in_values'), 'exclude': lambda f: f is None }})
+ r"""Whether newline characters are allowed in JSON values. Turning this on may affect performance. Leave blank to default to False."""
+ unexpected_field_behavior: Optional[SourceS3FormatJsonlUnexpectedFieldBehaviorEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('unexpected_field_behavior'), 'exclude': lambda f: f is None }})
+ r"""How JSON fields outside of explicit_schema (if given) are treated. Check PyArrow documentation for details"""
+
+class SourceS3FormatAvroFiletypeEnum(str, Enum):
+ AVRO = 'avro'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceS3FormatAvro:
+ r"""This connector utilises fastavro for Avro parsing."""
+
+ filetype: Optional[SourceS3FormatAvroFiletypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('filetype'), 'exclude': lambda f: f is None }})
+
+class SourceS3FormatParquetFiletypeEnum(str, Enum):
+ PARQUET = 'parquet'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceS3FormatParquet:
+ r"""This connector utilises PyArrow (Apache Arrow) for Parquet parsing."""
+
+ batch_size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('batch_size'), 'exclude': lambda f: f is None }})
+ r"""Maximum number of records per batch read from the input files. Batches may be smaller if there aren’t enough rows in the file. This option can help avoid out-of-memory errors if your data is particularly wide."""
+ buffer_size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('buffer_size'), 'exclude': lambda f: f is None }})
+ r"""Perform read buffering when deserializing individual column chunks. By default every group column will be loaded fully to memory. This option can help avoid out-of-memory errors if your data is particularly wide."""
+ columns: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('columns'), 'exclude': lambda f: f is None }})
+ r"""If you only want to sync a subset of the columns from the file(s), add the columns you want here as a comma-delimited list. Leave it empty to sync all columns."""
+ filetype: Optional[SourceS3FormatParquetFiletypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('filetype'), 'exclude': lambda f: f is None }})
+
+class SourceS3FormatCSVFiletypeEnum(str, Enum):
+ CSV = 'csv'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceS3FormatCSV:
+ r"""This connector utilises PyArrow (Apache Arrow) for CSV parsing."""
+
+ additional_reader_options: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('additional_reader_options'), 'exclude': lambda f: f is None }})
+ r"""Optionally add a valid JSON string here to provide additional options to the csv reader. Mappings must correspond to options detailed here. 'column_types' is used internally to handle schema so overriding that would likely cause problems."""
+ advanced_options: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('advanced_options'), 'exclude': lambda f: f is None }})
+ r"""Optionally add a valid JSON string here to provide additional Pyarrow ReadOptions. Specify 'column_names' here if your CSV doesn't have header, or if you want to use custom column names. 'block_size' and 'encoding' are already used above, specify them again here will override the values above."""
+ block_size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('block_size'), 'exclude': lambda f: f is None }})
+ r"""The chunk size in bytes to process at a time in memory from each file. If your data is particularly wide and failing during schema detection, increasing this should solve it. Beware of raising this too high as you could hit OOM errors."""
+ delimiter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('delimiter'), 'exclude': lambda f: f is None }})
+ r"""The character delimiting individual cells in the CSV data. This may only be a 1-character string. For tab-delimited data enter '\t'."""
+ double_quote: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('double_quote'), 'exclude': lambda f: f is None }})
+ r"""Whether two quotes in a quoted CSV value denote a single quote in the data."""
+ encoding: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('encoding'), 'exclude': lambda f: f is None }})
+ r"""The character encoding of the CSV data. Leave blank to default to UTF8. See list of python encodings for allowable options."""
+ escape_char: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('escape_char'), 'exclude': lambda f: f is None }})
+ r"""The character used for escaping special characters. To disallow escaping, leave this field blank."""
+ filetype: Optional[SourceS3FormatCSVFiletypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('filetype'), 'exclude': lambda f: f is None }})
+ infer_datatypes: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('infer_datatypes'), 'exclude': lambda f: f is None }})
+ r"""Configures whether a schema for the source should be inferred from the current data or not. If set to false and a custom schema is set, then the manually enforced schema is used. If a schema is not manually set, and this is set to false, then all fields will be read as strings"""
+ newlines_in_values: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('newlines_in_values'), 'exclude': lambda f: f is None }})
+ r"""Whether newline characters are allowed in CSV values. Turning this on may affect performance. Leave blank to default to False."""
+ quote_char: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('quote_char'), 'exclude': lambda f: f is None }})
+ r"""The character used for quoting CSV values. To disallow quoting, make this field blank."""
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceS3S3AmazonWebServices:
+ r"""Use this to load files from S3 or S3-compatible services"""
+
+ bucket: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('bucket') }})
+ r"""Name of the S3 bucket where the file(s) exist."""
+ aws_access_key_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('aws_access_key_id'), 'exclude': lambda f: f is None }})
+ r"""In order to access private Buckets stored on AWS S3, this connector requires credentials with the proper permissions. If accessing publicly available data, this field is not necessary."""
+ aws_secret_access_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('aws_secret_access_key'), 'exclude': lambda f: f is None }})
+ r"""In order to access private Buckets stored on AWS S3, this connector requires credentials with the proper permissions. If accessing publicly available data, this field is not necessary."""
+ endpoint: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('endpoint'), 'exclude': lambda f: f is None }})
+ r"""Endpoint to an S3 compatible service. Leave empty to use AWS."""
+ path_prefix: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('path_prefix'), 'exclude': lambda f: f is None }})
+ r"""By providing a path-like prefix (e.g. myFolder/thisTable/) under which all the relevant files sit, we can optimize finding these in S3. This is optional but recommended if your bucket contains many folders/files which you don't need to replicate."""
+
+class SourceS3S3Enum(str, Enum):
+ S3 = 's3'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceS3:
+ r"""The values required to configure the source."""
+
+ dataset: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dataset') }})
+ r"""The name of the stream you would like this source to output. Can contain letters, numbers, or underscores."""
+ path_pattern: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('path_pattern') }})
+ r"""A regular expression which tells the connector which files to replicate. All files which match this pattern will be replicated. Use | to separate multiple patterns. See this page to understand pattern syntax (GLOBSTAR and SPLIT flags are enabled). Use pattern ** to pick up all files."""
+ provider: SourceS3S3AmazonWebServices = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('provider') }})
+ r"""Use this to load files from S3 or S3-compatible services"""
+ source_type: SourceS3S3Enum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ format: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('format'), 'exclude': lambda f: f is None }})
+ r"""The format of the files you'd like to replicate"""
+ schema: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('schema'), 'exclude': lambda f: f is None }})
+ r"""Optionally provide a schema to enforce, as a valid JSON string. Ensure this is a mapping of { \\"column\\" : \\"type\\" }, where types are valid JSON Schema datatypes. Leave as {} to auto-infer the schema."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_salesforce.py b/src/sdk/models/shared/source_salesforce.py
new file mode 100755
index 00000000..136f5fb5
--- /dev/null
+++ b/src/sdk/models/shared/source_salesforce.py
@@ -0,0 +1,57 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Optional
+
+class SourceSalesforceAuthTypeEnum(str, Enum):
+ CLIENT = 'Client'
+
+class SourceSalesforceSalesforceEnum(str, Enum):
+ SALESFORCE = 'salesforce'
+
+class SourceSalesforceStreamsCriteriaSearchCriteriaEnum(str, Enum):
+ STARTS_WITH = 'starts with'
+ ENDS_WITH = 'ends with'
+ CONTAINS = 'contains'
+ EXACTS = 'exacts'
+ STARTS_NOT_WITH = 'starts not with'
+ ENDS_NOT_WITH = 'ends not with'
+ NOT_CONTAINS = 'not contains'
+ NOT_EXACTS = 'not exacts'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceSalesforceStreamsCriteria:
+
+ criteria: SourceSalesforceStreamsCriteriaSearchCriteriaEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('criteria') }})
+ value: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value') }})
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceSalesforce:
+ r"""The values required to configure the source."""
+
+ client_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id') }})
+ r"""Enter your Salesforce developer application's Client ID"""
+ client_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret') }})
+ r"""Enter your Salesforce developer application's Client secret"""
+ refresh_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('refresh_token') }})
+ r"""Enter your application's Salesforce Refresh Token used for Airbyte to access your Salesforce account."""
+ source_type: SourceSalesforceSalesforceEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ auth_type: Optional[SourceSalesforceAuthTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type'), 'exclude': lambda f: f is None }})
+ is_sandbox: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('is_sandbox'), 'exclude': lambda f: f is None }})
+ r"""Toggle if you're using a Salesforce Sandbox"""
+ start_date: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }})
+ r"""Enter the date in the YYYY-MM-DD format. Airbyte will replicate the data added on and after this date. If this field is blank, Airbyte will replicate the data for last two years."""
+ streams_criteria: Optional[list[SourceSalesforceStreamsCriteria]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('streams_criteria'), 'exclude': lambda f: f is None }})
+ r"""Filter streams relevant to you"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_salesforce_singer.py b/src/sdk/models/shared/source_salesforce_singer.py
new file mode 100755
index 00000000..50bde08f
--- /dev/null
+++ b/src/sdk/models/shared/source_salesforce_singer.py
@@ -0,0 +1,41 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourceSalesforceSingerAPITypeEnum(str, Enum):
+ r"""Unless you know that you are transferring a very small amount of data, prefer using the BULK API. This will help avoid using up all of your API call quota with Salesforce. Valid values are BULK or REST."""
+ BULK = 'BULK'
+ REST = 'REST'
+
+class SourceSalesforceSingerSalesforceSingerEnum(str, Enum):
+ SALESFORCE_SINGER = 'salesforce-singer'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceSalesforceSinger:
+ r"""The values required to configure the source."""
+
+ api_type: SourceSalesforceSingerAPITypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_type') }})
+ r"""Unless you know that you are transferring a very small amount of data, prefer using the BULK API. This will help avoid using up all of your API call quota with Salesforce. Valid values are BULK or REST."""
+ client_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id') }})
+ r"""The Consumer Key that can be found when viewing your app in Salesforce"""
+ client_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret') }})
+ r"""The Consumer Secret that can be found when viewing your app in Salesforce"""
+ refresh_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('refresh_token') }})
+ r"""Salesforce Refresh Token used for Airbyte to access your Salesforce account. If you don't know what this is, follow this guide to retrieve it."""
+ source_type: SourceSalesforceSingerSalesforceSingerEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date') }})
+ r"""UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated."""
+ is_sandbox: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('is_sandbox'), 'exclude': lambda f: f is None }})
+ r"""Whether or not the the app is in a Salesforce sandbox. If you do not know what this, assume it is false. We provide more info on this field in the docs."""
+ quota_percent_per_run: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('quota_percent_per_run'), 'exclude': lambda f: f is None }})
+ r"""determines the maximum allowed API quota percentage the connector is allowed to consume per sync job"""
+ quota_percent_total: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('quota_percent_total'), 'exclude': lambda f: f is None }})
+ r"""Determines the maximum allowed API quota percentage the connector is allowed to consume at any time"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_salesloft.py b/src/sdk/models/shared/source_salesloft.py
new file mode 100755
index 00000000..062c9fc5
--- /dev/null
+++ b/src/sdk/models/shared/source_salesloft.py
@@ -0,0 +1,58 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Any
+
+class SourceSalesloftCredentialsAuthenticateViaAPIKeyAuthTypeEnum(str, Enum):
+ API_KEY = 'api_key'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceSalesloftCredentialsAuthenticateViaAPIKey:
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""API Key for making authenticated requests. More instruction on how to find this value in our docs"""
+ auth_type: SourceSalesloftCredentialsAuthenticateViaAPIKeyAuthTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type') }})
+
+class SourceSalesloftCredentialsAuthenticateViaOAuthAuthTypeEnum(str, Enum):
+ OAUTH2_0 = 'oauth2.0'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceSalesloftCredentialsAuthenticateViaOAuth:
+
+ access_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token') }})
+ r"""Access Token for making authenticated requests."""
+ auth_type: SourceSalesloftCredentialsAuthenticateViaOAuthAuthTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type') }})
+ client_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id') }})
+ r"""The Client ID of your Salesloft developer application."""
+ client_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret') }})
+ r"""The Client Secret of your Salesloft developer application."""
+ refresh_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('refresh_token') }})
+ r"""The token for obtaining a new access token."""
+ token_expiry_date: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('token_expiry_date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }})
+ r"""The date-time when the access token should be refreshed."""
+
+class SourceSalesloftSalesloftEnum(str, Enum):
+ SALESLOFT = 'salesloft'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceSalesloft:
+ r"""The values required to configure the source."""
+
+ credentials: Any = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials') }})
+ source_type: SourceSalesloftSalesloftEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }})
+ r"""The date from which you'd like to replicate data for Salesloft API, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_sap_fieldglass.py b/src/sdk/models/shared/source_sap_fieldglass.py
new file mode 100755
index 00000000..88fc7fec
--- /dev/null
+++ b/src/sdk/models/shared/source_sap_fieldglass.py
@@ -0,0 +1,21 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceSapFieldglassSapFieldglassEnum(str, Enum):
+ SAP_FIELDGLASS = 'sap-fieldglass'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceSapFieldglass:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""API Key"""
+ source_type: SourceSapFieldglassSapFieldglassEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_secoda.py b/src/sdk/models/shared/source_secoda.py
new file mode 100755
index 00000000..6ff137e3
--- /dev/null
+++ b/src/sdk/models/shared/source_secoda.py
@@ -0,0 +1,21 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceSecodaSecodaEnum(str, Enum):
+ SECODA = 'secoda'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceSecoda:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""Your API Access Key. See here. The key is case sensitive."""
+ source_type: SourceSecodaSecodaEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_sendgrid.py b/src/sdk/models/shared/source_sendgrid.py
new file mode 100755
index 00000000..cac62013
--- /dev/null
+++ b/src/sdk/models/shared/source_sendgrid.py
@@ -0,0 +1,27 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Optional
+
+class SourceSendgridSendgridEnum(str, Enum):
+ SENDGRID = 'sendgrid'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceSendgrid:
+ r"""The values required to configure the source."""
+
+ apikey: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('apikey') }})
+ r"""API Key, use admin to generate this key."""
+ source_type: SourceSendgridSendgridEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_time: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_time'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }})
+ r"""Start time in ISO8601 format. Any data before this time point will not be replicated."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_sendinblue.py b/src/sdk/models/shared/source_sendinblue.py
new file mode 100755
index 00000000..0193106c
--- /dev/null
+++ b/src/sdk/models/shared/source_sendinblue.py
@@ -0,0 +1,21 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceSendinblueSendinblueEnum(str, Enum):
+ SENDINBLUE = 'sendinblue'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceSendinblue:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""Your API Key. See here."""
+ source_type: SourceSendinblueSendinblueEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_senseforce.py b/src/sdk/models/shared/source_senseforce.py
new file mode 100755
index 00000000..c98fb48e
--- /dev/null
+++ b/src/sdk/models/shared/source_senseforce.py
@@ -0,0 +1,32 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from datetime import date
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Optional
+
+class SourceSenseforceSenseforceEnum(str, Enum):
+ SENSEFORCE = 'senseforce'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceSenseforce:
+ r"""The values required to configure the source."""
+
+ access_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token') }})
+ r"""Your API access token. See here. The toke is case sensitive."""
+ backend_url: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('backend_url') }})
+ r"""Your Senseforce API backend URL. This is the URL shown during the Login screen. See here for more details. (Note: Most Senseforce backend APIs have the term 'galaxy' in their ULR)"""
+ dataset_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dataset_id') }})
+ r"""The ID of the dataset you want to synchronize. The ID can be found in the URL when opening the dataset. See here for more details. (Note: As the Senseforce API only allows to synchronize a specific dataset, each dataset you want to synchronize needs to be implemented as a separate airbyte source)."""
+ source_type: SourceSenseforceSenseforceEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: date = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.dateisoformat(False), 'decoder': utils.datefromisoformat, 'mm_field': fields.DateTime(format='iso') }})
+ r"""UTC date and time in the format 2017-01-25. Only data with \\"Timestamp\\" after this date will be replicated. Important note: This start date must be set to the first day of where your dataset provides data. If your dataset has data from 2020-10-10 10:21:10, set the start_date to 2020-10-10 or later"""
+ slice_range: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('slice_range'), 'exclude': lambda f: f is None }})
+ r"""The time increment used by the connector when requesting data from the Senseforce API. The bigger the value is, the less requests will be made and faster the sync will be. On the other hand, the more seldom the state is persisted and the more likely one could run into rate limites. Furthermore, consider that large chunks of time might take a long time for the Senseforce query to return data - meaning it could take in effect longer than with more smaller time slices. If there are a lot of data per day, set this setting to 1. If there is only very little data per day, you might change the setting to 10 or more."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_sentry.py b/src/sdk/models/shared/source_sentry.py
new file mode 100755
index 00000000..aa88fefe
--- /dev/null
+++ b/src/sdk/models/shared/source_sentry.py
@@ -0,0 +1,30 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class SourceSentrySentryEnum(str, Enum):
+ SENTRY = 'sentry'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceSentry:
+ r"""The values required to configure the source."""
+
+ auth_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_token') }})
+ r"""Log into Sentry and then create authentication tokens.For self-hosted, you can find or create authentication tokens by visiting \\"{instance_url_prefix}/settings/account/api/auth-tokens/\\" """
+ organization: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('organization') }})
+ r"""The slug of the organization the groups belong to."""
+ project: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('project') }})
+ r"""The name (slug) of the Project you want to sync."""
+ source_type: SourceSentrySentryEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ discover_fields: Optional[list[Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('discover_fields'), 'exclude': lambda f: f is None }})
+ r"""Fields to retrieve when fetching discover events"""
+ hostname: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hostname'), 'exclude': lambda f: f is None }})
+ r"""Host name of Sentry API server.For self-hosted, specify your host name here. Otherwise, leave it empty."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_sftp.py b/src/sdk/models/shared/source_sftp.py
new file mode 100755
index 00000000..bffaf3d5
--- /dev/null
+++ b/src/sdk/models/shared/source_sftp.py
@@ -0,0 +1,64 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class SourceSftpCredentialsSSHKeyAuthenticationAuthMethodEnum(str, Enum):
+ r"""Connect through ssh key"""
+ SSH_KEY_AUTH = 'SSH_KEY_AUTH'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceSftpCredentialsSSHKeyAuthentication:
+ r"""The server authentication method"""
+
+ auth_method: SourceSftpCredentialsSSHKeyAuthenticationAuthMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_method') }})
+ r"""Connect through ssh key"""
+ auth_ssh_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_ssh_key') }})
+ r"""OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )"""
+
+class SourceSftpCredentialsPasswordAuthenticationAuthMethodEnum(str, Enum):
+ r"""Connect through password authentication"""
+ SSH_PASSWORD_AUTH = 'SSH_PASSWORD_AUTH'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceSftpCredentialsPasswordAuthentication:
+ r"""The server authentication method"""
+
+ auth_method: SourceSftpCredentialsPasswordAuthenticationAuthMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_method') }})
+ r"""Connect through password authentication"""
+ auth_user_password: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_user_password') }})
+ r"""OS-level password for logging into the jump server host"""
+
+class SourceSftpSftpEnum(str, Enum):
+ SFTP = 'sftp'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceSftp:
+ r"""The values required to configure the source."""
+
+ host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('host') }})
+ r"""The server host address"""
+ port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('port') }})
+ r"""The server port"""
+ source_type: SourceSftpSftpEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ user: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('user') }})
+ r"""The server user"""
+ credentials: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials'), 'exclude': lambda f: f is None }})
+ r"""The server authentication method"""
+ file_pattern: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('file_pattern'), 'exclude': lambda f: f is None }})
+ r"""The regular expression to specify files for sync in a chosen Folder Path"""
+ file_types: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('file_types'), 'exclude': lambda f: f is None }})
+ r"""Coma separated file types. Currently only 'csv' and 'json' types are supported."""
+ folder_path: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('folder_path'), 'exclude': lambda f: f is None }})
+ r"""The directory to search files for sync"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_sftp_bulk.py b/src/sdk/models/shared/source_sftp_bulk.py
new file mode 100755
index 00000000..a25ea842
--- /dev/null
+++ b/src/sdk/models/shared/source_sftp_bulk.py
@@ -0,0 +1,50 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Optional
+
+class SourceSftpBulkFileTypeEnum(str, Enum):
+ r"""The file type you want to sync. Currently only 'csv' and 'json' files are supported."""
+ CSV = 'csv'
+ JSON = 'json'
+
+class SourceSftpBulkSftpBulkEnum(str, Enum):
+ SFTP_BULK = 'sftp-bulk'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceSftpBulk:
+ r"""The values required to configure the source."""
+
+ folder_path: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('folder_path') }})
+ r"""The directory to search files for sync"""
+ host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('host') }})
+ r"""The server host address"""
+ port: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('port') }})
+ r"""The server port"""
+ source_type: SourceSftpBulkSftpBulkEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }})
+ r"""The date from which you'd like to replicate data for all incremental streams, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated."""
+ stream_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('stream_name') }})
+ r"""The name of the stream or table you want to create"""
+ username: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('username') }})
+ r"""The server user"""
+ file_most_recent: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('file_most_recent'), 'exclude': lambda f: f is None }})
+ r"""Sync only the most recent file for the configured folder path and file pattern"""
+ file_pattern: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('file_pattern'), 'exclude': lambda f: f is None }})
+ r"""The regular expression to specify files for sync in a chosen Folder Path"""
+ file_type: Optional[SourceSftpBulkFileTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('file_type'), 'exclude': lambda f: f is None }})
+ r"""The file type you want to sync. Currently only 'csv' and 'json' files are supported."""
+ password: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password'), 'exclude': lambda f: f is None }})
+ r"""OS-level password for logging into the jump server host"""
+ private_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('private_key'), 'exclude': lambda f: f is None }})
+ r"""The private key"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_shopify.py b/src/sdk/models/shared/source_shopify.py
new file mode 100755
index 00000000..11064343
--- /dev/null
+++ b/src/sdk/models/shared/source_shopify.py
@@ -0,0 +1,56 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class SourceShopifyCredentialsOAuth20AuthMethodEnum(str, Enum):
+ OAUTH2_0 = 'oauth2.0'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceShopifyCredentialsOAuth20:
+ r"""OAuth2.0"""
+
+ auth_method: SourceShopifyCredentialsOAuth20AuthMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_method') }})
+ access_token: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token'), 'exclude': lambda f: f is None }})
+ r"""The Access Token for making authenticated requests."""
+ client_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id'), 'exclude': lambda f: f is None }})
+ r"""The Client ID of the Shopify developer application."""
+ client_secret: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret'), 'exclude': lambda f: f is None }})
+ r"""The Client Secret of the Shopify developer application."""
+
+class SourceShopifyCredentialsAPIPasswordAuthMethodEnum(str, Enum):
+ API_PASSWORD = 'api_password'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceShopifyCredentialsAPIPassword:
+ r"""API Password Auth"""
+
+ api_password: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_password') }})
+ r"""The API Password for your private application in the `Shopify` store."""
+ auth_method: SourceShopifyCredentialsAPIPasswordAuthMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_method') }})
+
+class SourceShopifyShopifyEnum(str, Enum):
+ SHOPIFY = 'shopify'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceShopify:
+ r"""The values required to configure the source."""
+
+ shop: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('shop') }})
+ r"""The name of your Shopify store found in the URL. For example, if your URL was https://NAME.myshopify.com, then the name would be 'NAME'."""
+ source_type: SourceShopifyShopifyEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date') }})
+ r"""The date you would like to replicate data from. Format: YYYY-MM-DD. Any data before this date will not be replicated."""
+ credentials: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials'), 'exclude': lambda f: f is None }})
+ r"""The authorization method to use to retrieve data from Shopify"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_shortio.py b/src/sdk/models/shared/source_shortio.py
new file mode 100755
index 00000000..99f235ef
--- /dev/null
+++ b/src/sdk/models/shared/source_shortio.py
@@ -0,0 +1,24 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceShortioShortioEnum(str, Enum):
+ SHORTIO = 'shortio'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceShortio:
+ r"""The values required to configure the source."""
+
+ domain_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('domain_id') }})
+ secret_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('secret_key') }})
+ r"""Short.io Secret Key"""
+ source_type: SourceShortioShortioEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date') }})
+ r"""UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_slack.py b/src/sdk/models/shared/source_slack.py
new file mode 100755
index 00000000..b716179e
--- /dev/null
+++ b/src/sdk/models/shared/source_slack.py
@@ -0,0 +1,63 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Any, Optional
+
+class SourceSlackCredentialsAPITokenOptionTitleEnum(str, Enum):
+ API_TOKEN_CREDENTIALS = 'API Token Credentials'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceSlackCredentialsAPIToken:
+ r"""Choose how to authenticate into Slack"""
+
+ api_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_token') }})
+ r"""A Slack bot token. See the docs for instructions on how to generate it."""
+ option_title: SourceSlackCredentialsAPITokenOptionTitleEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('option_title') }})
+
+class SourceSlackCredentialsSignInViaSlackOAuthOptionTitleEnum(str, Enum):
+ DEFAULT_O_AUTH2_0_AUTHORIZATION = 'Default OAuth2.0 authorization'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceSlackCredentialsSignInViaSlackOAuth:
+ r"""Choose how to authenticate into Slack"""
+
+ access_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token') }})
+ r"""Slack access_token. See our docs if you need help generating the token."""
+ client_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id') }})
+ r"""Slack client_id. See our docs if you need help finding this id."""
+ client_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret') }})
+ r"""Slack client_secret. See our docs if you need help finding this secret."""
+ option_title: SourceSlackCredentialsSignInViaSlackOAuthOptionTitleEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('option_title') }})
+
+class SourceSlackSlackEnum(str, Enum):
+ SLACK = 'slack'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceSlack:
+ r"""The values required to configure the source."""
+
+ join_channels: bool = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('join_channels') }})
+ r"""Whether to join all channels or to sync data only from channels the bot is already in. If false, you'll need to manually add the bot to all the channels from which you'd like to sync messages."""
+ lookback_window: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('lookback_window') }})
+ r"""How far into the past to look for messages in threads."""
+ source_type: SourceSlackSlackEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }})
+ r"""UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated."""
+ channel_filter: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('channel_filter'), 'exclude': lambda f: f is None }})
+ r"""A channel name list (without leading '#' char) which limit the channels from which you'd like to sync. Empty list means no filter."""
+ credentials: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials'), 'exclude': lambda f: f is None }})
+ r"""Choose how to authenticate into Slack"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_smaily.py b/src/sdk/models/shared/source_smaily.py
new file mode 100755
index 00000000..a6bd8d1f
--- /dev/null
+++ b/src/sdk/models/shared/source_smaily.py
@@ -0,0 +1,25 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceSmailySmailyEnum(str, Enum):
+ SMAILY = 'smaily'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceSmaily:
+ r"""The values required to configure the source."""
+
+ api_password: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_password') }})
+ r"""API user password. See https://smaily.com/help/api/general/create-api-user/"""
+ api_subdomain: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_subdomain') }})
+ r"""API Subdomain. See https://smaily.com/help/api/general/create-api-user/"""
+ api_username: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_username') }})
+ r"""API user username. See https://smaily.com/help/api/general/create-api-user/"""
+ source_type: SourceSmailySmailyEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_smartengage.py b/src/sdk/models/shared/source_smartengage.py
new file mode 100755
index 00000000..22fdc5d9
--- /dev/null
+++ b/src/sdk/models/shared/source_smartengage.py
@@ -0,0 +1,21 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceSmartengageSmartengageEnum(str, Enum):
+ SMARTENGAGE = 'smartengage'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceSmartengage:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""API Key"""
+ source_type: SourceSmartengageSmartengageEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_smartsheets.py b/src/sdk/models/shared/source_smartsheets.py
new file mode 100755
index 00000000..ae280107
--- /dev/null
+++ b/src/sdk/models/shared/source_smartsheets.py
@@ -0,0 +1,60 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Any, Optional
+
+class SourceSmartsheetsCredentialsAPIAccessTokenAuthTypeEnum(str, Enum):
+ ACCESS_TOKEN = 'access_token'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceSmartsheetsCredentialsAPIAccessToken:
+
+ access_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token') }})
+ r"""The access token to use for accessing your data from Smartsheets. This access token must be generated by a user with at least read access to the data you'd like to replicate. Generate an access token in the Smartsheets main menu by clicking Account > Apps & Integrations > API Access. See the setup guide for information on how to obtain this token."""
+ auth_type: Optional[SourceSmartsheetsCredentialsAPIAccessTokenAuthTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type'), 'exclude': lambda f: f is None }})
+
+class SourceSmartsheetsCredentialsOAuth20AuthTypeEnum(str, Enum):
+ OAUTH2_0 = 'oauth2.0'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceSmartsheetsCredentialsOAuth20:
+
+ access_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token') }})
+ r"""Access Token for making authenticated requests."""
+ client_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id') }})
+ r"""The API ID of the SmartSheets developer application."""
+ client_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret') }})
+ r"""The API Secret the SmartSheets developer application."""
+ refresh_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('refresh_token') }})
+ r"""The key to refresh the expired access_token."""
+ token_expiry_date: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('token_expiry_date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }})
+ r"""The date-time when the access token should be refreshed."""
+ auth_type: Optional[SourceSmartsheetsCredentialsOAuth20AuthTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type'), 'exclude': lambda f: f is None }})
+
+class SourceSmartsheetsSmartsheetsEnum(str, Enum):
+ SMARTSHEETS = 'smartsheets'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceSmartsheets:
+ r"""The values required to configure the source."""
+
+ credentials: Any = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials') }})
+ source_type: SourceSmartsheetsSmartsheetsEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ spreadsheet_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('spreadsheet_id') }})
+ r"""The spreadsheet ID. Find it by opening the spreadsheet then navigating to File > Properties"""
+ start_datetime: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_datetime'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }})
+ r"""Only rows modified after this date/time will be replicated. This should be an ISO 8601 string, for instance: `2000-01-01T13:00:00`"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_snapchat_marketing.py b/src/sdk/models/shared/source_snapchat_marketing.py
new file mode 100755
index 00000000..f1aba3fd
--- /dev/null
+++ b/src/sdk/models/shared/source_snapchat_marketing.py
@@ -0,0 +1,32 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from datetime import date
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Optional
+
+class SourceSnapchatMarketingSnapchatMarketingEnum(str, Enum):
+ SNAPCHAT_MARKETING = 'snapchat-marketing'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceSnapchatMarketing:
+ r"""The values required to configure the source."""
+
+ client_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id') }})
+ r"""The Client ID of your Snapchat developer application."""
+ client_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret') }})
+ r"""The Client Secret of your Snapchat developer application."""
+ refresh_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('refresh_token') }})
+ r"""Refresh Token to renew the expired Access Token."""
+ source_type: SourceSnapchatMarketingSnapchatMarketingEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ end_date: Optional[date] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('end_date'), 'encoder': utils.dateisoformat(True), 'decoder': utils.datefromisoformat, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }})
+ r"""Date in the format 2017-01-25. Any data after this date will not be replicated."""
+ start_date: Optional[date] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.dateisoformat(True), 'decoder': utils.datefromisoformat, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }})
+ r"""Date in the format 2022-01-01. Any data before this date will not be replicated."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_snowflake.py b/src/sdk/models/shared/source_snowflake.py
new file mode 100755
index 00000000..35a0639e
--- /dev/null
+++ b/src/sdk/models/shared/source_snowflake.py
@@ -0,0 +1,65 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class SourceSnowflakeCredentialsUsernameAndPasswordAuthTypeEnum(str, Enum):
+ USERNAME_PASSWORD = 'username/password'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceSnowflakeCredentialsUsernameAndPassword:
+
+ auth_type: SourceSnowflakeCredentialsUsernameAndPasswordAuthTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type') }})
+ password: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password') }})
+ r"""The password associated with the username."""
+ username: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('username') }})
+ r"""The username you created to allow Airbyte to access the database."""
+
+class SourceSnowflakeCredentialsOAuth20AuthTypeEnum(str, Enum):
+ O_AUTH = 'OAuth'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceSnowflakeCredentialsOAuth20:
+
+ auth_type: SourceSnowflakeCredentialsOAuth20AuthTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type') }})
+ client_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id') }})
+ r"""The Client ID of your Snowflake developer application."""
+ client_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret') }})
+ r"""The Client Secret of your Snowflake developer application."""
+ access_token: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token'), 'exclude': lambda f: f is None }})
+ r"""Access Token for making authenticated requests."""
+ refresh_token: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('refresh_token'), 'exclude': lambda f: f is None }})
+ r"""Refresh Token for making authenticated requests."""
+
+class SourceSnowflakeSnowflakeEnum(str, Enum):
+ SNOWFLAKE = 'snowflake'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceSnowflake:
+ r"""The values required to configure the source."""
+
+ database: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('database') }})
+ r"""The database you created for Airbyte to access data."""
+ host: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('host') }})
+ r"""The host domain of the snowflake instance (must include the account, region, cloud environment, and end with snowflakecomputing.com)."""
+ role: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('role') }})
+ r"""The role you created for Airbyte to access Snowflake."""
+ source_type: SourceSnowflakeSnowflakeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ warehouse: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('warehouse') }})
+ r"""The warehouse you created for Airbyte to access data."""
+ credentials: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials'), 'exclude': lambda f: f is None }})
+ jdbc_url_params: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('jdbc_url_params'), 'exclude': lambda f: f is None }})
+ r"""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)."""
+ schema: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('schema'), 'exclude': lambda f: f is None }})
+ r"""The source Snowflake schema tables. Leave empty to access tables from multiple schemas."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_sonar_cloud.py b/src/sdk/models/shared/source_sonar_cloud.py
new file mode 100755
index 00000000..d4d3393a
--- /dev/null
+++ b/src/sdk/models/shared/source_sonar_cloud.py
@@ -0,0 +1,32 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from datetime import date
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Any, Optional
+
+class SourceSonarCloudSonarCloudEnum(str, Enum):
+ SONAR_CLOUD = 'sonar-cloud'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceSonarCloud:
+ r"""The values required to configure the source."""
+
+ component_keys: list[Any] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('component_keys') }})
+ r"""Comma-separated list of component keys."""
+ organization: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('organization') }})
+ r"""Organization key. See here."""
+ source_type: SourceSonarCloudSonarCloudEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ user_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('user_token') }})
+ r"""Your User Token. See here. The token is case sensitive."""
+ end_date: Optional[date] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('end_date'), 'encoder': utils.dateisoformat(True), 'decoder': utils.datefromisoformat, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }})
+ r"""To retrieve issues created before the given date (inclusive)."""
+ start_date: Optional[date] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.dateisoformat(True), 'decoder': utils.datefromisoformat, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }})
+ r"""To retrieve issues created after the given date (inclusive)."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_spacex_api.py b/src/sdk/models/shared/source_spacex_api.py
new file mode 100755
index 00000000..dbf58ab4
--- /dev/null
+++ b/src/sdk/models/shared/source_spacex_api.py
@@ -0,0 +1,22 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourceSpacexAPISpacexAPIEnum(str, Enum):
+ SPACEX_API = 'spacex-api'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceSpacexAPI:
+ r"""The values required to configure the source."""
+
+ source_type: SourceSpacexAPISpacexAPIEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }})
+ options: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('options'), 'exclude': lambda f: f is None }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_square.py b/src/sdk/models/shared/source_square.py
new file mode 100755
index 00000000..c6af806f
--- /dev/null
+++ b/src/sdk/models/shared/source_square.py
@@ -0,0 +1,60 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from datetime import date
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Any, Optional
+
+class SourceSquareCredentialsAPIKeyCredentialsTitleEnum(str, Enum):
+ API_KEY = 'API Key'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceSquareCredentialsAPIKey:
+ r"""Choose how to authenticate to Square."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""The API key for a Square application"""
+ credentials_title: Optional[SourceSquareCredentialsAPIKeyCredentialsTitleEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials_title'), 'exclude': lambda f: f is None }})
+
+class SourceSquareCredentialsOauthAuthenticationCredentialsTitleEnum(str, Enum):
+ O_AUTH_CREDENTIALS = 'OAuth Credentials'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceSquareCredentialsOauthAuthentication:
+ r"""Choose how to authenticate to Square."""
+
+ client_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id') }})
+ r"""The Square-issued ID of your application"""
+ client_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret') }})
+ r"""The Square-issued application secret for your application"""
+ refresh_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('refresh_token') }})
+ r"""A refresh token generated using the above client ID and secret"""
+ credentials_title: Optional[SourceSquareCredentialsOauthAuthenticationCredentialsTitleEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials_title'), 'exclude': lambda f: f is None }})
+
+class SourceSquareSquareEnum(str, Enum):
+ SQUARE = 'square'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceSquare:
+ r"""The values required to configure the source."""
+
+ is_sandbox: bool = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('is_sandbox') }})
+ r"""Determines whether to use the sandbox or production environment."""
+ source_type: SourceSquareSquareEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ credentials: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials'), 'exclude': lambda f: f is None }})
+ r"""Choose how to authenticate to Square."""
+ include_deleted_objects: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('include_deleted_objects'), 'exclude': lambda f: f is None }})
+ r"""In some streams there is an option to include deleted objects (Items, Categories, Discounts, Taxes)"""
+ start_date: Optional[date] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.dateisoformat(True), 'decoder': utils.datefromisoformat, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }})
+ r"""UTC date in the format YYYY-MM-DD. Any data before this date will not be replicated. If not set, all data will be replicated."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_strava.py b/src/sdk/models/shared/source_strava.py
new file mode 100755
index 00000000..9786b796
--- /dev/null
+++ b/src/sdk/models/shared/source_strava.py
@@ -0,0 +1,37 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Optional
+
+class SourceStravaAuthTypeEnum(str, Enum):
+ CLIENT = 'Client'
+
+class SourceStravaStravaEnum(str, Enum):
+ STRAVA = 'strava'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceStrava:
+ r"""The values required to configure the source."""
+
+ athlete_id: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('athlete_id') }})
+ r"""The Athlete ID of your Strava developer application."""
+ client_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id') }})
+ r"""The Client ID of your Strava developer application."""
+ client_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret') }})
+ r"""The Client Secret of your Strava developer application."""
+ refresh_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('refresh_token') }})
+ r"""The Refresh Token with the activity: read_all permissions."""
+ source_type: SourceStravaStravaEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }})
+ r"""UTC date and time. Any data before this date will not be replicated."""
+ auth_type: Optional[SourceStravaAuthTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type'), 'exclude': lambda f: f is None }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_stripe.py b/src/sdk/models/shared/source_stripe.py
new file mode 100755
index 00000000..c79bfa91
--- /dev/null
+++ b/src/sdk/models/shared/source_stripe.py
@@ -0,0 +1,33 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Optional
+
+class SourceStripeStripeEnum(str, Enum):
+ STRIPE = 'stripe'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceStripe:
+ r"""The values required to configure the source."""
+
+ account_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('account_id') }})
+ r"""Your Stripe account ID (starts with 'acct_', find yours here)."""
+ client_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret') }})
+ r"""Stripe API key (usually starts with 'sk_live_'; find yours here)."""
+ source_type: SourceStripeStripeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }})
+ r"""UTC date and time in the format 2017-01-25T00:00:00Z. Only data generated after this date will be replicated."""
+ lookback_window_days: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('lookback_window_days'), 'exclude': lambda f: f is None }})
+ r"""When set, the connector will always re-export data from the past N days, where N is the value set here. This is useful if your data is frequently updated after creation. More info here"""
+ slice_range: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('slice_range'), 'exclude': lambda f: f is None }})
+ r"""The time increment used by the connector when requesting data from the Stripe API. The bigger the value is, the less requests will be made and faster the sync will be. On the other hand, the more seldom the state is persisted."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_survey_sparrow.py b/src/sdk/models/shared/source_survey_sparrow.py
new file mode 100755
index 00000000..2fdbd86d
--- /dev/null
+++ b/src/sdk/models/shared/source_survey_sparrow.py
@@ -0,0 +1,48 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class SourceSurveySparrowRegionGlobalAccountURLBaseEnum(str, Enum):
+ HTTPS_API_SURVEYSPARROW_COM_V3 = 'https://api.surveysparrow.com/v3'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceSurveySparrowRegionGlobalAccount:
+ r"""Is your account location is EU based? If yes, the base url to retrieve data will be different."""
+
+ url_base: Optional[SourceSurveySparrowRegionGlobalAccountURLBaseEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('url_base'), 'exclude': lambda f: f is None }})
+
+class SourceSurveySparrowRegionEUBasedAccountURLBaseEnum(str, Enum):
+ HTTPS_EU_API_SURVEYSPARROW_COM_V3 = 'https://eu-api.surveysparrow.com/v3'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceSurveySparrowRegionEUBasedAccount:
+ r"""Is your account location is EU based? If yes, the base url to retrieve data will be different."""
+
+ url_base: Optional[SourceSurveySparrowRegionEUBasedAccountURLBaseEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('url_base'), 'exclude': lambda f: f is None }})
+
+class SourceSurveySparrowSurveySparrowEnum(str, Enum):
+ SURVEY_SPARROW = 'survey-sparrow'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceSurveySparrow:
+ r"""The values required to configure the source."""
+
+ access_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token') }})
+ r"""Your access token. See here. The key is case sensitive."""
+ source_type: SourceSurveySparrowSurveySparrowEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ region: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('region'), 'exclude': lambda f: f is None }})
+ r"""Is your account location is EU based? If yes, the base url to retrieve data will be different."""
+ survey_id: Optional[list[Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('survey_id'), 'exclude': lambda f: f is None }})
+ r"""A List of your survey ids for survey-specific stream"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_surveymonkey.py b/src/sdk/models/shared/source_surveymonkey.py
new file mode 100755
index 00000000..268d7f77
--- /dev/null
+++ b/src/sdk/models/shared/source_surveymonkey.py
@@ -0,0 +1,54 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Optional
+
+class SourceSurveymonkeySurveyMonkeyAuthorizationMethodAuthMethodEnum(str, Enum):
+ OAUTH2_0 = 'oauth2.0'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceSurveymonkeySurveyMonkeyAuthorizationMethod:
+ r"""The authorization method to use to retrieve data from SurveyMonkey"""
+
+ access_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token') }})
+ r"""Access Token for making authenticated requests. See the docs for information on how to generate this key."""
+ auth_method: SourceSurveymonkeySurveyMonkeyAuthorizationMethodAuthMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_method') }})
+ client_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id'), 'exclude': lambda f: f is None }})
+ r"""The Client ID of the SurveyMonkey developer application."""
+ client_secret: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret'), 'exclude': lambda f: f is None }})
+ r"""The Client Secret of the SurveyMonkey developer application."""
+
+class SourceSurveymonkeyOriginDatacenterOfTheSurveyMonkeyAccountEnum(str, Enum):
+ r"""Depending on the originating datacenter of the SurveyMonkey account, the API access URL may be different."""
+ USA = 'USA'
+ EUROPE = 'Europe'
+ CANADA = 'Canada'
+
+class SourceSurveymonkeySurveymonkeyEnum(str, Enum):
+ SURVEYMONKEY = 'surveymonkey'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceSurveymonkey:
+ r"""The values required to configure the source."""
+
+ source_type: SourceSurveymonkeySurveymonkeyEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }})
+ r"""UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated."""
+ credentials: Optional[SourceSurveymonkeySurveyMonkeyAuthorizationMethod] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials'), 'exclude': lambda f: f is None }})
+ r"""The authorization method to use to retrieve data from SurveyMonkey"""
+ origin: Optional[SourceSurveymonkeyOriginDatacenterOfTheSurveyMonkeyAccountEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('origin'), 'exclude': lambda f: f is None }})
+ r"""Depending on the originating datacenter of the SurveyMonkey account, the API access URL may be different."""
+ survey_ids: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('survey_ids'), 'exclude': lambda f: f is None }})
+ r"""IDs of the surveys from which you'd like to replicate data. If left empty, data from all boards to which you have access will be replicated."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_tempo.py b/src/sdk/models/shared/source_tempo.py
new file mode 100755
index 00000000..612d0462
--- /dev/null
+++ b/src/sdk/models/shared/source_tempo.py
@@ -0,0 +1,21 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceTempoTempoEnum(str, Enum):
+ TEMPO = 'tempo'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceTempo:
+ r"""The values required to configure the source."""
+
+ api_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_token') }})
+ r"""Tempo API Token. Go to Tempo>Settings, scroll down to Data Access and select API integration."""
+ source_type: SourceTempoTempoEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_the_guardian_api.py b/src/sdk/models/shared/source_the_guardian_api.py
new file mode 100755
index 00000000..4727d104
--- /dev/null
+++ b/src/sdk/models/shared/source_the_guardian_api.py
@@ -0,0 +1,32 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourceTheGuardianAPITheGuardianAPIEnum(str, Enum):
+ THE_GUARDIAN_API = 'the-guardian-api'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceTheGuardianAPI:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""Your API Key. See here. The key is case sensitive."""
+ source_type: SourceTheGuardianAPITheGuardianAPIEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date') }})
+ r"""Use this to set the minimum date (YYYY-MM-DD) of the results. Results older than the start_date will not be shown."""
+ end_date: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('end_date'), 'exclude': lambda f: f is None }})
+ r"""(Optional) Use this to set the maximum date (YYYY-MM-DD) of the results. Results newer than the end_date will not be shown. Default is set to the current date (today) for incremental syncs."""
+ query: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('query'), 'exclude': lambda f: f is None }})
+ r"""(Optional) The query (q) parameter filters the results to only those that include that search term. The q parameter supports AND, OR and NOT operators."""
+ section: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('section'), 'exclude': lambda f: f is None }})
+ r"""(Optional) Use this to filter the results by a particular section. See here for a list of all sections, and here for the sections endpoint documentation."""
+ tag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tag'), 'exclude': lambda f: f is None }})
+ r"""(Optional) A tag is a piece of data that is used by The Guardian to categorise content. Use this parameter to filter results by showing only the ones matching the entered tag. See here for a list of all tags, and here for the tags endpoint documentation."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_tiktok_marketing.py b/src/sdk/models/shared/source_tiktok_marketing.py
new file mode 100755
index 00000000..af241033
--- /dev/null
+++ b/src/sdk/models/shared/source_tiktok_marketing.py
@@ -0,0 +1,70 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from datetime import date
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Any, Optional
+
+class SourceTiktokMarketingCredentialsSandboxAccessTokenAuthTypeEnum(str, Enum):
+ SANDBOX_ACCESS_TOKEN = 'sandbox_access_token'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceTiktokMarketingCredentialsSandboxAccessToken:
+ r"""Authentication method"""
+
+ access_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token') }})
+ r"""The long-term authorized access token."""
+ advertiser_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('advertiser_id') }})
+ r"""The Advertiser ID which generated for the developer's Sandbox application."""
+ auth_type: Optional[SourceTiktokMarketingCredentialsSandboxAccessTokenAuthTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type'), 'exclude': lambda f: f is None }})
+
+class SourceTiktokMarketingCredentialsOAuth20AuthTypeEnum(str, Enum):
+ OAUTH2_0 = 'oauth2.0'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceTiktokMarketingCredentialsOAuth20:
+ r"""Authentication method"""
+
+ access_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token') }})
+ r"""Long-term Authorized Access Token."""
+ app_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('app_id') }})
+ r"""The Developer Application App ID."""
+ secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('secret') }})
+ r"""The Developer Application Secret."""
+ advertiser_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('advertiser_id'), 'exclude': lambda f: f is None }})
+ r"""The Advertiser ID to filter reports and streams. Let this empty to retrieve all."""
+ auth_type: Optional[SourceTiktokMarketingCredentialsOAuth20AuthTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type'), 'exclude': lambda f: f is None }})
+
+class SourceTiktokMarketingReportAggregationGranularityEnum(str, Enum):
+ r"""The granularity used for aggregating performance data in reports. See the docs."""
+ LIFETIME = 'LIFETIME'
+ DAY = 'DAY'
+ HOUR = 'HOUR'
+
+class SourceTiktokMarketingTiktokMarketingEnum(str, Enum):
+ TIKTOK_MARKETING = 'tiktok-marketing'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceTiktokMarketing:
+ r"""The values required to configure the source."""
+
+ source_type: SourceTiktokMarketingTiktokMarketingEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ credentials: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials'), 'exclude': lambda f: f is None }})
+ r"""Authentication method"""
+ end_date: Optional[date] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('end_date'), 'encoder': utils.dateisoformat(True), 'decoder': utils.datefromisoformat, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }})
+ r"""The date until which you'd like to replicate data for all incremental streams, in the format YYYY-MM-DD. All data generated between start_date and this date will be replicated. Not setting this option will result in always syncing the data till the current date."""
+ report_granularity: Optional[SourceTiktokMarketingReportAggregationGranularityEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('report_granularity'), 'exclude': lambda f: f is None }})
+ r"""The granularity used for aggregating performance data in reports. See the docs."""
+ start_date: Optional[date] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.dateisoformat(True), 'decoder': utils.datefromisoformat, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }})
+ r"""The Start Date in format: YYYY-MM-DD. Any data before this date will not be replicated. If this parameter is not set, all data will be replicated."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_todoist.py b/src/sdk/models/shared/source_todoist.py
new file mode 100755
index 00000000..64eac73a
--- /dev/null
+++ b/src/sdk/models/shared/source_todoist.py
@@ -0,0 +1,21 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceTodoistTodoistEnum(str, Enum):
+ TODOIST = 'todoist'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceTodoist:
+ r"""The values required to configure the source."""
+
+ source_type: SourceTodoistTodoistEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('token') }})
+ r"""Your API Token. See here. The token is case sensitive."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_trello.py b/src/sdk/models/shared/source_trello.py
new file mode 100755
index 00000000..8bae9d21
--- /dev/null
+++ b/src/sdk/models/shared/source_trello.py
@@ -0,0 +1,31 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Optional
+
+class SourceTrelloTrelloEnum(str, Enum):
+ TRELLO = 'trello'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceTrello:
+ r"""The values required to configure the source."""
+
+ key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key') }})
+ r"""Trello API key. See the docs for instructions on how to generate it."""
+ source_type: SourceTrelloTrelloEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }})
+ r"""UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated."""
+ token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('token') }})
+ r"""Trello API token. See the docs for instructions on how to generate it."""
+ board_ids: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('board_ids'), 'exclude': lambda f: f is None }})
+ r"""IDs of the boards to replicate data from. If left empty, data from all boards to which you have access will be replicated."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_trustpilot.py b/src/sdk/models/shared/source_trustpilot.py
new file mode 100755
index 00000000..b106e5aa
--- /dev/null
+++ b/src/sdk/models/shared/source_trustpilot.py
@@ -0,0 +1,61 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Any, Optional
+
+class SourceTrustpilotCredentialsAPIKeyAuthTypeEnum(str, Enum):
+ APIKEY = 'apikey'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceTrustpilotCredentialsAPIKey:
+ r"""The API key authentication method gives you access to only the streams which are part of the Public API. When you want to get streams available via the Consumer API (e.g. the private reviews) you need to use authentication method OAuth 2.0."""
+
+ client_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id') }})
+ r"""The API key of the Trustpilot API application."""
+ auth_type: Optional[SourceTrustpilotCredentialsAPIKeyAuthTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type'), 'exclude': lambda f: f is None }})
+
+class SourceTrustpilotCredentialsOAuth20AuthTypeEnum(str, Enum):
+ OAUTH2_0 = 'oauth2.0'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceTrustpilotCredentialsOAuth20:
+
+ access_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token') }})
+ r"""Access Token for making authenticated requests."""
+ client_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id') }})
+ r"""The API key of the Trustpilot API application. (represents the OAuth Client ID)"""
+ client_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret') }})
+ r"""The Secret of the Trustpilot API application. (represents the OAuth Client Secret)"""
+ refresh_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('refresh_token') }})
+ r"""The key to refresh the expired access_token."""
+ token_expiry_date: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('token_expiry_date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }})
+ r"""The date-time when the access token should be refreshed."""
+ auth_type: Optional[SourceTrustpilotCredentialsOAuth20AuthTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_type'), 'exclude': lambda f: f is None }})
+
+class SourceTrustpilotTrustpilotEnum(str, Enum):
+ TRUSTPILOT = 'trustpilot'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceTrustpilot:
+ r"""The values required to configure the source."""
+
+ business_units: list[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('business_units') }})
+ r"""The names of business units which shall be synchronized. Some streams e.g. configured_business_units or private_reviews use this configuration."""
+ credentials: Any = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials') }})
+ source_type: SourceTrustpilotTrustpilotEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date') }})
+ r"""For streams with sync. method incremental the start date time to be used"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_tvmaze_schedule.py b/src/sdk/models/shared/source_tvmaze_schedule.py
new file mode 100755
index 00000000..401d59fa
--- /dev/null
+++ b/src/sdk/models/shared/source_tvmaze_schedule.py
@@ -0,0 +1,31 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourceTvmazeScheduleTvmazeScheduleEnum(str, Enum):
+ TVMAZE_SCHEDULE = 'tvmaze-schedule'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceTvmazeSchedule:
+ r"""The values required to configure the source."""
+
+ domestic_schedule_country_code: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('domestic_schedule_country_code') }})
+ r"""Country code for domestic TV schedule retrieval."""
+ source_type: SourceTvmazeScheduleTvmazeScheduleEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date') }})
+ r"""Start date for TV schedule retrieval. May be in the future."""
+ end_date: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('end_date'), 'exclude': lambda f: f is None }})
+ r"""End date for TV schedule retrieval. May be in the future. Optional."""
+ web_schedule_country_code: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('web_schedule_country_code'), 'exclude': lambda f: f is None }})
+ r"""ISO 3166-1 country code for web TV schedule retrieval. Leave blank for
+ all countries plus global web channels (e.g. Netflix). Alternatively,
+ set to 'global' for just global web channels.
+ """
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_twilio.py b/src/sdk/models/shared/source_twilio.py
new file mode 100755
index 00000000..008dc57e
--- /dev/null
+++ b/src/sdk/models/shared/source_twilio.py
@@ -0,0 +1,31 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Optional
+
+class SourceTwilioTwilioEnum(str, Enum):
+ TWILIO = 'twilio'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceTwilio:
+ r"""The values required to configure the source."""
+
+ account_sid: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('account_sid') }})
+ r"""Twilio account SID"""
+ auth_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_token') }})
+ r"""Twilio Auth Token."""
+ source_type: SourceTwilioTwilioEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }})
+ r"""UTC date and time in the format 2020-10-01T00:00:00Z. Any data before this date will not be replicated."""
+ lookback_window: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('lookback_window'), 'exclude': lambda f: f is None }})
+ r"""How far into the past to look for records. (in minutes)"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_twilio_taskrouter.py b/src/sdk/models/shared/source_twilio_taskrouter.py
new file mode 100755
index 00000000..865ab860
--- /dev/null
+++ b/src/sdk/models/shared/source_twilio_taskrouter.py
@@ -0,0 +1,23 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceTwilioTaskrouterTwilioTaskrouterEnum(str, Enum):
+ TWILIO_TASKROUTER = 'twilio-taskrouter'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceTwilioTaskrouter:
+ r"""The values required to configure the source."""
+
+ account_sid: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('account_sid') }})
+ r"""Twilio Account ID"""
+ auth_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_token') }})
+ r"""Twilio Auth Token"""
+ source_type: SourceTwilioTaskrouterTwilioTaskrouterEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_twitter.py b/src/sdk/models/shared/source_twitter.py
new file mode 100755
index 00000000..9a890eff
--- /dev/null
+++ b/src/sdk/models/shared/source_twitter.py
@@ -0,0 +1,31 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Optional
+
+class SourceTwitterTwitterEnum(str, Enum):
+ TWITTER = 'twitter'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceTwitter:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""App only Bearer Token. See the docs for more information on how to obtain this token."""
+ query: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('query') }})
+ r"""Query for matching Tweets. You can learn how to build this query by reading build a query guide ."""
+ source_type: SourceTwitterTwitterEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ end_date: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('end_date'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }})
+ r"""The end date for retrieving tweets must be a minimum of 10 seconds prior to the request time."""
+ start_date: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }})
+ r"""The start date for retrieving tweets cannot be more than 7 days in the past."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_typeform.py b/src/sdk/models/shared/source_typeform.py
new file mode 100755
index 00000000..160b10eb
--- /dev/null
+++ b/src/sdk/models/shared/source_typeform.py
@@ -0,0 +1,29 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Optional
+
+class SourceTypeformTypeformEnum(str, Enum):
+ TYPEFORM = 'typeform'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceTypeform:
+ r"""The values required to configure the source."""
+
+ source_type: SourceTypeformTypeformEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }})
+ r"""UTC date and time in the format: YYYY-MM-DDTHH:mm:ss[Z]. Any data before this date will not be replicated."""
+ token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('token') }})
+ r"""The API Token for a Typeform account."""
+ form_ids: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('form_ids'), 'exclude': lambda f: f is None }})
+ r"""When this parameter is set, the connector will replicate data only from the input forms. Otherwise, all forms in your Typeform account will be replicated. You can find form IDs in your form URLs. For example, in the URL \\"https://mysite.typeform.com/to/u6nXL7\\" the form_id is u6nXL7. You can find form URLs on Share panel"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_us_census.py b/src/sdk/models/shared/source_us_census.py
new file mode 100755
index 00000000..9967b309
--- /dev/null
+++ b/src/sdk/models/shared/source_us_census.py
@@ -0,0 +1,26 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourceUsCensusUsCensusEnum(str, Enum):
+ US_CENSUS = 'us-census'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceUsCensus:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""Your API Key. Get your key here."""
+ query_path: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('query_path') }})
+ r"""The path portion of the GET request"""
+ source_type: SourceUsCensusUsCensusEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ query_params: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('query_params'), 'exclude': lambda f: f is None }})
+ r"""The query parameters portion of the GET request, without the api key"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_vantage.py b/src/sdk/models/shared/source_vantage.py
new file mode 100755
index 00000000..3ed53ed7
--- /dev/null
+++ b/src/sdk/models/shared/source_vantage.py
@@ -0,0 +1,21 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceVantageVantageEnum(str, Enum):
+ VANTAGE = 'vantage'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceVantage:
+ r"""The values required to configure the source."""
+
+ access_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token') }})
+ r"""Your API Access token. See here."""
+ source_type: SourceVantageVantageEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_webflow.py b/src/sdk/models/shared/source_webflow.py
new file mode 100755
index 00000000..b223977a
--- /dev/null
+++ b/src/sdk/models/shared/source_webflow.py
@@ -0,0 +1,23 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceWebflowWebflowEnum(str, Enum):
+ WEBFLOW = 'webflow'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceWebflow:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""The API token for authenticating to Webflow. See https://university.webflow.com/lesson/intro-to-the-webflow-api"""
+ site_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('site_id') }})
+ r"""The id of the Webflow site you are requesting data from. See https://developers.webflow.com/#sites"""
+ source_type: SourceWebflowWebflowEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_whisky_hunter.py b/src/sdk/models/shared/source_whisky_hunter.py
new file mode 100755
index 00000000..f1178de7
--- /dev/null
+++ b/src/sdk/models/shared/source_whisky_hunter.py
@@ -0,0 +1,19 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceWhiskyHunterWhiskyHunterEnum(str, Enum):
+ WHISKY_HUNTER = 'whisky-hunter'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceWhiskyHunter:
+ r"""The values required to configure the source."""
+
+ source_type: SourceWhiskyHunterWhiskyHunterEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_wikipedia_pageviews.py b/src/sdk/models/shared/source_wikipedia_pageviews.py
new file mode 100755
index 00000000..c615a916
--- /dev/null
+++ b/src/sdk/models/shared/source_wikipedia_pageviews.py
@@ -0,0 +1,33 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceWikipediaPageviewsWikipediaPageviewsEnum(str, Enum):
+ WIKIPEDIA_PAGEVIEWS = 'wikipedia-pageviews'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceWikipediaPageviews:
+ r"""The values required to configure the source."""
+
+ access: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access') }})
+ r"""If you want to filter by access method, use one of desktop, mobile-app or mobile-web. If you are interested in pageviews regardless of access method, use all-access."""
+ agent: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('agent') }})
+ r"""If you want to filter by agent type, use one of user, automated or spider. If you are interested in pageviews regardless of agent type, use all-agents."""
+ article: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('article') }})
+ r"""The title of any article in the specified project. Any spaces should be replaced with underscores. It also should be URI-encoded, so that non-URI-safe characters like %, / or ? are accepted."""
+ country: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('country') }})
+ r"""The ISO 3166-1 alpha-2 code of a country for which to retrieve top articles."""
+ end: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('end') }})
+ r"""The date of the last day to include, in YYYYMMDD or YYYYMMDDHH format."""
+ project: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('project') }})
+ r"""If you want to filter by project, use the domain of any Wikimedia project."""
+ source_type: SourceWikipediaPageviewsWikipediaPageviewsEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start') }})
+ r"""The date of the first day to include, in YYYYMMDD or YYYYMMDDHH format."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_woocommerce.py b/src/sdk/models/shared/source_woocommerce.py
new file mode 100755
index 00000000..5704dbe4
--- /dev/null
+++ b/src/sdk/models/shared/source_woocommerce.py
@@ -0,0 +1,29 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from datetime import date
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+
+class SourceWoocommerceWoocommerceEnum(str, Enum):
+ WOOCOMMERCE = 'woocommerce'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceWoocommerce:
+ r"""The values required to configure the source."""
+
+ api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }})
+ r"""Customer Key for API in WooCommerce shop"""
+ api_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_secret') }})
+ r"""Customer Secret for API in WooCommerce shop"""
+ shop: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('shop') }})
+ r"""The name of the store. For https://EXAMPLE.com, the shop name is 'EXAMPLE.com'."""
+ source_type: SourceWoocommerceWoocommerceEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: date = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.dateisoformat(False), 'decoder': utils.datefromisoformat, 'mm_field': fields.DateTime(format='iso') }})
+ r"""The date you would like to replicate data from. Format: YYYY-MM-DD"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_xero.py b/src/sdk/models/shared/source_xero.py
new file mode 100755
index 00000000..cea0927e
--- /dev/null
+++ b/src/sdk/models/shared/source_xero.py
@@ -0,0 +1,43 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceXeroAuthenticateViaXeroOAuth:
+
+ access_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token') }})
+ r"""Enter your Xero application's access token"""
+ client_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id') }})
+ r"""Enter your Xero application's Client ID"""
+ client_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret') }})
+ r"""Enter your Xero application's Client Secret"""
+ refresh_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('refresh_token') }})
+ r"""Enter your Xero application's refresh token"""
+ token_expiry_date: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('token_expiry_date') }})
+ r"""The date-time when the access token should be refreshed"""
+
+class SourceXeroXeroEnum(str, Enum):
+ XERO = 'xero'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceXero:
+ r"""The values required to configure the source."""
+
+ authentication: SourceXeroAuthenticateViaXeroOAuth = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('authentication') }})
+ source_type: SourceXeroXeroEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }})
+ r"""UTC date and time in the format YYYY-MM-DDTHH:mm:ssZ. Any data with created_at before this data will not be synced."""
+ tenant_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tenant_id') }})
+ r"""Enter your Xero organization's Tenant ID"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_xkcd.py b/src/sdk/models/shared/source_xkcd.py
new file mode 100755
index 00000000..b990eeb3
--- /dev/null
+++ b/src/sdk/models/shared/source_xkcd.py
@@ -0,0 +1,19 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceXkcdXkcdEnum(str, Enum):
+ XKCD = 'xkcd'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceXkcd:
+ r"""The values required to configure the source."""
+
+ source_type: SourceXkcdXkcdEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_yandex_metrica.py b/src/sdk/models/shared/source_yandex_metrica.py
new file mode 100755
index 00000000..88430a0b
--- /dev/null
+++ b/src/sdk/models/shared/source_yandex_metrica.py
@@ -0,0 +1,30 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from datetime import date
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Optional
+
+class SourceYandexMetricaYandexMetricaEnum(str, Enum):
+ YANDEX_METRICA = 'yandex-metrica'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceYandexMetrica:
+ r"""The values required to configure the source."""
+
+ auth_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_token') }})
+ r"""Your Yandex Metrica API access token"""
+ counter_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('counter_id') }})
+ r"""Counter ID"""
+ source_type: SourceYandexMetricaYandexMetricaEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: date = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.dateisoformat(False), 'decoder': utils.datefromisoformat, 'mm_field': fields.DateTime(format='iso') }})
+ r"""Starting point for your data replication, in format of \\"YYYY-MM-DD\\"."""
+ end_date: Optional[date] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('end_date'), 'encoder': utils.dateisoformat(True), 'decoder': utils.datefromisoformat, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }})
+ r"""Starting point for your data replication, in format of \\"YYYY-MM-DD\\". If not provided will sync till most recent date."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_younium.py b/src/sdk/models/shared/source_younium.py
new file mode 100755
index 00000000..d3b0308f
--- /dev/null
+++ b/src/sdk/models/shared/source_younium.py
@@ -0,0 +1,28 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourceYouniumYouniumEnum(str, Enum):
+ YOUNIUM = 'younium'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceYounium:
+ r"""The values required to configure the source."""
+
+ legal_entity: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('legal_entity') }})
+ r"""Legal Entity that data should be pulled from"""
+ password: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password') }})
+ r"""Account password for younium account API key"""
+ source_type: SourceYouniumYouniumEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ username: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('username') }})
+ r"""Username for Younium account"""
+ playground: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('playground'), 'exclude': lambda f: f is None }})
+ r"""Property defining if connector is used against playground or production environment"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_youtube_analytics.py b/src/sdk/models/shared/source_youtube_analytics.py
new file mode 100755
index 00000000..e27b0d8b
--- /dev/null
+++ b/src/sdk/models/shared/source_youtube_analytics.py
@@ -0,0 +1,21 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any
+
+class SourceYoutubeAnalyticsYoutubeAnalyticsEnum(str, Enum):
+ YOUTUBE_ANALYTICS = 'youtube-analytics'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceYoutubeAnalytics:
+ r"""The values required to configure the source."""
+
+ credentials: dict[str, Any] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials') }})
+ source_type: SourceYoutubeAnalyticsYoutubeAnalyticsEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_zendesk_chat.py b/src/sdk/models/shared/source_zendesk_chat.py
new file mode 100755
index 00000000..55b8729b
--- /dev/null
+++ b/src/sdk/models/shared/source_zendesk_chat.py
@@ -0,0 +1,58 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Any, Optional
+
+class SourceZendeskChatCredentialsAccessTokenCredentialsEnum(str, Enum):
+ ACCESS_TOKEN = 'access_token'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceZendeskChatCredentialsAccessToken:
+
+ access_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token') }})
+ r"""The Access Token to make authenticated requests."""
+ credentials: SourceZendeskChatCredentialsAccessTokenCredentialsEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials') }})
+
+class SourceZendeskChatCredentialsOAuth20CredentialsEnum(str, Enum):
+ OAUTH2_0 = 'oauth2.0'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceZendeskChatCredentialsOAuth20:
+
+ credentials: SourceZendeskChatCredentialsOAuth20CredentialsEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials') }})
+ access_token: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token'), 'exclude': lambda f: f is None }})
+ r"""Access Token for making authenticated requests."""
+ client_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id'), 'exclude': lambda f: f is None }})
+ r"""The Client ID of your OAuth application"""
+ client_secret: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret'), 'exclude': lambda f: f is None }})
+ r"""The Client Secret of your OAuth application."""
+ refresh_token: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('refresh_token'), 'exclude': lambda f: f is None }})
+ r"""Refresh Token to obtain new Access Token, when it's expired."""
+
+class SourceZendeskChatZendeskChatEnum(str, Enum):
+ ZENDESK_CHAT = 'zendesk-chat'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceZendeskChat:
+ r"""The values required to configure the source."""
+
+ source_type: SourceZendeskChatZendeskChatEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }})
+ r"""The date from which you'd like to replicate data for Zendesk Chat API, in the format YYYY-MM-DDT00:00:00Z."""
+ credentials: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials'), 'exclude': lambda f: f is None }})
+ subdomain: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('subdomain'), 'exclude': lambda f: f is None }})
+ r"""Required if you access Zendesk Chat from a Zendesk Support subdomain."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_zendesk_sunshine.py b/src/sdk/models/shared/source_zendesk_sunshine.py
new file mode 100755
index 00000000..42ac6bd8
--- /dev/null
+++ b/src/sdk/models/shared/source_zendesk_sunshine.py
@@ -0,0 +1,55 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Any, Optional
+
+class SourceZendeskSunshineCredentialsAPITokenAuthMethodEnum(str, Enum):
+ API_TOKEN = 'api_token'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceZendeskSunshineCredentialsAPIToken:
+
+ api_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_token') }})
+ r"""API Token. See the docs for information on how to generate this key."""
+ auth_method: SourceZendeskSunshineCredentialsAPITokenAuthMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_method') }})
+ email: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('email') }})
+ r"""The user email for your Zendesk account"""
+
+class SourceZendeskSunshineCredentialsOAuth20AuthMethodEnum(str, Enum):
+ OAUTH2_0 = 'oauth2.0'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceZendeskSunshineCredentialsOAuth20:
+
+ access_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('access_token') }})
+ r"""Long-term access Token for making authenticated requests."""
+ auth_method: SourceZendeskSunshineCredentialsOAuth20AuthMethodEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('auth_method') }})
+ client_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id') }})
+ r"""The Client ID of your OAuth application."""
+ client_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret') }})
+ r"""The Client Secret of your OAuth application."""
+
+class SourceZendeskSunshineZendeskSunshineEnum(str, Enum):
+ ZENDESK_SUNSHINE = 'zendesk-sunshine'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceZendeskSunshine:
+ r"""The values required to configure the source."""
+
+ source_type: SourceZendeskSunshineZendeskSunshineEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date') }})
+ r"""The date from which you'd like to replicate data for Zendesk Sunshine API, in the format YYYY-MM-DDT00:00:00Z."""
+ subdomain: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('subdomain') }})
+ r"""The subdomain for your Zendesk Account."""
+ credentials: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials'), 'exclude': lambda f: f is None }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_zendesk_support.py b/src/sdk/models/shared/source_zendesk_support.py
new file mode 100755
index 00000000..78e7cb4a
--- /dev/null
+++ b/src/sdk/models/shared/source_zendesk_support.py
@@ -0,0 +1,31 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Any, Optional
+
+class SourceZendeskSupportZendeskSupportEnum(str, Enum):
+ ZENDESK_SUPPORT = 'zendesk-support'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceZendeskSupport:
+ r"""The values required to configure the source."""
+
+ source_type: SourceZendeskSupportZendeskSupportEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }})
+ r"""The date from which you'd like to replicate data for Zendesk Support API, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated."""
+ subdomain: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('subdomain') }})
+ r"""This is your Zendesk subdomain that can be found in your account URL. For example, in https://{MY_SUBDOMAIN}.zendesk.com/, where MY_SUBDOMAIN is the value of your subdomain."""
+ credentials: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials'), 'exclude': lambda f: f is None }})
+ r"""Zendesk service provides two authentication methods. Choose between: `OAuth2.0` or `API token`."""
+ ignore_pagination: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ignore_pagination'), 'exclude': lambda f: f is None }})
+ r"""Makes each stream read a single page of data."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_zendesk_talk.py b/src/sdk/models/shared/source_zendesk_talk.py
new file mode 100755
index 00000000..a709c069
--- /dev/null
+++ b/src/sdk/models/shared/source_zendesk_talk.py
@@ -0,0 +1,29 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Any, Optional
+
+class SourceZendeskTalkZendeskTalkEnum(str, Enum):
+ ZENDESK_TALK = 'zendesk-talk'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceZendeskTalk:
+ r"""The values required to configure the source."""
+
+ source_type: SourceZendeskTalkZendeskTalkEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }})
+ r"""The date from which you'd like to replicate data for Zendesk Talk API, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated."""
+ subdomain: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('subdomain') }})
+ r"""This is your Zendesk subdomain that can be found in your account URL. For example, in https://{MY_SUBDOMAIN}.zendesk.com/, where MY_SUBDOMAIN is the value of your subdomain."""
+ credentials: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('credentials'), 'exclude': lambda f: f is None }})
+ r"""Zendesk service provides two authentication methods. Choose between: `OAuth2.0` or `API token`."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_zenloop.py b/src/sdk/models/shared/source_zenloop.py
new file mode 100755
index 00000000..04489c40
--- /dev/null
+++ b/src/sdk/models/shared/source_zenloop.py
@@ -0,0 +1,28 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourceZenloopZenloopEnum(str, Enum):
+ ZENLOOP = 'zenloop'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceZenloop:
+ r"""The values required to configure the source."""
+
+ api_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_token') }})
+ r"""Zenloop API Token. You can get the API token in settings page here"""
+ source_type: SourceZenloopZenloopEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ date_from: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('date_from'), 'exclude': lambda f: f is None }})
+ r"""Zenloop date_from. Format: 2021-10-24T03:30:30Z or 2021-10-24. Leave empty if only data from current data should be synced"""
+ survey_group_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('survey_group_id'), 'exclude': lambda f: f is None }})
+ r"""Zenloop Survey Group ID. Can be found by pulling All Survey Groups via SurveyGroups stream. Leave empty to pull answers from all survey groups"""
+ survey_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('survey_id'), 'exclude': lambda f: f is None }})
+ r"""Zenloop Survey ID. Can be found here. Leave empty to pull answers from all surveys"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_zoho_crm.py b/src/sdk/models/shared/source_zoho_crm.py
new file mode 100755
index 00000000..c2b25276
--- /dev/null
+++ b/src/sdk/models/shared/source_zoho_crm.py
@@ -0,0 +1,60 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from enum import Enum
+from marshmallow import fields
+from sdk import utils
+from typing import Optional
+
+class SourceZohoCrmDataCenterLocationEnum(str, Enum):
+ r"""Please choose the region of your Data Center location. More info by this Link"""
+ US = 'US'
+ AU = 'AU'
+ EU = 'EU'
+ IN = 'IN'
+ CN = 'CN'
+ JP = 'JP'
+
+class SourceZohoCRMZohoCRMEditionEnum(str, Enum):
+ r"""Choose your Edition of Zoho CRM to determine API Concurrency Limits"""
+ FREE = 'Free'
+ STANDARD = 'Standard'
+ PROFESSIONAL = 'Professional'
+ ENTERPRISE = 'Enterprise'
+ ULTIMATE = 'Ultimate'
+
+class SourceZohoCrmEnvironmentEnum(str, Enum):
+ r"""Please choose the environment"""
+ PRODUCTION = 'Production'
+ DEVELOPER = 'Developer'
+ SANDBOX = 'Sandbox'
+
+class SourceZohoCrmZohoCrmEnum(str, Enum):
+ ZOHO_CRM = 'zoho-crm'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceZohoCrm:
+ r"""The values required to configure the source."""
+
+ client_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id') }})
+ r"""OAuth2.0 Client ID"""
+ client_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret') }})
+ r"""OAuth2.0 Client Secret"""
+ dc_region: SourceZohoCrmDataCenterLocationEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dc_region') }})
+ r"""Please choose the region of your Data Center location. More info by this Link"""
+ edition: SourceZohoCRMZohoCRMEditionEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('edition') }})
+ r"""Choose your Edition of Zoho CRM to determine API Concurrency Limits"""
+ environment: SourceZohoCrmEnvironmentEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('environment') }})
+ r"""Please choose the environment"""
+ refresh_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('refresh_token') }})
+ r"""OAuth2.0 Refresh Token"""
+ source_type: SourceZohoCrmZohoCrmEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_datetime: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_datetime'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }})
+ r"""ISO 8601, for instance: `YYYY-MM-DD`, `YYYY-MM-DD HH:MM:SS+HH:MM`"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_zoom.py b/src/sdk/models/shared/source_zoom.py
new file mode 100755
index 00000000..a1e75359
--- /dev/null
+++ b/src/sdk/models/shared/source_zoom.py
@@ -0,0 +1,21 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+
+class SourceZoomZoomEnum(str, Enum):
+ ZOOM = 'zoom'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceZoom:
+ r"""The values required to configure the source."""
+
+ jwt_token: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('jwt_token') }})
+ r"""JWT Token"""
+ source_type: SourceZoomZoomEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/source_zuora.py b/src/sdk/models/shared/source_zuora.py
new file mode 100755
index 00000000..9416dd12
--- /dev/null
+++ b/src/sdk/models/shared/source_zuora.py
@@ -0,0 +1,30 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from sdk import utils
+from typing import Optional
+
+class SourceZuoraZuoraEnum(str, Enum):
+ ZUORA = 'zuora'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceZuora:
+ r"""The values required to configure the source."""
+
+ client_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_id') }})
+ r"""Client ID"""
+ client_secret: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('client_secret') }})
+ r"""Client Secret"""
+ source_type: SourceZuoraZuoraEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ start_date: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_date') }})
+ r"""Start Date in format: YYYY-MM-DD"""
+ is_sandbox: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('is_sandbox'), 'exclude': lambda f: f is None }})
+ r"""Defines whether use the SANDBOX or PRODUCTION environment."""
+ window_in_days: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('window_in_days'), 'exclude': lambda f: f is None }})
+ r"""The amount of days for each data-chunk begining from start_date. Bigger the value - faster the fetch. (Min=1, as for a Day; Max=364, as for a Year)."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/sourcecreaterequest.py b/src/sdk/models/shared/sourcecreaterequest.py
new file mode 100755
index 00000000..10896984
--- /dev/null
+++ b/src/sdk/models/shared/sourcecreaterequest.py
@@ -0,0 +1,20 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from sdk import utils
+from typing import Any, Optional
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceCreateRequest:
+
+ configuration: Any = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('configuration') }})
+ r"""The values required to configure the source."""
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ workspace_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('workspaceId') }})
+ secret_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('secretId'), 'exclude': lambda f: f is None }})
+ r"""Optional secretID obtained through the public API OAuth redirect flow."""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/sourceresponse.py b/src/sdk/models/shared/sourceresponse.py
new file mode 100755
index 00000000..2987558b
--- /dev/null
+++ b/src/sdk/models/shared/sourceresponse.py
@@ -0,0 +1,18 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from sdk import utils
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourceResponse:
+ r"""Provides details of a single source."""
+
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ source_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceId') }})
+ source_type: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }})
+ workspace_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('workspaceId') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/sourcesresponse.py b/src/sdk/models/shared/sourcesresponse.py
new file mode 100755
index 00000000..8e764eee
--- /dev/null
+++ b/src/sdk/models/shared/sourcesresponse.py
@@ -0,0 +1,18 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from ..shared import sourceresponse as shared_sourceresponse
+from dataclasses_json import Undefined, dataclass_json
+from sdk import utils
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SourcesResponse:
+ r"""Successful operation"""
+
+ data: list[shared_sourceresponse.SourceResponse] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data') }})
+ next: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('next') }})
+ previous: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('previous') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/workspacecreaterequest.py b/src/sdk/models/shared/workspacecreaterequest.py
new file mode 100755
index 00000000..9888e0ba
--- /dev/null
+++ b/src/sdk/models/shared/workspacecreaterequest.py
@@ -0,0 +1,15 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from sdk import utils
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class WorkspaceCreateRequest:
+
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ r"""Name of the workspace"""
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/workspaceresponse.py b/src/sdk/models/shared/workspaceresponse.py
new file mode 100755
index 00000000..8b2d405c
--- /dev/null
+++ b/src/sdk/models/shared/workspaceresponse.py
@@ -0,0 +1,18 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from ..shared import geographyenum_enum as shared_geographyenum_enum
+from dataclasses_json import Undefined, dataclass_json
+from sdk import utils
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class WorkspaceResponse:
+ r"""Provides details of a single workspace."""
+
+ default_geography: shared_geographyenum_enum.GeographyEnumEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('defaultGeography') }})
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ workspace_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('workspaceId') }})
+
\ No newline at end of file
diff --git a/src/sdk/models/shared/workspacesresponse.py b/src/sdk/models/shared/workspacesresponse.py
new file mode 100755
index 00000000..1a4c6e12
--- /dev/null
+++ b/src/sdk/models/shared/workspacesresponse.py
@@ -0,0 +1,18 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from ..shared import workspaceresponse as shared_workspaceresponse
+from dataclasses_json import Undefined, dataclass_json
+from sdk import utils
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class WorkspacesResponse:
+ r"""Successful operation"""
+
+ data: list[shared_workspaceresponse.WorkspaceResponse] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data') }})
+ next: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('next') }})
+ previous: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('previous') }})
+
\ No newline at end of file
diff --git a/src/sdk/sdk.py b/src/sdk/sdk.py
new file mode 100755
index 00000000..ed1202a3
--- /dev/null
+++ b/src/sdk/sdk.py
@@ -0,0 +1,112 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+import requests as requests_http
+from . import utils
+from .connections import Connections
+from .destinations import Destinations
+from .jobs import Jobs
+from .sources import Sources
+from .workspaces import Workspaces
+from sdk.models import shared
+
+SERVERS = [
+ "https://api.airbyte.com/v1/",
+ r"""Airbyte API v1"""
+]
+"""Contains the list of servers available to the SDK"""
+
+class SDK:
+ connections: Connections
+ destinations: Destinations
+ jobs: Jobs
+ sources: Sources
+ workspaces: Workspaces
+
+ _client: requests_http.Session
+ _security_client: requests_http.Session
+ _server_url: str = SERVERS[0]
+ _language: str = "python"
+ _sdk_version: str = "1.0.2"
+ _gen_version: str = "2.16.7"
+
+ def __init__(self,
+ security: shared.Security = None,
+ server_url: str = None,
+ url_params: dict[str, str] = None,
+ client: requests_http.Session = None
+ ) -> None:
+ """Instantiates the SDK configuring it with the provided parameters.
+
+ :param security: The security details required for authentication
+ :type security: shared.Security
+ :param server_url: The server URL to use for all operations
+ :type server_url: str
+ :param url_params: Parameters to optionally template the server URL with
+ :type url_params: dict[str, str]
+ :param client: The requests.Session HTTP client to use for all operations
+ :type client: requests_http.Session
+ """
+ self._client = requests_http.Session()
+
+
+ if server_url is not None:
+ if url_params is not None:
+ self._server_url = utils.template_url(server_url, url_params)
+ else:
+ self._server_url = server_url
+
+ if client is not None:
+ self._client = client
+
+ self._security_client = utils.configure_security_client(self._client, security)
+
+
+ self._init_sdks()
+
+ def _init_sdks(self):
+ self.connections = Connections(
+ self._client,
+ self._security_client,
+ self._server_url,
+ self._language,
+ self._sdk_version,
+ self._gen_version
+ )
+
+ self.destinations = Destinations(
+ self._client,
+ self._security_client,
+ self._server_url,
+ self._language,
+ self._sdk_version,
+ self._gen_version
+ )
+
+ self.jobs = Jobs(
+ self._client,
+ self._security_client,
+ self._server_url,
+ self._language,
+ self._sdk_version,
+ self._gen_version
+ )
+
+ self.sources = Sources(
+ self._client,
+ self._security_client,
+ self._server_url,
+ self._language,
+ self._sdk_version,
+ self._gen_version
+ )
+
+ self.workspaces = Workspaces(
+ self._client,
+ self._security_client,
+ self._server_url,
+ self._language,
+ self._sdk_version,
+ self._gen_version
+ )
+
+
\ No newline at end of file
diff --git a/src/sdk/sources.py b/src/sdk/sources.py
new file mode 100755
index 00000000..bcf2126e
--- /dev/null
+++ b/src/sdk/sources.py
@@ -0,0 +1,100 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+import requests as requests_http
+from . import utils
+from sdk.models import operations, shared
+from typing import Optional
+
+class Sources:
+ _client: requests_http.Session
+ _security_client: requests_http.Session
+ _server_url: str
+ _language: str
+ _sdk_version: str
+ _gen_version: str
+
+ def __init__(self, client: requests_http.Session, security_client: requests_http.Session, server_url: str, language: str, sdk_version: str, gen_version: str) -> None:
+ self._client = client
+ self._security_client = security_client
+ self._server_url = server_url
+ self._language = language
+ self._sdk_version = sdk_version
+ self._gen_version = gen_version
+
+ def create_source(self, request: shared.SourceCreateRequest) -> operations.CreateSourceResponse:
+ r"""Create a source
+ Creates a source given a name, workspace id, and a json blob containing the configuration for the source.
+ """
+ base_url = self._server_url
+
+ url = base_url.removesuffix('/') + '/sources'
+
+ headers = {}
+ req_content_type, data, form = utils.serialize_request_body(request, "request", 'json')
+ if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
+ headers['content-type'] = req_content_type
+
+ client = self._security_client
+
+ http_res = client.request('POST', url, data=data, files=form, headers=headers)
+ content_type = http_res.headers.get('Content-Type')
+
+ res = operations.CreateSourceResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+
+ if http_res.status_code == 200:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.SourceResponse])
+ res.source_response = out
+ elif http_res.status_code in [400, 403]:
+ pass
+
+ return res
+
+ def get_source(self, request: operations.GetSourceRequest) -> operations.GetSourceResponse:
+ r"""Get Source details"""
+ base_url = self._server_url
+
+ url = utils.generate_url(operations.GetSourceRequest, base_url, '/sources/{sourceId}', request)
+
+
+ client = self._security_client
+
+ http_res = client.request('GET', url)
+ content_type = http_res.headers.get('Content-Type')
+
+ res = operations.GetSourceResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+
+ if http_res.status_code == 200:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.SourceResponse])
+ res.source_response = out
+ elif http_res.status_code in [403, 404]:
+ pass
+
+ return res
+
+ def list_sources(self, request: operations.ListSourcesRequest) -> operations.ListSourcesResponse:
+ r"""List sources"""
+ base_url = self._server_url
+
+ url = base_url.removesuffix('/') + '/sources'
+
+ query_params = utils.get_query_params(operations.ListSourcesRequest, request)
+
+ client = self._security_client
+
+ http_res = client.request('GET', url, params=query_params)
+ content_type = http_res.headers.get('Content-Type')
+
+ res = operations.ListSourcesResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+
+ if http_res.status_code == 200:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.SourcesResponse])
+ res.sources_response = out
+ elif http_res.status_code in [403, 404]:
+ pass
+
+ return res
+
+
\ No newline at end of file
diff --git a/src/sdk/utils/__init__.py b/src/sdk/utils/__init__.py
new file mode 100755
index 00000000..94b73985
--- /dev/null
+++ b/src/sdk/utils/__init__.py
@@ -0,0 +1,4 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from .retries import *
+from .utils import *
diff --git a/src/sdk/utils/retries.py b/src/sdk/utils/retries.py
new file mode 100755
index 00000000..c6251d94
--- /dev/null
+++ b/src/sdk/utils/retries.py
@@ -0,0 +1,118 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+import random
+import time
+
+import requests
+
+
+class BackoffStrategy:
+ initial_interval: int
+ max_interval: int
+ exponent: float
+ max_elapsed_time: int
+
+ def __init__(self, initial_interval: int, max_interval: int, exponent: float, max_elapsed_time: int):
+ self.initial_interval = initial_interval
+ self.max_interval = max_interval
+ self.exponent = exponent
+ self.max_elapsed_time = max_elapsed_time
+
+
+class RetryConfig:
+ strategy: str
+ backoff: BackoffStrategy
+ retry_connection_errors: bool
+
+ def __init__(self, strategy: str, retry_connection_errors: bool):
+ self.strategy = strategy
+ self.retry_connection_errors = retry_connection_errors
+
+
+class Retries:
+ config: RetryConfig
+ status_codes: list[str]
+
+ def __init__(self, config: RetryConfig, status_codes: list[str]):
+ self.config = config
+ self.status_codes = status_codes
+
+
+class TemporaryError(Exception):
+ response: requests.Response
+
+ def __init__(self, response: requests.Response):
+ self.response = response
+
+
+class PermanentError(Exception):
+ inner: Exception
+
+ def __init__(self, inner: Exception):
+ self.inner = inner
+
+
+def retry(func, retries: Retries):
+ if retries.config.strategy == 'backoff':
+ def do_request():
+ res: requests.Response
+ try:
+ res = func()
+
+ for code in retries.status_codes:
+ if "X" in code.upper():
+ code_range = int(code[0])
+
+ status_major = res.status_code / 100
+
+ if status_major >= code_range and status_major < code_range + 1:
+ raise TemporaryError(res)
+ else:
+ parsed_code = int(code)
+
+ if res.status_code == parsed_code:
+ raise TemporaryError(res)
+ except requests.exceptions.ConnectionError as exception:
+ if not retries.config.config.retry_connection_errors:
+ raise
+
+ raise PermanentError(exception) from exception
+ except requests.exceptions.Timeout as exception:
+ if not retries.config.config.retry_connection_errors:
+ raise
+
+ raise PermanentError(exception) from exception
+ except TemporaryError:
+ raise
+ except Exception as exception:
+ raise PermanentError(exception) from exception
+
+ return res
+
+ return retry_with_backoff(do_request, retries.config.backoff.initial_interval, retries.config.backoff.max_interval, retries.config.backoff.exponent, retries.config.backoff.max_elapsed_time)
+
+ return func()
+
+
+def retry_with_backoff(func, initial_interval=500, max_interval=60000, exponent=1.5, max_elapsed_time=3600000):
+ start = round(time.time()*1000)
+ retries = 0
+
+ while True:
+ try:
+ return func()
+ except PermanentError as exception:
+ raise exception.inner
+ except Exception as exception: # pylint: disable=broad-exception-caught
+ now = round(time.time()*1000)
+ if now - start > max_elapsed_time:
+ if isinstance(exception, TemporaryError):
+ return exception.response
+
+ raise
+ sleep = ((initial_interval/1000) *
+ exponent**retries + random.uniform(0, 1))
+ if sleep > max_interval/1000:
+ sleep = max_interval/1000
+ time.sleep(sleep)
+ retries += 1
diff --git a/src/sdk/utils/utils.py b/src/sdk/utils/utils.py
new file mode 100755
index 00000000..9d4fba32
--- /dev/null
+++ b/src/sdk/utils/utils.py
@@ -0,0 +1,735 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+import base64
+import json
+import re
+from dataclasses import Field, dataclass, fields, is_dataclass, make_dataclass
+from datetime import date, datetime
+from email.message import Message
+from enum import Enum
+from typing import Any, Callable, Optional, Tuple, Union, get_args, get_origin
+from xmlrpc.client import boolean
+
+import dateutil.parser
+import requests
+from dataclasses_json import DataClassJsonMixin
+
+
+class SecurityClient:
+ client: requests.Session
+ query_params: dict[str, str] = {}
+
+ def __init__(self, client: requests.Session):
+ self.client = client
+
+ def request(self, method, url, **kwargs):
+ params = kwargs.get('params', {})
+ kwargs["params"] = self.query_params | params
+
+ return self.client.request(method, url, **kwargs)
+
+
+def configure_security_client(client: requests.Session, security: dataclass):
+ client = SecurityClient(client)
+
+ if security is None:
+ return client
+
+ sec_fields: Tuple[Field, ...] = fields(security)
+ for sec_field in sec_fields:
+ value = getattr(security, sec_field.name)
+ if value is None:
+ continue
+
+ metadata = sec_field.metadata.get('security')
+ if metadata is None:
+ continue
+ if metadata.get('option'):
+ _parse_security_option(client, value)
+ return client
+ if metadata.get('scheme'):
+ # Special case for basic auth which could be a flattened struct
+ if metadata.get("sub_type") == "basic" and not is_dataclass(value):
+ _parse_security_scheme(client, metadata, security)
+ else:
+ _parse_security_scheme(client, metadata, value)
+
+ return client
+
+
+def _parse_security_option(client: SecurityClient, option: dataclass):
+ opt_fields: Tuple[Field, ...] = fields(option)
+ for opt_field in opt_fields:
+ metadata = opt_field.metadata.get('security')
+ if metadata is None or metadata.get('scheme') is None:
+ continue
+ _parse_security_scheme(
+ client, metadata, getattr(option, opt_field.name))
+
+
+def _parse_security_scheme(client: SecurityClient, scheme_metadata: dict, scheme: any):
+ scheme_type = scheme_metadata.get('type')
+ sub_type = scheme_metadata.get('sub_type')
+
+ if is_dataclass(scheme):
+ if scheme_type == 'http' and sub_type == 'basic':
+ _parse_basic_auth_scheme(client, scheme)
+ return
+
+ scheme_fields: Tuple[Field, ...] = fields(scheme)
+ for scheme_field in scheme_fields:
+ metadata = scheme_field.metadata.get('security')
+ if metadata is None or metadata.get('field_name') is None:
+ continue
+
+ value = getattr(scheme, scheme_field.name)
+
+ _parse_security_scheme_value(
+ client, scheme_metadata, metadata, value)
+ else:
+ _parse_security_scheme_value(
+ client, scheme_metadata, scheme_metadata, scheme)
+
+
+def _parse_security_scheme_value(client: SecurityClient, scheme_metadata: dict, security_metadata: dict, value: any):
+ scheme_type = scheme_metadata.get('type')
+ sub_type = scheme_metadata.get('sub_type')
+
+ header_name = security_metadata.get('field_name')
+
+ if scheme_type == "apiKey":
+ if sub_type == 'header':
+ client.client.headers[header_name] = value
+ elif sub_type == 'query':
+ client.query_params[header_name] = value
+ elif sub_type == 'cookie':
+ client.client.cookies[header_name] = value
+ else:
+ raise Exception('not supported')
+ elif scheme_type == "openIdConnect":
+ client.client.headers[header_name] = value
+ elif scheme_type == 'oauth2':
+ client.client.headers[header_name] = value
+ elif scheme_type == 'http':
+ if sub_type == 'bearer':
+ client.client.headers[header_name] = value
+ else:
+ raise Exception('not supported')
+ else:
+ raise Exception('not supported')
+
+
+def _parse_basic_auth_scheme(client: SecurityClient, scheme: dataclass):
+ username = ""
+ password = ""
+
+ scheme_fields: Tuple[Field, ...] = fields(scheme)
+ for scheme_field in scheme_fields:
+ metadata = scheme_field.metadata.get('security')
+ if metadata is None or metadata.get('field_name') is None:
+ continue
+
+ field_name = metadata.get('field_name')
+ value = getattr(scheme, scheme_field.name)
+
+ if field_name == 'username':
+ username = value
+ if field_name == 'password':
+ password = value
+
+ data = f'{username}:{password}'.encode()
+ client.client.headers['Authorization'] = f'Basic {base64.b64encode(data).decode()}'
+
+
+def generate_url(clazz: type, server_url: str, path: str, path_params: dataclass, gbls: dict[str, dict[str, dict[str, Any]]] = None) -> str:
+ path_param_fields: Tuple[Field, ...] = fields(clazz)
+ for field in path_param_fields:
+ request_metadata = field.metadata.get('request')
+ if request_metadata is not None:
+ continue
+
+ param_metadata = field.metadata.get('path_param')
+ if param_metadata is None:
+ continue
+
+ if param_metadata.get('style', 'simple') == 'simple':
+ param = getattr(
+ path_params, field.name) if path_params is not None else None
+ param = _populate_from_globals(
+ field.name, param, 'pathParam', gbls)
+
+ if param is None:
+ continue
+
+ if isinstance(param, list):
+ pp_vals: list[str] = []
+ for pp_val in param:
+ if pp_val is None:
+ continue
+ pp_vals.append(_val_to_string(pp_val))
+ path = path.replace(
+ '{' + param_metadata.get('field_name', field.name) + '}', ",".join(pp_vals), 1)
+ elif isinstance(param, dict):
+ pp_vals: list[str] = []
+ for pp_key in param:
+ if param[pp_key] is None:
+ continue
+ if param_metadata.get('explode'):
+ pp_vals.append(
+ f"{pp_key}={_val_to_string(param[pp_key])}")
+ else:
+ pp_vals.append(
+ f"{pp_key},{_val_to_string(param[pp_key])}")
+ path = path.replace(
+ '{' + param_metadata.get('field_name', field.name) + '}', ",".join(pp_vals), 1)
+ elif not isinstance(param, (str, int, float, complex, bool)):
+ pp_vals: list[str] = []
+ param_fields: Tuple[Field, ...] = fields(param)
+ for param_field in param_fields:
+ param_value_metadata = param_field.metadata.get(
+ 'path_param')
+ if not param_value_metadata:
+ continue
+
+ parm_name = param_value_metadata.get(
+ 'field_name', field.name)
+
+ param_field_val = getattr(param, param_field.name)
+ if param_field_val is None:
+ continue
+ if param_metadata.get('explode'):
+ pp_vals.append(
+ f"{parm_name}={_val_to_string(param_field_val)}")
+ else:
+ pp_vals.append(
+ f"{parm_name},{_val_to_string(param_field_val)}")
+ path = path.replace(
+ '{' + param_metadata.get('field_name', field.name) + '}', ",".join(pp_vals), 1)
+ else:
+ path = path.replace(
+ '{' + param_metadata.get('field_name', field.name) + '}', _val_to_string(param), 1)
+
+ return server_url.removesuffix("/") + path
+
+
+def is_optional(field):
+ return get_origin(field) is Union and type(None) in get_args(field)
+
+
+def template_url(url_with_params: str, params: dict[str, str]) -> str:
+ for key, value in params.items():
+ url_with_params = url_with_params.replace(
+ '{' + key + '}', value)
+
+ return url_with_params
+
+
+def get_query_params(clazz: type, query_params: dataclass, gbls: dict[str, dict[str, dict[str, Any]]] = None) -> dict[str, list[str]]:
+ params: dict[str, list[str]] = {}
+
+ param_fields: Tuple[Field, ...] = fields(clazz)
+ for field in param_fields:
+ request_metadata = field.metadata.get('request')
+ if request_metadata is not None:
+ continue
+
+ metadata = field.metadata.get('query_param')
+ if not metadata:
+ continue
+
+ param_name = field.name
+ value = getattr(
+ query_params, param_name) if query_params is not None else None
+
+ value = _populate_from_globals(param_name, value, 'queryParam', gbls)
+
+ f_name = metadata.get("field_name")
+ serialization = metadata.get('serialization', '')
+ if serialization != '':
+ params = params | _get_serialized_query_params(
+ metadata, f_name, value)
+ else:
+ style = metadata.get('style', 'form')
+ if style == 'deepObject':
+ params = params | _get_deep_object_query_params(
+ metadata, f_name, value)
+ elif style == 'form':
+ params = params | _get_form_query_params(
+ metadata, f_name, value)
+ else:
+ raise Exception('not yet implemented')
+ return params
+
+
+def get_headers(headers_params: dataclass) -> dict[str, str]:
+ if headers_params is None:
+ return {}
+
+ headers: dict[str, str] = {}
+
+ param_fields: Tuple[Field, ...] = fields(headers_params)
+ for field in param_fields:
+ metadata = field.metadata.get('header')
+ if not metadata:
+ continue
+
+ value = _serialize_header(metadata.get(
+ 'explode', False), getattr(headers_params, field.name))
+
+ if value != '':
+ headers[metadata.get('field_name', field.name)] = value
+
+ return headers
+
+
+def _get_serialized_query_params(metadata: dict, field_name: str, obj: any) -> dict[str, list[str]]:
+ params: dict[str, list[str]] = {}
+
+ serialization = metadata.get('serialization', '')
+ if serialization == 'json':
+ params[metadata.get("field_name", field_name)] = marshal_json(obj)
+
+ return params
+
+
+def _get_deep_object_query_params(metadata: dict, field_name: str, obj: any) -> dict[str, list[str]]:
+ params: dict[str, list[str]] = {}
+
+ if obj is None:
+ return params
+
+ if is_dataclass(obj):
+ obj_fields: Tuple[Field, ...] = fields(obj)
+ for obj_field in obj_fields:
+ obj_param_metadata = obj_field.metadata.get('query_param')
+ if not obj_param_metadata:
+ continue
+
+ obj_val = getattr(obj, obj_field.name)
+ if obj_val is None:
+ continue
+
+ if isinstance(obj_val, list):
+ for val in obj_val:
+ if val is None:
+ continue
+
+ if params.get(f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]') is None:
+ params[f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]'] = [
+ ]
+
+ params[
+ f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]'].append(_val_to_string(val))
+ else:
+ params[
+ f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]'] = [
+ _val_to_string(obj_val)]
+ elif isinstance(obj, dict):
+ for key, value in obj.items():
+ if value is None:
+ continue
+
+ if isinstance(value, list):
+ for val in value:
+ if val is None:
+ continue
+
+ if params.get(f'{metadata.get("field_name", field_name)}[{key}]') is None:
+ params[f'{metadata.get("field_name", field_name)}[{key}]'] = [
+ ]
+
+ params[
+ f'{metadata.get("field_name", field_name)}[{key}]'].append(_val_to_string(val))
+ else:
+ params[f'{metadata.get("field_name", field_name)}[{key}]'] = [
+ _val_to_string(value)]
+ return params
+
+
+def _get_query_param_field_name(obj_field: Field) -> str:
+ obj_param_metadata = obj_field.metadata.get('query_param')
+
+ if not obj_param_metadata:
+ return ""
+
+ return obj_param_metadata.get("field_name", obj_field.name)
+
+
+def _get_form_query_params(metadata: dict, field_name: str, obj: any) -> dict[str, list[str]]:
+ return _populate_form(field_name, metadata.get("explode", True), obj, _get_query_param_field_name)
+
+
+SERIALIZATION_METHOD_TO_CONTENT_TYPE = {
+ 'json': 'application/json',
+ 'form': 'application/x-www-form-urlencoded',
+ 'multipart': 'multipart/form-data',
+ 'raw': 'application/octet-stream',
+ 'string': 'text/plain',
+}
+
+
+def serialize_request_body(request: dataclass, request_field_name: str, serialization_method: str) -> Tuple[str, any, any]:
+ if request is None:
+ return None, None, None, None
+
+ if not is_dataclass(request) or not hasattr(request, request_field_name):
+ return serialize_content_type(request_field_name, SERIALIZATION_METHOD_TO_CONTENT_TYPE[serialization_method], request)
+
+ request_val = getattr(request, request_field_name)
+
+ request_fields: Tuple[Field, ...] = fields(request)
+ request_metadata = None
+
+ for field in request_fields:
+ if field.name == request_field_name:
+ request_metadata = field.metadata.get('request')
+ break
+
+ if request_metadata is None:
+ raise Exception('invalid request type')
+
+ return serialize_content_type(request_field_name, request_metadata.get('media_type', 'application/octet-stream'), request_val)
+
+
+def serialize_content_type(field_name: str, media_type: str, request: dataclass) -> Tuple[str, any, list[list[any]]]:
+ if re.match(r'(application|text)\/.*?\+*json.*', media_type) is not None:
+ return media_type, marshal_json(request), None
+ if re.match(r'multipart\/.*', media_type) is not None:
+ return serialize_multipart_form(media_type, request)
+ if re.match(r'application\/x-www-form-urlencoded.*', media_type) is not None:
+ return media_type, serialize_form_data(field_name, request), None
+ if isinstance(request, (bytes, bytearray)):
+ return media_type, request, None
+ if isinstance(request, str):
+ return media_type, request, None
+
+ raise Exception(
+ f"invalid request body type {type(request)} for mediaType {media_type}")
+
+
+def serialize_multipart_form(media_type: str, request: dataclass) -> Tuple[str, any, list[list[any]]]:
+ form: list[list[any]] = []
+ request_fields = fields(request)
+
+ for field in request_fields:
+ val = getattr(request, field.name)
+ if val is None:
+ continue
+
+ field_metadata = field.metadata.get('multipart_form')
+ if not field_metadata:
+ continue
+
+ if field_metadata.get("file") is True:
+ file_fields = fields(val)
+
+ file_name = ""
+ field_name = ""
+ content = bytes()
+
+ for file_field in file_fields:
+ file_metadata = file_field.metadata.get('multipart_form')
+ if file_metadata is None:
+ continue
+
+ if file_metadata.get("content") is True:
+ content = getattr(val, file_field.name)
+ else:
+ field_name = file_metadata.get(
+ "field_name", file_field.name)
+ file_name = getattr(val, file_field.name)
+ if field_name == "" or file_name == "" or content == bytes():
+ raise Exception('invalid multipart/form-data file')
+
+ form.append([field_name, [file_name, content]])
+ elif field_metadata.get("json") is True:
+ to_append = [field_metadata.get("field_name", field.name), [
+ None, marshal_json(val), "application/json"]]
+ form.append(to_append)
+ else:
+ field_name = field_metadata.get(
+ "field_name", field.name)
+ if isinstance(val, list):
+ for value in val:
+ if value is None:
+ continue
+ form.append(
+ [field_name + "[]", [None, _val_to_string(value)]])
+ else:
+ form.append([field_name, [None, _val_to_string(val)]])
+ return media_type, None, form
+
+
+def serialize_dict(original: dict, explode: bool, field_name, existing: Optional[dict[str, list[str]]]) -> dict[
+ str, list[str]]:
+ if existing is None:
+ existing = []
+
+ if explode is True:
+ for key, val in original.items():
+ if key not in existing:
+ existing[key] = []
+ existing[key].append(val)
+ else:
+ temp = []
+ for key, val in original.items():
+ temp.append(str(key))
+ temp.append(str(val))
+ if field_name not in existing:
+ existing[field_name] = []
+ existing[field_name].append(",".join(temp))
+ return existing
+
+
+def serialize_form_data(field_name: str, data: dataclass) -> dict[str, any]:
+ form: dict[str, list[str]] = {}
+
+ if is_dataclass(data):
+ for field in fields(data):
+ val = getattr(data, field.name)
+ if val is None:
+ continue
+
+ metadata = field.metadata.get('form')
+ if metadata is None:
+ continue
+
+ field_name = metadata.get('field_name', field.name)
+
+ if metadata.get('json'):
+ form[field_name] = [marshal_json(val)]
+ else:
+ if metadata.get('style', 'form') == 'form':
+ form = form | _populate_form(
+ field_name, metadata.get('explode', True), val, _get_form_field_name)
+ else:
+ raise Exception(
+ f'Invalid form style for field {field.name}')
+ elif isinstance(data, dict):
+ for key, value in data.items():
+ form[key] = [_val_to_string(value)]
+ else:
+ raise Exception(f'Invalid request body type for field {field_name}')
+
+ return form
+
+
+def _get_form_field_name(obj_field: Field) -> str:
+ obj_param_metadata = obj_field.metadata.get('form')
+
+ if not obj_param_metadata:
+ return ""
+
+ return obj_param_metadata.get("field_name", obj_field.name)
+
+
+def _populate_form(field_name: str, explode: boolean, obj: any, get_field_name_func: Callable) -> dict[str, list[str]]:
+ params: dict[str, list[str]] = {}
+
+ if obj is None:
+ return params
+
+ if is_dataclass(obj):
+ items = []
+
+ obj_fields: Tuple[Field, ...] = fields(obj)
+ for obj_field in obj_fields:
+ obj_field_name = get_field_name_func(obj_field)
+ if obj_field_name == '':
+ continue
+
+ val = getattr(obj, obj_field.name)
+ if val is None:
+ continue
+
+ if explode:
+ params[obj_field_name] = [_val_to_string(val)]
+ else:
+ items.append(
+ f'{obj_field_name},{_val_to_string(val)}')
+
+ if len(items) > 0:
+ params[field_name] = [','.join(items)]
+ elif isinstance(obj, dict):
+ items = []
+ for key, value in obj.items():
+ if value is None:
+ continue
+
+ if explode:
+ params[key] = _val_to_string(value)
+ else:
+ items.append(f'{key},{_val_to_string(value)}')
+
+ if len(items) > 0:
+ params[field_name] = [','.join(items)]
+ elif isinstance(obj, list):
+ items = []
+
+ for value in obj:
+ if value is None:
+ continue
+
+ if explode:
+ if not field_name in params:
+ params[field_name] = []
+ params[field_name].append(_val_to_string(value))
+ else:
+ items.append(_val_to_string(value))
+
+ if len(items) > 0:
+ params[field_name] = [','.join([str(item) for item in items])]
+ else:
+ params[field_name] = [_val_to_string(obj)]
+
+ return params
+
+
+def _serialize_header(explode: bool, obj: any) -> str:
+ if obj is None:
+ return ''
+
+ if is_dataclass(obj):
+ items = []
+ obj_fields: Tuple[Field, ...] = fields(obj)
+ for obj_field in obj_fields:
+ obj_param_metadata = obj_field.metadata.get('header')
+
+ if not obj_param_metadata:
+ continue
+
+ obj_field_name = obj_param_metadata.get(
+ 'field_name', obj_field.name)
+ if obj_field_name == '':
+ continue
+
+ val = getattr(obj, obj_field.name)
+ if val is None:
+ continue
+
+ if explode:
+ items.append(
+ f'{obj_field_name}={_val_to_string(val)}')
+ else:
+ items.append(obj_field_name)
+ items.append(_val_to_string(val))
+
+ if len(items) > 0:
+ return ','.join(items)
+ elif isinstance(obj, dict):
+ items = []
+
+ for key, value in obj.items():
+ if value is None:
+ continue
+
+ if explode:
+ items.append(f'{key}={_val_to_string(value)}')
+ else:
+ items.append(key)
+ items.append(_val_to_string(value))
+
+ if len(items) > 0:
+ return ','.join([str(item) for item in items])
+ elif isinstance(obj, list):
+ items = []
+
+ for value in obj:
+ if value is None:
+ continue
+
+ items.append(_val_to_string(value))
+
+ if len(items) > 0:
+ return ','.join(items)
+ else:
+ return f'{_val_to_string(obj)}'
+
+ return ''
+
+
+def unmarshal_json(data, typ):
+ unmarhsal = make_dataclass('Unmarhsal', [('res', typ)],
+ bases=(DataClassJsonMixin,))
+ json_dict = json.loads(data)
+ out = unmarhsal.from_dict({"res": json_dict})
+ return out.res
+
+
+def marshal_json(val):
+ marshal = make_dataclass('Marshal', [('res', type(val))],
+ bases=(DataClassJsonMixin,))
+ marshaller = marshal(res=val)
+ json_dict = marshaller.to_dict()
+ return json.dumps(json_dict["res"])
+
+
+def match_content_type(content_type: str, pattern: str) -> boolean:
+ if pattern in (content_type, "*", "*/*"):
+ return True
+
+ msg = Message()
+ msg['content-type'] = content_type
+ media_type = msg.get_content_type()
+
+ if media_type == pattern:
+ return True
+
+ parts = media_type.split("/")
+ if len(parts) == 2:
+ if pattern in (f'{parts[0]}/*', f'*/{parts[1]}'):
+ return True
+
+ return False
+
+
+def datetimeisoformat(optional: bool):
+ def isoformatoptional(val):
+ if optional and val is None:
+ return None
+ return _val_to_string(val)
+
+ return isoformatoptional
+
+
+def dateisoformat(optional: bool):
+ def isoformatoptional(val):
+ if optional and val is None:
+ return None
+ return date.isoformat(val)
+
+ return isoformatoptional
+
+
+def datefromisoformat(date_str: str):
+ return dateutil.parser.parse(date_str).date()
+
+
+def get_field_name(name):
+ def override(_, _field_name=name):
+ return _field_name
+
+ return override
+
+
+def _val_to_string(val):
+ if isinstance(val, bool):
+ return str(val).lower()
+ if isinstance(val, datetime):
+ return val.isoformat().replace('+00:00', 'Z')
+ if isinstance(val, Enum):
+ return val.value
+
+ return str(val)
+
+
+def _populate_from_globals(param_name: str, value: any, param_type: str, gbls: dict[str, dict[str, dict[str, Any]]]):
+ if value is None and gbls is not None:
+ if 'parameters' in gbls:
+ if param_type in gbls['parameters']:
+ if param_name in gbls['parameters'][param_type]:
+ global_value = gbls['parameters'][param_type][param_name]
+ if global_value is not None:
+ value = global_value
+
+ return value
diff --git a/src/sdk/workspaces.py b/src/sdk/workspaces.py
new file mode 100755
index 00000000..f2f9e434
--- /dev/null
+++ b/src/sdk/workspaces.py
@@ -0,0 +1,100 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+import requests as requests_http
+from . import utils
+from sdk.models import operations, shared
+from typing import Optional
+
+class Workspaces:
+ _client: requests_http.Session
+ _security_client: requests_http.Session
+ _server_url: str
+ _language: str
+ _sdk_version: str
+ _gen_version: str
+
+ def __init__(self, client: requests_http.Session, security_client: requests_http.Session, server_url: str, language: str, sdk_version: str, gen_version: str) -> None:
+ self._client = client
+ self._security_client = security_client
+ self._server_url = server_url
+ self._language = language
+ self._sdk_version = sdk_version
+ self._gen_version = gen_version
+
+ def create_workspace(self, request: shared.WorkspaceCreateRequest) -> operations.CreateWorkspaceResponse:
+ r"""Create a workspace"""
+ base_url = self._server_url
+
+ url = base_url.removesuffix('/') + '/workspaces'
+
+ headers = {}
+ req_content_type, data, form = utils.serialize_request_body(request, "request", 'json')
+ if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
+ headers['content-type'] = req_content_type
+ if data is None and form is None:
+ raise Exception('request body is required')
+
+ client = self._security_client
+
+ http_res = client.request('POST', url, data=data, files=form, headers=headers)
+ content_type = http_res.headers.get('Content-Type')
+
+ res = operations.CreateWorkspaceResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+
+ if http_res.status_code == 200:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.WorkspaceResponse])
+ res.workspace_response = out
+ elif http_res.status_code in [400, 403]:
+ pass
+
+ return res
+
+ def get_workspace(self, request: operations.GetWorkspaceRequest) -> operations.GetWorkspaceResponse:
+ r"""Get Workspace details"""
+ base_url = self._server_url
+
+ url = utils.generate_url(operations.GetWorkspaceRequest, base_url, '/workspaces/{workspaceId}', request)
+
+
+ client = self._security_client
+
+ http_res = client.request('GET', url)
+ content_type = http_res.headers.get('Content-Type')
+
+ res = operations.GetWorkspaceResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+
+ if http_res.status_code == 200:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.WorkspaceResponse])
+ res.workspace_response = out
+ elif http_res.status_code in [403, 404]:
+ pass
+
+ return res
+
+ def list_workspaces(self, request: operations.ListWorkspacesRequest) -> operations.ListWorkspacesResponse:
+ r"""List workspaces"""
+ base_url = self._server_url
+
+ url = base_url.removesuffix('/') + '/workspaces'
+
+ query_params = utils.get_query_params(operations.ListWorkspacesRequest, request)
+
+ client = self._security_client
+
+ http_res = client.request('GET', url, params=query_params)
+ content_type = http_res.headers.get('Content-Type')
+
+ res = operations.ListWorkspacesResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+
+ if http_res.status_code == 200:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.WorkspacesResponse])
+ res.workspaces_response = out
+ elif http_res.status_code in [403, 404]:
+ pass
+
+ return res
+
+
\ No newline at end of file