diff --git a/airbyte-integrations/connectors/source-timely/metadata.yaml b/airbyte-integrations/connectors/source-timely/metadata.yaml index c2e4a4b84d6d..f78a8e550cd4 100644 --- a/airbyte-integrations/connectors/source-timely/metadata.yaml +++ b/airbyte-integrations/connectors/source-timely/metadata.yaml @@ -10,7 +10,7 @@ data: connectorSubtype: api connectorType: source definitionId: bc617b5f-1b9e-4a2d-bebe-782fd454a771 - dockerImageTag: 0.3.4 + dockerImageTag: 0.3.5 dockerRepository: airbyte/source-timely documentationUrl: https://docs.airbyte.com/integrations/sources/timely githubIssueLabel: source-timely diff --git a/airbyte-integrations/connectors/source-timely/pyproject.toml b/airbyte-integrations/connectors/source-timely/pyproject.toml index 11fcb45b45d8..ebfecaa918e0 100644 --- a/airbyte-integrations/connectors/source-timely/pyproject.toml +++ b/airbyte-integrations/connectors/source-timely/pyproject.toml @@ -3,7 +3,7 @@ requires = [ "poetry-core>=1.0.0",] build-backend = "poetry.core.masonry.api" [tool.poetry] -version = "0.3.4" +version = "0.3.5" name = "source-timely" description = "Source implementation for Timely." authors = [ "Airbyte ",] diff --git a/airbyte-integrations/connectors/source-timely/requirements.txt b/airbyte-integrations/connectors/source-timely/requirements.txt deleted file mode 100644 index d6e1198b1ab1..000000000000 --- a/airbyte-integrations/connectors/source-timely/requirements.txt +++ /dev/null @@ -1 +0,0 @@ --e . diff --git a/airbyte-integrations/connectors/source-timely/source_timely/manifest.yaml b/airbyte-integrations/connectors/source-timely/source_timely/manifest.yaml index 8b17727c1b1d..dde3bf82a462 100644 --- a/airbyte-integrations/connectors/source-timely/source_timely/manifest.yaml +++ b/airbyte-integrations/connectors/source-timely/source_timely/manifest.yaml @@ -1,646 +1,693 @@ -version: "0.29.0" +version: 0.78.5 + type: DeclarativeSource + check: type: CheckStream stream_names: - events + +definitions: + streams: + events: + type: DeclarativeStream + name: events + primary_key: + - id + retriever: + type: SimpleRetriever + requester: + $ref: "#/definitions/base_requester" + path: "{{ config.account_id }}/events" + http_method: GET + request_parameters: + account_id: "{{ config.account_id }}" + since: "{{ config.start_date }}" + upto: "{{ now_utc().strftime('%Y-%m-%d') }}" + request_headers: + Content-Type: application/json + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + paginator: + type: DefaultPaginator + page_token_option: + type: RequestOption + inject_into: request_parameter + field_name: page + page_size_option: + type: RequestOption + inject_into: request_parameter + field_name: per_page + pagination_strategy: + type: PageIncrement + start_from_page: 1 + page_size: 1000 + schema_loader: + type: InlineSchemaLoader + schema: + $ref: "#/schemas/events" + base_requester: + type: HttpRequester + url_base: https://api.timelyapp.com/1.1/ + authenticator: + type: BearerAuthenticator + api_token: "{{ config['bearer_token'] }}" + streams: - - type: DeclarativeStream - name: events - primary_key: - - id - retriever: - type: SimpleRetriever - requester: - type: HttpRequester - url_base: https://api.timelyapp.com/1.1/ - path: "{{ config.account_id }}/events" - http_method: GET - request_parameters: - account_id: "{{ config.account_id }}" - since: "{{ config.start_date }}" - upto: "{{ now_utc().strftime('%Y-%m-%d') }}" - request_headers: - Content-Type: application/json - authenticator: - type: BearerAuthenticator - api_token: "{{ config['bearer_token'] }}" - record_selector: - type: RecordSelector - extractor: - type: DpathExtractor - field_path: [] - paginator: - type: DefaultPaginator - page_token_option: - type: RequestOption - inject_into: request_parameter - field_name: page - page_size_option: - inject_into: request_parameter - field_name: per_page - type: RequestOption - pagination_strategy: - type: PageIncrement - start_from_page: 1 - page_size: 1000 - schema_loader: - type: InlineSchemaLoader - schema: - $schema: http://json-schema.org/draft-07/schema# - type: object + - $ref: "#/definitions/streams/events" + +spec: + type: Spec + connection_specification: + type: object + $schema: http://json-schema.org/draft-07/schema# + required: + - account_id + - bearer_token + - start_date + properties: + account_id: + type: string + title: account_id + description: Timely account id + order: 0 + bearer_token: + type: string + title: Bearer token + description: Timely bearer token + order: 1 + start_date: + type: string + title: startDate + description: start date + pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ + example: "2022-05-06" + order: 2 + additionalProperties: true + +metadata: + autoImportSchema: + events: false + +schemas: + events: + type: object + $schema: http://json-schema.org/draft-07/schema# + additionalProperties: true + properties: + billable: + type: + - "null" + - boolean + description: Indicates whether the event is billable or not + billed: + type: + - "null" + - boolean + description: Indicates whether the event has been billed or not + billed_at: + type: + - "null" + - string + airbyte_type: timestamp_with_timezone + description: Date and time when the event was billed + format: date-time + cost: + type: + - "null" + - object additionalProperties: true + description: The cost associated with the event properties: - invoice_id: - description: ID of the invoice associated with the event + amount: + type: + - "null" + - number + description: The amount of the cost + formatted: type: - "null" - string - suggestion_id: - description: ID of the suggestion associated with the event + description: The cost formatted as a string + fractional: + type: + - "null" + - integer + description: The fractional part of the cost + created_at: + type: + - "null" + - integer + description: Date and time when the event was created + created_from: + type: + - "null" + - string + description: Source from which the event was created + created_id: + type: + - "null" + - integer + description: ID of the creator + creator_id: + type: + - "null" + - integer + description: ID of the creator + day: + type: + - "null" + - string + description: Date of the event + format: date + deleted: + type: + - "null" + - boolean + description: Indicates whether the event has been deleted + draft: + type: + - "null" + - boolean + description: Indicates whether the event is in draft mode + duration: + type: + - "null" + - object + additionalProperties: true + description: The duration of the event + properties: + correctedHours: type: - "null" - integer - locked: - description: Indicates whether the event is locked + description: Corrected hours of the event duration + formatted: type: - "null" - - boolean - creator_id: - description: ID of the creator + - string + description: Duration formatted as a string + hours: type: - "null" - integer - state: - description: State of the event + description: Hours component of the duration + minutes: type: - "null" - - object - additionalProperties: true - timestamps: - description: Timestamps related to the event + - integer + description: Minutes component of the duration + seconds: type: - "null" - - array - items: - description: Array of timestamps associated with the event - type: - - "null" - - string - created_id: - description: ID of the creator + - integer + description: Seconds component of the duration + total_hours: + type: + - "null" + - number + description: Total duration in hours + total_minutes: type: - "null" - integer - hour_rate_in_cents: - description: Hourly rate in cents for the event + description: Total duration in minutes + total_seconds: + type: + - "null" + - integer + description: Total duration in seconds + entry_ids: + type: + - "null" + - array + description: IDs related to the event entries + items: + type: + - "null" + - string + description: Array of entry IDs linked to the event + estimated: + type: + - "null" + - boolean + description: Indicates whether the event is estimated + estimated_cost: + type: + - "null" + - object + additionalProperties: true + description: The estimated cost of the event + properties: + amount: type: - "null" - number - deleted: - description: Indicates whether the event has been deleted + description: The estimated amount of the cost + formatted: type: - "null" - - boolean - to: - description: End date and time of the event + - string + description: The estimated cost formatted as a string + fractional: + type: + - "null" + - integer + description: The fractional part of the estimated cost + estimated_duration: + type: + - "null" + - object + additionalProperties: true + description: The estimated duration of the event + properties: + formatted: type: - "null" - string - format: date-time - airbyte_type: timestamp_with_timezone - estimated_cost: - description: The estimated cost of the event + description: Estimated duration formatted as a string + hours: type: - "null" - - object - additionalProperties: true - properties: - amount: - description: The estimated amount of the cost - type: - - "null" - - number - formatted: - description: The estimated cost formatted as a string - type: - - "null" - - string - fractional: - description: The fractional part of the estimated cost - type: - - "null" - - integer - billable: - description: Indicates whether the event is billable or not + - integer + description: Estimated hours component of the duration + minutes: type: - "null" - - boolean - updater_id: - description: ID of the user who last updated the event + - integer + description: Estimated minutes component of the duration + seconds: type: - "null" - integer - label_ids: - description: IDs related to event labels + description: Estimated seconds component of the duration + total_hours: type: - "null" - - array - items: - description: Array of label IDs associated with the event - type: - - "null" - - string - forecast_id: - description: ID of the forecast associated with the event + - number + description: Total estimated duration in hours + total_minutes: type: - "null" - - string - user_ids: - description: IDs related to users associated with the event + - integer + description: Total estimated duration in minutes + total_seconds: type: - "null" - - array - items: - description: Array of user IDs linked to the event - type: - - "null" - - string - timer_stopped_on: - description: Date and time when the timer was stopped + - integer + description: Total estimated duration in seconds + external_id: + type: + - "null" + - integer + description: External ID of the event + forecast_id: + type: + - "null" + - string + description: ID of the forecast associated with the event + from: + type: + - "null" + - string + airbyte_type: timestamp_with_timezone + description: Start date and time of the event + format: date-time + hour_rate: + type: + - "null" + - number + description: Hourly rate for the event + hour_rate_in_cents: + type: + - "null" + - number + description: Hourly rate in cents for the event + id: + type: + - "null" + - integer + description: ID of the event + invoice_id: + type: + - "null" + - string + description: ID of the invoice associated with the event + label_ids: + type: + - "null" + - array + description: IDs related to event labels + items: + type: + - "null" + - string + description: Array of label IDs associated with the event + locked: + type: + - "null" + - boolean + description: Indicates whether the event is locked + locked_reason: + type: + - "null" + - string + description: Reason for locking the event + manage: + type: + - "null" + - boolean + description: Indicates whether the event is managed + note: + type: + - "null" + - string + description: Additional notes for the event + project: + type: + - "null" + - object + additionalProperties: true + description: Information related to the project for the event + properties: + account_id: type: - "null" - integer - day: - description: Date of the event + description: ID of the account associated with the project + active: type: - "null" - - string - format: date - external_id: - description: External ID of the event + - boolean + description: Indicates whether the project is active + billable: + type: + - "null" + - boolean + description: Indicates whether the project is billable + budget: type: - "null" - integer - cost: - description: The cost associated with the event + description: Budget allocated for the project + budget_calculation: type: - "null" - - object - additionalProperties: true - properties: - amount: - description: The amount of the cost - type: - - "null" - - number - formatted: - description: The cost formatted as a string - type: - - "null" - - string - fractional: - description: The fractional part of the cost - type: - - "null" - - integer - billed_at: - description: Date and time when the event was billed + - string + description: Calculation method for project budget + budget_expired_on: type: - "null" - string - format: date-time - airbyte_type: timestamp_with_timezone - sequence: - description: Sequence number of the event + description: Date on which the project budget expires + budget_percent: type: - "null" - - integer - created_at: - description: Date and time when the event was created + - number + description: Percentage of budget utilized + budget_progress: type: - "null" - - integer - project: - description: Information related to the project for the event + - number + description: Progress of budget utilization + budget_scope: + type: + - "null" + - string + description: Scope of the project budget + budget_type: + type: + - "null" + - string + description: Type of budget assigned to the project + client: type: - "null" - object additionalProperties: true + description: Information about the client associated with the project properties: - required_label_ids: - description: IDs of labels required for the project - type: - - "null" - - array - items: - description: Array of required label IDs for the project - type: - - "null" - - string - labels: - description: Labels associated with the project - type: - - "null" - - array - items: - description: Array of labels associated with the project - type: - - "null" - - string - invoice_by_budget: - description: Indicates whether invoicing is based on budget - type: - - "null" - - boolean - budget_percent: - description: Percentage of budget utilized - type: - - "null" - - number - name: - description: Name of the project - type: - - "null" - - string - budget: - description: Budget allocated for the project - type: - - "null" - - integer - hour_rate: - description: Hourly rate for the project - type: - - "null" - - number - budget_scope: - description: Scope of the project budget - type: - - "null" - - string - budget_calculation: - description: Calculation method for project budget - type: - - "null" - - string - has_recurrence: - description: Indicates whether the project has a recurrence - type: - - "null" - - boolean - label_ids: - description: IDs related to project labels - type: - - "null" - - array - items: - description: Array of label IDs associated with the project - type: - - "null" - - string - enable_labels: - description: Indicates whether project labels are enabled - type: - - "null" - - string - required_labels: - description: Indicates whether labels are required for the project - type: - - "null" - - boolean - required_notes: - description: Indicates whether notes are required for the project - type: - - "null" - - boolean - client: - description: Information about the client associated with the project - type: - - "null" - - object - additionalProperties: true - properties: - external_id: - description: External ID of the client - type: - - "null" - - string - active: - description: Indicates whether the client is active - type: - - "null" - - boolean - name: - description: Name of the client - type: - - "null" - - string - updated_at: - description: Date and time of client update - type: - - "null" - - string - format: date-time - airbyte_type: timestamp_with_timezone - id: - description: ID of the client - type: - - "null" - - integer - account_id: - description: ID of the account associated with the project - type: - - "null" - - integer - updated_at: - description: Date and time of project update - type: - - "null" - - integer - budget_progress: - description: Progress of budget utilization - type: - - "null" - - number - budget_expired_on: - description: Date on which the project budget expires - type: - - "null" - - string - external_id: - description: External ID of the project - type: - - "null" - - string - hour_rate_in_cents: - description: Hourly rate in cents for the project - type: - - "null" - - number active: - description: Indicates whether the project is active type: - "null" - boolean - rate_type: - description: Type of rate for the project - type: - - "null" - - string - color: - description: Color associated with the project - type: - - "null" - - string - budget_type: - description: Type of budget assigned to the project + description: Indicates whether the client is active + external_id: type: - "null" - string - billable: - description: Indicates whether the project is billable - type: - - "null" - - boolean + description: External ID of the client id: - description: ID of the project type: - "null" - integer - user: - description: Information about the user associated with the event - type: - - "null" - - object - additionalProperties: true - properties: + description: ID of the client name: - description: Name of the user - type: - - "null" - - string - email: - description: Email address of the user type: - "null" - string + description: Name of the client updated_at: - description: Date and time of user update type: - "null" - string - format: date-time airbyte_type: timestamp_with_timezone - avatar: - description: User's avatar information - type: - - "null" - - object - additionalProperties: true - properties: - medium: - description: URL of the medium avatar image - type: - - "null" - - string - medium_retina: - description: URL of the medium retina avatar image - type: - - "null" - - string - timeline: - description: URL of the timeline avatar image - type: - - "null" - - string - large: - description: URL of the large avatar image - type: - - "null" - - string - large_retina: - description: URL of the large retina avatar image - type: - - "null" - - string - id: - description: ID of the user - type: - - "null" - - integer - estimated: - description: Indicates whether the event is estimated + description: Date and time of client update + format: date-time + color: type: - "null" - - boolean - note: - description: Additional notes for the event + - string + description: Color associated with the project + enable_labels: type: - "null" - string - estimated_duration: - description: The estimated duration of the event + description: Indicates whether project labels are enabled + external_id: type: - "null" - - object - additionalProperties: true - properties: - total_minutes: - description: Total estimated duration in minutes - type: - - "null" - - integer - total_seconds: - description: Total estimated duration in seconds - type: - - "null" - - integer - formatted: - description: Estimated duration formatted as a string - type: - - "null" - - string - total_hours: - description: Total estimated duration in hours - type: - - "null" - - number - seconds: - description: Estimated seconds component of the duration - type: - - "null" - - integer - minutes: - description: Estimated minutes component of the duration - type: - - "null" - - integer - hours: - description: Estimated hours component of the duration - type: - - "null" - - integer - draft: - description: Indicates whether the event is in draft mode + - string + description: External ID of the project + has_recurrence: type: - "null" - boolean - from: - description: Start date and time of the event + description: Indicates whether the project has a recurrence + hour_rate: type: - "null" - - string - format: date-time - airbyte_type: timestamp_with_timezone - uid: - description: Unique identifier of the event + - number + description: Hourly rate for the project + hour_rate_in_cents: + type: + - "null" + - number + description: Hourly rate in cents for the project + id: + type: + - "null" + - integer + description: ID of the project + invoice_by_budget: + type: + - "null" + - boolean + description: Indicates whether invoicing is based on budget + label_ids: + type: + - "null" + - array + description: IDs related to project labels + items: + type: + - "null" + - string + description: Array of label IDs associated with the project + labels: + type: + - "null" + - array + description: Labels associated with the project + items: + type: + - "null" + - string + description: Array of labels associated with the project + name: type: - "null" - string - timer_state: - description: State of the timer for the event + description: Name of the project + rate_type: type: - "null" - string - manage: - description: Indicates whether the event is managed + description: Type of rate for the project + required_label_ids: + type: + - "null" + - array + description: IDs of labels required for the project + items: + type: + - "null" + - string + description: Array of required label IDs for the project + required_labels: type: - "null" - boolean - id: - description: ID of the event + description: Indicates whether labels are required for the project + required_notes: + type: + - "null" + - boolean + description: Indicates whether notes are required for the project + updated_at: type: - "null" - integer - duration: - description: The duration of the event + description: Date and time of project update + sequence: + type: + - "null" + - integer + description: Sequence number of the event + state: + type: + - "null" + - object + additionalProperties: true + description: State of the event + suggestion_id: + type: + - "null" + - integer + description: ID of the suggestion associated with the event + timer_started_on: + type: + - "null" + - integer + description: Date and time when the timer was started + timer_state: + type: + - "null" + - string + description: State of the timer for the event + timer_stopped_on: + type: + - "null" + - integer + description: Date and time when the timer was stopped + timestamps: + type: + - "null" + - array + description: Timestamps related to the event + items: + type: + - "null" + - string + description: Array of timestamps associated with the event + to: + type: + - "null" + - string + airbyte_type: timestamp_with_timezone + description: End date and time of the event + format: date-time + uid: + type: + - "null" + - string + description: Unique identifier of the event + updated_at: + type: + - "null" + - integer + description: Date and time when the event was last updated + updated_from: + type: + - "null" + - string + description: Source from which the event was last updated + updater_id: + type: + - "null" + - integer + description: ID of the user who last updated the event + user: + type: + - "null" + - object + additionalProperties: true + description: Information about the user associated with the event + properties: + avatar: type: - "null" - object additionalProperties: true + description: User's avatar information properties: - total_minutes: - description: Total duration in minutes - type: - - "null" - - integer - total_seconds: - description: Total duration in seconds - type: - - "null" - - integer - formatted: - description: Duration formatted as a string + large: type: - "null" - string - total_hours: - description: Total duration in hours - type: - - "null" - - number - correctedHours: - description: Corrected hours of the event duration + description: URL of the large avatar image + large_retina: type: - "null" - - integer - seconds: - description: Seconds component of the duration + - string + description: URL of the large retina avatar image + medium: type: - "null" - - integer - minutes: - description: Minutes component of the duration + - string + description: URL of the medium avatar image + medium_retina: type: - "null" - - integer - hours: - description: Hours component of the duration + - string + description: URL of the medium retina avatar image + timeline: type: - "null" - - integer - billed: - description: Indicates whether the event has been billed or not - type: - - "null" - - boolean - locked_reason: - description: Reason for locking the event + - string + description: URL of the timeline avatar image + email: type: - "null" - string - entry_ids: - description: IDs related to the event entries - type: - - "null" - - array - items: - description: Array of entry IDs linked to the event - type: - - "null" - - string - hour_rate: - description: Hourly rate for the event - type: - - "null" - - number - updated_from: - description: Source from which the event was last updated + description: Email address of the user + id: type: - "null" - - string - created_from: - description: Source from which the event was created + - integer + description: ID of the user + name: type: - "null" - string - timer_started_on: - description: Date and time when the timer was started - type: - - "null" - - integer + description: Name of the user updated_at: - description: Date and time when the event was last updated type: - "null" - - integer + - string + airbyte_type: timestamp_with_timezone + description: Date and time of user update + format: date-time + user_ids: + type: + - "null" + - array + description: IDs related to users associated with the event + items: + type: + - "null" + - string + description: Array of user IDs linked to the event diff --git a/airbyte-integrations/connectors/source-timely/source_timely/spec.yaml b/airbyte-integrations/connectors/source-timely/source_timely/spec.yaml deleted file mode 100644 index ccaf47579243..000000000000 --- a/airbyte-integrations/connectors/source-timely/source_timely/spec.yaml +++ /dev/null @@ -1,25 +0,0 @@ -documentationUrl: https://docs.airbyte.io/integrations/sources/timely -connectionSpecification: - $schema: http://json-schema.org/draft-07/schema# - title: Timely Integration Spec - type: object - required: - - account_id - - start_date - - bearer_token - additionalProperties: true - properties: - account_id: - title: account_id - type: string - description: Timely account id - start_date: - title: startDate - type: string - description: start date - pattern: "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" - example: "2022-05-06" - bearer_token: - title: Bearer token - type: string - description: Timely bearer token diff --git a/docs/integrations/sources/timely.md b/docs/integrations/sources/timely.md index 2bfcc925e2f9..ec70b19f5638 100644 --- a/docs/integrations/sources/timely.md +++ b/docs/integrations/sources/timely.md @@ -34,6 +34,7 @@ The Timely source connector supports the following [sync modes](https://docs.air | Version | Date | Pull Request | Subject | | :------ | :--------- | :------------------------------------------------------- | :------------------------------------------------------------------------------ | +| 0.3.5 | 2024-05-20 | [38228](https://github.com/airbytehq/airbyte/pull/38228) | Make compatible with builder | | 0.3.4 | 2024-04-19 | [37270](https://github.com/airbytehq/airbyte/pull/37270) | Updating to 0.80.0 CDK | | 0.3.3 | 2024-04-18 | [37270](https://github.com/airbytehq/airbyte/pull/37270) | Manage dependencies with Poetry. | | 0.3.2 | 2024-04-15 | [37270](https://github.com/airbytehq/airbyte/pull/37270) | Base image migration: remove Dockerfile and use the python-connector-base image |